Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd71fd51 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes Ida272d21,If3f29f9e,I7dc5258d,I55258c15,Ibad79770

* changes:
  adb: win32: cleanup winsock initialization.
  adb: win32: properly set EBADF in some functions.
  adb: partially clang-format sysdeps_win32.cpp.
  adb: implement adb_writev.
  adb: switch apacket payload to a type that doesn't initialize its contents.
parents 07de8383 2e93df2e
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -257,7 +257,7 @@ void send_connect(atransport* t) {
                   << connection_str.length() << ")";
    }

    cp->payload = std::move(connection_str);
    cp->payload.assign(connection_str.begin(), connection_str.end());
    cp->msg.data_length = cp->payload.size();

    send_packet(cp, t);
@@ -329,7 +329,8 @@ static void handle_new_connection(atransport* t, apacket* p) {
    handle_offline(t);

    t->update_version(p->msg.arg0, p->msg.arg1);
    parse_banner(p->payload, t);
    std::string banner(p->payload.begin(), p->payload.end());
    parse_banner(banner, t);

#if ADB_HOST
    handle_online(t);
@@ -369,8 +370,10 @@ void handle_packet(apacket *p, atransport *t)
                send_auth_response(p->payload.data(), p->msg.data_length, t);
                break;
#else
            case ADB_AUTH_SIGNATURE:
                if (adbd_auth_verify(t->token, sizeof(t->token), p->payload)) {
            case ADB_AUTH_SIGNATURE: {
                // TODO: Switch to string_view.
                std::string signature(p->payload.begin(), p->payload.end());
                if (adbd_auth_verify(t->token, sizeof(t->token), signature)) {
                    adbd_auth_verified(t);
                    t->failed_auth_attempts = 0;
                } else {
@@ -378,6 +381,7 @@ void handle_packet(apacket *p, atransport *t)
                    send_auth_request(t);
                }
                break;
            }

            case ADB_AUTH_RSAPUBLICKEY:
                adbd_auth_confirm_key(p->payload.data(), p->msg.data_length, t);
@@ -392,7 +396,9 @@ void handle_packet(apacket *p, atransport *t)

    case A_OPEN: /* OPEN(local-id, 0, "destination") */
        if (t->online && p->msg.arg0 != 0 && p->msg.arg1 == 0) {
            asocket* s = create_local_service_socket(p->payload.c_str(), t);
            // TODO: Switch to string_view.
            std::string address(p->payload.begin(), p->payload.end());
            asocket* s = create_local_service_socket(address.c_str(), t);
            if (s == nullptr) {
                send_close(0, p->msg.arg0, t);
            } else {
+1 −14
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include "adb_trace.h"
#include "fdevent.h"
#include "socket.h"
#include "types.h"
#include "usb.h"

constexpr size_t MAX_PAYLOAD_V1 = 4 * 1024;
@@ -63,20 +64,6 @@ std::string adb_version();
using TransportId = uint64_t;
class atransport;

struct amessage {
    uint32_t command;     /* command identifier constant      */
    uint32_t arg0;        /* first argument                   */
    uint32_t arg1;        /* second argument                  */
    uint32_t data_length; /* length of payload (0 is allowed) */
    uint32_t data_check;  /* checksum of data payload         */
    uint32_t magic;       /* command ^ 0xffffffff             */
};

struct apacket {
    amessage msg;
    std::string payload;
};

uint32_t calculate_apacket_checksum(const apacket* packet);

/* the adisconnect structure is used to record a callback that
+2 −4
Original line number Diff line number Diff line
@@ -454,10 +454,8 @@ static void send_auth_publickey(atransport* t) {
    p->msg.command = A_AUTH;
    p->msg.arg0 = ADB_AUTH_RSAPUBLICKEY;

    p->payload = std::move(key);

    // adbd expects a null-terminated string.
    p->payload.push_back('\0');
    p->payload.assign(key.data(), key.data() + key.size() + 1);
    p->msg.data_length = p->payload.size();
    send_packet(p, t);
}
@@ -482,7 +480,7 @@ void send_auth_response(const char* token, size_t token_size, atransport* t) {

    p->msg.command = A_AUTH;
    p->msg.arg0 = ADB_AUTH_SIGNATURE;
    p->payload = std::move(result);
    p->payload.assign(result.begin(), result.end());
    p->msg.data_length = p->payload.size();
    send_packet(p, t);
}
+6 −5
Original line number Diff line number Diff line
@@ -459,7 +459,7 @@ static void jdwp_socket_close(asocket* s) {
    delete s;
}

static int jdwp_socket_enqueue(asocket* s, std::string) {
static int jdwp_socket_enqueue(asocket* s, apacket::payload_type) {
    /* you can't write to this asocket */
    D("LS(%d): JDWP socket received data?", s->id);
    s->peer->close(s->peer);
@@ -474,7 +474,7 @@ static void jdwp_socket_ready(asocket* s) {
     * on the second one, close the connection
     */
    if (!jdwp->pass) {
        std::string data;
        apacket::payload_type data;
        data.resize(s->get_max_payload());
        size_t len = jdwp_process_list(&data[0], data.size());
        data.resize(len);
@@ -521,7 +521,8 @@ static void jdwp_process_list_updated(void) {
    for (auto& t : _jdwp_trackers) {
        if (t->peer) {
            // The tracker might not have been connected yet.
            t->peer->enqueue(t->peer, data);
            apacket::payload_type payload(data.begin(), data.end());
            t->peer->enqueue(t->peer, std::move(payload));
        }
    }
}
@@ -547,7 +548,7 @@ static void jdwp_tracker_ready(asocket* s) {
    JdwpTracker* t = (JdwpTracker*)s;

    if (t->need_initial) {
        std::string data;
        apacket::payload_type data;
        data.resize(s->get_max_payload());
        data.resize(jdwp_process_list_msg(&data[0], data.size()));
        t->need_initial = false;
@@ -555,7 +556,7 @@ static void jdwp_tracker_ready(asocket* s) {
    }
}

static int jdwp_tracker_enqueue(asocket* s, std::string) {
static int jdwp_tracker_enqueue(asocket* s, apacket::payload_type) {
    /* you can't write to this socket */
    D("LS(%d): JDWP tracker received data?", s->id);
    s->peer->close(s->peer);
+2 −3
Original line number Diff line number Diff line
@@ -24,9 +24,8 @@
#include <string>

#include "fdevent.h"
#include "range.h"
#include "types.h"

struct apacket;
class atransport;

/* An asocket represents one half of a connection between a local and
@@ -73,7 +72,7 @@ struct asocket {
     * peer->ready() when we once again are ready to
     * receive data.
     */
    int (*enqueue)(asocket* s, std::string data) = nullptr;
    int (*enqueue)(asocket* s, apacket::payload_type data) = nullptr;

    /* ready is called by the peer when it is ready for
     * us to send data via enqueue again
Loading