Implement ADB communication over QEMU pipe

Change-Id: I62ff5898c7a955aaaa8af8f7ee7ed018af860f80
diff --git a/android/qemu-setup.c b/android/qemu-setup.c
index f1a12ee..181c95b 100644
--- a/android/qemu-setup.c
+++ b/android/qemu-setup.c
@@ -23,6 +23,8 @@
 #include "android/utils/path.h"
 #include "android/utils/system.h"
 #include "android/utils/bufprint.h"
+#include "android/adb-server.h"
+#include "android/adb-qemud.h"
 
 #define  D(...)  do {  if (VERBOSE_CHECK(init)) dprint(__VA_ARGS__); } while (0)
 
@@ -252,6 +254,8 @@
         exit(1);
     }
 
+    int legacy_adb = avdInfo_getAdbdCommunicationMode(android_avdInfo) ? 0 : 1;
+
     if (android_op_ports) {
         char* comma_location;
         char* end;
@@ -276,9 +280,16 @@
 
         // Set up redirect from host to guest system. adbd on the guest listens
         // on 5555.
-        slirp_redir( 0, adb_port, guest_ip, 5555 );
+        if (legacy_adb) {
+            slirp_redir( 0, adb_port, guest_ip, 5555 );
+        } else {
+            adb_server_init(adb_port);
+            android_adb_service_init();
+        }
         if ( control_console_start( console_port ) < 0 ) {
-            slirp_unredir( 0, adb_port );
+            if (legacy_adb) {
+                slirp_unredir( 0, adb_port );
+            }
         }
 
         base_port = console_port;
@@ -304,12 +315,20 @@
         for ( ; tries > 0; tries--, base_port += 2 ) {
 
             /* setup first redirection for ADB, the Android Debug Bridge */
-            if ( slirp_redir( 0, base_port+1, guest_ip, 5555 ) < 0 )
-                continue;
+            if (legacy_adb) {
+                if ( slirp_redir( 0, base_port+1, guest_ip, 5555 ) < 0 )
+                    continue;
+            } else {
+                if (adb_server_init(base_port+1))
+                    continue;
+                android_adb_service_init();
+            }
 
             /* setup second redirection for the emulator console */
             if ( control_console_start( base_port ) < 0 ) {
-                slirp_unredir( 0, base_port+1 );
+                if (legacy_adb) {
+                    slirp_unredir( 0, base_port+1 );
+                }
                 continue;
             }