diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2010-04-28 13:01:23 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-04-28 13:01:23 -0700 |
commit | 7e113e396d50868e5c2f3ee6c94da20a2cb64813 (patch) | |
tree | 338536ef3d33d36c063ce1b4f3e2c13c674f199e | |
parent | 88f29fefa86c9fe32c888c2b161e38b20c478cf5 (diff) | |
parent | 9a22c68e8697a2ec86cd238a87a32ea42d7f8d39 (diff) | |
download | system_core-7e113e396d50868e5c2f3ee6c94da20a2cb64813.zip system_core-7e113e396d50868e5c2f3ee6c94da20a2cb64813.tar.gz system_core-7e113e396d50868e5c2f3ee6c94da20a2cb64813.tar.bz2 |
am 9a22c68e: merge from open-source master
Merge commit '9a22c68e8697a2ec86cd238a87a32ea42d7f8d39' into kraken
* commit '9a22c68e8697a2ec86cd238a87a32ea42d7f8d39':
Fixing spelling errors in adb docs
Make adb's daemon-port on the host machine configurable.
adb: remove obsolete adb.connected system property.
Add Pantech's USB vendor ID to adb.
Added Kyocera's VID (0x0482), upon their request.
adb: Add five second timeout for USB writes on Linux host.
Add missing newlines to adb usage message
adb: do not mix printf() with write() when writing to stdout.
Added ZTE's USB Vendor ID (0x19D2) upon ZTE's request.
Added USB vendor id of Sharp, based on Sharp's request.
-rw-r--r-- | adb/OVERVIEW.TXT | 2 | ||||
-rw-r--r-- | adb/SERVICES.TXT | 12 | ||||
-rw-r--r-- | adb/adb.c | 32 | ||||
-rw-r--r-- | adb/adb.h | 8 | ||||
-rw-r--r-- | adb/adb_client.c | 16 | ||||
-rw-r--r-- | adb/adb_client.h | 4 | ||||
-rw-r--r-- | adb/commandline.c | 27 | ||||
-rw-r--r-- | adb/transport_local.c | 4 |
8 files changed, 72 insertions, 33 deletions
diff --git a/adb/OVERVIEW.TXT b/adb/OVERVIEW.TXT index 6a5191a..c40695a 100644 --- a/adb/OVERVIEW.TXT +++ b/adb/OVERVIEW.TXT @@ -35,7 +35,7 @@ As a whole, everything works through the following components: (through USB for devices, through TCP for emulators) and provide a few services for clients that run on the host. - The ADB server considers that a device is ONLINE when it has succesfully + The ADB server considers that a device is ONLINE when it has successfully connected to the adbd program within it. Otherwise, the device is OFFLINE, meaning that the ADB server detected a new device/emulator, but could not connect to the adbd daemon. diff --git a/adb/SERVICES.TXT b/adb/SERVICES.TXT index b0124a4..be4d50b 100644 --- a/adb/SERVICES.TXT +++ b/adb/SERVICES.TXT @@ -74,7 +74,7 @@ host-usb:<request> host-local:<request> A variant of host-serial used to target the single emulator instance - running on the host. This will fail if therre is none or more than one. + running on the host. This will fail if there is none or more than one. host:<request> When asking for information related to a device, 'host:' can also be @@ -146,7 +146,7 @@ remount: dev:<path> Opens a device file and connects the client directly to it for read/write purposes. Useful for debugging, but may require special - priviledges and thus may not run on all devices. <path> is a full + privileges and thus may not run on all devices. <path> is a full path from the root of the filesystem. tcp:<port> @@ -173,7 +173,7 @@ log:<name> framebuffer: This service is used to send snapshots of the framebuffer to a client. - It requires sufficient priviledges but works as follow: + It requires sufficient privileges but works as follow: After the OKAY, the service sends 16-byte binary structure containing the following fields (little-endian format): @@ -190,14 +190,14 @@ framebuffer: one byte through the channel, which will trigger the service to send it 'size' bytes of framebuffer data. - If the adbd daemon doesn't have sufficient priviledges to open + If the adbd daemon doesn't have sufficient privileges to open the framebuffer device, the connection is simply closed immediately. dns:<server-name> This service is an exception because it only runs within the ADB server. It is used to implement USB networking, i.e. to provide a network connection to the device through the host machine (note: this is the exact opposite of - network thetering). + network tethering). It is used to perform a gethostbyname(<address>) on the host and return the corresponding IP address as a 4-byte string. @@ -209,7 +209,7 @@ recover:<size> - creating a file named /tmp/update - reading 'size' bytes from the client and writing them to /tmp/update - - when everything is read succesfully, create a file named /tmp/update.start + - when everything is read successfully, create a file named /tmp/update.start This service can only work when the device is in recovery mode. Otherwise, the /tmp directory doesn't exist and the connection will be closed immediately. @@ -687,7 +687,7 @@ void start_device_log(void) #endif #if ADB_HOST -int launch_server() +int launch_server(int server_port) { #ifdef HAVE_WIN32_PROC /* we need to start the server in the background */ @@ -822,7 +822,17 @@ int launch_server() } #endif -int adb_main(int is_daemon) +/* Constructs a local name of form tcp:port. + * target_str points to the target string, it's content will be overwritten. + * target_size is the capacity of the target string. + * server_port is the port number to use for the local name. + */ +void build_local_name(char* target_str, size_t target_size, int server_port) +{ + snprintf(target_str, target_size, "tcp:%d", server_port); +} + +int adb_main(int is_daemon, int server_port) { #if !ADB_HOST int secure = 0; @@ -845,9 +855,11 @@ int adb_main(int is_daemon) HOST = 1; usb_vendors_init(); usb_init(); - local_init(ADB_LOCAL_TRANSPORT_PORT); + local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT); - if(install_listener("tcp:5037", "*smartsocket*", NULL)) { + char local_name[30]; + build_local_name(local_name, sizeof(local_name), server_port); + if(install_listener(local_name, "*smartsocket*", NULL)) { exit(1); } #else @@ -873,7 +885,7 @@ int adb_main(int is_daemon) } } - /* don't listen on port 5037 if we are running in secure mode */ + /* don't listen on a port (default 5037) if running in secure mode */ /* don't run as root if we are running in secure mode */ if (secure) { struct __user_cap_header_struct header; @@ -906,9 +918,11 @@ int adb_main(int is_daemon) cap.inheritable = 0; capset(&header, &cap); - D("Local port 5037 disabled\n"); + D("Local port disabled\n"); } else { - if(install_listener("tcp:5037", "*smartsocket*", NULL)) { + char local_name[30]; + build_local_name(local_name, sizeof(local_name), server_port); + if(install_listener(local_name, "*smartsocket*", NULL)) { exit(1); } } @@ -929,7 +943,7 @@ int adb_main(int is_daemon) usb_init(); } else { // listen on default port - local_init(ADB_LOCAL_TRANSPORT_PORT); + local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT); } init_jdwp(); #endif @@ -1170,6 +1184,6 @@ int main(int argc, char **argv) } start_device_log(); - return adb_main(0); + return adb_main(0, DEFAULT_ADB_PORT); #endif } @@ -237,8 +237,8 @@ void handle_packet(apacket *p, atransport *t); void send_packet(apacket *p, atransport *t); void get_my_path(char *s, size_t maxLen); -int launch_server(); -int adb_main(int is_daemon); +int launch_server(int server_port); +int adb_main(int is_daemon, int server_port); /* transports are ref-counted @@ -358,8 +358,8 @@ typedef enum { #define print_packet(tag,p) do {} while (0) #endif -#define ADB_PORT 5037 -#define ADB_LOCAL_TRANSPORT_PORT 5555 +#define DEFAULT_ADB_PORT 5037 +#define DEFAULT_ADB_LOCAL_TRANSPORT_PORT 5555 #define ADB_CLASS 0xff #define ADB_SUBCLASS 0x42 diff --git a/adb/adb_client.c b/adb/adb_client.c index 243f0fa..882810a 100644 --- a/adb/adb_client.c +++ b/adb/adb_client.c @@ -16,12 +16,19 @@ static transport_type __adb_transport = kTransportAny; static const char* __adb_serial = NULL; +static int __adb_server_port = DEFAULT_ADB_PORT; + void adb_set_transport(transport_type type, const char* serial) { __adb_transport = type; __adb_serial = serial; } +void adb_set_tcp_specifics(int server_port) +{ + __adb_server_port = server_port; +} + int adb_get_emulator_console_port(void) { const char* serial = __adb_serial; @@ -174,7 +181,7 @@ int _adb_connect(const char *service) } snprintf(tmp, sizeof tmp, "%04x", len); - fd = socket_loopback_client(ADB_PORT, SOCK_STREAM); + fd = socket_loopback_client(__adb_server_port, SOCK_STREAM); if(fd < 0) { strcpy(__adb_error, "cannot connect to daemon"); return -2; @@ -204,9 +211,10 @@ int adb_connect(const char *service) int fd = _adb_connect("host:version"); if(fd == -2) { - fprintf(stdout,"* daemon not running. starting it now *\n"); + fprintf(stdout,"* daemon not running. starting it now on port %d *\n", + __adb_server_port); start_server: - if(launch_server(0)) { + if(launch_server(__adb_server_port)) { fprintf(stderr,"* failed to start daemon *\n"); return -1; } else { @@ -314,5 +322,3 @@ oops: adb_close(fd); return 0; } - - diff --git a/adb/adb_client.h b/adb/adb_client.h index 8061579..40ab189 100644 --- a/adb/adb_client.h +++ b/adb/adb_client.h @@ -25,6 +25,10 @@ char *adb_query(const char *service); */ void adb_set_transport(transport_type type, const char* serial); +/* Set TCP specifics of the transport to use +*/ +void adb_set_tcp_specifics(int server_port); + /* 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. * assumes adb_set_transport() was alled previously... diff --git a/adb/commandline.c b/adb/commandline.c index 5f42203..8566066 100644 --- a/adb/commandline.c +++ b/adb/commandline.c @@ -762,6 +762,7 @@ int adb_commandline(int argc, char **argv) int quote; transport_type ttype = kTransportAny; char* serial = NULL; + char* server_port_str = NULL; /* If defined, this should be an absolute path to * the directory containing all of the various system images @@ -777,7 +778,20 @@ int adb_commandline(int argc, char **argv) serial = getenv("ANDROID_SERIAL"); - /* modifiers and flags */ + /* Validate and assign the server port */ + server_port_str = getenv("ANDROID_ADB_SERVER_PORT"); + int server_port = DEFAULT_ADB_PORT; + if (server_port_str && strlen(server_port_str) > 0) { + server_port = (int) strtol(server_port_str, NULL, 0); + if (server_port <= 0) { + fprintf(stderr, + "adb: Env var ANDROID_ADB_SERVER_PORT must be a positive number. Got \"%s\"\n", + server_port_str); + return usage(); + } + } + + /* modifiers and flags */ while(argc > 0) { if(!strcmp(argv[0],"nodaemon")) { no_daemon = 1; @@ -806,7 +820,7 @@ int adb_commandline(int argc, char **argv) if (isdigit(argv[0][2])) { serial = argv[0] + 2; } else { - if(argc < 2) return usage(); + if(argc < 2 || argv[0][2] != '\0') return usage(); serial = argv[1]; argc--; argv++; @@ -824,12 +838,13 @@ int adb_commandline(int argc, char **argv) } adb_set_transport(ttype, serial); + adb_set_tcp_specifics(server_port); if ((argc > 0) && (!strcmp(argv[0],"server"))) { if (no_daemon || is_daemon) { - r = adb_main(is_daemon); + r = adb_main(is_daemon, server_port); } else { - r = launch_server(); + r = launch_server(server_port); } if(r) { fprintf(stderr,"* could not start server *\n"); @@ -894,10 +909,10 @@ top: /* quote empty strings and strings with spaces */ quote = (**argv == 0 || strchr(*argv, ' ')); if (quote) - strcat(buf, "\""); + strcat(buf, "\""); strcat(buf, *argv++); if (quote) - strcat(buf, "\""); + strcat(buf, "\""); } for(;;) { diff --git a/adb/transport_local.c b/adb/transport_local.c index 81d120e..cfd3b4b 100644 --- a/adb/transport_local.c +++ b/adb/transport_local.c @@ -132,7 +132,7 @@ int local_connect(int port) static void *client_socket_thread(void *x) { #if ADB_HOST - int port = ADB_LOCAL_TRANSPORT_PORT; + int port = DEFAULT_ADB_LOCAL_TRANSPORT_PORT; int count = ADB_LOCAL_TRANSPORT_MAX; D("transport: client_socket_thread() starting\n"); @@ -244,7 +244,7 @@ int init_socket_transport(atransport *t, int s, int port, int local) if (HOST && local) { adb_mutex_lock( &local_transports_lock ); { - int index = (port - ADB_LOCAL_TRANSPORT_PORT)/2; + int index = (port - DEFAULT_ADB_LOCAL_TRANSPORT_PORT)/2; if (!(port & 1) || index < 0 || index >= ADB_LOCAL_TRANSPORT_MAX) { D("bad local transport port number: %d\n", port); |