You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/01/19 19:50:48 UTC

incubator-mynewt-larva git commit: Change image upload to use json as well. Base64 encode the data.

Repository: incubator-mynewt-larva
Updated Branches:
  refs/heads/master 54576ff76 -> 933c75320


Change image upload to use json as well. Base64 encode the data.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/commit/933c7532
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/933c7532
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/933c7532

Branch: refs/heads/master
Commit: 933c753204413e0b9af53e4dcdc01f0c4ed6a303
Parents: 54576ff
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Tue Jan 19 10:42:23 2016 -0800
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Tue Jan 19 10:42:23 2016 -0800

----------------------------------------------------------------------
 libs/imgmgr/src/imgmgr.c      | 61 ++++++++++++++++++++++++++++----------
 libs/imgmgr/src/imgmgr_fs.c   |  2 +-
 libs/imgmgr/src/imgmgr_priv.h | 13 +++++++-
 3 files changed, 58 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/933c7532/libs/imgmgr/src/imgmgr.c
----------------------------------------------------------------------
diff --git a/libs/imgmgr/src/imgmgr.c b/libs/imgmgr/src/imgmgr.c
index 1df0a36..1a77382 100644
--- a/libs/imgmgr/src/imgmgr.c
+++ b/libs/imgmgr/src/imgmgr.c
@@ -22,6 +22,8 @@
 #include <stdio.h>
 #include <hal/flash_map.h>
 #include <newtmgr/newtmgr.h>
+#include <json/json.h>
+#include <util/base64.h>
 
 #include <bootutil/image.h>
 
@@ -210,8 +212,23 @@ static int
 imgr_upload(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
   struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
 {
-    char img_data[IMGMGR_NMGR_MAX_MSG];
-    struct imgmgr_upload_cmd *iuc;
+    char img_data[BASE64_ENCODE_SIZE(IMGMGR_NMGR_MAX_MSG)];
+    char json_data[32 + sizeof(img_data)];
+    unsigned int off = UINT_MAX;
+    const struct json_attr_t off_attr[3] = {
+        [0] = {
+            .attribute = "off",
+            .type = t_uinteger,
+            .addr.uinteger = &off,
+            .nodefault = true
+        },
+        [1] = {
+            .attribute = "data",
+            .type = t_string,
+            .addr.string = img_data,
+            .len = sizeof(img_data)
+        }
+    };
     struct image_version ver;
     int active;
     int best;
@@ -219,17 +236,26 @@ imgr_upload(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
     int len;
     int i;
 
-    len = min(nmr->nh_len, sizeof(img_data));
+    len = min(nmr->nh_len, sizeof(json_data));
 
-    rc = os_mbuf_copydata(req, srcoff + sizeof(*nmr), len, img_data);
-    if (rc || len < sizeof(*iuc)) {
+    rc = os_mbuf_copydata(req, srcoff + sizeof(*nmr), len, json_data);
+    if (rc) {
         return OS_EINVAL;
     }
-    len -= sizeof(*iuc);
 
-    iuc = (struct imgmgr_upload_cmd *)img_data;
-    iuc->iuc_off = ntohl(iuc->iuc_off);
-    if (iuc->iuc_off == 0) {
+    rc = json_read_object(json_data, off_attr, NULL);
+    if (rc || off == UINT_MAX) {
+        return OS_EINVAL;
+    }
+    len = strlen(img_data);
+    if (len) {
+        len = base64_decode(img_data, img_data);
+        if (len < 0) {
+            return OS_EINVAL;
+        }
+    }
+
+    if (off == 0) {
         /*
          * New upload.
          */
@@ -284,7 +310,7 @@ imgr_upload(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
             assert(0);
             goto out;
         }
-    } else if (iuc->iuc_off != img_state.upload.off) {
+    } else if (off != img_state.upload.off) {
         /*
          * Invalid offset. Drop the data, and respond with the offset we're
          * expecting data for.
@@ -292,14 +318,17 @@ imgr_upload(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
         rc = 0;
         goto out;
     }
-    rc = flash_area_write(img_state.upload.fa, img_state.upload.off,
-      iuc + 1, len);
-    assert(rc == 0);
-    img_state.upload.off += len;
 
+    if (len) {
+        rc = flash_area_write(img_state.upload.fa, img_state.upload.off,
+          img_data, len);
+        assert(rc == 0);
+        img_state.upload.off += len;
+    }
 out:
-    iuc->iuc_off = htonl(img_state.upload.off);
-    rc = nmgr_rsp_extend(rsp_hdr, rsp, img_data, sizeof(*iuc));
+    off = snprintf(json_data, sizeof(json_data),
+      "{\"off\":%u}", img_state.upload.off);
+    rc = nmgr_rsp_extend(rsp_hdr, rsp, json_data, off);
     if (rc != 0) {
         return OS_ENOMEM;
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/933c7532/libs/imgmgr/src/imgmgr_fs.c
----------------------------------------------------------------------
diff --git a/libs/imgmgr/src/imgmgr_fs.c b/libs/imgmgr/src/imgmgr_fs.c
index 06980fb..a1794cf 100644
--- a/libs/imgmgr/src/imgmgr_fs.c
+++ b/libs/imgmgr/src/imgmgr_fs.c
@@ -122,7 +122,7 @@ imgr_boot_write(struct nmgr_hdr *nmr, struct os_mbuf *req,
     const struct json_attr_t boot_write_attr[2] = {
         [0] = {
             .attribute = "test",
-            .type = JSON_VALUE_TYPE_STRING,
+            .type = t_string,
             .addr.string = test_ver_str,
             .len = sizeof(test_ver_str),
         },

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/933c7532/libs/imgmgr/src/imgmgr_priv.h
----------------------------------------------------------------------
diff --git a/libs/imgmgr/src/imgmgr_priv.h b/libs/imgmgr/src/imgmgr_priv.h
index 49b1716..7375cd7 100644
--- a/libs/imgmgr/src/imgmgr_priv.h
+++ b/libs/imgmgr/src/imgmgr_priv.h
@@ -30,7 +30,7 @@ struct imgmgr_upload_cmd {
 /*
  * Response to list:
  * {
- *      "list":[ <version1>, <version2>]
+ *      "images":[ <version1>, <version2>]
  * }
  *
  *
@@ -45,6 +45,17 @@ struct imgmgr_upload_cmd {
  *	"main":<version>,
  *      "active":<version>
  * }
+ *
+ * Request to upload:
+ * {
+ *      "off":<offset>,
+ *      "data":<base64encoded binary>
+ * }
+ *
+ * Response to upload:
+ * {
+ *      "off":<offset
+ * }
  */
 
 struct nmgr_hdr;