Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop 566a80030 -> 53a2ce067


refactor oicmgr to use cbor encoding without encapsulation


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/53a2ce06
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/53a2ce06
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/53a2ce06

Branch: refs/heads/develop
Commit: 53a2ce067cd2ed5e40cc7ccfe580f3c2d0306236
Parents: 566a800
Author: Paul Dietrich <paulfdietr...@yahoo.com>
Authored: Thu Oct 13 15:42:04 2016 -0700
Committer: Paul Dietrich <paulfdietr...@yahoo.com>
Committed: Thu Oct 13 15:42:27 2016 -0700

----------------------------------------------------------------------
 .../tinycbor/include/tinycbor/cbor_cnt_writer.h |   4 +-
 mgmt/imgmgr/src/imgmgr_priv.h                   |   1 -
 mgmt/newtmgr/src/newtmgr.c                      |  30 +--
 mgmt/oicmgr/src/oicmgr.c                        | 189 +++++--------------
 net/oic/src/api/oc_rep.c                        |   2 +-
 5 files changed, 46 insertions(+), 180 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/53a2ce06/encoding/tinycbor/include/tinycbor/cbor_cnt_writer.h
----------------------------------------------------------------------
diff --git a/encoding/tinycbor/include/tinycbor/cbor_cnt_writer.h 
b/encoding/tinycbor/include/tinycbor/cbor_cnt_writer.h
index deb8f89..9c84eb4 100644
--- a/encoding/tinycbor/include/tinycbor/cbor_cnt_writer.h
+++ b/encoding/tinycbor/include/tinycbor/cbor_cnt_writer.h
@@ -37,14 +37,14 @@ struct CborCntWriter {
     struct cbor_encoder_writer enc;
 };
 
-inline int
+static inline int
 cbor_cnt_writer(struct cbor_encoder_writer *arg, const char *data, int len) {
     struct CborCntWriter *cb = (struct CborCntWriter *) arg;
     cb->enc.bytes_written += len;
     return CborNoError;
 }
 
-inline void
+static inline void
 cbor_cnt_writer_init(struct CborCntWriter *cb) {
     cb->enc.bytes_written = 0;
     cb->enc.write = &cbor_cnt_writer;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/53a2ce06/mgmt/imgmgr/src/imgmgr_priv.h
----------------------------------------------------------------------
diff --git a/mgmt/imgmgr/src/imgmgr_priv.h b/mgmt/imgmgr/src/imgmgr_priv.h
index 1c31ad5..d7f39ff 100644
--- a/mgmt/imgmgr/src/imgmgr_priv.h
+++ b/mgmt/imgmgr/src/imgmgr_priv.h
@@ -83,7 +83,6 @@ struct imgmgr_upload_cmd {
  * }
  */
 
-struct mgmt_jbuf;
 struct nmgr_hdr;
 struct os_mbuf;
 struct fs_file;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/53a2ce06/mgmt/newtmgr/src/newtmgr.c
----------------------------------------------------------------------
diff --git a/mgmt/newtmgr/src/newtmgr.c b/mgmt/newtmgr/src/newtmgr.c
index ffecd4f..c248c77 100644
--- a/mgmt/newtmgr/src/newtmgr.c
+++ b/mgmt/newtmgr/src/newtmgr.c
@@ -48,34 +48,8 @@ static struct nmgr_cbuf {
     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;
-#endif
 } nmgr_task_cbuf;
 
-#if 0
-static int
-nmgr_rsp_extend(struct nmgr_hdr *hdr, struct os_mbuf *rsp, void *data,
-        uint16_t len)
-{
-    int rc;
-
-    rc = os_mbuf_append(rsp, data, len);
-    if (rc != 0) {
-        goto err;
-    }
-    hdr->nh_len += len;
-
-    return (0);
-err:
-    return (rc);
-}
-#endif
-
 static int
 nmgr_cbuf_init(struct nmgr_cbuf *njb)
 {
@@ -116,9 +90,7 @@ 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
+    mgmt_cbuf_setoerr(&nmgr_task_cbuf.n_b, rc);
     hdr->nh_len = htons(hdr->nh_len);
     hdr->nh_flags = NMGR_F_CBOR_RSP_COMPLETE;
     nt->nt_output(nt, nmgr_task_cbuf.n_out_m);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/53a2ce06/mgmt/oicmgr/src/oicmgr.c
----------------------------------------------------------------------
diff --git a/mgmt/oicmgr/src/oicmgr.c b/mgmt/oicmgr/src/oicmgr.c
index 4fde423..8d10ce1 100644
--- a/mgmt/oicmgr/src/oicmgr.c
+++ b/mgmt/oicmgr/src/oicmgr.c
@@ -29,20 +29,19 @@
 #include <mgmt/mgmt.h>
 #include <nmgr_os/nmgr_os.h>
 
+#include <cborattr/cborattr.h>
+#include <tinycbor/cbor.h>
+#include <tinycbor/cbor_buf_writer.h>
+#include <tinycbor/cbor_buf_reader.h>
 #include <oic/oc_api.h>
 
 #define OMGR_OC_EVENT  (OS_EVENT_T_PERUSER)
 #define OMGR_OC_TIMER  (OS_EVENT_T_PERUSER + 1)
 #define OICMGR_STACK_SZ        OS_STACK_ALIGN(MYNEWT_VAL(OICMGR_STACK_SIZE))
 
-struct omgr_jbuf {
-    struct mgmt_jbuf ob_mj;
-    char *ob_in;
-    uint16_t ob_in_off;
-    uint16_t ob_in_end;
-    char *ob_out;
-    uint16_t ob_out_off;
-    uint16_t ob_out_end;
+struct omgr_cbuf {
+    struct mgmt_cbuf ob_mj;
+    struct cbor_buf_reader ob_reader;
 };
 
 struct omgr_state {
@@ -50,8 +49,7 @@ struct omgr_state {
     struct os_event os_oc_event;
     struct os_callout os_oc_timer;
     struct os_task os_task;
-    struct omgr_jbuf os_jbuf;          /* JSON buffer for NMGR task */
-    char os_rsp[MGMT_MAX_MTU];
+    struct omgr_cbuf os_cbuf;          /* CBOR buffer for NMGR task */
 };
 
 static struct omgr_state omgr_state = {
@@ -66,113 +64,6 @@ static os_stack_t oicmgr_stack[OICMGR_STACK_SZ];
 static void omgr_oic_get(oc_request_t *request, oc_interface_mask_t interface);
 static void omgr_oic_put(oc_request_t *request, oc_interface_mask_t interface);
 
-static char
-omgr_jbuf_read_next(struct json_buffer *jb)
-{
-    struct omgr_jbuf *njb;
-    char c;
-
-    njb = (struct omgr_jbuf *) jb;
-
-    if (njb->ob_in_off + 1 > njb->ob_in_end) {
-        return '\0';
-    }
-
-    c = njb->ob_in[njb->ob_in_off];
-    ++njb->ob_in_off;
-
-    return (c);
-}
-
-static char
-omgr_jbuf_read_prev(struct json_buffer *jb)
-{
-    struct omgr_jbuf *njb;
-    char c;
-
-    njb = (struct omgr_jbuf *) jb;
-
-    if (njb->ob_in_off == 0) {
-        return '\0';
-    }
-
-    --njb->ob_in_off;
-    c = njb->ob_in[njb->ob_in_off];
-
-    return (c);
-}
-
-static int
-omgr_jbuf_readn(struct json_buffer *jb, char *buf, int size)
-{
-    struct omgr_jbuf *njb;
-    int read;
-    int left;
-
-    njb = (struct omgr_jbuf *)jb;
-
-    left = njb->ob_in_end - njb->ob_in_off;
-    read = size > left ? left : size;
-
-    memcpy(buf, njb->ob_in + njb->ob_in_off, read);
-
-    return (read);
-}
-
-static int
-omgr_jbuf_write(void *arg, char *data, int len)
-{
-    struct omgr_jbuf *njb;
-    int rc;
-
-    njb = (struct omgr_jbuf *)arg;
-
-    if (njb->ob_out_off + len >= njb->ob_out_end) {
-        rc = -1;
-        goto err;
-    }
-    memcpy(njb->ob_out + njb->ob_out_off, data, len);
-    njb->ob_out_off += len;
-    njb->ob_out[njb->ob_out_off] = '\0';
-
-    return (0);
-err:
-    return (rc);
-}
-
-static void
-omgr_jbuf_init(struct omgr_jbuf *ob)
-{
-    struct mgmt_jbuf *mjb;
-
-    memset(ob, 0, sizeof(*ob));
-
-    mjb = &ob->ob_mj;
-    mjb->mjb_buf.jb_read_next = omgr_jbuf_read_next;
-    mjb->mjb_buf.jb_read_prev = omgr_jbuf_read_prev;
-    mjb->mjb_buf.jb_readn = omgr_jbuf_readn;
-    mjb->mjb_enc.je_write = omgr_jbuf_write;
-    mjb->mjb_enc.je_arg = ob;
-}
-
-static void
-omgr_jbuf_setibuf(struct omgr_jbuf *ob, char *ptr, uint16_t len)
-{
-    ob->ob_in_off = 0;
-    ob->ob_in_end = len;
-    ob->ob_in = ptr;
-}
-
-static void
-omgr_jbuf_setobuf(struct omgr_jbuf *ob, char *ptr, uint16_t maxlen)
-{
-    ob->ob_out = ptr;
-    ob->ob_out_off = 0;
-    ob->ob_out_end = maxlen;
-    ob->ob_out[0] = '\0';
-    ob->ob_mj.mjb_enc.je_wr_commas = 0;
-}
-
 static const struct mgmt_handler *
 omgr_oic_find_handler(const char *q, int qlen)
 {
@@ -211,6 +102,7 @@ omgr_oic_op(oc_request_t *req, oc_interface_mask_t mask, 
int isset)
     const struct mgmt_handler *handler;
     oc_rep_t *data;
     int rc;
+    extern CborEncoder g_encoder;
 
     if (!req->query_len) {
         goto bad_req;
@@ -221,50 +113,55 @@ omgr_oic_op(oc_request_t *req, oc_interface_mask_t mask, 
int isset)
         goto bad_req;
     }
 
-    /*
-     * Setup state for JSON encoding.
-     */
-    omgr_jbuf_setobuf(&o->os_jbuf, o->os_rsp, sizeof(o->os_rsp));
-
     data = req->request_payload;
     if (data) {
-        if (data->type != STRING) {
+        if (data->type != BYTE_STRING) {
             goto bad_req;
         }
-        omgr_jbuf_setibuf(&o->os_jbuf, oc_string(data->value_string),
-          oc_string_len(data->value_string));
-    } else {
-        omgr_jbuf_setibuf(&o->os_jbuf, NULL, 0);
-    }
 
-    if (!isset) {
-        if (handler->mh_read) {
-            rc = handler->mh_read(&o->os_jbuf.ob_mj);
-        } else {
-            goto bad_req;
-        }
+        cbor_buf_reader_init(&o->os_cbuf.ob_reader,
+                             (uint8_t *) oc_string(data->value_string),
+                             oc_string_len(data->value_string));
     } else {
-        if (handler->mh_write) {
-            rc = handler->mh_write(&o->os_jbuf.ob_mj);
-        } else {
-            goto bad_req;
-        }
-    }
-    if (rc) {
-        goto bad_req;
+        cbor_buf_reader_init(&o->os_cbuf.ob_reader, NULL, 0);
     }
 
-    oc_rep_start_root_object();
+    cbor_parser_init(&o->os_cbuf.ob_reader.r, 0, &o->os_cbuf.ob_mj.parser, 
&o->os_cbuf.ob_mj.it);
+
+    /* start generating the CBOR OUTPUT */
+    /* this is worth a quick note.  We are encoding CBOR within CBOR, so we 
need
+     * to use the same encoder as ocf stack.  We are using their global encoder
+     * g_encoder which they intialized before this function is called. Byt we 
can't
+     * call their macros here as it won't use the right mape encoder (ob_mj) */
+    cbor_encoder_create_map(&g_encoder, &o->os_cbuf.ob_mj.encoder, 
CborIndefiniteLength);
+
     switch (mask) {
     case OC_IF_BASELINE:
         oc_process_baseline_interface(req->resource);
     case OC_IF_RW:
-        oc_rep_set_text_string(root, "key", o->os_rsp);
+        cbor_encode_text_string(&root_map, "key", strlen("key"));
+        if (!isset) {
+            if (handler->mh_read) {
+                rc = handler->mh_read(&o->os_cbuf.ob_mj);
+            } else {
+                goto bad_req;
+            }
+        } else {
+            if (handler->mh_write) {
+                rc = handler->mh_write(&o->os_cbuf.ob_mj);
+            } else {
+                goto bad_req;
+            }
+        }
+        if (rc) {
+            goto bad_req;
+        }
         break;
     default:
         break;
     }
-    oc_rep_end_root_object();
+
+    cbor_encoder_close_container(&g_encoder, &o->os_cbuf.ob_mj.encoder);
     oc_send_response(req, OC_STATUS_OK);
 
     return;
@@ -332,8 +229,6 @@ omgr_oic_task(void *arg)
     struct os_callout_func *ocf;
     os_time_t next_event;
 
-    omgr_jbuf_init(&o->os_jbuf);
-
     oc_main_init((oc_handler_t *)&omgr_oc_handler);
     while (1) {
         ev = os_eventq_get(&o->os_evq);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/53a2ce06/net/oic/src/api/oc_rep.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_rep.c b/net/oic/src/api/oc_rep.c
index a490840..0bff401 100644
--- a/net/oic/src/api/oc_rep.c
+++ b/net/oic/src/api/oc_rep.c
@@ -35,7 +35,7 @@ oc_rep_new(uint8_t *out_payload, int size)
   g_err = CborNoError;
   g_buf = out_payload;
   cbor_buf_writer_init(&g_buf_writer, out_payload, size);
-  cbor_encoder_init(&g_encoder, &cbor_buf_writer, &g_buf_writer, 0);
+  cbor_encoder_init(&g_encoder, &g_buf_writer.enc, 0);
 }
 
 int

Reply via email to