http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7f299efb/mgmt/newtmgr/src/newtmgr.c ---------------------------------------------------------------------- diff --git a/mgmt/newtmgr/src/newtmgr.c b/mgmt/newtmgr/src/newtmgr.c index 6621b9b..ffecd4f 100644 --- a/mgmt/newtmgr/src/newtmgr.c +++ b/mgmt/newtmgr/src/newtmgr.c @@ -30,6 +30,10 @@ #include "newtmgr/newtmgr.h" #include "nmgr_os/nmgr_os.h" +#include <tinycbor/cbor.h> +#include <tinycbor/cbor_mbuf_writer.h> +#include <tinycbor/cbor_mbuf_reader.h> + os_stack_t newtmgr_stack[OS_STACK_ALIGN(MYNEWT_VAL(NEWTMGR_STACK_SIZE))]; static struct os_eventq nmgr_evq; @@ -37,17 +41,23 @@ struct os_eventq *g_mgmt_evq = &nmgr_evq; static struct os_task g_nmgr_task; /* - * JSON buffer for newtmgr + * cbor buffer for newtmgr */ -static struct nmgr_jbuf { - struct mgmt_jbuf n_b; - struct os_mbuf *n_in_m; +static struct nmgr_cbuf { + struct mgmt_cbuf n_b; + struct CborMbufWriter writer; + struct CborMbufReader reader; struct os_mbuf *n_out_m; + +#if 0 + struct os_mbuf *n_in_m; struct nmgr_hdr *n_hdr; uint16_t n_off; uint16_t n_end; -} nmgr_task_jbuf; +#endif +} nmgr_task_cbuf; +#if 0 static int nmgr_rsp_extend(struct nmgr_hdr *hdr, struct os_mbuf *rsp, void *data, uint16_t len) @@ -64,128 +74,15 @@ nmgr_rsp_extend(struct nmgr_hdr *hdr, struct os_mbuf *rsp, void *data, err: return (rc); } - -static char -nmgr_jbuf_read_next(struct json_buffer *jb) -{ - struct nmgr_jbuf *njb; - char c; - int rc; - - njb = (struct nmgr_jbuf *) jb; - - if (njb->n_off + 1 > njb->n_end) { - return '\0'; - } - - rc = os_mbuf_copydata(njb->n_in_m, njb->n_off, 1, &c); - if (rc == -1) { - c = '\0'; - } - ++njb->n_off; - - return (c); -} - -static char -nmgr_jbuf_read_prev(struct json_buffer *jb) -{ - struct nmgr_jbuf *njb; - char c; - int rc; - - njb = (struct nmgr_jbuf *) jb; - - if (njb->n_off == 0) { - return '\0'; - } - - --njb->n_off; - rc = os_mbuf_copydata(njb->n_in_m, njb->n_off, 1, &c); - if (rc == -1) { - c = '\0'; - } - - return (c); -} +#endif static int -nmgr_jbuf_readn(struct json_buffer *jb, char *buf, int size) +nmgr_cbuf_init(struct nmgr_cbuf *njb) { - struct nmgr_jbuf *njb; - int read; - int left; - int rc; - - njb = (struct nmgr_jbuf *) jb; - - left = njb->n_end - njb->n_off; - read = size > left ? left : size; - - rc = os_mbuf_copydata(njb->n_in_m, njb->n_off, read, buf); - if (rc != 0) { - goto err; - } - - return (read); -err: - return (rc); -} - -int -nmgr_jbuf_write(void *arg, char *data, int len) -{ - struct nmgr_jbuf *njb; - int rc; - - njb = (struct nmgr_jbuf *) arg; - - rc = nmgr_rsp_extend(njb->n_hdr, njb->n_out_m, data, len); - if (rc != 0) { - assert(0); - goto err; - } - - return (0); -err: - return (rc); -} - -static int -nmgr_jbuf_init(struct nmgr_jbuf *njb) -{ - struct mgmt_jbuf *mj; - memset(njb, 0, sizeof(*njb)); - - mj = &njb->n_b; - mj->mjb_buf.jb_read_next = nmgr_jbuf_read_next; - mj->mjb_buf.jb_read_prev = nmgr_jbuf_read_prev; - mj->mjb_buf.jb_readn = nmgr_jbuf_readn; - mj->mjb_enc.je_write = nmgr_jbuf_write; - mj->mjb_enc.je_arg = njb; - return (0); } -static void -nmgr_jbuf_setibuf(struct nmgr_jbuf *njb, struct os_mbuf *m, - uint16_t off, uint16_t len) -{ - njb->n_in_m = m; - njb->n_off = off; - njb->n_end = off + len; -} - -static void -nmgr_jbuf_setobuf(struct nmgr_jbuf *njb, struct nmgr_hdr *hdr, - struct os_mbuf *m) -{ - njb->n_b.mjb_enc.je_wr_commas = 0; - njb->n_out_m = m; - njb->n_hdr = hdr; -} - static struct nmgr_hdr* nmgr_init_rsp(struct os_mbuf *m, struct nmgr_hdr *src) { @@ -204,8 +101,10 @@ nmgr_init_rsp(struct os_mbuf *m, struct nmgr_hdr *src) hdr->nh_seq = src->nh_seq; hdr->nh_id = src->nh_id; - nmgr_jbuf_setobuf(&nmgr_task_jbuf, hdr, m); - + /* setup state for cbor encoding */ + cbor_mbuf_writer_init(&nmgr_task_cbuf.writer, m); + cbor_encoder_init(&nmgr_task_cbuf.n_b.encoder, &nmgr_task_cbuf.writer.enc, 0); + nmgr_task_cbuf.n_out_m = m; return hdr; } @@ -217,10 +116,12 @@ nmgr_send_err_rsp(struct nmgr_transport *nt, struct os_mbuf *m, if (!hdr) { return; } +#if 0 mgmt_jbuf_setoerr(&nmgr_task_jbuf.n_b, rc); +#endif hdr->nh_len = htons(hdr->nh_len); - hdr->nh_flags = NMGR_F_JSON_RSP_COMPLETE; - nt->nt_output(nt, nmgr_task_jbuf.n_out_m); + hdr->nh_flags = NMGR_F_CBOR_RSP_COMPLETE; + nt->nt_output(nt, nmgr_task_cbuf.n_out_m); } static int @@ -287,7 +188,7 @@ nmgr_rsp_fragment(struct nmgr_transport *nt, struct nmgr_hdr *rsp_hdr, do { if (len <= mtu) { - rsp_hdr->nh_flags |= NMGR_F_JSON_RSP_COMPLETE; + rsp_hdr->nh_flags |= NMGR_F_CBOR_RSP_COMPLETE; } else { len = mtu; } @@ -299,8 +200,8 @@ nmgr_rsp_fragment(struct nmgr_transport *nt, struct nmgr_hdr *rsp_hdr, len = rsp_hdr->nh_len - offset + sizeof(struct nmgr_hdr); - } while (!((rsp_hdr->nh_flags & NMGR_F_JSON_RSP_COMPLETE) == - NMGR_F_JSON_RSP_COMPLETE)); + } while (!((rsp_hdr->nh_flags & NMGR_F_CBOR_RSP_COMPLETE) == + NMGR_F_CBOR_RSP_COMPLETE)); return MGMT_ERR_EOK; err: @@ -361,20 +262,18 @@ nmgr_handle_req(struct nmgr_transport *nt, struct os_mbuf *req) goto err_norsp; } - /* - * Setup state for JSON encoding. - */ - nmgr_jbuf_setibuf(&nmgr_task_jbuf, req, off + sizeof(hdr), hdr.nh_len); + cbor_mbuf_reader_init(&nmgr_task_cbuf.reader, req, sizeof(hdr)); + cbor_parser_init(&nmgr_task_cbuf.reader.r, 0, &nmgr_task_cbuf.n_b.parser, &nmgr_task_cbuf.n_b.it); if (hdr.nh_op == NMGR_OP_READ) { if (handler->mh_read) { - rc = handler->mh_read(&nmgr_task_jbuf.n_b); + rc = handler->mh_read(&nmgr_task_cbuf.n_b); } else { rc = MGMT_ERR_ENOENT; } } else if (hdr.nh_op == NMGR_OP_WRITE) { if (handler->mh_write) { - rc = handler->mh_write(&nmgr_task_jbuf.n_b); + rc = handler->mh_write(&nmgr_task_cbuf.n_b); } else { rc = MGMT_ERR_ENOENT; } @@ -386,6 +285,7 @@ nmgr_handle_req(struct nmgr_transport *nt, struct os_mbuf *req) goto err; } + rsp_hdr->nh_len += cbor_encode_bytes_written(&nmgr_task_cbuf.n_b.encoder); off += sizeof(hdr) + OS_ALIGN(hdr.nh_len, 4); rc = nmgr_rsp_fragment(nt, rsp_hdr, rsp, req); if (rc) { @@ -431,7 +331,7 @@ nmgr_task(void *arg) struct os_callout_func *ocf; os_event_cb_func cb_func; - nmgr_jbuf_init(&nmgr_task_jbuf); + nmgr_cbuf_init(&nmgr_task_cbuf); while (1) { ev = os_eventq_get(&nmgr_evq);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7f299efb/sys/config/src/config_json_line.c ---------------------------------------------------------------------- diff --git a/sys/config/src/config_json_line.c b/sys/config/src/config_json_line.c index 219ca85..94d1290 100644 --- a/sys/config/src/config_json_line.c +++ b/sys/config/src/config_json_line.c @@ -23,22 +23,22 @@ #include "config/config.h" #include "config_priv.h" -#include "json/json.h" +#include "cborattr/cborattr.h" +#include "mgmt/mgmt.h" int -conf_json_line(struct json_buffer *jb, char *name, int nlen, char *value, - int vlen) +conf_cbor_line(struct mgmt_cbuf *cb, char *name, int nlen, char *value, int vlen) { - const struct json_attr_t val_attr[3] = { + const struct cbor_attr_t val_attr[3] = { [0] = { .attribute = "name", - .type = t_string, + .type = CborAttrTextStringType, .addr.string = name, .len = nlen }, [1] = { .attribute = "val", - .type = t_string, + .type = CborAttrTextStringType, .addr.string = value, .len = vlen }, @@ -48,7 +48,7 @@ conf_json_line(struct json_buffer *jb, char *name, int nlen, char *value, }; int rc; - rc = json_read_object(jb, val_attr); + rc = cbor_read_object(&cb->it, val_attr); if (rc) { return rc; } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7f299efb/sys/config/src/config_nmgr.c ---------------------------------------------------------------------- diff --git a/sys/config/src/config_nmgr.c b/sys/config/src/config_nmgr.c index 2cccbb6..562b951 100644 --- a/sys/config/src/config_nmgr.c +++ b/sys/config/src/config_nmgr.c @@ -24,13 +24,12 @@ #include <string.h> #include "mgmt/mgmt.h" -#include "json/json.h" - +#include "cborattr/cborattr.h" #include "config/config.h" #include "config_priv.h" -static int conf_nmgr_read(struct mgmt_jbuf *); -static int conf_nmgr_write(struct mgmt_jbuf *); +static int conf_nmgr_read(struct mgmt_cbuf *); +static int conf_nmgr_write(struct mgmt_cbuf *); static const struct mgmt_handler conf_nmgr_handlers[] = { [CONF_NMGR_OP] = { conf_nmgr_read, conf_nmgr_write} @@ -43,17 +42,17 @@ static struct mgmt_group conf_nmgr_group = { }; static int -conf_nmgr_read(struct mgmt_jbuf *njb) +conf_nmgr_read(struct mgmt_cbuf *cb) { int rc; char name_str[CONF_MAX_NAME_LEN]; char val_str[CONF_MAX_VAL_LEN]; char *val; - const struct json_attr_t attr[2] = { + const struct cbor_attr_t attr[2] = { [0] = { .attribute = "name", - .type = t_string, + .type = CborAttrTextStringType, .addr.string = name_str, .len = sizeof(name_str) }, @@ -61,9 +60,8 @@ conf_nmgr_read(struct mgmt_jbuf *njb) .attribute = NULL } }; - struct json_value jv; - rc = json_read_object(&njb->mjb_buf, attr); + rc = cbor_read_object(&cb->it, attr); if (rc) { return MGMT_ERR_EINVAL; } @@ -73,22 +71,26 @@ conf_nmgr_read(struct mgmt_jbuf *njb) return MGMT_ERR_EINVAL; } - json_encode_object_start(&njb->mjb_enc); - JSON_VALUE_STRING(&jv, val); - json_encode_object_entry(&njb->mjb_enc, "val", &jv); - json_encode_object_finish(&njb->mjb_enc); + { + CborError g_err = CborNoError; + CborEncoder rsp; + g_err |= cbor_encoder_create_map(&cb->encoder, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "val"); + g_err |= cbor_encode_text_stringz(&rsp, val); + g_err |= cbor_encoder_close_container(&cb->encoder, &rsp); + } return 0; } static int -conf_nmgr_write(struct mgmt_jbuf *njb) +conf_nmgr_write(struct mgmt_cbuf *cb) { int rc; char name_str[CONF_MAX_NAME_LEN]; char val_str[CONF_MAX_VAL_LEN]; - rc = conf_json_line(&njb->mjb_buf, name_str, sizeof(name_str), val_str, + rc = conf_cbor_line(cb, name_str, sizeof(name_str), val_str, sizeof(val_str)); if (rc) { return MGMT_ERR_EINVAL; http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7f299efb/sys/config/src/config_priv.h ---------------------------------------------------------------------- diff --git a/sys/config/src/config_priv.h b/sys/config/src/config_priv.h index 386e716..8a11ebb 100644 --- a/sys/config/src/config_priv.h +++ b/sys/config/src/config_priv.h @@ -27,9 +27,9 @@ extern "C" { int conf_cli_register(void); int conf_nmgr_register(void); -struct json_buffer; -int conf_json_line(struct json_buffer *jb, char *name, int nlen, char *value, - int vlen); +struct mgmt_cbuf; +int +conf_cbor_line(struct mgmt_cbuf *cb, char *name, int nlen, char *value, int vlen); int conf_line_parse(char *buf, char **namep, char **valp); int conf_line_make(char *dst, int dlen, const char *name, const char *val); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7f299efb/sys/log/src/log_nmgr.c ---------------------------------------------------------------------- diff --git a/sys/log/src/log_nmgr.c b/sys/log/src/log_nmgr.c index 1bcef46..ede0ff4 100644 --- a/sys/log/src/log_nmgr.c +++ b/sys/log/src/log_nmgr.c @@ -26,18 +26,20 @@ #if MYNEWT_VAL(LOG_NEWTMGR) #include "mgmt/mgmt.h" -#include "json/json.h" +#include "cborattr/cborattr.h" +#include "tinycbor/cbor_cnt_writer.h" #include "log/log.h" /* Source code is only included if the newtmgr library is enabled. Otherwise * this file is compiled out for code size. */ -static int log_nmgr_read(struct mgmt_jbuf *njb); -static int log_nmgr_clear(struct mgmt_jbuf *njb); -static int log_nmgr_module_list(struct mgmt_jbuf *njb); -static int log_nmgr_level_list(struct mgmt_jbuf *njb); -static int log_nmgr_logs_list(struct mgmt_jbuf *njb); + +static int log_nmgr_read(struct mgmt_cbuf *njb); +static int log_nmgr_clear(struct mgmt_cbuf *njb); +static int log_nmgr_module_list(struct mgmt_cbuf *njb); +static int log_nmgr_level_list(struct mgmt_cbuf *njb); +static int log_nmgr_logs_list(struct mgmt_cbuf *njb); static struct mgmt_group log_nmgr_group; @@ -53,7 +55,7 @@ static struct mgmt_handler log_nmgr_group_handlers[] = { }; struct encode_off { - struct json_encoder *eo_encoder; + CborEncoder *eo_encoder; int64_t eo_ts; uint8_t eo_index; uint32_t rsp_len; @@ -71,9 +73,11 @@ log_nmgr_encode_entry(struct log *log, void *arg, void *dptr, uint16_t len) struct log_entry_hdr ueh; char data[128]; int dlen; - struct json_value jv; int rc; int rsp_len; + CborError g_err = CborNoError; + CborEncoder *penc = encode_off->eo_encoder; + CborEncoder rsp; rc = log_read(log, dptr, &ueh, 0, sizeof(ueh)); if (rc != sizeof(ueh)) { @@ -98,55 +102,49 @@ log_nmgr_encode_entry(struct log *log, void *arg, void *dptr, uint16_t len) } data[rc] = 0; - rsp_len = encode_off->rsp_len; - /* Calculating entry len */ - rsp_len += strlen(data); - - /* Pre calculating MAX length of the json string */ - rsp_len += (sizeof(STR(INT64_MAX)) + sizeof("{,ts:") + - sizeof(STR(UINT8_MAX)) + sizeof(",level:") + - sizeof(STR(UINT32_MAX)) + sizeof(",index:") + - sizeof(STR(UINT16_MAX)) + sizeof(",module:}")); - - if (rsp_len > MGMT_MAX_MTU) { - rc = OS_ENOMEM; - goto err; - } - - json_encode_object_start(encode_off->eo_encoder); - - JSON_VALUE_STRINGN(&jv, data, rc); - rc = json_encode_object_entry(encode_off->eo_encoder, "msg", &jv); - if (rc) { - goto err; - } - - JSON_VALUE_INT(&jv, ueh.ue_ts); - rc = json_encode_object_entry(encode_off->eo_encoder, "ts", &jv); - if (rc) { - goto err; - } - - JSON_VALUE_UINT(&jv, ueh.ue_level); - rc = json_encode_object_entry(encode_off->eo_encoder, "level", &jv); - if (rc) { - goto err; - } - - JSON_VALUE_UINT(&jv, ueh.ue_index); - rc = json_encode_object_entry(encode_off->eo_encoder, "index", &jv); - if (rc) { - goto err; - } - - JSON_VALUE_UINT(&jv, ueh.ue_module); - rc = json_encode_object_entry(encode_off->eo_encoder, "module", &jv); - if (rc) { - goto err; + /*calculate whether this would fit */ + { + /* create a counting encoder for cbor */ + struct CborCntWriter cnt_writer; + CborEncoder cnt_encoder; + cbor_cnt_writer_init(&cnt_writer); + cbor_encoder_init(&cnt_encoder, &cnt_writer.enc, 0); + + /* NOTE This code should exactly match what is below */ + g_err |= cbor_encoder_create_map(&cnt_encoder, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "msg"); + g_err |= cbor_encode_text_stringz(&rsp, data); + g_err |= cbor_encode_text_stringz(&rsp, "ts"); + g_err |= cbor_encode_int(&rsp, ueh.ue_ts); + g_err |= cbor_encode_text_stringz(&rsp, "level"); + g_err |= cbor_encode_uint(&rsp, ueh.ue_level); + g_err |= cbor_encode_text_stringz(&rsp, "index"); + g_err |= cbor_encode_uint(&rsp, ueh.ue_index); + g_err |= cbor_encode_text_stringz(&rsp, "module"); + g_err |= cbor_encode_uint(&rsp, ueh.ue_module); + g_err |= cbor_encoder_close_container(&cnt_encoder, &rsp); + rsp_len = encode_off->rsp_len; + rsp_len += cbor_encode_bytes_written(&cnt_encoder); + + if (rsp_len > MGMT_MAX_MTU) { + rc = OS_ENOMEM; + goto err; + } + encode_off->rsp_len = rsp_len; } - json_encode_object_finish(encode_off->eo_encoder); - encode_off->rsp_len += rsp_len; + g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "msg"); + g_err |= cbor_encode_text_stringz(&rsp, data); + g_err |= cbor_encode_text_stringz(&rsp, "ts"); + g_err |= cbor_encode_int(&rsp, ueh.ue_ts); + g_err |= cbor_encode_text_stringz(&rsp, "level"); + g_err |= cbor_encode_uint(&rsp, ueh.ue_level); + g_err |= cbor_encode_text_stringz(&rsp, "index"); + g_err |= cbor_encode_uint(&rsp, ueh.ue_index); + g_err |= cbor_encode_text_stringz(&rsp, "module"); + g_err |= cbor_encode_uint(&rsp, ueh.ue_module); + g_err |= cbor_encoder_close_container(penc, &rsp); return (0); err: @@ -159,36 +157,46 @@ err: * @return 0 on success; non-zero on failure */ static int -log_encode_entries(struct log *log, struct json_encoder *encoder, +log_encode_entries(struct log *log, CborEncoder *cb, int64_t ts, uint32_t index) { int rc; struct encode_off encode_off; - int rsp_len; + int rsp_len = 0; + CborEncoder entries; + CborError g_err = CborNoError; memset(&encode_off, 0, sizeof(encode_off)); - /* Already encoded json string */ - rsp_len = strlen(encoder->je_encode_buf); - /* Pre calculating json length */ - rsp_len += (sizeof("entries") + 3); - rsp_len += encode_off.rsp_len; - - if (rsp_len > MGMT_MAX_MTU) { - rc = OS_ENOMEM; - goto err; + + { + /* this code counts how long the message would be if we encoded + * this outer structure using cbor. */ + struct CborCntWriter cnt_writer; + CborEncoder cnt_encoder; + cbor_cnt_writer_init(&cnt_writer); + cbor_encoder_init(&cnt_encoder, &cnt_writer.enc, 0); + g_err |= cbor_encode_text_stringz(&cnt_encoder, "entries"); + g_err |= cbor_encoder_create_array(&cnt_encoder, &entries, CborIndefiniteLength); + g_err |= cbor_encoder_close_container(&cnt_encoder, &entries); + rsp_len = cbor_encode_bytes_written(cb) + + cbor_encode_bytes_written(&cnt_encoder); + if (rsp_len > MGMT_MAX_MTU) { + rc = OS_ENOMEM; + goto err; + } } - json_encode_array_name(encoder, "entries"); - json_encode_array_start(encoder); + g_err |= cbor_encode_text_stringz(cb, "entries"); + g_err |= cbor_encoder_create_array(cb, &entries, CborIndefiniteLength); - encode_off.eo_encoder = encoder; + encode_off.eo_encoder = &entries; encode_off.eo_index = index; encode_off.eo_ts = ts; - encode_off.rsp_len = rsp_len; rc = log_walk(log, log_nmgr_encode_entry, &encode_off); - json_encode_array_finish(encoder); + + g_err |= cbor_encoder_close_container(cb, &entries); err: return rc; @@ -201,56 +209,58 @@ err: * @return 0 on success; non-zero on failure */ static int -log_encode(struct log *log, struct json_encoder *encoder, - struct json_value *jv, int64_t ts, uint32_t index) +log_encode(struct log *log, CborEncoder *cb, + int64_t ts, uint32_t index) { int rc; + CborEncoder logs; + CborError g_err = CborNoError; - json_encode_object_start(encoder); - JSON_VALUE_STRING(jv, log->l_name); - json_encode_object_entry(encoder, "name", jv); - - JSON_VALUE_UINT(jv, log->l_log->log_type); - json_encode_object_entry(encoder, "type", jv); + g_err |= cbor_encoder_create_map(cb, &logs, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&logs, "name"); + g_err |= cbor_encode_text_stringz(&logs, log->l_name); - rc = log_encode_entries(log, encoder, ts, index); - json_encode_object_finish(encoder); + g_err |= cbor_encode_text_stringz(&logs, "type"); + g_err |= cbor_encode_uint(&logs, log->l_log->log_type); + rc = log_encode_entries(log, &logs, ts, index); + g_err |= cbor_encoder_close_container(cb, &logs); return rc; } /** * Newtmgr Log read handler - * @param nmgr json buffer + * @param cbor buffer * @return 0 on success; non-zero on failure */ static int -log_nmgr_read(struct mgmt_jbuf *njb) +log_nmgr_read(struct mgmt_cbuf *cb) { struct log *log; int rc; - struct json_value jv; - struct json_encoder *encoder; char name[LOG_NAME_MAX_LEN] = {0}; int name_len; int64_t ts; uint64_t index; + CborError g_err = CborNoError; + CborEncoder *penc = &cb->encoder; + CborEncoder rsp, logs; - const struct json_attr_t attr[4] = { + const struct cbor_attr_t attr[4] = { [0] = { .attribute = "log_name", - .type = t_string, + .type = CborAttrTextStringType, .addr.string = name, .len = sizeof(name) }, [1] = { .attribute = "ts", - .type = t_integer, + .type = CborAttrIntegerType, .addr.integer = &ts }, [2] = { .attribute = "index", - .type = t_uinteger, + .type = CborAttrUnsignedIntegerType, .addr.uinteger = &index }, [3] = { @@ -258,16 +268,16 @@ log_nmgr_read(struct mgmt_jbuf *njb) } }; - rc = json_read_object(&njb->mjb_buf, attr); + rc = cbor_read_object(&cb->it, attr); if (rc) { return rc; } - encoder = (struct json_encoder *) &njb->mjb_enc; - json_encode_object_start(encoder); - json_encode_array_name(encoder, "logs"); - json_encode_array_start(encoder); + g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "logs"); + + g_err |= cbor_encoder_create_array(&rsp, &logs, CborIndefiniteLength); name_len = strlen(name); log = NULL; @@ -286,7 +296,7 @@ log_nmgr_read(struct mgmt_jbuf *njb) continue; } - rc = log_encode(log, encoder, &jv, ts, index); + rc = log_encode(log, &logs, ts, index); if (rc) { goto err; } @@ -304,10 +314,11 @@ log_nmgr_read(struct mgmt_jbuf *njb) } err: - json_encode_array_finish(encoder); - JSON_VALUE_INT(&jv, rc); - json_encode_object_entry(encoder, "rc", &jv); - json_encode_object_finish(encoder); + g_err |= cbor_encoder_close_container(&rsp, &logs); + g_err |= cbor_encode_text_stringz(&rsp, "rc"); + g_err |= cbor_encode_int(&rsp, rc); + g_err |= cbor_encoder_close_container(penc, &rsp); + rc = 0; return (rc); } @@ -318,20 +329,20 @@ err: * @return 0 on success; non-zero on failure */ static int -log_nmgr_module_list(struct mgmt_jbuf *njb) +log_nmgr_module_list(struct mgmt_cbuf *cb) { - struct json_value jv; - struct json_encoder *encoder; int module; char *str; + CborError g_err = CborNoError; + CborEncoder *penc = &cb->encoder; + CborEncoder rsp, modules; - encoder = (struct json_encoder *) &njb->mjb_enc; + g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "rc"); + g_err |= cbor_encode_int(&rsp, MGMT_ERR_EOK); - json_encode_object_start(encoder); - JSON_VALUE_INT(&jv, MGMT_ERR_EOK); - json_encode_object_entry(encoder, "rc", &jv); - json_encode_object_key(encoder, "module_map"); - json_encode_object_start(encoder); + g_err |= cbor_encode_text_stringz(&rsp, "module_map"); + g_err |= cbor_encoder_create_map(&rsp, &modules, CborIndefiniteLength); module = LOG_MODULE_DEFAULT; while (module < LOG_MODULE_MAX) { @@ -341,15 +352,14 @@ log_nmgr_module_list(struct mgmt_jbuf *njb) continue; } - JSON_VALUE_UINT(&jv, module); - json_encode_object_entry(encoder, str, &jv); - + g_err |= cbor_encode_text_stringz(&modules, str); + g_err |= cbor_encode_uint(&modules, module); module++; } + g_err |= cbor_encoder_close_container(&rsp, &modules); + g_err |= cbor_encoder_close_container(penc, &rsp); - json_encode_object_finish(encoder); - json_encode_object_finish(encoder); return (0); } @@ -360,19 +370,19 @@ log_nmgr_module_list(struct mgmt_jbuf *njb) * @return 0 on success; non-zero on failure */ static int -log_nmgr_logs_list(struct mgmt_jbuf *njb) +log_nmgr_logs_list(struct mgmt_cbuf *cb) { - struct json_value jv; - struct json_encoder *encoder; + CborError g_err = CborNoError; + CborEncoder *penc = &cb->encoder; + CborEncoder rsp, log_list; struct log *log; - encoder = (struct json_encoder *) &njb->mjb_enc; + g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "rc"); + g_err |= cbor_encode_int(&rsp, MGMT_ERR_EOK); - json_encode_object_start(encoder); - JSON_VALUE_INT(&jv, MGMT_ERR_EOK); - json_encode_object_entry(encoder, "rc", &jv); - json_encode_array_name(encoder, "log_list"); - json_encode_array_start(encoder); + g_err |= cbor_encode_text_stringz(&rsp, "log_list"); + g_err |= cbor_encoder_create_array(&rsp, &log_list, CborIndefiniteLength); log = NULL; while (1) { @@ -385,12 +395,11 @@ log_nmgr_logs_list(struct mgmt_jbuf *njb) continue; } - JSON_VALUE_STRING(&jv, log->l_name); - json_encode_array_value(encoder, &jv); + g_err |= cbor_encode_text_stringz(&log_list, log->l_name); } - json_encode_array_finish(encoder); - json_encode_object_finish(encoder); + g_err |= cbor_encoder_close_container(&rsp, &log_list); + g_err |= cbor_encoder_close_container(penc, &rsp); return (0); } @@ -401,20 +410,20 @@ log_nmgr_logs_list(struct mgmt_jbuf *njb) * @return 0 on success; non-zero on failure */ static int -log_nmgr_level_list(struct mgmt_jbuf *njb) +log_nmgr_level_list(struct mgmt_cbuf *cb) { - struct json_value jv; - struct json_encoder *encoder; + CborError g_err = CborNoError; + CborEncoder *penc = &cb->encoder; + CborEncoder rsp, level_map; int level; char *str; - encoder = (struct json_encoder *) &njb->mjb_enc; + g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "rc"); + g_err |= cbor_encode_int(&rsp, MGMT_ERR_EOK); - json_encode_object_start(encoder); - JSON_VALUE_INT(&jv, MGMT_ERR_EOK); - json_encode_object_entry(encoder, "rc", &jv); - json_encode_object_key(encoder, "level_map"); - json_encode_object_start(encoder); + g_err |= cbor_encode_text_stringz(&rsp, "level_map"); + g_err |= cbor_encoder_create_map(&rsp, &level_map, CborIndefiniteLength); level = LOG_LEVEL_DEBUG; while (level < LOG_LEVEL_MAX) { @@ -424,14 +433,13 @@ log_nmgr_level_list(struct mgmt_jbuf *njb) continue; } - JSON_VALUE_UINT(&jv, level); - json_encode_object_entry(encoder, str, &jv); - + g_err |= cbor_encode_text_stringz(&level_map, str); + g_err |= cbor_encode_uint(&level_map, level); level++; } - json_encode_object_finish(encoder); - json_encode_object_finish(encoder); + g_err |= cbor_encoder_close_container(&rsp, &level_map); + g_err |= cbor_encoder_close_container(penc, &rsp); return (0); } @@ -442,11 +450,13 @@ log_nmgr_level_list(struct mgmt_jbuf *njb) * @return 0 on success; non-zero on failure */ static int -log_nmgr_clear(struct mgmt_jbuf *njb) +log_nmgr_clear(struct mgmt_cbuf *cb) { + CborError g_err = CborNoError; + CborEncoder *penc = &cb->encoder; + CborEncoder rsp; struct log *log; int rc; - struct json_encoder *encoder; log = NULL; while (1) { @@ -464,15 +474,12 @@ log_nmgr_clear(struct mgmt_jbuf *njb) goto err; } } - - encoder = (struct json_encoder *) &njb->mjb_enc; - - json_encode_object_start(encoder); - json_encode_object_finish(encoder); + g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength); + g_err |= cbor_encoder_close_container(penc, &rsp); return 0; err: - mgmt_jbuf_setoerr(njb, rc); + mgmt_cbuf_setoerr(cb, rc); return (rc); } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7f299efb/sys/stats/src/stats_nmgr.c ---------------------------------------------------------------------- diff --git a/sys/stats/src/stats_nmgr.c b/sys/stats/src/stats_nmgr.c index 0b109f3..f5170ff 100644 --- a/sys/stats/src/stats_nmgr.c +++ b/sys/stats/src/stats_nmgr.c @@ -26,14 +26,14 @@ #include "os/os.h" #include "mgmt/mgmt.h" -#include "json/json.h" +#include "cborattr/cborattr.h" #include "stats/stats.h" /* 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 mgmt_jbuf *njb); -static int stats_nmgr_list(struct mgmt_jbuf *njb); +static int stats_nmgr_read(struct mgmt_cbuf *cb); +static int stats_nmgr_list(struct mgmt_cbuf *cb); static struct mgmt_group shell_nmgr_group; @@ -52,109 +52,106 @@ static int stats_nmgr_walk_func(struct stats_hdr *hdr, void *arg, char *sname, uint16_t stat_off) { - struct json_encoder *encoder; - struct json_value jv; void *stat_val; - int rc; + CborEncoder *penc = (CborEncoder *) arg; + CborError g_err = CborNoError; stat_val = (uint8_t *)hdr + stat_off; - encoder = (struct json_encoder *) arg; + g_err |= cbor_encode_text_stringz(penc, sname); switch (hdr->s_size) { case sizeof(uint16_t): - JSON_VALUE_UINT(&jv, *(uint16_t *) stat_val); + g_err |= cbor_encode_uint(penc, *(uint16_t *) stat_val); break; case sizeof(uint32_t): - JSON_VALUE_UINT(&jv, *(uint32_t *) stat_val); + g_err |= cbor_encode_uint(penc, *(uint32_t *) stat_val); break; case sizeof(uint64_t): - JSON_VALUE_UINT(&jv, *(uint64_t *) stat_val); + g_err |= cbor_encode_uint(penc, *(uint64_t *) stat_val); break; } - rc = json_encode_object_entry(encoder, sname, &jv); - if (rc != 0) { - goto err; - } - - return (0); -err: - return (rc); + return (g_err); } static int stats_nmgr_encode_name(struct stats_hdr *hdr, void *arg) { - struct json_encoder *encoder; - struct json_value jv; - - encoder = (struct json_encoder *)arg; - JSON_VALUE_STRING(&jv, hdr->s_name); - json_encode_array_value(encoder, &jv); - + CborEncoder *penc = (CborEncoder *) arg; + CborError g_err = CborNoError; + g_err |= cbor_encode_text_stringz(penc, hdr->s_name); return (0); } static int -stats_nmgr_read(struct mgmt_jbuf *njb) +stats_nmgr_read(struct mgmt_cbuf *cb) { struct stats_hdr *hdr; #define STATS_NMGR_NAME_LEN (32) char stats_name[STATS_NMGR_NAME_LEN]; - struct json_attr_t attrs[] = { - { "name", t_string, .addr.string = &stats_name[0], + struct cbor_attr_t attrs[] = { + { "name", CborAttrTextStringType, .addr.string = &stats_name[0], .len = sizeof(stats_name) }, { NULL }, }; - struct json_value jv; - int rc; + CborError g_err = CborNoError; + CborEncoder *penc = &cb->encoder; + CborEncoder rsp, stats; - rc = json_read_object((struct json_buffer *) njb, attrs); - if (rc != 0) { - rc = MGMT_ERR_EINVAL; + g_err = cbor_read_object(&cb->it, attrs); + if (g_err != 0) { + g_err = MGMT_ERR_EINVAL; goto err; } hdr = stats_group_find(stats_name); if (!hdr) { - rc = MGMT_ERR_EINVAL; + g_err = MGMT_ERR_EINVAL; goto err; } - json_encode_object_start(&njb->mjb_enc); - JSON_VALUE_INT(&jv, MGMT_ERR_EOK); - json_encode_object_entry(&njb->mjb_enc, "rc", &jv); - JSON_VALUE_STRINGN(&jv, stats_name, strlen(stats_name)); - json_encode_object_entry(&njb->mjb_enc, "name", &jv); - JSON_VALUE_STRINGN(&jv, "sys", sizeof("sys")-1); - json_encode_object_entry(&njb->mjb_enc, "group", &jv); - json_encode_object_key(&njb->mjb_enc, "fields"); - json_encode_object_start(&njb->mjb_enc); - stats_walk(hdr, stats_nmgr_walk_func, &njb->mjb_enc); - json_encode_object_finish(&njb->mjb_enc); - json_encode_object_finish(&njb->mjb_enc); + g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "rc"); + g_err |= cbor_encode_int(&rsp, MGMT_ERR_EOK); + + g_err |= cbor_encode_text_stringz(&rsp, "name"); + g_err |= cbor_encode_text_stringz(&rsp, stats_name); + + g_err |= cbor_encode_text_stringz(&rsp, "group"); + g_err |= cbor_encode_text_string(&rsp, "sys", sizeof("sys")-1); + + g_err |= cbor_encode_text_stringz(&rsp, "fields"); + + g_err |= cbor_encoder_create_map(&rsp, &stats, CborIndefiniteLength); + + stats_walk(hdr, stats_nmgr_walk_func, &stats); + + g_err |= cbor_encoder_close_container(&rsp, &stats); + g_err |= cbor_encoder_close_container(penc, &rsp); return (0); err: - mgmt_jbuf_setoerr(njb, rc); + mgmt_cbuf_setoerr(cb, g_err); return (0); } static int -stats_nmgr_list(struct mgmt_jbuf *njb) +stats_nmgr_list(struct mgmt_cbuf *cb) { - struct json_value jv; - - json_encode_object_start(&njb->mjb_enc); - JSON_VALUE_INT(&jv, MGMT_ERR_EOK); - json_encode_object_entry(&njb->mjb_enc, "rc", &jv); - json_encode_array_name(&njb->mjb_enc, "stat_list"); - json_encode_array_start(&njb->mjb_enc); - stats_group_walk(stats_nmgr_encode_name, &njb->mjb_enc); - json_encode_array_finish(&njb->mjb_enc); - json_encode_object_finish(&njb->mjb_enc); + CborError g_err = CborNoError; + CborEncoder *penc = &cb->encoder; + CborEncoder rsp, stats; + + g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength); + g_err |= cbor_encode_text_stringz(&rsp, "rc"); + g_err |= cbor_encode_int(&rsp, MGMT_ERR_EOK); + g_err |= cbor_encode_text_stringz(&rsp, "stat_list"); + g_err |= cbor_encoder_create_array(&rsp, &stats, CborIndefiniteLength); + stats_group_walk(stats_nmgr_encode_name, &stats); + g_err |= cbor_encoder_close_container(&rsp, &stats); + g_err |= cbor_encoder_close_container(penc, &rsp); return (0); } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7f299efb/test/crash_test/src/crash_nmgr.c ---------------------------------------------------------------------- diff --git a/test/crash_test/src/crash_nmgr.c b/test/crash_test/src/crash_nmgr.c index a388248..78aae20 100644 --- a/test/crash_test/src/crash_nmgr.c +++ b/test/crash_test/src/crash_nmgr.c @@ -24,13 +24,13 @@ #include <string.h> #include "mgmt/mgmt.h" -#include "json/json.h" +#include "cborattr/cborattr.h" #include "console/console.h" #include "crash_test/crash_test.h" #include "crash_test_priv.h" -static int crash_test_nmgr_write(struct mgmt_jbuf *); +static int crash_test_nmgr_write(struct mgmt_cbuf *); static const struct mgmt_handler crash_test_nmgr_handler[] = { [0] = { crash_test_nmgr_write, crash_test_nmgr_write } @@ -43,13 +43,13 @@ struct mgmt_group crash_test_nmgr_group = { }; static int -crash_test_nmgr_write(struct mgmt_jbuf *njb) +crash_test_nmgr_write(struct mgmt_cbuf *cb) { char tmp_str[64]; - const struct json_attr_t attr[2] = { + const struct cbor_attr_t attr[2] = { [0] = { .attribute = "t", - .type = t_string, + .type = CborAttrTextStringType, .addr.string = tmp_str, .len = sizeof(tmp_str) }, @@ -59,7 +59,7 @@ crash_test_nmgr_write(struct mgmt_jbuf *njb) }; int rc; - rc = json_read_object(&njb->mjb_buf, attr); + rc = cbor_read_object(&cb->it, attr); if (rc) { rc = MGMT_ERR_EINVAL; } else { @@ -68,7 +68,7 @@ crash_test_nmgr_write(struct mgmt_jbuf *njb) rc = MGMT_ERR_EINVAL; } } - mgmt_jbuf_setoerr(njb, rc); + mgmt_cbuf_setoerr(cb, rc); return 0; }