summaryrefslogtreecommitdiffstats
path: root/adb
diff options
context:
space:
mode:
authorTerence Haddock <thaddock@google.com>2011-03-16 09:43:56 +0100
committerTerence Haddock <thaddock@google.com>2011-04-06 16:18:25 +0200
commite994f18c53673cac42ed45ccb3d427bd40000948 (patch)
treecb01ae3746f135bef7de3f47cd26f4549aedb55d /adb
parent7c556549079dbcc3f6f7ef4376978cd8c598aa62 (diff)
downloadsystem_core-e994f18c53673cac42ed45ccb3d427bd40000948.zip
system_core-e994f18c53673cac42ed45ccb3d427bd40000948.tar.gz
system_core-e994f18c53673cac42ed45ccb3d427bd40000948.tar.bz2
In serial, skip over port as well if numbers found after colon.
Change-Id: Icd45f570a9527790eb0cd614a3f77da1a72375b1
Diffstat (limited to 'adb')
-rw-r--r--adb/sockets.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/adb/sockets.c b/adb/sockets.c
index 43925e4..aa4d5fc 100644
--- a/adb/sockets.c
+++ b/adb/sockets.c
@@ -569,6 +569,32 @@ unsigned unhex(unsigned char *s, int len)
return n;
}
+/* skip_host_serial return the position in a string
+ skipping over the 'serial' parameter in the ADB protocol,
+ where parameter string may be a host:port string containing
+ the protocol delimiter (colon). */
+char *skip_host_serial(char *service) {
+ char *first_colon, *serial_end;
+
+ first_colon = strchr(service, ':');
+ if (!first_colon) {
+ /* No colon in service string. */
+ return NULL;
+ }
+ serial_end = first_colon;
+ if (isdigit(serial_end[1])) {
+ serial_end++;
+ while ((*serial_end) && isdigit(*serial_end)) {
+ serial_end++;
+ }
+ if ((*serial_end) != ':') {
+ // Something other than numbers was found, reset the end.
+ serial_end = first_colon;
+ }
+ }
+ return serial_end;
+}
+
static int smart_socket_enqueue(asocket *s, apacket *p)
{
unsigned len;
@@ -624,8 +650,8 @@ static int smart_socket_enqueue(asocket *s, apacket *p)
char* serial_end;
service += strlen("host-serial:");
- // serial number should follow "host:"
- serial_end = strchr(service, ':');
+ // serial number should follow "host:" and could be a host:port string.
+ serial_end = skip_host_serial(service);
if (serial_end) {
*serial_end = 0; // terminate string
serial = service;