diff options
author | Josh Gao <jmgao@google.com> | 2016-08-25 16:00:22 -0700 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2016-09-01 15:49:06 -0700 |
commit | 0843c7d523bea3037348507fab605008e5b101f4 (patch) | |
tree | f404757aabc0b725ab1cfbdcc9957b58b8c5280f /adb_client.cpp | |
parent | 3866d4c4a0ca154e7d086ac1272e8c834ca9d612 (diff) | |
download | adb-0843c7d523bea3037348507fab605008e5b101f4.tar.gz |
adb: allow use of arbitrary socket specs for command socket.
Bug: http://b/30445394
Change-Id: I474ede35ec3c56ad86da503c9703f83ef5e80862
Diffstat (limited to 'adb_client.cpp')
-rw-r--r-- | adb_client.cpp | 45 |
1 files changed, 15 insertions, 30 deletions
diff --git a/adb_client.cpp b/adb_client.cpp index a27dd47..0b2fc1e 100644 --- a/adb_client.cpp +++ b/adb_client.cpp @@ -37,12 +37,12 @@ #include "adb_io.h" #include "adb_utils.h" +#include "socket_spec.h" static TransportType __adb_transport = kTransportAny; static const char* __adb_serial = NULL; -static int __adb_server_port = DEFAULT_ADB_PORT; -static const char* __adb_server_name = NULL; +static const char* __adb_server_socket_spec; void adb_set_transport(TransportType type, const char* serial) { @@ -59,14 +59,11 @@ void adb_get_transport(TransportType* type, const char** serial) { } } -void adb_set_tcp_specifics(int server_port) -{ - __adb_server_port = server_port; -} - -void adb_set_tcp_name(const char* hostname) -{ - __adb_server_name = hostname; +void adb_set_socket_spec(const char* socket_spec) { + if (!__adb_server_socket_spec) { + LOG(FATAL) << "attempted to reinitialize adb_server_socket_spec"; + } + __adb_server_socket_spec = socket_spec; } static int switch_socket_transport(int fd, std::string* error) { @@ -139,23 +136,12 @@ int _adb_connect(const std::string& service, std::string* error) { return -1; } - int fd; std::string reason; - if (__adb_server_name) { - fd = network_connect(__adb_server_name, __adb_server_port, SOCK_STREAM, 0, &reason); - if (fd == -1) { - *error = android::base::StringPrintf("can't connect to %s:%d: %s", - __adb_server_name, __adb_server_port, - reason.c_str()); - return -2; - } - } else { - fd = network_loopback_client(__adb_server_port, SOCK_STREAM, &reason); - if (fd == -1) { - *error = android::base::StringPrintf("cannot connect to daemon: %s", - reason.c_str()); - return -2; - } + int fd = socket_spec_connect(__adb_server_socket_spec, &reason); + if (fd < 0) { + *error = android::base::StringPrintf("cannot connect to daemon at %s: %s", + __adb_server_socket_spec, reason.c_str()); + return -2; } if ((memcmp(&service[0],"host",4) != 0 || service == "host:reconnect") && @@ -185,15 +171,14 @@ int adb_connect(const std::string& service, std::string* error) { int fd = _adb_connect("host:version", error); D("adb_connect: service %s", service.c_str()); - if (fd == -2 && __adb_server_name) { + if (fd == -2 && !is_local_socket_spec(__adb_server_socket_spec)) { fprintf(stderr,"** Cannot start server on remote host\n"); // error is the original network connection error return fd; } else if (fd == -2) { - fprintf(stdout,"* daemon not running. starting it now on port %d *\n", - __adb_server_port); + fprintf(stdout, "* daemon not running. starting it now at %s *\n", __adb_server_socket_spec); start_server: - if (launch_server(__adb_server_port)) { + if (launch_server(__adb_server_socket_spec)) { fprintf(stderr,"* failed to start daemon *\n"); // launch_server() has already printed detailed error info, so just // return a generic error string about the overall adb_connect() |