Revert "[Feature][T8TSK-250][ADBD]add adb debug patch"

This reverts commit 0300fcc023c83b5b569b0c0799aff58cfd65dd39.

Reason for revert: <INSERT REASONING HERE>

Change-Id: I82e92daf5003f885c4732744291c57425ef27642
diff --git a/src/devtools/adb/adb.c b/src/devtools/adb/adb.c
index 2eb667a..82efb12 100644
--- a/src/devtools/adb/adb.c
+++ b/src/devtools/adb/adb.c
@@ -59,8 +59,6 @@
 static const char *root_seclabel = NULL;
 #endif
 
-int   adb_service_enable = 1;
-
 void fatal(const char *fmt, ...)
 {
     va_list ap;
@@ -120,7 +118,7 @@
 
     /* use a comma/column/semi-colum/space separated list */
     while (*p) {
-        unsigned int  len, tagn;
+        int  len, tagn;
 
         q = strpbrk(p, " ,:;");
         if (q == NULL) {
@@ -238,8 +236,6 @@
     char *tag;
     char *x;
     unsigned count;
-    char data[DUMPMAX+4];
-    int i = 0;
 
     switch(p->msg.command){
     case A_SYNC: tag = "SYNC"; break;
@@ -252,26 +248,25 @@
     default: tag = "????"; break;
     }
 
+    fprintf(stderr, "%s: %s %08x %08x %04x \"",
+            label, tag, p->msg.arg0, p->msg.arg1, p->msg.data_length);
     count = p->msg.data_length;
     x = (char*) p->data;
     if(count > DUMPMAX) {
         count = DUMPMAX;
+        tag = "\n";
+    } else {
+        tag = "\"\n";
     }
-    while(i < count){
+    while(count-- > 0){
         if((*x >= ' ') && (*x < 127)) {
-            data[i] = *x;
+            fputc(*x, stderr);
         } else {
-            data[i] = '.';
+            fputc('.', stderr);
         }
         x++;
-        i++;
     }
-    data[i++] = '\"';
-    data[i++] = '\n';
-    data[i] = '\0';
-
-    D("%s: %s %08x %08x %04x %s\"",
-            label, tag, p->msg.arg0, p->msg.arg1, p->msg.data_length, data);
+    fputs(tag, stderr);
 }
 #endif
 
@@ -395,6 +390,69 @@
     send_packet(cp, t);
 }
 
+void send_auth_request(atransport *t)
+{
+    D("Calling send_auth_request\n");
+    apacket *p;
+    int ret;
+
+    ret = adb_auth_generate_token(t->token, sizeof(t->token));
+    if (ret != sizeof(t->token)) {
+        D("Error generating token ret=%d\n", ret);
+        return;
+    }
+
+    p = get_apacket();
+    memcpy(p->data, t->token, ret);
+    p->msg.command = A_AUTH;
+    p->msg.arg0 = ADB_AUTH_TOKEN;
+    p->msg.data_length = ret;
+    send_packet(p, t);
+}
+
+static void send_auth_response(uint8_t *token, size_t token_size, atransport *t)
+{
+    D("Calling send_auth_response\n");
+    apacket *p = get_apacket();
+    int ret;
+
+    ret = adb_auth_sign(t->key, token, token_size, p->data);
+    if (!ret) {
+        D("Error signing the token\n");
+        put_apacket(p);
+        return;
+    }
+
+    p->msg.command = A_AUTH;
+    p->msg.arg0 = ADB_AUTH_SIGNATURE;
+    p->msg.data_length = ret;
+    send_packet(p, t);
+}
+
+static void send_auth_publickey(atransport *t)
+{
+    D("Calling send_auth_publickey\n");
+    apacket *p = get_apacket();
+    int ret;
+
+    ret = adb_auth_get_userkey(p->data, sizeof(p->data));
+    if (!ret) {
+        D("Failed to get user public key\n");
+        put_apacket(p);
+        return;
+    }
+
+    p->msg.command = A_AUTH;
+    p->msg.arg0 = ADB_AUTH_RSAPUBLICKEY;
+    p->msg.data_length = ret;
+    send_packet(p, t);
+}
+
+void adb_auth_verified(atransport *t)
+{
+    handle_online(t);
+    send_connect(t);
+}
 
 #if ADB_HOST
 static char *connection_state_name(atransport *t)
@@ -562,11 +620,35 @@
 
         parse_banner((char*) p->data, t);
 
-        if (!adb_service_enable) {
-            D("Ignore ADB client CNXN request, ADB keeps disabled");
-        } else if (HOST || !auth_enabled) {
+        if (HOST || !auth_enabled) {
             handle_online(t);
             if(!HOST) send_connect(t);
+        } else {
+            send_auth_request(t);
+        }
+        break;
+
+    case A_AUTH:
+        if (p->msg.arg0 == ADB_AUTH_TOKEN) {
+            t->connection_state = CS_UNAUTHORIZED;
+            t->key = adb_auth_nextkey(t->key);
+            if (t->key) {
+                send_auth_response(p->data, p->msg.data_length, t);
+            } else {
+                /* No more private keys to try, send the public key */
+                send_auth_publickey(t);
+            }
+        } else if (p->msg.arg0 == ADB_AUTH_SIGNATURE) {
+            if (adb_auth_verify(t->token, p->data, p->msg.data_length)) {
+                adb_auth_verified(t);
+                t->failed_auth_attempts = 0;
+            } else {
+                if (t->failed_auth_attempts++ > 10)
+                    adb_sleep_ms(1000);
+                send_auth_request(t);
+            }
+        } else if (p->msg.arg0 == ADB_AUTH_RSAPUBLICKEY) {
+            adb_auth_confirm_key(p->data, p->msg.data_length, t);
         }
         break;
 
@@ -944,6 +1026,48 @@
 #endif
 }
 
+void start_logging(void)
+{
+#if defined(_WIN32)
+    char    temp[ MAX_PATH ];
+    FILE*   fnul;
+    FILE*   flog;
+
+    GetTempPath( sizeof(temp) - 8, temp );
+    strcat( temp, "adb.log" );
+
+    /* Win32 specific redirections */
+    fnul = fopen( "NUL", "rt" );
+    if (fnul != NULL)
+        stdin[0] = fnul[0];
+
+    flog = fopen( temp, "at" );
+    if (flog == NULL)
+        flog = fnul;
+
+    setvbuf( flog, NULL, _IONBF, 0 );
+
+    stdout[0] = flog[0];
+    stderr[0] = flog[0];
+    fprintf(stderr,"--- adb starting (pid %d) ---\n", getpid());
+#else
+    int fd;
+
+    fd = unix_open("/dev/null", O_RDONLY);
+    dup2(fd, 0);
+    adb_close(fd);
+
+    fd = unix_open("/tmp/adb.log", O_WRONLY | O_CREAT | O_APPEND, 0640);
+    if(fd < 0) {
+        fd = unix_open("/dev/null", O_WRONLY);
+    }
+    dup2(fd, 1);
+    dup2(fd, 2);
+    adb_close(fd);
+    fprintf(stderr,"--- adb starting (pid %d) ---\n", getpid());
+#endif
+}
+
 #if !ADB_HOST
 void start_device_log(void)
 {
@@ -951,19 +1075,34 @@
     char    path[PATH_MAX];
     struct tm now;
     time_t t;
-    char value[PROPERTY_VALUE_MAX] = "";
+    char value[PROPERTY_VALUE_MAX];
 
     // read the trace mask from persistent property persist.adb.trace_mask
     // give up if the property is not set or cannot be parsed
     property_get("persist.adb.trace_mask", value, "");
-    if (sscanf(value, "%x", &adb_trace_mask) != 1 || adb_trace_mask == 0)
-    {
-        DD("ADB daemon log DISABLED, adb_trace_mask=0x%x\n", adb_trace_mask);
+    if (sscanf(value, "%x", &adb_trace_mask) != 1)
         return;
-    } else {
-        adb_trace_mask %= (1 <<TRACE_LAST);
-        DD("ADB daemon log to AP log file ENABLED, adb_trace_mask=0x%x\n", adb_trace_mask);
-    }
+
+    adb_mkdir("/tmp/adb", 0775);
+    tzset();
+    time(&t);
+    localtime_r(&t, &now);
+    strftime(path, sizeof(path),
+                "/tmp/adb/adb-%Y-%m-%d-%H-%M-%S.txt",
+                &now);
+    fd = unix_open(path, O_WRONLY | O_CREAT | O_TRUNC, 0640);
+    if (fd < 0)
+        return;
+
+    // redirect stdout and stderr to the log file
+    dup2(fd, 1);
+    dup2(fd, 2);
+    fprintf(stderr,"--- adb starting (pid %d) ---\n", getpid());
+    adb_close(fd);
+
+    fd = unix_open("/dev/null", O_RDONLY);
+    dup2(fd, 0);
+    adb_close(fd);
 }
 #endif
 
@@ -1194,9 +1333,6 @@
     return 1;
 #else /* ALLOW_ADBD_ROOT */
 #ifdef ADB_NON_ANDROID
-    if (!adb_service_enable) {
-        return 1;
-    }
     return 0;
 #endif /* ADB_NON_ANDROID */
     int secure = 0;
@@ -1261,6 +1397,7 @@
     usb_init();
 #endif
     local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT);
+    adb_auth_init();
 
     char local_name[30];
     build_local_name(local_name, sizeof(local_name), server_port);
@@ -1268,6 +1405,10 @@
         exit(1);
     }
 #else
+    property_get("ro.adb.secure", value, "0");
+    auth_enabled = !strcmp(value, "1");
+    if (auth_enabled)
+        adb_auth_init();
 
     // Our external storage path may be different than apps, since
     // we aren't able to bind mount after dropping root.
@@ -1357,6 +1498,9 @@
         local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT);
     }
 
+    D("adb_main(): pre init_jdwp()\n");
+    init_jdwp();
+    D("adb_main(): post init_jdwp()\n");
 #endif
 
     if (is_daemon)
@@ -1368,6 +1512,7 @@
 #else
         fprintf(stderr, "OK\n");
 #endif
+        start_logging();
     }
     D("Event loop starting\n");
 
@@ -1628,24 +1773,6 @@
     return -1;
 }
 
-void update_enabled_flag() {
-#ifndef ADB_OVER_PCIE
-#ifdef ADB_SERVICE_ENABLE
-    adb_service_enable = 1;
-#else
-    char value[PROPERTY_VALUE_MAX] = "";
-
-    property_get("service.adb.enable", value, "");
-    if (sscanf(value, "%x", &adb_service_enable) != 1) {
-        adb_service_enable = 0;
-    } else if (adb_service_enable != 0) {
-        adb_service_enable = 1;
-    }
-#endif
-#endif
-    printf("ADB service enabled status=%d\n", adb_service_enable);
-}
-
 int main(int argc, char **argv)
 {
 #if ADB_HOST
@@ -1657,7 +1784,7 @@
     /* If adbd runs inside the emulator this will enable adb tracing via
      * adb-debug qemud service in the emulator. */
     //adb_qemu_trace_init();
-    DD("adb main()\n");
+    D("main()\n");
     while(1) {
         int c;
         int option_index = 0;
@@ -1681,8 +1808,7 @@
     }
 
     start_device_log();
-    update_enabled_flag();
-    DD("Handling main()\n");
+    D("Handling main()\n");
     return adb_main(0, DEFAULT_ADB_PORT);
 #endif
 }