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;