This is an automated email from the ASF dual-hosted git repository.

sjanc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 5e8499299508d9a45757f302f5c0a187fe46fd04
Author: Szymon Janc <[email protected]>
AuthorDate: Tue Oct 6 19:21:00 2026 +0200

    mgmt/mcumgr: Remove mgmt_streamer abstraction
    
    mgmt_streamer was a set of callbacks that allowed mcumgr to be used with
    different buffer types on different OSes. On Mynewt both SMP and OMP
    always use os_mbuf so this indirection is no longer needed.
    
    SMP now operates on os_mbuf directly (helpers are moved from core SMP
    transport glue to mcumgr SMP) and OMP initializes CBOR mbuf reader
    directly. smp_streamer and omp_streamer hold pointers to CBOR mbuf
    reader/writer instead of generic mgmt_streamer and mgmt_ctxt_init()
    takes reader and writer as parameters.
    
    Unused OMP streamer callbacks are removed from oicmgr. Those were never
    called, but omgr_alloc_rsp() was leaking allocated mbuf.
    
    No functional changes.
    
    Assisted-by: Claude:claude-opus-5-5
---
 mgmt/mcumgr/mgmt/include/mgmt/mgmt.h         | 201 +--------------------------
 mgmt/mcumgr/mgmt/src/mgmt.c                  |  51 +------
 mgmt/mcumgr/omp/include/omp/omp.h            |   7 +-
 mgmt/mcumgr/omp/src/omp.c                    |  20 ++-
 mgmt/mcumgr/smp/include/smp/smp.h            |  19 ++-
 mgmt/mcumgr/smp/src/smp.c                    | 113 +++++++++++----
 mgmt/oicmgr/include/oicmgr/oicmgr.h          |   1 -
 mgmt/oicmgr/src/oicmgr.c                     | 152 +-------------------
 mgmt/smp/include/mynewt_smp/smp.h            |   1 -
 mgmt/smp/src/smp.c                           | 147 +-------------------
 mgmt/smp/transport/smp_shell/src/smp_shell.c |  11 +-
 11 files changed, 133 insertions(+), 590 deletions(-)

diff --git a/mgmt/mcumgr/mgmt/include/mgmt/mgmt.h 
b/mgmt/mcumgr/mgmt/include/mgmt/mgmt.h
index b0fc2dd33..bf43453ed 100644
--- a/mgmt/mcumgr/mgmt/include/mgmt/mgmt.h
+++ b/mgmt/mcumgr/mgmt/include/mgmt/mgmt.h
@@ -120,114 +120,6 @@ struct mgmt_evt_op_cmd_done_arg {
  */
 typedef void mgmt_on_evt_cb(uint8_t opcode, uint16_t group, uint8_t id, void 
*arg);
 
-/** @typedef mgmt_alloc_rsp_fn
- * @brief Allocates a buffer suitable for holding a response.
- *
- * If a source buf is provided, its user data is copied into the new buffer.
- *
- * @param src_buf               An optional source buffer to copy user data
- *                                  from.
- * @param arg                   Optional streamer argument.
- *
- * @return                      Newly-allocated buffer on success
- *                              NULL on failure.
- */
-typedef void *mgmt_alloc_rsp_fn(const void *src_buf, void *arg);
-
-/** @typedef mgmt_trim_front_fn
- * @brief Trims data from the front of a buffer.
- *
- * If the amount to trim exceeds the size of the buffer, the buffer is
- * truncated to a length of 0.
- *
- * @param buf                   The buffer to trim.
- * @param len                   The number of bytes to remove.
- * @param arg                   Optional streamer argument.
- */
-typedef void mgmt_trim_front_fn(void *buf, size_t len, void *arg);
-
-/** @typedef mgmt_reset_buf_fn
- * @brief Resets a buffer to a length of 0.
- *
- * The buffer's user data remains, but its payload is cleared.
- *
- * @param buf                   The buffer to reset.
- * @param arg                   Optional streamer argument.
- */
-typedef void mgmt_reset_buf_fn(void *buf, void *arg);
-
-/** @typedef mgmt_write_at_fn
- * @brief Writes data to a CBOR encoder.
- *
- * Any existing data at the specified offset is overwritten by the new data.
- * Any new data that extends past the buffer's current length is appended.
- *
- * @param writer                The encoder to write to.
- * @param offset                The byte offset to write to,
- * @param data                  The data to write.
- * @param len                   The number of bytes to write.
- * @param arg                   Optional streamer argument.
- *
- * @return                      0 on success, MGMT_ERR_[...] code on failure.
- */
-typedef int mgmt_write_at_fn(struct cbor_encoder_writer *writer, size_t offset,
-                             const void *data, size_t len, void *arg);
-
-/** @typedef mgmt_init_reader_fn
- * @brief Initializes a CBOR reader with the specified buffer.
- *
- * @param reader                The reader to initialize.
- * @param buf                   The buffer to configure the reader with.
- * @param arg                   Optional streamer argument.
- *
- * @return                      0 on success, MGMT_ERR_[...] code on failure.
- */
-typedef int mgmt_init_reader_fn(struct cbor_decoder_reader *reader, void *buf,
-                                void *arg);
-
-/** @typedef mgmt_init_writer_fn
- * @brief Initializes a CBOR writer with the specified buffer.
- *
- * @param writer                The writer to initialize.
- * @param buf                   The buffer to configure the writer with.
- * @param arg                   Optional streamer argument.
- *
- * @return                      0 on success, MGMT_ERR_[...] code on failure.
- */
-typedef int mgmt_init_writer_fn(struct cbor_encoder_writer *writer, void *buf,
-                                void *arg);
-
-/** @typedef mgmt_init_writer_fn
- * @brief Frees the specified buffer.
- *
- * @param buf                   The buffer to free.
- * @param arg                   Optional streamer argument.
- */
-typedef void mgmt_free_buf_fn(void *buf, void *arg);
-
-/**
- * @brief Configuration for constructing a mgmt_streamer object.
- */
-struct mgmt_streamer_cfg {
-    mgmt_alloc_rsp_fn *alloc_rsp;
-    mgmt_trim_front_fn *trim_front;
-    mgmt_reset_buf_fn *reset_buf;
-    mgmt_write_at_fn *write_at;
-    mgmt_init_reader_fn *init_reader;
-    mgmt_init_writer_fn *init_writer;
-    mgmt_free_buf_fn *free_buf;
-};
-
-/**
- * @brief Decodes requests and encodes responses for any mcumgr protocol.
- */
-struct mgmt_streamer {
-    const struct mgmt_streamer_cfg *cfg;
-    void *cb_arg;
-    struct cbor_decoder_reader *reader;
-    struct cbor_encoder_writer *writer;
-};
-
 /**
  * @brief Context required by command handlers for parsing requests and writing
  *        responses.
@@ -273,89 +165,6 @@ struct mgmt_group {
     uint16_t mg_group_id;
 };
 
-/**
- * @brief Uses the specified streamer to allocates a response buffer.
- *
- * If a source buf is provided, its user data is copied into the new buffer.
- *
- * @param streamer              The streamer providing the callback.
- * @param src_buf               An optional source buffer to copy user data
- *                                  from.
- *
- * @return                      Newly-allocated buffer on success
- *                              NULL on failure.
- */
-void *mgmt_streamer_alloc_rsp(struct mgmt_streamer *streamer, const void 
*src_buf);
-
-/**
- * @brief Uses the specified streamer to trim data from the front of a buffer.
- *
- * If the amount to trim exceeds the size of the buffer, the buffer is
- * truncated to a length of 0.
- *
- * @param streamer              The streamer providing the callback.
- * @param buf                   The buffer to trim.
- * @param len                   The number of bytes to remove.
- */
-void mgmt_streamer_trim_front(struct mgmt_streamer *streamer, void *buf, 
size_t len);
-
-/**
- * @brief Uses the specified streamer to reset a buffer to a length of 0.
- *
- * The buffer's user data remains, but its payload is cleared.
- *
- * @param streamer              The streamer providing the callback.
- * @param buf                   The buffer to reset.
- */
-void mgmt_streamer_reset_buf(struct mgmt_streamer *streamer, void *buf);
-
-/**
- * @brief Uses the specified streamer to write data to a CBOR encoder.
- *
- * Any existing data at the specified offset is overwritten by the new data.
- * Any new data that extends past the buffer's current length is appended.
- *
- * @param streamer              The streamer providing the callback.
- * @param writer                The encoder to write to.
- * @param offset                The byte offset to write to,
- * @param data                  The data to write.
- * @param len                   The number of bytes to write.
- *
- * @return                      0 on success, MGMT_ERR_[...] code on failure.
- */
-int mgmt_streamer_write_at(struct mgmt_streamer *streamer, size_t offset,
-                           const void *data, int len);
-
-/**
- * @brief Uses the specified streamer to initialize a CBOR reader.
- *
- * @param streamer              The streamer providing the callback.
- * @param reader                The reader to initialize.
- * @param buf                   The buffer to configure the reader with.
- *
- * @return                      0 on success, MGMT_ERR_[...] code on failure.
- */
-int mgmt_streamer_init_reader(struct mgmt_streamer *streamer, void *buf);
-
-/**
- * @brief Uses the specified streamer to initializes a CBOR writer.
- *
- * @param streamer              The streamer providing the callback.
- * @param writer                The writer to initialize.
- * @param buf                   The buffer to configure the writer with.
- *
- * @return                      0 on success, MGMT_ERR_[...] code on failure.
- */
-int mgmt_streamer_init_writer(struct mgmt_streamer *streamer, void *buf);
-
-/**
- * @brief Uses the specified streamer to free a buffer.
- *
- * @param streamer              The streamer providing the callback.
- * @param buf                   The buffer to free.
- */
-void mgmt_streamer_free_buf(struct mgmt_streamer *streamer, void *buf);
-
 /**
  * @brief Registers a full command group.
  *
@@ -392,15 +201,17 @@ const struct mgmt_handler *mgmt_find_handler(uint16_t 
group_id, uint16_t command
 int mgmt_write_rsp_status(struct mgmt_ctxt *ctxt, int status);
 
 /**
- * @brief Initializes a management context object with the specified streamer.
+ * @brief Initializes a management context object with the specified reader
+ *        and writer.
  *
  * @param ctxt                  The context object to initialize.
- * @param streamer              The streamer that will be used with the
- *                                  context.
+ * @param reader                The CBOR reader for request payload.
+ * @param writer                The CBOR writer for response payload.
  *
  * @return                      0 on success, MGMT_ERR_[...] code on failure.
  */
-int mgmt_ctxt_init(struct mgmt_ctxt *ctxt, struct mgmt_streamer *streamer);
+int mgmt_ctxt_init(struct mgmt_ctxt *ctxt, struct cbor_decoder_reader *reader,
+                   struct cbor_encoder_writer *writer);
 
 /**
  * @brief Converts a CBOR status code to a MGMT_ERR_[...] code.
diff --git a/mgmt/mcumgr/mgmt/src/mgmt.c b/mgmt/mcumgr/mgmt/src/mgmt.c
index 18d2aa558..9ef93a245 100644
--- a/mgmt/mcumgr/mgmt/src/mgmt.c
+++ b/mgmt/mcumgr/mgmt/src/mgmt.c
@@ -27,50 +27,6 @@ static mgmt_on_evt_cb *evt_cb;
 static struct mgmt_group *mgmt_group_list;
 static struct mgmt_group *mgmt_group_list_end;
 
-void *
-mgmt_streamer_alloc_rsp(struct mgmt_streamer *streamer, const void *req)
-{
-    return streamer->cfg->alloc_rsp(req, streamer->cb_arg);
-}
-
-void
-mgmt_streamer_trim_front(struct mgmt_streamer *streamer, void *buf, size_t len)
-{
-    streamer->cfg->trim_front(buf, len, streamer->cb_arg);
-}
-
-void
-mgmt_streamer_reset_buf(struct mgmt_streamer *streamer, void *buf)
-{
-    streamer->cfg->reset_buf(buf, streamer->cb_arg);
-}
-
-int
-mgmt_streamer_write_at(struct mgmt_streamer *streamer, size_t offset,
-                       const void *data, int len)
-{
-    return streamer->cfg->write_at(streamer->writer, offset, data, len,
-                                   streamer->cb_arg);
-}
-
-int
-mgmt_streamer_init_reader(struct mgmt_streamer *streamer, void *buf)
-{
-    return streamer->cfg->init_reader(streamer->reader, buf, streamer->cb_arg);
-}
-
-int
-mgmt_streamer_init_writer(struct mgmt_streamer *streamer, void *buf)
-{
-    return streamer->cfg->init_writer(streamer->writer, buf, streamer->cb_arg);
-}
-
-void
-mgmt_streamer_free_buf(struct mgmt_streamer *streamer, void *buf)
-{
-    streamer->cfg->free_buf(buf, streamer->cb_arg);
-}
-
 void
 mgmt_unregister_group(struct mgmt_group *group)
 {
@@ -187,16 +143,17 @@ mgmt_err_from_cbor(int cbor_status)
 }
 
 int
-mgmt_ctxt_init(struct mgmt_ctxt *ctxt, struct mgmt_streamer *streamer)
+mgmt_ctxt_init(struct mgmt_ctxt *ctxt, struct cbor_decoder_reader *reader,
+               struct cbor_encoder_writer *writer)
 {
     int rc;
 
-    rc = cbor_parser_init(streamer->reader, 0, &ctxt->parser, &ctxt->it);
+    rc = cbor_parser_init(reader, 0, &ctxt->parser, &ctxt->it);
     if (rc != CborNoError) {
         return mgmt_err_from_cbor(rc);
     }
 
-    cbor_encoder_init(&ctxt->encoder, streamer->writer, 0);
+    cbor_encoder_init(&ctxt->encoder, writer, 0);
 
     return 0;
 }
diff --git a/mgmt/mcumgr/omp/include/omp/omp.h 
b/mgmt/mcumgr/omp/include/omp/omp.h
index 043ee8846..c290a4c21 100644
--- a/mgmt/mcumgr/omp/include/omp/omp.h
+++ b/mgmt/mcumgr/omp/include/omp/omp.h
@@ -38,6 +38,7 @@
 #ifndef H_OMP_
 #define H_OMP_
 
+#include "tinycbor/cbor_mbuf_reader.h"
 #include "mgmt/mgmt.h"
 
 #ifdef __cplusplus
@@ -62,7 +63,10 @@ typedef void omp_tx_rsp_fn(struct omp_streamer *stmr, int 
retval, void *arg);
  *        underlying OIC implementation.
  */
 struct omp_streamer {
-    struct mgmt_streamer mgmt_stmr;
+    /** CBOR reader used for decoding requests. */
+    struct cbor_mbuf_reader *reader;
+    /** Offset of request payload in request buffer. */
+    uint16_t req_off;
     struct CborEncoder *rsp_encoder;
     omp_tx_rsp_fn *tx_rsp_cb;
 };
@@ -72,7 +76,6 @@ struct omp_streamer {
  */
 struct omp_state {
     struct omp_streamer omp_stmr;
-    struct mgmt_ctxt *m_ctxt;
     void *request;
 };
 
diff --git a/mgmt/mcumgr/omp/src/omp.c b/mgmt/mcumgr/omp/src/omp.c
index 6ff42e33e..e0bc33c6f 100644
--- a/mgmt/mcumgr/omp/src/omp.c
+++ b/mgmt/mcumgr/omp/src/omp.c
@@ -156,6 +156,13 @@ omp_process_mgmt_hdr(struct mgmt_hdr *req_hdr, struct 
mgmt_hdr *rsp_hdr,
     return mgmt_err_from_cbor(rc);
 }
 
+static void
+omp_init_reader(struct omp_streamer *streamer, struct os_mbuf *m, struct 
mgmt_ctxt *ctxt)
+{
+    cbor_mbuf_reader_init(streamer->reader, m, streamer->req_off);
+    cbor_parser_init(&streamer->reader->r, 0, &ctxt->parser, &ctxt->it);
+}
+
 int
 omp_process_request_packet(struct omp_state *omgr_st, void *req_buf)
 {
@@ -169,15 +176,10 @@ omp_process_request_packet(struct omp_state *omgr_st, 
void *req_buf)
     assert(req_buf);
 
     streamer = &omgr_st->omp_stmr;
-    omgr_st->m_ctxt = &ctxt;
 
     req_m = (struct os_mbuf *)req_buf;
 
-    rc = mgmt_streamer_init_reader(&streamer->mgmt_stmr, req_m);
-    if (rc != 0) {
-        rc = MGMT_ERR_EINVAL;
-        return rc;
-    }
+    omp_init_reader(streamer, req_m, &ctxt);
 
     rc = omp_read_hdr(&ctxt.it, &req_hdr);
     if (rc != 0) {
@@ -187,11 +189,7 @@ omp_process_request_packet(struct omp_state *omgr_st, void 
*req_buf)
 
     memcpy(&rsp_hdr, &req_hdr, sizeof(struct mgmt_hdr));
 
-    rc = mgmt_streamer_init_reader(&streamer->mgmt_stmr, req_m);
-    if (rc != 0) {
-        rc = MGMT_ERR_EINVAL;
-        return rc;
-    }
+    omp_init_reader(streamer, req_m, &ctxt);
 
     rc = cbor_encoder_create_map(streamer->rsp_encoder, &ctxt.encoder,
                                  CborIndefiniteLength);
diff --git a/mgmt/mcumgr/smp/include/smp/smp.h 
b/mgmt/mcumgr/smp/include/smp/smp.h
index 7afa7adbb..5a285aacf 100644
--- a/mgmt/mcumgr/smp/include/smp/smp.h
+++ b/mgmt/mcumgr/smp/include/smp/smp.h
@@ -38,6 +38,9 @@
 #ifndef H_SMP_
 #define H_SMP_
 
+#include "os/os_mbuf.h"
+#include "tinycbor/cbor_mbuf_reader.h"
+#include "tinycbor/cbor_mbuf_writer.h"
 #include "mgmt/mgmt.h"
 
 #ifdef __cplusplus
@@ -51,18 +54,23 @@ struct mgmt_hdr;
  * @brief Transmits an SMP response packet.
  *
  * @param ss                    The streamer to transmit via.
- * @param buf                   Buffer containing the response packet.
+ * @param rsp                   Buffer containing the response packet.
  * @param arg                   Optional streamer argument.
  *
  * @return                      0 on success, MGMT_ERR_[...] code on failure.
  */
-typedef int smp_tx_rsp_fn(struct smp_streamer *ss, void *buf, void *arg);
+typedef int smp_tx_rsp_fn(struct smp_streamer *ss, struct os_mbuf *rsp, void 
*arg);
 
 /**
  * @brief Decodes, encodes, and transmits SMP packets.
  */
 struct smp_streamer {
-    struct mgmt_streamer mgmt_stmr;
+    /** CBOR reader used for decoding requests. */
+    struct cbor_mbuf_reader *reader;
+    /** CBOR writer used for encoding responses. */
+    struct cbor_mbuf_writer *writer;
+    /** Optional argument passed to tx_rsp_cb. */
+    void *cb_arg;
     smp_tx_rsp_fn *tx_rsp_cb;
 };
 
@@ -76,13 +84,12 @@ struct smp_streamer {
  * processing of the packet is aborted.  This function consumes the supplied
  * request buffer regardless of the outcome.
  *
- * @param streamer              The streamer providing the required SMP
- *                                  callbacks.
+ * @param streamer              The streamer used for processing request.
  * @param req                   The request packet to process.
  *
  * @return                      0 on success, MGMT_ERR_[...] code on failure.
  */
-int smp_process_request_packet(struct smp_streamer *streamer, void *req);
+int smp_process_request_packet(struct smp_streamer *streamer, struct os_mbuf 
*req);
 
 #ifdef __cplusplus
 }
diff --git a/mgmt/mcumgr/smp/src/smp.c b/mgmt/mcumgr/smp/src/smp.c
index 0af163c5a..76eb976cd 100644
--- a/mgmt/mcumgr/smp/src/smp.c
+++ b/mgmt/mcumgr/smp/src/smp.c
@@ -66,12 +66,77 @@ smp_init_rsp_hdr(const struct mgmt_hdr *req_hdr, struct 
mgmt_hdr *rsp_hdr)
     };
 }
 
+static struct os_mbuf *
+smp_alloc_rsp(struct os_mbuf *req)
+{
+    struct os_mbuf *rsp;
+
+    if (!req) {
+        return NULL;
+    }
+
+    rsp = os_msys_get_pkthdr(0, OS_MBUF_USRHDR_LEN(req));
+    if (!rsp) {
+        return NULL;
+    }
+
+    memcpy(OS_MBUF_USRHDR(rsp), OS_MBUF_USRHDR(req), OS_MBUF_USRHDR_LEN(req));
+
+    return rsp;
+}
+
+static void
+smp_reset_buf(struct os_mbuf *m)
+{
+    if (!m) {
+        return;
+    }
+
+    /* We need to trim from the back because the head
+     * contains useful information which we do not want
+     * to get rid of
+     */
+    os_mbuf_adj(m, -1 * OS_MBUF_PKTLEN(m));
+}
+
+static void
+smp_free_buf(struct os_mbuf *m)
+{
+    if (!m) {
+        return;
+    }
+
+    os_mbuf_free_chain(m);
+}
+
+static int
+smp_write_at(struct cbor_mbuf_writer *cmw, size_t offset, const void *data, 
size_t len)
+{
+    struct os_mbuf *m;
+    int rc;
+
+    m = cmw->m;
+
+    if (offset > OS_MBUF_PKTLEN(m)) {
+        return MGMT_ERR_EINVAL;
+    }
+
+    rc = os_mbuf_copyinto(m, offset, data, len);
+    if (rc) {
+        return MGMT_ERR_ENOMEM;
+    }
+
+    cmw->enc.bytes_written = OS_MBUF_PKTLEN(m);
+
+    return 0;
+}
+
 static int
 smp_read_hdr(struct smp_streamer *streamer, struct mgmt_hdr *dst_hdr)
 {
     struct cbor_decoder_reader *reader;
 
-    reader = streamer->mgmt_stmr.reader;
+    reader = &streamer->reader->r;
 
     if (reader->message_size < sizeof *dst_hdr) {
         return MGMT_ERR_EINVAL;
@@ -86,7 +151,7 @@ smp_write_hdr(struct smp_streamer *streamer, const struct 
mgmt_hdr *src_hdr)
 {
     int rc;
 
-    rc = mgmt_streamer_write_at(&streamer->mgmt_stmr, 0, src_hdr, sizeof 
*src_hdr);
+    rc = smp_write_at(streamer->writer, 0, src_hdr, sizeof *src_hdr);
     return mgmt_err_from_cbor(rc);
 }
 
@@ -99,7 +164,7 @@ smp_build_err_rsp(struct smp_streamer *streamer,
     struct mgmt_hdr rsp_hdr;
     int rc;
 
-    rc = mgmt_ctxt_init(&cbuf, &streamer->mgmt_stmr);
+    rc = mgmt_ctxt_init(&cbuf, &streamer->reader->r, &streamer->writer->enc);
     if (rc != 0) {
         return rc;
     }
@@ -224,7 +289,7 @@ smp_handle_single_req(struct smp_streamer *streamer,
     struct mgmt_hdr rsp_hdr;
     int rc;
 
-    rc = mgmt_ctxt_init(&cbuf, &streamer->mgmt_stmr);
+    rc = mgmt_ctxt_init(&cbuf, &streamer->reader->r, &streamer->writer->enc);
     if (rc != 0) {
         return rc;
     }
@@ -270,7 +335,7 @@ smp_handle_single_req(struct smp_streamer *streamer,
  */
 static void
 smp_on_err(struct smp_streamer *streamer, const struct mgmt_hdr *req_hdr,
-           void *req, void *rsp, int status)
+           struct os_mbuf *req, struct os_mbuf *rsp, int status)
 {
     int rc;
 
@@ -283,19 +348,19 @@ smp_on_err(struct smp_streamer *streamer, const struct 
mgmt_hdr *req_hdr,
     }
 
     /* Clear the partial response from the buffer, if any. */
-    mgmt_streamer_reset_buf(&streamer->mgmt_stmr, rsp);
-    mgmt_streamer_init_writer(&streamer->mgmt_stmr, rsp);
+    smp_reset_buf(rsp);
+    cbor_mbuf_writer_init(streamer->writer, rsp);
 
     /* Build and transmit the error response. */
     rc = smp_build_err_rsp(streamer, req_hdr, status);
     if (rc == 0) {
-        streamer->tx_rsp_cb(streamer, rsp, streamer->mgmt_stmr.cb_arg);
+        streamer->tx_rsp_cb(streamer, rsp, streamer->cb_arg);
         rsp = NULL;
     }
 
     /* Free any extra buffers. */
-    mgmt_streamer_free_buf(&streamer->mgmt_stmr, req);
-    mgmt_streamer_free_buf(&streamer->mgmt_stmr, rsp);
+    smp_free_buf(req);
+    smp_free_buf(rsp);
 }
 
 /**
@@ -312,11 +377,11 @@ smp_on_err(struct smp_streamer *streamer, const struct 
mgmt_hdr *req_hdr,
  * @return                      0 on success, MGMT_ERR_[...] code on failure.
  */
 int
-smp_process_request_packet(struct smp_streamer *streamer, void *req)
+smp_process_request_packet(struct smp_streamer *streamer, struct os_mbuf *req)
 {
     struct mgmt_hdr req_hdr;
     struct mgmt_evt_op_cmd_done_arg cmd_done_arg;
-    void *rsp;
+    struct os_mbuf *rsp;
     bool valid_hdr, handler_found;
     int rc;
 
@@ -326,11 +391,7 @@ smp_process_request_packet(struct smp_streamer *streamer, 
void *req)
     while (1) {
         handler_found = false;
 
-        rc = mgmt_streamer_init_reader(&streamer->mgmt_stmr, req);
-        if (rc != 0) {
-            valid_hdr = false;
-            break;
-        }
+        cbor_mbuf_reader_init(streamer->reader, req, 0);
 
         /* Read the management header and strip it from the request. */
         rc = smp_read_hdr(streamer, &req_hdr);
@@ -339,18 +400,15 @@ smp_process_request_packet(struct smp_streamer *streamer, 
void *req)
             break;
         }
         mgmt_ntoh_hdr(&req_hdr);
-        mgmt_streamer_trim_front(&streamer->mgmt_stmr, req, MGMT_HDR_SIZE);
+        os_mbuf_adj(req, MGMT_HDR_SIZE);
 
-        rsp = mgmt_streamer_alloc_rsp(&streamer->mgmt_stmr, req);
+        rsp = smp_alloc_rsp(req);
         if (rsp == NULL) {
             rc = MGMT_ERR_ENOMEM;
             break;
         }
 
-        rc = mgmt_streamer_init_writer(&streamer->mgmt_stmr, rsp);
-        if (rc != 0) {
-            break;
-        }
+        cbor_mbuf_writer_init(streamer->writer, rsp);
 
         /* Process the request payload and build the response. */
         rc = smp_handle_single_req(streamer, &req_hdr, &handler_found);
@@ -359,15 +417,14 @@ smp_process_request_packet(struct smp_streamer *streamer, 
void *req)
         }
 
         /* Send the response. */
-        rc = streamer->tx_rsp_cb(streamer, rsp, streamer->mgmt_stmr.cb_arg);
+        rc = streamer->tx_rsp_cb(streamer, rsp, streamer->cb_arg);
         rsp = NULL;
         if (rc != 0) {
             break;
         }
 
         /* Trim processed request to free up space for subsequent responses. */
-        mgmt_streamer_trim_front(&streamer->mgmt_stmr, req,
-                                 smp_align4(req_hdr.nh_len));
+        os_mbuf_adj(req, smp_align4(req_hdr.nh_len));
 
         cmd_done_arg.err = MGMT_ERR_EOK;
         mgmt_evt(MGMT_EVT_OP_CMD_DONE, req_hdr.nh_group, req_hdr.nh_id, 
&cmd_done_arg);
@@ -385,7 +442,7 @@ smp_process_request_packet(struct smp_streamer *streamer, 
void *req)
         return rc;
     }
 
-    mgmt_streamer_free_buf(&streamer->mgmt_stmr, req);
-    mgmt_streamer_free_buf(&streamer->mgmt_stmr, rsp);
+    smp_free_buf(req);
+    smp_free_buf(rsp);
     return 0;
 }
diff --git a/mgmt/oicmgr/include/oicmgr/oicmgr.h 
b/mgmt/oicmgr/include/oicmgr/oicmgr.h
index 3317e8fcf..3b4779559 100644
--- a/mgmt/oicmgr/include/oicmgr/oicmgr.h
+++ b/mgmt/oicmgr/include/oicmgr/oicmgr.h
@@ -27,7 +27,6 @@
 extern "C" {
 #endif
 
-extern const struct mgmt_streamer_cfg g_omp_cbor_cfg;
 
 /**
  * Process an oicmgr request.  On completion, an oicmgr response is sent back
diff --git a/mgmt/oicmgr/src/oicmgr.c b/mgmt/oicmgr/src/oicmgr.c
index d037757dc..801d095f2 100644
--- a/mgmt/oicmgr/src/oicmgr.c
+++ b/mgmt/oicmgr/src/oicmgr.c
@@ -34,149 +34,6 @@
 
 static struct omp_state omgr_state;
 
-static mgmt_alloc_rsp_fn omgr_alloc_rsp;
-static mgmt_trim_front_fn omgr_trim_front;
-static mgmt_reset_buf_fn omgr_reset_buf;
-static mgmt_write_at_fn omgr_write_at;
-static mgmt_init_reader_fn omgr_init_reader;
-static mgmt_init_writer_fn omgr_init_writer;
-static mgmt_free_buf_fn omgr_free_buf;
-
-const struct mgmt_streamer_cfg g_omgr_cbor_cfg = {
-    .alloc_rsp = omgr_alloc_rsp,
-    .trim_front = omgr_trim_front,
-    .reset_buf = omgr_reset_buf,
-    .write_at = omgr_write_at,
-    .init_reader = omgr_init_reader,
-    .init_writer = omgr_init_writer,
-    .free_buf = omgr_free_buf,
-};
-
-static void*
-omgr_alloc_rsp(const void *src_buf,  void *req)
-{
-    struct os_mbuf *m;
-    struct os_mbuf *rsp;
-
-    if (!req) {
-        return NULL;
-    }
-
-    m = (struct os_mbuf *)req;
-
-    rsp = os_msys_get_pkthdr(0, OS_MBUF_USRHDR_LEN(m));
-    if (!rsp) {
-        return NULL;
-    }
-
-    memcpy(OS_MBUF_USRHDR(rsp), OS_MBUF_USRHDR(m), OS_MBUF_USRHDR_LEN(m));
-
-    return req;
-}
-
-static void
-omgr_trim_front(void *m, size_t len, void *arg)
-{
-    os_mbuf_adj(m, len);
-}
-
-static void
-omgr_reset_buf(void *m, void *arg)
-{
-    if (!m) {
-        return;
-    }
-
-    /* We need to trim from the back because the head
-     * contains useful information which we do not want
-     * to get rid of
-     */
-    os_mbuf_adj(m, -1 * OS_MBUF_PKTLEN((struct os_mbuf *)m));
-}
-
-static int
-omgr_write_at(struct cbor_encoder_writer *writer, size_t offset,
-              const void *data, size_t len, void *arg)
-{
-    struct cbor_mbuf_writer *cmw;
-    struct os_mbuf *m;
-    int rc;
-
-    if (!writer) {
-        return MGMT_ERR_EINVAL;
-    }
-
-    cmw = (struct cbor_mbuf_writer *)writer;
-    m = cmw->m;
-
-    if (offset > OS_MBUF_PKTLEN(m)) {
-        return MGMT_ERR_EINVAL;
-    }
-
-    rc = os_mbuf_copyinto(m, offset, data, len);
-    if (rc) {
-        return MGMT_ERR_ENOMEM;
-    }
-
-    writer->bytes_written = OS_MBUF_PKTLEN(m);
-
-    return 0;
-}
-
-static void
-omgr_free_buf(void *m, void *arg)
-{
-    if (!m) {
-        return;
-    }
-
-    os_mbuf_free_chain(m);
-}
-
-/*
- * Inits a reader the mgmt_ctxt's parser.
- **/
-static int
-omgr_init_reader(struct cbor_decoder_reader *reader, void *m, void *off)
-{
-    struct cbor_mbuf_reader *cmr;
-    uint16_t *data_off;
-
-    if (!reader) {
-        return MGMT_ERR_EINVAL;
-    }
-
-    cmr = (struct cbor_mbuf_reader *) reader;
-    data_off = (uint16_t *) off;
-    cbor_mbuf_reader_init(cmr, m, *data_off);
-    cbor_parser_init(reader,
-                     0,
-                     &omgr_state.m_ctxt->parser,
-                     &omgr_state.m_ctxt->it);
-
-    return 0;
-}
-
-/*
- * Inits a writer, unused
- **/
-static int
-omgr_init_writer(struct cbor_encoder_writer *writer,
-                 void *m,
-                 void *unused)
-{
-    struct cbor_mbuf_writer *cmw;
-
-    if (!writer) {
-        return MGMT_ERR_EINVAL;
-    }
-
-    cmw = (struct cbor_mbuf_writer *) writer;
-    cbor_mbuf_writer_init(cmw, m);
-
-    return 0;
-}
-
 static void
 oic_tx_rsp(struct omp_streamer *stmr, int retval, void *unused)
 {
@@ -190,7 +47,6 @@ void
 omgr_process_request(oc_request_t *req, oc_interface_mask_t mask)
 {
     struct cbor_mbuf_reader reader;
-    struct cbor_mbuf_writer writer;
     struct os_mbuf *m_req;
     uint16_t req_data_off;
     int rc = 0;
@@ -203,12 +59,8 @@ omgr_process_request(oc_request_t *req, oc_interface_mask_t 
mask)
     coap_get_payload(req->packet, &m_req, &req_data_off);
     omgr_state = (struct omp_state) {
         .omp_stmr = {
-            .mgmt_stmr = {
-                .cfg = &g_omgr_cbor_cfg,
-                .reader = &reader.r,
-                .writer = &writer.enc,
-                .cb_arg = &req_data_off,
-            },
+            .reader = &reader,
+            .req_off = req_data_off,
             .rsp_encoder = &g_encoder,
             .tx_rsp_cb = oic_tx_rsp,
         },
diff --git a/mgmt/smp/include/mynewt_smp/smp.h 
b/mgmt/smp/include/mynewt_smp/smp.h
index 215c521ad..e07a9bbc1 100644
--- a/mgmt/smp/include/mynewt_smp/smp.h
+++ b/mgmt/smp/include/mynewt_smp/smp.h
@@ -35,7 +35,6 @@ extern "C" {
 #endif
 
 struct smp_transport;
-extern const struct mgmt_streamer_cfg g_smp_cbor_cfg;
 smp_tx_rsp_fn smp_tx_rsp;
 
 /**
diff --git a/mgmt/smp/src/smp.c b/mgmt/smp/src/smp.c
index 763bd2b91..76e474ffd 100644
--- a/mgmt/smp/src/smp.c
+++ b/mgmt/smp/src/smp.c
@@ -31,24 +31,6 @@
 /* Shared queue that SMP uses for work items. */
 struct os_eventq *g_smp_evq;
 
-static mgmt_alloc_rsp_fn smp_alloc_rsp;
-static mgmt_trim_front_fn smp_trim_front;
-static mgmt_reset_buf_fn smp_reset_buf;
-static mgmt_write_at_fn smp_write_at;
-static mgmt_init_reader_fn smp_init_reader;
-static mgmt_init_writer_fn smp_init_writer;
-static mgmt_free_buf_fn smp_free_buf;
-
-const struct mgmt_streamer_cfg g_smp_cbor_cfg = {
-    .alloc_rsp = smp_alloc_rsp,
-    .trim_front = smp_trim_front,
-    .reset_buf = smp_reset_buf,
-    .write_at = smp_write_at,
-    .init_reader = smp_init_reader,
-    .init_writer = smp_init_writer,
-    .free_buf = smp_free_buf,
-};
-
 void
 mgmt_evq_set(struct os_eventq *evq)
 {
@@ -61,122 +43,6 @@ mgmt_evq_get(void)
     return g_smp_evq;
 }
 
-static void *
-smp_alloc_rsp(const void *req, void *arg)
-{
-   struct os_mbuf *m;
-   struct os_mbuf *rsp;
- 
-   if (!req) {
-       return NULL;
-   }
-
-   m = (struct os_mbuf *)req;
-
-   rsp = os_msys_get_pkthdr(0, OS_MBUF_USRHDR_LEN(m));
-   if (!rsp) {
-       return NULL;
-   }
-
-   memcpy(OS_MBUF_USRHDR(rsp), OS_MBUF_USRHDR(m), OS_MBUF_USRHDR_LEN(m));
-
-   return rsp;
-}
-
-static void
-smp_trim_front(void *m, size_t len, void *arg)
-{
-    os_mbuf_adj(m, len);
-}
-
-static void
-smp_reset_buf(void *m, void *arg)
-{
-    if (!m) {
-        return;
-    }
-
-    /* We need to trim from the back because the head
-     * contains useful information which we do not want
-     * to get rid of
-     */
-    os_mbuf_adj(m, -1 * OS_MBUF_PKTLEN((struct os_mbuf *)m));
-}
-
-static int
-smp_write_at(struct cbor_encoder_writer *writer, size_t offset,
-              const void *data, size_t len, void *arg)
-{
-    struct cbor_mbuf_writer *cmw;
-    struct os_mbuf *m;
-    int rc;
-
-    if (!writer) {
-        return MGMT_ERR_EINVAL;
-    }
-
-    cmw = (struct cbor_mbuf_writer *)writer;
-    m = cmw->m;
-
-    if (offset > OS_MBUF_PKTLEN(m)) {
-        return MGMT_ERR_EINVAL;
-    }
-    
-    rc = os_mbuf_copyinto(m, offset, data, len);
-    if (rc) {
-        return MGMT_ERR_ENOMEM;
-    }
-
-    writer->bytes_written = OS_MBUF_PKTLEN(m);
-
-    return 0;
-}
-
-static void
-smp_free_buf(void *m, void *arg)
-{
-    if (!m) {
-        return;
-    }
-
-    os_mbuf_free_chain(m);
-}
-
-static int
-smp_init_reader(struct cbor_decoder_reader *reader, void *m,
-               void *arg)
-{
-    struct cbor_mbuf_reader *cmr;
-    
-    if (!reader) {
-        return MGMT_ERR_EINVAL;
-    }
-
-    cmr = (struct cbor_mbuf_reader *)reader;
-    cbor_mbuf_reader_init(cmr, m, 0);
-
-    return 0;
-}
-
-static int
-smp_init_writer(struct cbor_encoder_writer *writer, void *m,
-               void *arg)
-{
-    struct cbor_mbuf_writer *cmw;
-     
-    if (!writer) {
-        return MGMT_ERR_EINVAL;
-    }
-
-    cmw = (struct cbor_mbuf_writer *)writer;
-    cbor_mbuf_writer_init(cmw, m);
-
-    return 0;
-}
-
-/**
- * Allocates an mbuf to costain an outgoing response fragment.
- */
 static struct os_mbuf *
 smp_rsp_frag_alloc(uint16_t frag_size, void *arg)
 {
@@ -199,7 +65,7 @@ smp_rsp_frag_alloc(uint16_t frag_size, void *arg)
 }
 
 int
-smp_tx_rsp(struct smp_streamer *ns, void *rsp, void *arg)
+smp_tx_rsp(struct smp_streamer *ns, struct os_mbuf *rsp, void *arg)
 {
     struct smp_transport *st;
     struct os_mbuf *frag;
@@ -246,13 +112,10 @@ smp_process_packet(struct smp_transport *st)
         return MGMT_ERR_EINVAL;
     }
 
-    st->st_streamer = (struct smp_streamer) {
-        .mgmt_stmr = {
-            .cfg = &g_smp_cbor_cfg,
-            .reader = &reader.r,
-            .writer = &writer.enc,
-            .cb_arg = st,
-        },
+    st->st_streamer = (struct smp_streamer){
+        .reader = &reader,
+        .writer = &writer,
+        .cb_arg = st,
         .tx_rsp_cb = smp_tx_rsp,
     };
 
diff --git a/mgmt/smp/transport/smp_shell/src/smp_shell.c 
b/mgmt/smp/transport/smp_shell/src/smp_shell.c
index afdf56843..2258d8c7e 100644
--- a/mgmt/smp/transport/smp_shell/src/smp_shell.c
+++ b/mgmt/smp/transport/smp_shell/src/smp_shell.c
@@ -57,13 +57,10 @@ smp_shell_in(struct os_mbuf *m, void *arg)
     struct cbor_mbuf_reader cmr;
     struct cbor_mbuf_writer cmw;
 
-    g_smp_shell_transport.st_streamer = (struct smp_streamer) {
-        .mgmt_stmr = {
-            .cfg = &g_smp_cbor_cfg,
-            .reader = &cmr.r,
-            .writer = &cmw.enc,
-            .cb_arg = &g_smp_shell_transport,
-        },
+    g_smp_shell_transport.st_streamer = (struct smp_streamer){
+        .reader = &cmr,
+        .writer = &cmw,
+        .cb_arg = &g_smp_shell_transport,
         .tx_rsp_cb = smp_tx_rsp,
     };
 

Reply via email to