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);