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:
commit
7e113e396d
8 changed files with 72 additions and 33 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
32
adb/adb.c
32
adb/adb.c
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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...
|
||||
|
|
|
|||
|
|
@ -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(;;) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue