summaryrefslogtreecommitdiff
path: root/adb_client.cpp
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2016-08-25 16:00:22 -0700
committerJosh Gao <jmgao@google.com>2016-09-01 15:49:06 -0700
commit0843c7d523bea3037348507fab605008e5b101f4 (patch)
treef404757aabc0b725ab1cfbdcc9957b58b8c5280f /adb_client.cpp
parent3866d4c4a0ca154e7d086ac1272e8c834ca9d612 (diff)
downloadadb-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.cpp45
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()