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/20 21:30:34 UTC

incubator-mynewt-larva git commit: Initialize JSON processing before calling newtmgr handlers.

Repository: incubator-mynewt-larva
Updated Branches:
  refs/heads/master ee49f37bb -> 452fadc22


Initialize JSON processing before calling newtmgr handlers.


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/452fadc2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/452fadc2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/452fadc2

Branch: refs/heads/master
Commit: 452fadc226b9147fda7d1d5058f76868924ba355
Parents: ee49f37
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Wed Jan 20 12:29:28 2016 -0800
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Wed Jan 20 12:29:28 2016 -0800

----------------------------------------------------------------------
 libs/imgmgr/src/imgmgr.c               | 31 ++++-------
 libs/imgmgr/src/imgmgr_fs.c            | 14 ++---
 libs/imgmgr/src/imgmgr_priv.h          |  6 +--
 libs/newtmgr/include/newtmgr/newtmgr.h | 13 ++---
 libs/newtmgr/src/newtmgr.c             | 80 ++++++++++++-----------------
 sys/stats/src/stats_nmgr.c             | 37 ++++---------
 6 files changed, 64 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/452fadc2/libs/imgmgr/src/imgmgr.c
----------------------------------------------------------------------
diff --git a/libs/imgmgr/src/imgmgr.c b/libs/imgmgr/src/imgmgr.c
index bcaf52d..27bdc61 100644
--- a/libs/imgmgr/src/imgmgr.c
+++ b/libs/imgmgr/src/imgmgr.c
@@ -29,17 +29,14 @@
 #include "imgmgr/imgmgr.h"
 #include "imgmgr_priv.h"
 
-static int imgr_list(struct nmgr_hdr *nmr, struct os_mbuf *req,
-  uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp);
-static int imgr_noop(struct nmgr_hdr *nmr, struct os_mbuf *req,
-  uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp);
-static int imgr_upload(struct nmgr_hdr *nmr, struct os_mbuf *req,
-  uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp);
+static int imgr_list(struct nmgr_jbuf *);
+static int imgr_noop(struct nmgr_jbuf *);
+static int imgr_upload(struct nmgr_jbuf *);
 
 static const struct nmgr_handler imgr_nmgr_handlers[] = {
     [IMGMGR_NMGR_OP_LIST] = {
         .nh_read = imgr_list,
-        .nh_write = imgr_list
+        .nh_write = imgr_noop
     },
     [IMGMGR_NMGR_OP_UPLOAD] = {
         .nh_read = imgr_noop,
@@ -101,8 +98,7 @@ imgr_read_ver(int area_id, struct image_version *ver)
 }
 
 static int
-imgr_list(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
-  struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
+imgr_list(struct nmgr_jbuf *njb)
 {
     struct image_version ver;
     int i;
@@ -129,8 +125,7 @@ imgr_list(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
     array.jv_len = cnt;
     array.jv_val.composite.values = version_ptrs;
 
-    enc = &nmgr_task_jbuf.njb_enc;
-    nmgr_jbuf_setobuf(&nmgr_task_jbuf, rsp_hdr, rsp);
+    enc = &njb->njb_enc;
 
     json_encode_object_start(enc);
     json_encode_object_entry(enc, "images", &array);
@@ -140,15 +135,13 @@ imgr_list(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
 }
 
 static int
-imgr_noop(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
-  struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
+imgr_noop(struct nmgr_jbuf *njb)
 {
     return 0;
 }
 
 static int
-imgr_upload(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
-  struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
+imgr_upload(struct nmgr_jbuf *njb)
 {
     char img_data[BASE64_ENCODE_SIZE(IMGMGR_NMGR_MAX_MSG)];
     unsigned int off = UINT_MAX;
@@ -175,10 +168,7 @@ imgr_upload(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
     int len;
     int i;
 
-    nmgr_jbuf_setibuf(&nmgr_task_jbuf, req, srcoff + sizeof(*nmr),
-      nmr->nh_len);
-
-    rc = json_read_object(&nmgr_task_jbuf.njb_buf, off_attr);
+    rc = json_read_object(&njb->njb_buf, off_attr);
     if (rc || off == UINT_MAX) {
         return OS_EINVAL;
     }
@@ -261,8 +251,7 @@ imgr_upload(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
         img_state.upload.off += len;
     }
 out:
-    enc = &nmgr_task_jbuf.njb_enc;
-    nmgr_jbuf_setobuf(&nmgr_task_jbuf, rsp_hdr, rsp);
+    enc = &njb->njb_enc;
 
     json_encode_object_start(enc);
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/452fadc2/libs/imgmgr/src/imgmgr_fs.c
----------------------------------------------------------------------
diff --git a/libs/imgmgr/src/imgmgr_fs.c b/libs/imgmgr/src/imgmgr_fs.c
index ddcbc09..0813c68 100644
--- a/libs/imgmgr/src/imgmgr_fs.c
+++ b/libs/imgmgr/src/imgmgr_fs.c
@@ -81,15 +81,13 @@ imgr_ver_jsonstr(struct json_encoder *enc, char *key,
 }
 
 int
-imgr_boot_read(struct nmgr_hdr *nmr, struct os_mbuf *req,
-  uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
+imgr_boot_read(struct nmgr_jbuf *njb)
 {
     int rc;
     struct json_encoder *enc;
     struct image_version ver;
 
-    enc = &nmgr_task_jbuf.njb_enc;
-    nmgr_jbuf_setobuf(&nmgr_task_jbuf, rsp_hdr, rsp);
+    enc = &njb->njb_enc;
 
     json_encode_object_start(enc);
 
@@ -114,8 +112,7 @@ imgr_boot_read(struct nmgr_hdr *nmr, struct os_mbuf *req,
 }
 
 int
-imgr_boot_write(struct nmgr_hdr *nmr, struct os_mbuf *req,
-  uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
+imgr_boot_write(struct nmgr_jbuf *njb)
 {
     char test_ver_str[28];
     const struct json_attr_t boot_write_attr[2] = {
@@ -132,10 +129,7 @@ imgr_boot_write(struct nmgr_hdr *nmr, struct os_mbuf *req,
     int rc;
     struct image_version ver;
 
-    nmgr_jbuf_setibuf(&nmgr_task_jbuf, req, srcoff + sizeof(*nmr),
-      nmr->nh_len);
-
-    rc = json_read_object(&nmgr_task_jbuf.njb_buf, boot_write_attr);
+    rc = json_read_object(&njb->njb_buf, boot_write_attr);
     if (rc) {
         return OS_EINVAL;
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/452fadc2/libs/imgmgr/src/imgmgr_priv.h
----------------------------------------------------------------------
diff --git a/libs/imgmgr/src/imgmgr_priv.h b/libs/imgmgr/src/imgmgr_priv.h
index aa9950f..99193b4 100644
--- a/libs/imgmgr/src/imgmgr_priv.h
+++ b/libs/imgmgr/src/imgmgr_priv.h
@@ -61,10 +61,8 @@ struct imgmgr_upload_cmd {
 struct nmgr_hdr;
 struct os_mbuf;
 
-int imgr_boot_read(struct nmgr_hdr *nmr, struct os_mbuf *req,
-  uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp);
-int imgr_boot_write(struct nmgr_hdr *nmr, struct os_mbuf *req,
-  uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp);
+int imgr_boot_read(struct nmgr_jbuf *);
+int imgr_boot_write(struct nmgr_jbuf *);
 
 int imgr_read_ver(int area_id, struct image_version *ver);
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/452fadc2/libs/newtmgr/include/newtmgr/newtmgr.h
----------------------------------------------------------------------
diff --git a/libs/newtmgr/include/newtmgr/newtmgr.h b/libs/newtmgr/include/newtmgr/newtmgr.h
index 944f4fb..4137f03 100644
--- a/libs/newtmgr/include/newtmgr/newtmgr.h
+++ b/libs/newtmgr/include/newtmgr/newtmgr.h
@@ -64,22 +64,17 @@ struct nmgr_jbuf {
     /* json_buffer must be first element in the structure */
     struct json_buffer njb_buf;
     struct json_encoder njb_enc;
-    struct os_mbuf *njb_m;
+    struct os_mbuf *njb_in_m;
+    struct os_mbuf *njb_out_m;
     struct nmgr_hdr *njb_hdr;
     uint16_t njb_off;
     uint16_t njb_end;
 };
 int nmgr_jbuf_init(struct nmgr_jbuf *njb);
-int nmgr_jbuf_setibuf(struct nmgr_jbuf *njb, struct os_mbuf *m, uint16_t off, 
-        uint16_t len);
-int nmgr_jbuf_setobuf(struct nmgr_jbuf *njb, struct nmgr_hdr *hdr, 
-        struct os_mbuf *m);
-int nmgr_jbuf_setoerr(struct nmgr_jbuf *njb, struct nmgr_hdr *hdr, 
-        struct os_mbuf *m, int errcode);
+int nmgr_jbuf_setoerr(struct nmgr_jbuf *njb, int errcode);
 extern struct nmgr_jbuf nmgr_task_jbuf;
 
-typedef int (*nmgr_handler_func_t)(struct nmgr_hdr *nmr, struct os_mbuf *req, 
-        uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp);
+typedef int (*nmgr_handler_func_t)(struct nmgr_jbuf *);
 
 #define NMGR_HANDLER_FUNC(__name)                                           \
     int __name(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,  \

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/452fadc2/libs/newtmgr/src/newtmgr.c
----------------------------------------------------------------------
diff --git a/libs/newtmgr/src/newtmgr.c b/libs/newtmgr/src/newtmgr.c
index 8322d86..dee5b2c 100644
--- a/libs/newtmgr/src/newtmgr.c
+++ b/libs/newtmgr/src/newtmgr.c
@@ -35,10 +35,8 @@ struct os_task g_nmgr_task;
 STAILQ_HEAD(, nmgr_group) g_nmgr_group_list = 
     STAILQ_HEAD_INITIALIZER(g_nmgr_group_list);
 
-static int nmgr_def_echo(struct nmgr_hdr *, struct os_mbuf *, uint16_t,
-        struct nmgr_hdr *, struct os_mbuf *);
-static int nmgr_def_console_echo(struct nmgr_hdr *, struct os_mbuf *req,
-        uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp);
+static int nmgr_def_echo(struct nmgr_jbuf *);
+static int nmgr_def_console_echo(struct nmgr_jbuf *);
 
 static struct nmgr_group nmgr_def_group;
 /* ORDER MATTERS HERE.
@@ -54,8 +52,7 @@ static struct nmgr_handler nmgr_def_group_handlers[] = {
 struct nmgr_jbuf nmgr_task_jbuf;
 
 static int
-nmgr_def_echo(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
-        struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
+nmgr_def_echo(struct nmgr_jbuf *njb)
 {
     uint8_t echo_buf[128];
     struct json_attr_t attrs[] = {
@@ -66,26 +63,15 @@ nmgr_def_echo(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
     struct json_value jv;
     int rc;
 
-    rc = nmgr_jbuf_setibuf(&nmgr_task_jbuf, req, srcoff + sizeof(*nmr),
-            nmr->nh_len);
+    rc = json_read_object((struct json_buffer *) njb, attrs);
     if (rc != 0) {
         goto err;
     }
 
-    rc = json_read_object((struct json_buffer *) &nmgr_task_jbuf, attrs);
-    if (rc != 0) {
-        goto err;
-    }
-
-    rc = nmgr_jbuf_setobuf(&nmgr_task_jbuf, rsp_hdr, rsp);
-    if (rc != 0) {
-        goto err;
-    }
-
-    json_encode_object_start(&nmgr_task_jbuf.njb_enc);
+    json_encode_object_start(&njb->njb_enc);
     JSON_VALUE_STRINGN(&jv, (char *) echo_buf, strlen((char *) echo_buf));
-    json_encode_object_entry(&nmgr_task_jbuf.njb_enc, "r", &jv);
-    json_encode_object_finish(&nmgr_task_jbuf.njb_enc);
+    json_encode_object_entry(&njb->njb_enc, "r", &jv);
+    json_encode_object_finish(&njb->njb_enc);
 
     return (0);
 err:
@@ -93,8 +79,7 @@ err:
 }
 
 static int
-nmgr_def_console_echo(struct nmgr_hdr *nmr, struct os_mbuf *req,
-        uint16_t srcoff, struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
+nmgr_def_console_echo(struct nmgr_jbuf *njb)
 {
     int echo_on = 1;
     int rc;
@@ -110,10 +95,7 @@ nmgr_def_console_echo(struct nmgr_hdr *nmr, struct os_mbuf *req,
         }
     };
 
-    nmgr_jbuf_setibuf(&nmgr_task_jbuf, req, srcoff + sizeof(*nmr),
-      nmr->nh_len);
-
-    rc = json_read_object(&nmgr_task_jbuf.njb_buf, attrs);
+    rc = json_read_object(&njb->njb_buf, attrs);
     if (rc) {
         return OS_EINVAL;
     }
@@ -269,7 +251,7 @@ nmgr_jbuf_read_next(struct json_buffer *jb)
         return '\0';
     }
 
-    rc = os_mbuf_copydata(njb->njb_m, njb->njb_off, 1, &c);
+    rc = os_mbuf_copydata(njb->njb_in_m, njb->njb_off, 1, &c);
     if (rc == -1) {
         c = '\0';
     }
@@ -292,7 +274,7 @@ nmgr_jbuf_read_prev(struct json_buffer *jb)
     }
 
     --njb->njb_off;
-    rc = os_mbuf_copydata(njb->njb_m, njb->njb_off, 1, &c);
+    rc = os_mbuf_copydata(njb->njb_in_m, njb->njb_off, 1, &c);
     if (rc == -1) {
         c = '\0';
     }
@@ -313,7 +295,7 @@ nmgr_jbuf_readn(struct json_buffer *jb, char *buf, int size)
     left = njb->njb_end - njb->njb_off;
     read = size > left ? left : size;
 
-    rc = os_mbuf_copydata(njb->njb_m, njb->njb_off, read, buf);
+    rc = os_mbuf_copydata(njb->njb_in_m, njb->njb_off, read, buf);
     if (rc != 0) {
         goto err;
     }
@@ -331,7 +313,7 @@ nmgr_jbuf_write(void *arg, char *data, int len)
 
     njb = (struct nmgr_jbuf *) arg;
 
-    rc = nmgr_rsp_extend(njb->njb_hdr, njb->njb_m, data, len);
+    rc = nmgr_rsp_extend(njb->njb_hdr, njb->njb_out_m, data, len);
     if (rc != 0) {
         goto err;
     }
@@ -355,38 +337,31 @@ nmgr_jbuf_init(struct nmgr_jbuf *njb)
     return (0);
 }
 
-int 
+static int 
 nmgr_jbuf_setibuf(struct nmgr_jbuf *njb, struct os_mbuf *m, 
         uint16_t off, uint16_t len)
 {
     njb->njb_off = off;
     njb->njb_end = off + len;
-    njb->njb_m = m;
+    njb->njb_in_m = m;
 
     return (0);
 }
 
-int 
+static int 
 nmgr_jbuf_setobuf(struct nmgr_jbuf *njb, struct nmgr_hdr *hdr,
         struct os_mbuf *m)
 {
-    njb->njb_m = m;
+    njb->njb_out_m = m;
     njb->njb_hdr = hdr;
 
     return (0);
 }
 
 int 
-nmgr_jbuf_setoerr(struct nmgr_jbuf *njb, struct nmgr_hdr *hdr, 
-        struct os_mbuf *m, int errcode)
+nmgr_jbuf_setoerr(struct nmgr_jbuf *njb, int errcode)
 {   
     struct json_value jv;
-    int rc;
-
-    rc = nmgr_jbuf_setobuf(njb, hdr, m);
-    if (rc != 0) {
-        goto err;
-    }
 
     json_encode_object_start(&njb->njb_enc);
     JSON_VALUE_INT(&jv, errcode);
@@ -394,8 +369,6 @@ nmgr_jbuf_setoerr(struct nmgr_jbuf *njb, struct nmgr_hdr *hdr,
     json_encode_object_finish(&njb->njb_enc);
 
     return (0);
-err:
-    return (rc);
 }
 
 static int 
@@ -451,10 +424,23 @@ nmgr_handle_req(struct nmgr_transport *nt, struct os_mbuf *req)
         rsp_hdr->nh_group = hdr.nh_group;
         rsp_hdr->nh_id = hdr.nh_id;
 
+        /*
+         * Setup state for JSON encoding.
+         */
+        rc = nmgr_jbuf_setibuf(&nmgr_task_jbuf, req, off + sizeof(hdr),
+          hdr.nh_len);
+        if (rc) {
+            goto err;
+        }
+        rc = nmgr_jbuf_setobuf(&nmgr_task_jbuf, rsp_hdr, rsp);
+        if (rc) {
+            goto err;
+        }
+
         if (hdr.nh_op == NMGR_OP_READ) {
-            rc = handler->nh_read(&hdr, req, off, rsp_hdr, rsp);
+            rc = handler->nh_read(&nmgr_task_jbuf);
         } else if (hdr.nh_op == NMGR_OP_WRITE) {
-            rc = handler->nh_write(&hdr, req, off, rsp_hdr, rsp);
+            rc = handler->nh_write(&nmgr_task_jbuf);
         } else {
             rc = OS_EINVAL;
             goto err;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/452fadc2/sys/stats/src/stats_nmgr.c
----------------------------------------------------------------------
diff --git a/sys/stats/src/stats_nmgr.c b/sys/stats/src/stats_nmgr.c
index 75701b4..1d538f1 100644
--- a/sys/stats/src/stats_nmgr.c
+++ b/sys/stats/src/stats_nmgr.c
@@ -29,8 +29,7 @@
 /* Source code is only included if the newtmgr library is enabled.  Otherwise
  * this file is compiled out for code size.
  */
-static int stats_nmgr_read(struct nmgr_hdr *, struct os_mbuf *, uint16_t,
-        struct nmgr_hdr *, struct os_mbuf *);
+static int stats_nmgr_read(struct nmgr_jbuf *njb);
 
 static struct nmgr_group shell_nmgr_group;
 
@@ -76,8 +75,7 @@ err:
 }
 
 static int 
-stats_nmgr_read(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff, 
-        struct nmgr_hdr *rsp_hdr, struct os_mbuf *rsp)
+stats_nmgr_read(struct nmgr_jbuf *njb)
 {
     struct stats_hdr *hdr;
 #define STATS_NMGR_NAME_LEN (32)
@@ -90,14 +88,7 @@ stats_nmgr_read(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
     struct json_value jv;
     int rc;
 
-    rc = nmgr_jbuf_setibuf(&nmgr_task_jbuf, req, srcoff + sizeof(*nmr), 
-            nmr->nh_len);
-    if (rc != 0) {
-        rc = NMGR_ERR_EINVAL;
-        goto err;
-    }
-
-    rc = json_read_object((struct json_buffer *) &nmgr_task_jbuf, attrs);
+    rc = json_read_object((struct json_buffer *) njb, attrs);
     if (rc != 0) {
         rc = NMGR_ERR_EINVAL;
         goto err;
@@ -109,26 +100,20 @@ stats_nmgr_read(struct nmgr_hdr *nmr, struct os_mbuf *req, uint16_t srcoff,
         goto err;
     }
 
-    rc = nmgr_jbuf_setobuf(&nmgr_task_jbuf, rsp_hdr, rsp);
-    if (rc != 0) {
-        rc = NMGR_ERR_EUNKNOWN;
-        goto err;
-    }
-
-    json_encode_object_start(&nmgr_task_jbuf.njb_enc);
+    json_encode_object_start(&njb->njb_enc);
     JSON_VALUE_INT(&jv, NMGR_ERR_EOK);
-    json_encode_object_entry(&nmgr_task_jbuf.njb_enc, "r", &jv);
+    json_encode_object_entry(&njb->njb_enc, "r", &jv);
     JSON_VALUE_STRINGN(&jv, stats_name, strlen(stats_name));
-    json_encode_object_entry(&nmgr_task_jbuf.njb_enc, "n", &jv);
-    json_encode_object_key(&nmgr_task_jbuf.njb_enc, "f");
-    json_encode_object_start(&nmgr_task_jbuf.njb_enc);
+    json_encode_object_entry(&njb->njb_enc, "n", &jv);
+    json_encode_object_key(&njb->njb_enc, "f");
+    json_encode_object_start(&njb->njb_enc);
     stats_walk(hdr, stats_nmgr_walk_func, &nmgr_task_jbuf.njb_enc);
-    json_encode_object_finish(&nmgr_task_jbuf.njb_enc);
-    json_encode_object_finish(&nmgr_task_jbuf.njb_enc);
+    json_encode_object_finish(&njb->njb_enc);
+    json_encode_object_finish(&njb->njb_enc);
 
     return (0);
 err:
-    nmgr_jbuf_setoerr(&nmgr_task_jbuf, rsp_hdr, rsp, rc);
+    nmgr_jbuf_setoerr(njb, rc);
 
     return (0);
 }