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.
This commit is contained in:
The Android Open Source Project 2010-04-28 13:01:23 -07:00 committed by Android Git Automerger
commit 7e113e396d
8 changed files with 72 additions and 33 deletions

View file

@ -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.

View file

@ -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.

View file

@ -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
}

View file

@ -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

View file

@ -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;
}

View file

@ -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...

View file

@ -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(;;) {

View file

@ -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);