am 77eccafe: Merge "Support adb client connect to remote server"
* commit '77eccafe55e019089c18273c1062df262220ab83': Support adb client connect to remote server
This commit is contained in:
commit
03873ce495
4 changed files with 73 additions and 7 deletions
13
adb/adb.c
13
adb/adb.c
|
|
@ -46,6 +46,7 @@ ADB_MUTEX_DEFINE( D_lock );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int HOST = 0;
|
int HOST = 0;
|
||||||
|
int gListenAll = 0;
|
||||||
|
|
||||||
static int auth_enabled = 0;
|
static int auth_enabled = 0;
|
||||||
|
|
||||||
|
|
@ -701,7 +702,13 @@ int local_name_to_fd(const char *name)
|
||||||
if(!strncmp("tcp:", name, 4)){
|
if(!strncmp("tcp:", name, 4)){
|
||||||
int ret;
|
int ret;
|
||||||
port = atoi(name + 4);
|
port = atoi(name + 4);
|
||||||
ret = socket_loopback_server(port, SOCK_STREAM);
|
|
||||||
|
if (gListenAll > 0) {
|
||||||
|
ret = socket_inaddr_any_server(port, SOCK_STREAM);
|
||||||
|
} else {
|
||||||
|
ret = socket_loopback_server(port, SOCK_STREAM);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#ifndef HAVE_WIN32_IPC /* no Unix-domain sockets on Win32 */
|
#ifndef HAVE_WIN32_IPC /* no Unix-domain sockets on Win32 */
|
||||||
|
|
@ -1079,8 +1086,10 @@ int launch_server(int server_port)
|
||||||
dup2(fd[1], STDERR_FILENO);
|
dup2(fd[1], STDERR_FILENO);
|
||||||
adb_close(fd[1]);
|
adb_close(fd[1]);
|
||||||
|
|
||||||
|
char str_port[30];
|
||||||
|
snprintf(str_port, sizeof(str_port), "%d", server_port);
|
||||||
// child process
|
// child process
|
||||||
int result = execl(path, "adb", "fork-server", "server", NULL);
|
int result = execl(path, "adb", "-P", str_port, "fork-server", "server", NULL);
|
||||||
// this should not return
|
// this should not return
|
||||||
fprintf(stderr, "OOPS! execl returned %d, errno: %d\n", result, errno);
|
fprintf(stderr, "OOPS! execl returned %d, errno: %d\n", result, errno);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ static transport_type __adb_transport = kTransportAny;
|
||||||
static const char* __adb_serial = NULL;
|
static const char* __adb_serial = NULL;
|
||||||
|
|
||||||
static int __adb_server_port = DEFAULT_ADB_PORT;
|
static int __adb_server_port = DEFAULT_ADB_PORT;
|
||||||
|
static const char* __adb_server_name = NULL;
|
||||||
|
|
||||||
void adb_set_transport(transport_type type, const char* serial)
|
void adb_set_transport(transport_type type, const char* serial)
|
||||||
{
|
{
|
||||||
|
|
@ -29,6 +30,11 @@ void adb_set_tcp_specifics(int server_port)
|
||||||
__adb_server_port = server_port;
|
__adb_server_port = server_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void adb_set_tcp_name(const char* hostname)
|
||||||
|
{
|
||||||
|
__adb_server_name = hostname;
|
||||||
|
}
|
||||||
|
|
||||||
int adb_get_emulator_console_port(void)
|
int adb_get_emulator_console_port(void)
|
||||||
{
|
{
|
||||||
const char* serial = __adb_serial;
|
const char* serial = __adb_serial;
|
||||||
|
|
@ -181,7 +187,11 @@ int _adb_connect(const char *service)
|
||||||
}
|
}
|
||||||
snprintf(tmp, sizeof tmp, "%04x", len);
|
snprintf(tmp, sizeof tmp, "%04x", len);
|
||||||
|
|
||||||
fd = socket_loopback_client(__adb_server_port, SOCK_STREAM);
|
if (__adb_server_name)
|
||||||
|
fd = socket_network_client(__adb_server_name, __adb_server_port, SOCK_STREAM);
|
||||||
|
else
|
||||||
|
fd = socket_loopback_client(__adb_server_port, SOCK_STREAM);
|
||||||
|
|
||||||
if(fd < 0) {
|
if(fd < 0) {
|
||||||
strcpy(__adb_error, "cannot connect to daemon");
|
strcpy(__adb_error, "cannot connect to daemon");
|
||||||
return -2;
|
return -2;
|
||||||
|
|
@ -212,7 +222,10 @@ int adb_connect(const char *service)
|
||||||
int fd = _adb_connect("host:version");
|
int fd = _adb_connect("host:version");
|
||||||
|
|
||||||
D("adb_connect: service %s\n", service);
|
D("adb_connect: service %s\n", service);
|
||||||
if(fd == -2) {
|
if(fd == -2 && __adb_server_name) {
|
||||||
|
fprintf(stderr,"** Cannot start server on remote host\n");
|
||||||
|
return fd;
|
||||||
|
} else if(fd == -2) {
|
||||||
fprintf(stdout,"* daemon not running. starting it now on port %d *\n",
|
fprintf(stdout,"* daemon not running. starting it now on port %d *\n",
|
||||||
__adb_server_port);
|
__adb_server_port);
|
||||||
start_server:
|
start_server:
|
||||||
|
|
@ -266,7 +279,7 @@ int adb_connect(const char *service)
|
||||||
|
|
||||||
fd = _adb_connect(service);
|
fd = _adb_connect(service);
|
||||||
if(fd == -2) {
|
if(fd == -2) {
|
||||||
fprintf(stderr,"** daemon still not running");
|
fprintf(stderr,"** daemon still not running\n");
|
||||||
}
|
}
|
||||||
D("adb_connect: return fd %d\n", fd);
|
D("adb_connect: return fd %d\n", fd);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,10 @@ void adb_set_transport(transport_type type, const char* serial);
|
||||||
*/
|
*/
|
||||||
void adb_set_tcp_specifics(int server_port);
|
void adb_set_tcp_specifics(int server_port);
|
||||||
|
|
||||||
|
/* Set TCP Hostname of the transport to use
|
||||||
|
*/
|
||||||
|
void adb_set_tcp_name(const char* hostname);
|
||||||
|
|
||||||
/* Return the console port of the currently connected emulator (if any)
|
/* Return the console port of the currently connected emulator (if any)
|
||||||
* of -1 if there is no emulator, and -2 if there is more than one.
|
* of -1 if there is no emulator, and -2 if there is more than one.
|
||||||
* assumes adb_set_transport() was alled previously...
|
* assumes adb_set_transport() was alled previously...
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ int install_app(transport_type transport, char* serial, int argc, char** argv);
|
||||||
int uninstall_app(transport_type transport, char* serial, int argc, char** argv);
|
int uninstall_app(transport_type transport, char* serial, int argc, char** argv);
|
||||||
|
|
||||||
static const char *gProductOutPath = NULL;
|
static const char *gProductOutPath = NULL;
|
||||||
|
extern int gListenAll;
|
||||||
|
|
||||||
static char *product_file(const char *extra)
|
static char *product_file(const char *extra)
|
||||||
{
|
{
|
||||||
|
|
@ -80,6 +81,7 @@ void help()
|
||||||
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\n"
|
"\n"
|
||||||
|
" -a - directs adb to listen on all interfaces for a connection\n"
|
||||||
" -d - directs command to the only connected USB device\n"
|
" -d - directs command to the only connected USB device\n"
|
||||||
" returns an error if more than one USB device is present.\n"
|
" returns an error if more than one USB device is present.\n"
|
||||||
" -e - directs command to the only running emulator.\n"
|
" -e - directs command to the only running emulator.\n"
|
||||||
|
|
@ -93,6 +95,8 @@ void help()
|
||||||
" If -p is not specified, the ANDROID_PRODUCT_OUT\n"
|
" If -p is not specified, the ANDROID_PRODUCT_OUT\n"
|
||||||
" environment variable is used, which must\n"
|
" environment variable is used, which must\n"
|
||||||
" be an absolute path.\n"
|
" be an absolute path.\n"
|
||||||
|
" -H - Name of adb server host (default: localhost)\n"
|
||||||
|
" -P - Port of adb server (default: 5037)\n"
|
||||||
" devices [-l] - list all connected devices\n"
|
" devices [-l] - list all connected devices\n"
|
||||||
" ('-l' will also list device qualifiers)\n"
|
" ('-l' will also list device qualifiers)\n"
|
||||||
" connect <host>[:<port>] - connect to a device via TCP/IP\n"
|
" connect <host>[:<port>] - connect to a device via TCP/IP\n"
|
||||||
|
|
@ -946,9 +950,9 @@ int adb_commandline(int argc, char **argv)
|
||||||
int server_port = DEFAULT_ADB_PORT;
|
int server_port = DEFAULT_ADB_PORT;
|
||||||
if (server_port_str && strlen(server_port_str) > 0) {
|
if (server_port_str && strlen(server_port_str) > 0) {
|
||||||
server_port = (int) strtol(server_port_str, NULL, 0);
|
server_port = (int) strtol(server_port_str, NULL, 0);
|
||||||
if (server_port <= 0) {
|
if (server_port <= 0 || server_port > 65535) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"adb: Env var ANDROID_ADB_SERVER_PORT must be a positive number. Got \"%s\"\n",
|
"adb: Env var ANDROID_ADB_SERVER_PORT must be a positive number less than 65535. Got \"%s\"\n",
|
||||||
server_port_str);
|
server_port_str);
|
||||||
return usage();
|
return usage();
|
||||||
}
|
}
|
||||||
|
|
@ -994,6 +998,42 @@ int adb_commandline(int argc, char **argv)
|
||||||
ttype = kTransportUsb;
|
ttype = kTransportUsb;
|
||||||
} else if (!strcmp(argv[0],"-e")) {
|
} else if (!strcmp(argv[0],"-e")) {
|
||||||
ttype = kTransportLocal;
|
ttype = kTransportLocal;
|
||||||
|
} else if (!strcmp(argv[0],"-a")) {
|
||||||
|
gListenAll = 1;
|
||||||
|
} else if(!strncmp(argv[0], "-H", 2)) {
|
||||||
|
const char *hostname = NULL;
|
||||||
|
if (argv[0][2] == '\0') {
|
||||||
|
if (argc < 2) return usage();
|
||||||
|
hostname = argv[1];
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
} else {
|
||||||
|
hostname = argv[0] + 2;
|
||||||
|
}
|
||||||
|
adb_set_tcp_name(hostname);
|
||||||
|
|
||||||
|
} else if(!strncmp(argv[0], "-P", 2)) {
|
||||||
|
if (argv[0][2] == '\0') {
|
||||||
|
if (argc < 2) return usage();
|
||||||
|
server_port_str = argv[1];
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
} else {
|
||||||
|
server_port_str = argv[0] + 2;
|
||||||
|
}
|
||||||
|
if (strlen(server_port_str) > 0) {
|
||||||
|
server_port = (int) strtol(server_port_str, NULL, 0);
|
||||||
|
if (server_port <= 0 || server_port > 65535) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"adb: port number must be a positive number less than 65536. Got \"%s\"\n",
|
||||||
|
server_port_str);
|
||||||
|
return usage();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr,
|
||||||
|
"adb: port number must be a positive number less than 65536. Got empty string.\n");
|
||||||
|
return usage();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* out of recognized modifiers and flags */
|
/* out of recognized modifiers and flags */
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue