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/12/08 22:55:31 UTC

[2/4] incubator-mynewt-core git commit: oic; copy outgoing oc_message to os_mbuf at coap_send_message().

oic; copy outgoing oc_message to os_mbuf at coap_send_message().


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

Branch: refs/heads/develop
Commit: 7384127ad9cca0559de881b44514d0b18425a5d6
Parents: 0ecba03
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Thu Dec 8 12:51:33 2016 -0800
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Thu Dec 8 14:55:15 2016 -0800

----------------------------------------------------------------------
 net/oic/include/oic/oc_buffer.h    |   2 +-
 net/oic/src/api/oc_buffer.c        | 122 ++++++++++----------------------
 net/oic/src/messaging/coap/coap.c  |  31 +++++++-
 net/oic/src/port/oc_connectivity.h |   1 -
 4 files changed, 65 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7384127a/net/oic/include/oic/oc_buffer.h
----------------------------------------------------------------------
diff --git a/net/oic/include/oic/oc_buffer.h b/net/oic/include/oic/oc_buffer.h
index 2d67109..ff581da 100644
--- a/net/oic/include/oic/oc_buffer.h
+++ b/net/oic/include/oic/oc_buffer.h
@@ -32,7 +32,7 @@ void oc_message_add_ref(struct oc_message *message);
 void oc_message_unref(struct oc_message *message);
 
 void oc_recv_message(struct os_mbuf *m);
-void oc_send_message(struct oc_message *message);
+void oc_send_message(struct os_mbuf *m);
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7384127a/net/oic/src/api/oc_buffer.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_buffer.c b/net/oic/src/api/oc_buffer.c
index 6a38301..668c698 100644
--- a/net/oic/src/api/oc_buffer.c
+++ b/net/oic/src/api/oc_buffer.c
@@ -36,13 +36,8 @@ static struct os_mempool oc_buffers;
 static uint8_t oc_buffer_area[OS_MEMPOOL_BYTES(MAX_NUM_CONCURRENT_REQUESTS * 2,
       sizeof(oc_message_t))];
 
-static void oc_buffer_handler(struct os_event *);
-
 static struct os_mqueue oc_inq;
-static struct oc_message *oc_buffer_outq;
-static struct os_event oc_buffer_ev = {
-    .ev_cb = oc_buffer_handler
-};
+static struct os_mqueue oc_outq;
 
 oc_message_t *
 oc_allocate_message(void)
@@ -51,12 +46,12 @@ oc_allocate_message(void)
 
     if (message) {
         message->length = 0;
-        message->next = 0;
         message->ref_count = 1;
         LOG("buffer: Allocated TX/RX buffer; num free: %d\n",
           oc_buffers.mp_num_free);
     } else {
         LOG("buffer: No free TX/RX buffers!\n");
+        assert(0);
     }
     return message;
 }
@@ -82,20 +77,6 @@ oc_message_unref(oc_message_t *message)
     }
 }
 
-static void
-oc_queue_msg(struct oc_message **head, struct oc_message *msg)
-{
-    struct oc_message *tmp;
-
-    msg->next = NULL; /* oc_message has been oc_list once, clear next */
-    if (!*head) {
-        *head = msg;
-    } else {
-        for (tmp = *head; tmp->next; tmp = tmp->next);
-        tmp->next = msg;
-    }
-}
-
 void
 oc_recv_message(struct os_mbuf *m)
 {
@@ -106,69 +87,52 @@ oc_recv_message(struct os_mbuf *m)
 }
 
 void
-oc_send_message(oc_message_t *message)
+oc_send_message(struct os_mbuf *m)
 {
-    oc_queue_msg(&oc_buffer_outq, message);
-    os_eventq_put(oc_evq_get(), &oc_buffer_ev);
+    int rc;
+
+    rc = os_mqueue_put(&oc_outq, oc_evq_get(), m);
+    assert(rc == 0);
 }
 
 static void
-oc_buffer_tx(struct oc_message *msg)
+oc_buffer_tx(struct os_event *ev)
 {
     struct os_mbuf *m;
-    struct oc_endpoint *oe;
-    int rc;
-
-    /* get a packet header */
-    m = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint));
-    if (!m) {
-        ERROR("oc_buffer_tx: failed to alloc mbuf\n");
-        oc_message_unref(msg);
-        return;
-    }
-
-    /* add this data to the mbuf */
-    rc = os_mbuf_append(m, msg->data, msg->length);
-    if (rc != 0) {
-        ERROR("oc_buffer_tx: could not append data\n");
-        oc_message_unref(msg);
-        return;
-    }
-
-    oe = OC_MBUF_ENDPOINT(m);
-    memcpy(oe, &msg->endpoint, sizeof(msg->endpoint));
-
-    oc_message_unref(msg);
 
+    while ((m = os_mqueue_get(&oc_outq)) != NULL) {
 #ifdef OC_CLIENT
-    if (oe->flags & MULTICAST) {
-        LOG("Outbound network event: multicast request\n");
-        oc_send_multicast_message(m);
-    } else {
+        struct oc_endpoint *oe;
+        oe = OC_MBUF_ENDPOINT(m);
+        if (oe->flags & MULTICAST) {
+            LOG("oc_buffer_tx: multicast\n");
+            oc_send_multicast_message(m);
+        } else {
 #endif
 #ifdef OC_SECURITY
-        /* XXX convert this */
-        if (oe->flags & SECURED) {
-            LOG("Outbound network event: forwarding to DTLS\n");
-
-            if (!oc_sec_dtls_connected(oe)) {
-                LOG("Posting INIT_DTLS_CONN_EVENT\n");
-                oc_process_post(&oc_dtls_handler,
-                  oc_events[INIT_DTLS_CONN_EVENT], m);
-            } else {
-                LOG("Posting RI_TO_DTLS_EVENT\n");
-                oc_process_post(&oc_dtls_handler,
-                  oc_events[RI_TO_DTLS_EVENT], m);
-            }
-        } else
+            /* XXX convert this */
+            if (OC_MBUF_ENDPOINT(m)->flags & SECURED) {
+                LOG("oc_buffer_tx: DTLS\n");
+
+                if (!oc_sec_dtls_connected(oe)) {
+                    LOG("oc_buffer_tx: INIT_DTLS_CONN_EVENT\n");
+                    oc_process_post(&oc_dtls_handler,
+                                    oc_events[INIT_DTLS_CONN_EVENT], m);
+                } else {
+                    LOG("oc_buffer_tx: RI_TO_DTLS_EVENT\n");
+                    oc_process_post(&oc_dtls_handler,
+                                    oc_events[RI_TO_DTLS_EVENT], m);
+                }
+            } else
 #endif
-        {
-            LOG("Outbound network event: unicast message\n");
-            oc_send_buffer(m);
-        }
+            {
+                LOG("oc_buffer_tx: unicast\n");
+                oc_send_buffer(m);
+            }
 #ifdef OC_CLIENT
-    }
+        }
 #endif
+    }
 }
 
 static void
@@ -220,26 +184,12 @@ free_msg:
     }
 }
 
-static void
-oc_buffer_handler(struct os_event *ev)
-{
-    struct oc_message *msg;
-
-    while (oc_buffer_outq) {
-        msg = oc_buffer_outq;
-        if (msg) {
-            oc_buffer_outq = msg->next;
-            msg->next = NULL;
-            oc_buffer_tx(msg);
-        }
-    }
-}
-
 void
 oc_buffer_init(void)
 {
     os_mempool_init(&oc_buffers, MAX_NUM_CONCURRENT_REQUESTS * 2,
       sizeof(oc_message_t), oc_buffer_area, "oc_bufs");
     os_mqueue_init(&oc_inq, oc_buffer_rx, NULL);
+    os_mqueue_init(&oc_outq, oc_buffer_tx, NULL);
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7384127a/net/oic/src/messaging/coap/coap.c
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/coap.c b/net/oic/src/messaging/coap/coap.c
index 2230fba..768a65e 100644
--- a/net/oic/src/messaging/coap/coap.c
+++ b/net/oic/src/messaging/coap/coap.c
@@ -439,13 +439,38 @@ coap_serialize_message(coap_packet_t *pkt, uint8_t *buffer, int tcp_hdr)
 }
 /*---------------------------------------------------------------------------*/
 void
-coap_send_message(oc_message_t *message)
+coap_send_message(struct oc_message *msg)
 {
-    LOG("-sending OCF message (%u)-\n", (unsigned int) message->length);
+    struct os_mbuf *m;
+    struct oc_endpoint *oe;
+    int rc;
+
+    LOG("-sending OCF message (%u)-\n", msg->length);
 
     STATS_INC(coap_stats, oframe);
 
-    oc_send_message(message);
+    /* get a packet header */
+    m = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint));
+    if (!m) {
+        ERROR("coap_send_msg: failed to alloc mbuf\n");
+        oc_message_unref(msg);
+        return;
+    }
+
+    /* add this data to the mbuf */
+    rc = os_mbuf_append(m, msg->data, msg->length);
+    if (rc != 0) {
+        ERROR("coap_send_msg: could not append data\n");
+        oc_message_unref(msg);
+        return;
+    }
+
+    oe = OC_MBUF_ENDPOINT(m);
+    memcpy(oe, &msg->endpoint, sizeof(msg->endpoint));
+
+    oc_message_unref(msg);
+
+    oc_send_message(m);
 }
 
 /*

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7384127a/net/oic/src/port/oc_connectivity.h
----------------------------------------------------------------------
diff --git a/net/oic/src/port/oc_connectivity.h b/net/oic/src/port/oc_connectivity.h
index e8762a3..0735b67 100644
--- a/net/oic/src/port/oc_connectivity.h
+++ b/net/oic/src/port/oc_connectivity.h
@@ -58,7 +58,6 @@ typedef struct oc_endpoint {
                                           .address = { __VA_ARGS__ } } }
 
 typedef struct oc_message {
-    struct oc_message *next;
     oc_endpoint_t endpoint;
     size_t length;
     uint8_t ref_count;