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