Loading adb/adb.cpp +11 −5 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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 { Loading @@ -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); Loading @@ -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 { Loading adb/adb.h +1 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading adb/client/auth.cpp +2 −4 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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); } adb/daemon/jdwp_service.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading Loading @@ -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)); } } } Loading @@ -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; Loading @@ -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); Loading adb/socket.h +2 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
adb/adb.cpp +11 −5 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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 { Loading @@ -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); Loading @@ -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 { Loading
adb/adb.h +1 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
adb/client/auth.cpp +2 −4 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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); }
adb/daemon/jdwp_service.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading Loading @@ -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)); } } } Loading @@ -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; Loading @@ -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); Loading
adb/socket.h +2 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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