Merge "Fastbootd: General fixes and changes"
diff --git a/fastbootd/commands.c b/fastbootd/commands.c
index 2f6e86a..5c283a8 100644
--- a/fastbootd/commands.c
+++ b/fastbootd/commands.c
@@ -228,6 +228,7 @@
         return;
     }
 
+    //TODO: add same verification as in cmd_flash
     if (phandle->download_fd < 0) {
         fastboot_fail(phandle, "no layout file");
         return;
diff --git a/fastbootd/commands/flash.h b/fastbootd/commands/flash.h
index 86dc811..5a64cab 100644
--- a/fastbootd/commands/flash.h
+++ b/fastbootd/commands/flash.h
@@ -32,6 +32,11 @@
 #ifndef _FASTBOOTD_ERASE_H
 #define _FASTBOOTD_ERASE_H
 
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include "debug.h"
+
 int flash_find_entry(const char *, char *, size_t);
 int flash_erase(int fd);
 
@@ -50,10 +55,12 @@
     ssize_t len;
 
     while ((len = TEMP_FAILURE_RETRY(read(fd, (void *) &buffer[readcount], size - readcount))) > 0) {
-        readcount -= len;
+        readcount += len;
     }
-    if (len < 0)
+    if (len < 0) {
+        D(ERR, "Read error:%s", strerror(errno));
         return len;
+    }
 
     return readcount;
 }
diff --git a/fastbootd/fastbootd.c b/fastbootd/fastbootd.c
index 9318c99..2b51b33 100644
--- a/fastbootd/fastbootd.c
+++ b/fastbootd/fastbootd.c
@@ -38,17 +38,19 @@
 {
     int socket_client = 0;
     int c;
+    int network = 1;
 
     klog_init();
     klog_set_level(6);
 
     const struct option longopts[] = {
         {"socket", no_argument, 0, 'S'},
+        {"nonetwork", no_argument, 0, 'n'},
         {0, 0, 0, 0}
     };
 
     while (1) {
-        c = getopt_long(argc, argv, "S", longopts, NULL);
+        c = getopt_long(argc, argv, "Sn", longopts, NULL);
         /* Alphabetical cases */
         if (c < 0)
             break;
@@ -56,6 +58,9 @@
         case 'S':
             socket_client = 1;
             break;
+        case 'n':
+            network = 0;
+            break;
         case '?':
             return 1;
         default:
@@ -70,6 +75,7 @@
     klog_set_level(6);
 
     if (socket_client) {
+        //TODO: Shouldn't we change current tty into raw mode?
         run_socket_client();
     }
     else {
@@ -78,10 +84,14 @@
         load_trigger();
         commands_init();
         usb_init();
-        if (!transport_socket_init())
-            exit(1);
-        ssh_server_start();
-        network_discovery_init();
+
+        if (network) {
+            if (!transport_socket_init())
+                exit(1);
+            ssh_server_start();
+            network_discovery_init();
+        }
+
         while (1) {
             sleep(1);
         }
diff --git a/fastbootd/include/vendor_trigger.h b/fastbootd/include/vendor_trigger.h
index 66f65c4..51204fa 100644
--- a/fastbootd/include/vendor_trigger.h
+++ b/fastbootd/include/vendor_trigger.h
@@ -32,7 +32,7 @@
 #ifndef __VENDOR_TRIGGER_H_
 #define __VENDOR_TRIGGER_H_
 
-#define TRIGGER_MODULE_ID "vendortrigger"
+#define TRIGGER_MODULE_ID "fastbootd"
 #include <hardware/hardware.h>
 
 __BEGIN_DECLS
@@ -59,7 +59,7 @@
 
 
     /*
-     * Return value 1 forbid the action from the vendor site and sets errno
+     * Return value -1 forbid the action from the vendor site and sets errno
      */
     int (* gpt_layout)(struct GPT_content *);
     int (* oem_cmd)(const char *arg, const char **response);
diff --git a/fastbootd/other/vendor_trigger.c b/fastbootd/other/vendor_trigger.c
index 9b7562c..101959b 100644
--- a/fastbootd/other/vendor_trigger.c
+++ b/fastbootd/other/vendor_trigger.c
@@ -38,30 +38,11 @@
 
 static const int version = 1;
 
-int delete_partition(struct GPT_entry_raw *);
-int add_partition(struct GPT_entry_raw *);
-int modify_partition(struct GPT_entry_raw *, struct GPT_entry_raw *);
-
 int check_version(const int fastboot_version, int *libversion) {
     *libversion = version;
     return !(fastboot_version == version);
 }
 
-int delete_partition(struct GPT_entry_raw *entry) {
-    D(DEBUG, "message from libvendor");
-    return 0;
-}
-
-int add_partition(struct GPT_entry_raw *entry) {
-    D(DEBUG, "message from libvendor");
-    return 0;
-}
-
-int modify_partition(struct GPT_entry_raw *oldentry, struct GPT_entry_raw *newentry) {
-    D(DEBUG, "message from libvendor");
-    return 0;
-}
-
 int gpt_layout(struct GPT_content *table) {
     D(DEBUG, "message from libvendor");
     return 0;
diff --git a/fastbootd/secure.c b/fastbootd/secure.c
index 75a6f3c..a657ad4 100644
--- a/fastbootd/secure.c
+++ b/fastbootd/secure.c
@@ -108,6 +108,9 @@
         goto error;
     }
 
+    //TODO:
+    // read with d2i_CMS_bio to support DER
+    // with java or just encode data with base64
     *content = SMIME_read_CMS(input, output);
     if (*content == NULL) {
         unsigned long err = ERR_peek_last_error();
diff --git a/fastbootd/transport_socket.c b/fastbootd/transport_socket.c
index 801b8d6..ff0f3bd 100644
--- a/fastbootd/transport_socket.c
+++ b/fastbootd/transport_socket.c
@@ -136,13 +136,12 @@
 int transport_socket_init()
 {
     struct socket_transport *socket_transport = malloc(sizeof(struct socket_transport));
-    
+
     socket_transport->transport.connect = socket_connect;
     socket_transport->transport.close = socket_close;
     socket_transport->transport.read = socket_read;
     socket_transport->transport.write = socket_write;
-    // TODO: create sshd key pair if necessary
-    
+
     if (!listen_socket_init(socket_transport)) {
         D(ERR, "socket transport init failed");
         free(socket_transport);