Fastbootd: socket and network transport

Change-Id: I395e5361d0484bd11421225c152f9aec00305f11
diff --git a/fastbootd/fastbootd.c b/fastbootd/fastbootd.c
index 90b9ef9..264b6f5 100644
--- a/fastbootd/fastbootd.c
+++ b/fastbootd/fastbootd.c
@@ -16,32 +16,69 @@
 
 #include <stdio.h>
 #include <unistd.h>
-
 #include <cutils/klog.h>
+#include <getopt.h>
+#include <stdlib.h>
 
 #include "debug.h"
 #include "trigger.h"
+#include "socket_client.h"
 
 unsigned int debug_level = DEBUG;
 
 void commands_init();
 void usb_init();
 void config_init();
+int transport_socket_init();
 
 int main(int argc, char **argv)
 {
+    int socket_client = 0;
+    int c;
+
+    klog_init();
+    klog_set_level(6);
+
+    const struct option longopts[] = {
+        {"socket", no_argument, 0, 'S'},
+        {0, 0, 0, 0}
+    };
+
+    while (1) {
+        c = getopt_long(argc, argv, "S", longopts, NULL);
+        /* Alphabetical cases */
+        if (c < 0)
+            break;
+        switch (c) {
+        case 'S':
+            socket_client = 1;
+            break;
+        case '?':
+            return 1;
+        default:
+            return 0;
+        }
+    }
+
     (void)argc;
     (void)argv;
 
     klog_init();
     klog_set_level(6);
 
-    config_init();
-    load_trigger();
-    commands_init();
-    usb_init();
-    while (1) {
-        sleep(1);
+    if (socket_client) {
+        run_socket_client();
+    }
+    else {
+        config_init();
+        load_trigger();
+        commands_init();
+        usb_init();
+        if (!transport_socket_init())
+            exit(1);
+        while (1) {
+            sleep(1);
+        }
     }
     return 0;
 }