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/11/30 16:57:55 UTC

[07/16] incubator-mynewt-core git commit: oic; remove most of the oc_list users.

oic; remove most of the oc_list users.


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

Branch: refs/heads/develop
Commit: d541740a900874c1357da5a99580005e7c1d4cac
Parents: 670a657
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Tue Nov 29 12:38:52 2016 -0800
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Wed Nov 30 08:45:23 2016 -0800

----------------------------------------------------------------------
 net/oic/include/oic/oc_client_state.h     |   4 +-
 net/oic/include/oic/oc_ri.h               |  11 ++-
 net/oic/src/api/oc_discovery.c            |  19 +++--
 net/oic/src/api/oc_ri.c                   | 107 ++++++++++++-------------
 net/oic/src/api/oc_server_api.c           |  73 ++++++++---------
 net/oic/src/messaging/coap/observe.c      |  50 +++++++-----
 net/oic/src/messaging/coap/observe.h      |   5 +-
 net/oic/src/messaging/coap/oc_coap.h      |  22 +++--
 net/oic/src/messaging/coap/separate.c     |  17 ++--
 net/oic/src/messaging/coap/separate.h     |  20 ++---
 net/oic/src/messaging/coap/transactions.c |  22 +++--
 net/oic/src/messaging/coap/transactions.h |   2 +-
 12 files changed, 179 insertions(+), 173 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/include/oic/oc_client_state.h
----------------------------------------------------------------------
diff --git a/net/oic/include/oic/oc_client_state.h b/net/oic/include/oic/oc_client_state.h
index e844276..dd6308d 100644
--- a/net/oic/include/oic/oc_client_state.h
+++ b/net/oic/include/oic/oc_client_state.h
@@ -51,8 +51,8 @@ typedef oc_discovery_flags_t(oc_discovery_cb_t)(const char *, const char *,
 
 typedef void (*oc_response_handler_t)(oc_client_response_t *);
 
-typedef struct oc_client_cb_s {
-    struct oc_client_cb_s *next;
+typedef struct oc_client_cb {
+    SLIST_ENTRY(oc_client_cb) next;
     struct os_callout callout;
     oc_string_t uri;
     uint8_t token[COAP_TOKEN_LEN];

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/include/oic/oc_ri.h
----------------------------------------------------------------------
diff --git a/net/oic/include/oic/oc_ri.h b/net/oic/include/oic/oc_ri.h
index 79e57e6..c501f46 100644
--- a/net/oic/include/oic/oc_ri.h
+++ b/net/oic/include/oic/oc_ri.h
@@ -61,9 +61,9 @@ typedef enum {
   OC_IGNORE
 } oc_status_t;
 
-typedef struct oc_separate_response_s oc_separate_response_t;
+typedef struct oc_separate_response oc_separate_response_t;
 
-typedef struct oc_response_buffer_s oc_response_buffer_t;
+typedef struct oc_response_buffer oc_response_buffer_t;
 
 typedef struct
 {
@@ -95,7 +95,7 @@ typedef enum {
 
 #define NUM_OC_CORE_RESOURCES (__NUM_OC_CORE_RESOURCES__ + MAX_NUM_DEVICES)
 
-typedef struct oc_resource_s oc_resource_t;
+typedef struct oc_resource oc_resource_t;
 
 typedef struct
 {
@@ -110,9 +110,8 @@ typedef struct
 
 typedef void (*oc_request_handler_t)(oc_request_t *, oc_interface_mask_t);
 
-typedef struct oc_resource_s
-{
-  struct oc_resource_s *next;
+typedef struct oc_resource {
+  SLIST_ENTRY(oc_resource) next;
   int device;
   oc_string_t uri;
   oc_string_array_t types;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/api/oc_discovery.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_discovery.c b/net/oic/src/api/oc_discovery.c
index e8ca760..ea6de37 100644
--- a/net/oic/src/api/oc_discovery.c
+++ b/net/oic/src/api/oc_discovery.c
@@ -84,6 +84,9 @@ process_device_object(CborEncoder *device, const char *uuid, const char *rt,
                       int rt_len)
 {
   int dev, matches = 0;
+#ifdef OC_SERVER
+  oc_resource_t *resource;
+#endif
   oc_rep_start_object(*device, links);
   oc_rep_set_text_string(links, di, uuid);
   oc_rep_set_array(links, links);
@@ -100,14 +103,14 @@ process_device_object(CborEncoder *device, const char *uuid, const char *rt,
   }
 
 #ifdef OC_SERVER
-  oc_resource_t *resource = oc_ri_get_app_resources();
-  for (; resource; resource = resource->next) {
-
-    if (!(resource->properties & OC_DISCOVERABLE))
-      continue;
-
-    if (filter_resource(resource, rt, rt_len, oc_rep_array(links)))
-      matches++;
+  for (resource = oc_ri_get_app_resources(); resource;
+       resource = SLIST_NEXT(resource, next)) {
+      if (!(resource->properties & OC_DISCOVERABLE)) {
+          continue;
+      }
+      if (filter_resource(resource, rt, rt_len, oc_rep_array(links))) {
+          matches++;
+      }
   }
 #endif
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/api/oc_ri.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_ri.c b/net/oic/src/api/oc_ri.c
index 8221ea5..da89d11 100644
--- a/net/oic/src/api/oc_ri.c
+++ b/net/oic/src/api/oc_ri.c
@@ -20,8 +20,7 @@
 
 #include <os/os_callout.h>
 #include <os/os_mempool.h>
-
-#include "util/oc_list.h"
+#include <os/queue.h>
 
 #include "messaging/coap/constants.h"
 #include "messaging/coap/engine.h"
@@ -44,9 +43,8 @@
 #endif /* OC_SECURITY */
 
 #ifdef OC_SERVER
-OC_LIST(app_resources);
-OC_LIST(observe_callbacks);
-static struct os_mempool oc_resources;
+static SLIST_HEAD(, oc_resource) oc_app_resources;
+static struct os_mempool oc_resource_pool;
 static uint8_t oc_resource_area[OS_MEMPOOL_BYTES(MAX_APP_RESOURCES,
       sizeof(oc_resource_t))];
 
@@ -55,8 +53,8 @@ static void periodic_observe_handler(struct os_event *ev);
 
 #ifdef OC_CLIENT
 #include "oc_client_state.h"
-OC_LIST(client_cbs);
-static struct os_mempool oc_client_cbs;
+static SLIST_HEAD(, oc_client_cb) oc_client_cbs;
+static struct os_mempool oc_client_cb_pool;
 static uint8_t oc_client_cb_area[OS_MEMPOOL_BYTES(MAX_NUM_CONCURRENT_REQUESTS,
       sizeof(oc_client_cb_t))];
 #endif /* OC_CLIENT */
@@ -120,7 +118,7 @@ set_mpro_status_codes(void)
 oc_resource_t *
 oc_ri_get_app_resources(void)
 {
-  return oc_list_head(app_resources);
+    return SLIST_FIRST(&oc_app_resources);
 }
 #endif
 
@@ -203,14 +201,15 @@ stop_processes(void)
 oc_resource_t *
 oc_ri_get_app_resource_by_uri(const char *uri)
 {
-  oc_resource_t *res = oc_ri_get_app_resources();
-  while (res != NULL) {
-    if (oc_string_len(res->uri) == strlen(uri) &&
-        strncmp(uri, oc_string(res->uri), strlen(uri)) == 0)
-      return res;
-    res = res->next;
-  }
-  return res;
+    oc_resource_t *res;
+
+    SLIST_FOREACH(res, &oc_app_resources, next) {
+        if (oc_string_len(res->uri) == strlen(uri) &&
+          strncmp(uri, oc_string(res->uri), strlen(uri)) == 0)
+            return res;
+    }
+
+    return NULL;
 }
 #endif
 
@@ -221,15 +220,14 @@ oc_ri_init(void)
   set_mpro_status_codes();
 
 #ifdef OC_SERVER
-  oc_list_init(app_resources);
-  os_mempool_init(&oc_resources, MAX_APP_RESOURCES, sizeof(oc_resource_t),
+  SLIST_INIT(&oc_app_resources);
+  os_mempool_init(&oc_resource_pool, MAX_APP_RESOURCES, sizeof(oc_resource_t),
     oc_resource_area, "oc_res");
-  oc_list_init(observe_callbacks);
 #endif
 
 #ifdef OC_CLIENT
-  oc_list_init(client_cbs);
-  os_mempool_init(&oc_client_cbs, MAX_NUM_CONCURRENT_REQUESTS,
+  SLIST_INIT(&oc_client_cbs);
+  os_mempool_init(&oc_client_cb_pool, MAX_NUM_CONCURRENT_REQUESTS,
     sizeof(oc_client_cb_t), oc_client_cb_area, "oc_cl_cbs");
 #endif
   oc_rep_init();
@@ -250,9 +248,9 @@ oc_ri_shutdown(void)
 oc_resource_t *
 oc_ri_alloc_resource(void)
 {
-    struct oc_resource_s *resource;
+    struct oc_resource *resource;
 
-    resource = os_memblock_get(&oc_resources);
+    resource = os_memblock_get(&oc_resource_pool);
     if (resource) {
         os_callout_init(&resource->callout, oc_evq_get(),
           periodic_observe_handler, resource);
@@ -263,7 +261,7 @@ oc_ri_alloc_resource(void)
 void
 oc_ri_delete_resource(oc_resource_t *resource)
 {
-    os_memblock_put(&oc_resources, resource);
+    os_memblock_put(&oc_resource_pool, resource);
 }
 
 bool
@@ -280,7 +278,7 @@ oc_ri_add_resource(oc_resource_t *resource)
         valid = false;
     }
     if (valid) {
-        oc_list_add(app_resources, resource);
+        SLIST_INSERT_HEAD(&oc_app_resources, resource, next);
     }
 
     return valid;
@@ -292,7 +290,7 @@ oc_ri_add_resource(oc_resource_t *resource)
 static void
 periodic_observe_handler(struct os_event *ev)
 {
-    struct oc_resource_s *resource;
+    struct oc_resource *resource;
 
     resource = ev->ev_arg;
 
@@ -464,15 +462,14 @@ oc_ri_invoke_coap_entity_handler(void *request, void *response, uint8_t *buffer,
   /* Check against list of declared application resources.
    */
   if (!cur_resource && !bad_request) {
-    for (resource = oc_ri_get_app_resources(); resource;
-         resource = resource->next) {
-      if (oc_string_len(resource->uri) == (uri_path_len + 1) &&
-          strncmp((const char *)oc_string(resource->uri) + 1, uri_path,
-                  uri_path_len) == 0) {
-        request_obj.resource = cur_resource = resource;
-        break;
+      SLIST_FOREACH(resource, &oc_app_resources, next) {
+          if (oc_string_len(resource->uri) == (uri_path_len + 1) &&
+            strncmp((const char *)oc_string(resource->uri) + 1, uri_path,
+              uri_path_len) == 0) {
+              request_obj.resource = cur_resource = resource;
+              break;
+          }
       }
-    }
   }
 #endif
 
@@ -676,21 +673,23 @@ free_client_cb(oc_client_cb_t *cb)
 {
     os_callout_stop(&cb->callout);
     oc_free_string(&cb->uri);
-    oc_list_remove(client_cbs, cb);
-    os_memblock_put(&oc_client_cbs, cb);
+    SLIST_REMOVE(&oc_client_cbs, cb, oc_client_cb, next);
+    os_memblock_put(&oc_client_cb_pool, cb);
 }
 
 void
 oc_ri_remove_client_cb_by_mid(uint16_t mid)
 {
-  oc_client_cb_t *cb = (oc_client_cb_t *)oc_list_head(client_cbs);
-  while (cb != NULL) {
-    if (cb->mid == mid)
-      break;
-    cb = cb->next;
-  }
-  if (cb)
-    free_client_cb(cb);
+    oc_client_cb_t *cb;
+
+    SLIST_FOREACH(cb, &oc_client_cbs, next) {
+        if (cb->mid == mid) {
+            break;
+        }
+    }
+    if (cb) {
+        free_client_cb(cb);
+    }
 }
 
 bool
@@ -716,7 +715,7 @@ oc_ri_invoke_client_cb(void *response, oc_endpoint_t *endpoint)
   uint8_t *payload;
   int payload_len;
   coap_packet_t *const pkt = (coap_packet_t *)response;
-  oc_client_cb_t *cb = oc_list_head(client_cbs);
+  oc_client_cb_t *cb, *tmp;
   int i;
   /*
     if con then send ack and process as above
@@ -731,7 +730,9 @@ oc_ri_invoke_client_cb(void *response, oc_endpoint_t *endpoint)
   unsigned int content_format = APPLICATION_CBOR;
   coap_get_header_content_format(pkt, &content_format);
 
+  cb = SLIST_FIRST(&oc_client_cbs);
   while (cb != NULL) {
+    tmp = SLIST_NEXT(cb, next);
     if (cb->token_len == pkt->token_len &&
         memcmp(cb->token, pkt->token, pkt->token_len) == 0) {
 
@@ -803,7 +804,7 @@ oc_ri_invoke_client_cb(void *response, oc_endpoint_t *endpoint)
 
       break;
     }
-    cb = cb->next;
+    cb = tmp;
   }
 
   return true;
@@ -813,9 +814,9 @@ oc_client_cb_t *
 oc_ri_get_client_cb(const char *uri, oc_server_handle_t *server,
                     oc_method_t method)
 {
-    oc_client_cb_t *cb = (oc_client_cb_t *)oc_list_head(client_cbs);
+    oc_client_cb_t *cb;
 
-    while (cb != NULL) {
+    SLIST_FOREACH(cb, &oc_client_cbs, next) {
         if (oc_string_len(cb->uri) == strlen(uri) &&
           strncmp(oc_string(cb->uri), uri, strlen(uri)) == 0 &&
           memcmp(&cb->server.endpoint, &server->endpoint,
@@ -823,17 +824,15 @@ oc_ri_get_client_cb(const char *uri, oc_server_handle_t *server,
           cb->method == method) {
             return cb;
         }
-
-        cb = cb->next;
     }
 
-    return cb;
+    return NULL;
 }
 
 static void
 oc_ri_remove_cb(struct os_event *ev)
 {
-    struct oc_client_cb_s *cb;
+    struct oc_client_cb *cb;
 
     cb = ev->ev_arg;
 
@@ -846,7 +845,7 @@ oc_ri_alloc_client_cb(const char *uri, oc_server_handle_t *server,
 {
     oc_client_cb_t *cb;
 
-    cb = os_memblock_get(&oc_client_cbs);
+    cb = os_memblock_get(&oc_client_cb_pool);
     if (!cb) {
         return NULL;
     }
@@ -870,7 +869,7 @@ oc_ri_alloc_client_cb(const char *uri, oc_server_handle_t *server,
 
     os_callout_init(&cb->callout, oc_evq_get(), oc_ri_remove_cb, cb);
 
-    oc_list_add(client_cbs, cb);
+    SLIST_INSERT_HEAD(&oc_client_cbs, cb, next);
     return cb;
 }
 #endif /* OC_CLIENT */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/api/oc_server_api.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_server_api.c b/net/oic/src/api/oc_server_api.c
index 48fb680..344d29f 100644
--- a/net/oic/src/api/oc_server_api.c
+++ b/net/oic/src/api/oc_server_api.c
@@ -234,44 +234,45 @@ void
 oc_send_separate_response(oc_separate_response_t *handle,
                           oc_status_t response_code)
 {
-  oc_response_buffer_t response_buffer;
-  response_buffer.buffer = handle->buffer;
-  response_buffer.response_length = response_length();
-  response_buffer.code = oc_status_code(response_code);
-
-  coap_separate_t *cur = oc_list_head(handle->requests), *next = NULL;
-  coap_packet_t response[1];
-
-  while (cur != NULL) {
-    next = cur->next;
-    if (cur->observe > 0) {
-      coap_transaction_t *t =
-        coap_new_transaction(coap_get_mid(), &cur->endpoint);
-      if (t) {
-        coap_separate_resume(response, cur, oc_status_code(response_code),
-                             t->mid);
-        coap_set_header_content_format(response, APPLICATION_CBOR);
-        if (cur->observe == 1) {
-          coap_set_header_observe(response, 1);
+    oc_response_buffer_t response_buffer;
+    coap_separate_t *cur, *next = NULL;
+    coap_packet_t response[1];
+    coap_transaction_t *t;
+
+    response_buffer.buffer = handle->buffer;
+    response_buffer.response_length = response_length();
+    response_buffer.code = oc_status_code(response_code);
+
+    for (cur = SLIST_FIRST(&handle->requests); cur; cur = next) {
+        next = SLIST_NEXT(cur, next);
+        if (cur->observe > 0) {
+            t = coap_new_transaction(coap_get_mid(), &cur->endpoint);
+            if (t) {
+                coap_separate_resume(response, cur,
+                  oc_status_code(response_code), t->mid);
+                coap_set_header_content_format(response, APPLICATION_CBOR);
+                if (cur->observe == 1) {
+                    coap_set_header_observe(response, 1);
+                }
+                if (response_buffer.response_length > 0) {
+                    coap_set_payload(response, handle->buffer,
+                      response_buffer.response_length);
+                }
+                t->message->length = coap_serialize_message(response,
+                  t->message->data);
+                coap_send_transaction(t);
+            }
+            coap_separate_clear(handle, cur);
+        } else {
+            if (coap_notify_observers(NULL, &response_buffer,
+                &cur->endpoint) == 0) {
+                coap_separate_clear(handle, cur);
+            }
         }
-        if (response_buffer.response_length > 0) {
-          coap_set_payload(response, handle->buffer,
-                           response_buffer.response_length);
-        }
-        t->message->length = coap_serialize_message(response, t->message->data);
-        coap_send_transaction(t);
-      }
-      coap_separate_clear(handle, cur);
-    } else {
-      if (coap_notify_observers(NULL, &response_buffer, &cur->endpoint) == 0) {
-        coap_separate_clear(handle, cur);
-      }
     }
-    cur = next;
-  }
-  if (oc_list_length(handle->requests) == 0) {
-    handle->active = 0;
-  }
+    if (SLIST_FIRST(&handle->requests) == NULL) {
+        handle->active = 0;
+    }
 }
 
 int

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/messaging/coap/observe.c
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/observe.c b/net/oic/src/messaging/coap/observe.c
index c67c0a7..711cfff 100644
--- a/net/oic/src/messaging/coap/observe.c
+++ b/net/oic/src/messaging/coap/observe.c
@@ -39,6 +39,7 @@
 #include <string.h>
 
 #include <os/os_mempool.h>
+#include <os/queue.h>
 
 #include "observe.h"
 
@@ -48,9 +49,9 @@
 /*-------------------*/
 uint64_t observe_counter = 3;
 /*---------------------------------------------------------------------------*/
-OC_LIST(observers_list);
+static SLIST_HEAD(, coap_observer) oc_observers;
 
-static struct os_mempool coap_observers;
+static struct os_mempool coap_observer_pool;
 static uint8_t coap_observer_area[OS_MEMPOOL_BYTES(COAP_MAX_OBSERVERS,
       sizeof(coap_observer_t))];
 
@@ -65,7 +66,7 @@ add_observer(oc_resource_t *resource, oc_endpoint_t *endpoint,
     /* Remove existing observe relationship, if any. */
     int dup = coap_remove_observer_by_uri(endpoint, uri);
 
-    coap_observer_t *o = os_memblock_get(&coap_observers);
+    coap_observer_t *o = os_memblock_get(&coap_observer_pool);
 
     if (o) {
         int max = sizeof(o->url) - 1;
@@ -82,9 +83,9 @@ add_observer(oc_resource_t *resource, oc_endpoint_t *endpoint,
         o->resource = resource;
         resource->num_observers++;
         LOG("Adding observer (%u/%u) for /%s [0x%02X%02X]\n",
-          oc_list_length(observers_list) + 1, COAP_MAX_OBSERVERS, o->url,
-          o->token[0], o->token[1]);
-        oc_list_add(observers_list, o);
+          coap_observer_pool.mp_num_blocks - coap_observer_pool.mp_num_free,
+          coap_observer_pool.mp_num_blocks, o->url, o->token[0], o->token[1]);
+        SLIST_INSERT_HEAD(&oc_observers, o, next);
         return dup;
     }
     return -1;
@@ -97,22 +98,22 @@ coap_remove_observer(coap_observer_t *o)
 {
     LOG("Removing observer for /%s [0x%02X%02X]\n", o->url, o->token[0],
       o->token[1]);
-    oc_list_remove(observers_list, o);
-    os_memblock_put(&coap_observers, o);
+    SLIST_REMOVE(&oc_observers, o, coap_observer, next);
+    os_memblock_put(&coap_observer_pool, o);
 }
 /*---------------------------------------------------------------------------*/
 int
 coap_remove_observer_by_client(oc_endpoint_t *endpoint)
 {
     int removed = 0;
-    coap_observer_t *obs = (coap_observer_t *)oc_list_head(observers_list),
-      *next;
+    coap_observer_t *obs, *next;
 
     LOG("Unregistering observers for client at: ");
     LOGipaddr(*endpoint);
 
+    obs = SLIST_FIRST(&oc_observers);
     while (obs) {
-        next = obs->next;
+        next = SLIST_NEXT(obs, next);
         if (memcmp(&obs->endpoint, endpoint, sizeof(oc_endpoint_t)) == 0) {
             obs->resource->num_observers--;
             coap_remove_observer(obs);
@@ -129,10 +130,13 @@ coap_remove_observer_by_token(oc_endpoint_t *endpoint, uint8_t *token,
                               size_t token_len)
 {
     int removed = 0;
-    coap_observer_t *obs = (coap_observer_t *)oc_list_head(observers_list);
+    coap_observer_t *obs, *next;
     LOG("Unregistering observers for request token 0x%02X%02X\n", token[0],
       token[1]);
+
+    obs = SLIST_FIRST(&oc_observers);
     while (obs) {
+        next = SLIST_NEXT(obs, next);
         if (memcmp(&obs->endpoint, endpoint, sizeof(oc_endpoint_t)) == 0 &&
           obs->token_len == token_len &&
           memcmp(obs->token, token, token_len) == 0) {
@@ -141,7 +145,7 @@ coap_remove_observer_by_token(oc_endpoint_t *endpoint, uint8_t *token,
             removed++;
             break;
         }
-        obs = obs->next;
+        obs = next;
     }
     LOG("Removed %d observers\n", removed);
     return removed;
@@ -152,11 +156,11 @@ coap_remove_observer_by_uri(oc_endpoint_t *endpoint, const char *uri)
 {
     LOG("Unregistering observers for resource uri /%s", uri);
     int removed = 0;
-    coap_observer_t *obs = (coap_observer_t *)oc_list_head(observers_list),
-      *next;
+    coap_observer_t *obs, *next;
 
+    obs = SLIST_FIRST(&oc_observers);
     while (obs) {
-        next = obs->next;
+        next = SLIST_NEXT(obs, next);
         if (((memcmp(&obs->endpoint, endpoint, sizeof(oc_endpoint_t)) == 0)) &&
           (obs->url == uri || memcmp(obs->url, uri, strlen(obs->url)) == 0)) {
             obs->resource->num_observers--;
@@ -173,11 +177,12 @@ int
 coap_remove_observer_by_mid(oc_endpoint_t *endpoint, uint16_t mid)
 {
     int removed = 0;
-    coap_observer_t *obs = NULL;
+    coap_observer_t *obs, *next;
     LOG("Unregistering observers for request MID %u\n", mid);
 
-    for (obs = (coap_observer_t *)oc_list_head(observers_list); obs != NULL;
-         obs = obs->next) {
+    obs = SLIST_FIRST(&oc_observers);
+    while (obs) {
+        next = SLIST_NEXT(obs, next);
         if (memcmp(&obs->endpoint, endpoint, sizeof(*endpoint)) == 0 &&
           obs->last_mid == mid) {
             obs->resource->num_observers--;
@@ -185,6 +190,7 @@ coap_remove_observer_by_mid(oc_endpoint_t *endpoint, uint16_t mid)
             removed++;
             break;
         }
+        obs = next;
     }
     LOG("Removed %d observers\n", removed);
     return removed;
@@ -231,11 +237,11 @@ coap_notify_observers(oc_resource_t *resource,
 
     coap_observer_t *obs = NULL;
     /* iterate over observers */
-    for (obs = (coap_observer_t *)oc_list_head(observers_list);
+    for (obs = SLIST_FIRST(&oc_observers);
          obs && ((resource && obs->resource == resource) ||
            (endpoint &&
              memcmp(&obs->endpoint, endpoint, sizeof(oc_endpoint_t)) == 0));
-         obs = obs->next) {
+         obs = SLIST_NEXT(obs, next)) {
         num_observers = obs->resource->num_observers;
         if (response.separate_response != NULL &&
           response_buf->code == oc_status_code(OC_STATUS_OK)) {
@@ -329,7 +335,7 @@ coap_observe_handler(void *request, void *response, oc_resource_t *resource,
 void
 coap_observe_init(void)
 {
-    os_mempool_init(&coap_observers, COAP_MAX_OBSERVERS,
+    os_mempool_init(&coap_observer_pool, COAP_MAX_OBSERVERS,
       sizeof(coap_observer_t), coap_observer_area, "coap_obs");
 }
 #endif /* OC_SERVER */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/messaging/coap/observe.h
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/observe.h b/net/oic/src/messaging/coap/observe.h
index 095f21e..a913745 100644
--- a/net/oic/src/messaging/coap/observe.h
+++ b/net/oic/src/messaging/coap/observe.h
@@ -47,9 +47,8 @@ extern "C" {
 
 #define COAP_OBSERVER_URL_LEN 20
 
-typedef struct coap_observer
-{
-  struct coap_observer *next; /* for LIST */
+typedef struct coap_observer {
+  SLIST_ENTRY(coap_observer) next;
 
   oc_resource_t *resource;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/messaging/coap/oc_coap.h
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/oc_coap.h b/net/oic/src/messaging/coap/oc_coap.h
index a94b926..cddf46f 100644
--- a/net/oic/src/messaging/coap/oc_coap.h
+++ b/net/oic/src/messaging/coap/oc_coap.h
@@ -24,20 +24,18 @@
 extern "C" {
 #endif
 
-typedef struct oc_separate_response_s
-{
-  OC_LIST_STRUCT(requests);
-  int active;
-  uint8_t buffer[COAP_MAX_BLOCK_SIZE];
+typedef struct oc_separate_response {
+    SLIST_HEAD(, coap_separate) requests;
+    int active;
+    uint8_t buffer[COAP_MAX_BLOCK_SIZE];
 } oc_separate_response_t;
 
-typedef struct oc_response_buffer_s
-{
-  uint8_t *buffer;
-  uint16_t buffer_size;
-  int32_t *block_offset;
-  uint16_t response_length;
-  int code;
+typedef struct oc_response_buffer {
+    uint8_t *buffer;
+    uint16_t buffer_size;
+    int32_t *block_offset;
+    uint16_t response_length;
+    int code;
 } oc_response_buffer_t;
 
 #ifdef __cplusplus

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/messaging/coap/separate.c
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/separate.c b/net/oic/src/messaging/coap/separate.c
index b542586..015aa2d 100644
--- a/net/oic/src/messaging/coap/separate.c
+++ b/net/oic/src/messaging/coap/separate.c
@@ -51,7 +51,7 @@ static uint8_t coap_separate_area[OS_MEMPOOL_BYTES(MAX_NUM_CONCURRENT_REQUESTS,
 /*---------------------------------------------------------------------------*/
 /*- Separate Response API ---------------------------------------------------*/
 /*---------------------------------------------------------------------------*/
-/*----------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*/
 /**
  * \brief Initiate a separate response with an empty ACK
  * \param request The request to accept
@@ -68,25 +68,27 @@ coap_separate_accept(coap_packet_t *coap_req,
                      oc_separate_response_t *separate_response,
                      oc_endpoint_t *endpoint, int observe)
 {
+    coap_separate_t *item;
+    coap_separate_t *separate_store;
+
     if (separate_response->active == 0) {
-        OC_LIST_STRUCT_INIT(separate_response, requests);
+        SLIST_INIT(&separate_response->requests);
     }
 
-    for (coap_separate_t *item = oc_list_head(separate_response->requests);
-         item != NULL; item = oc_list_item_next(separate_response->requests)) {
+    SLIST_FOREACH(item, &separate_response->requests, next) {
         if (item->token_len == coap_req->token_len &&
           memcmp(item->token, coap_req->token, item->token_len) == 0) {
             return 0;
         }
     }
 
-    coap_separate_t *separate_store = os_memblock_get(&coap_separate_pool);
+    separate_store = os_memblock_get(&coap_separate_pool);
 
     if (!separate_store) {
         return 0;
     }
 
-    oc_list_add(separate_response->requests, separate_store);
+    SLIST_INSERT_HEAD(&separate_response->requests, separate_store, next);
 
     erbium_status_code = CLEAR_TRANSACTION;
     /* send separate ACK for CON */
@@ -150,7 +152,8 @@ void
 coap_separate_clear(oc_separate_response_t *separate_response,
                     coap_separate_t *separate_store)
 {
-    oc_list_remove(separate_response->requests, separate_store);
+    SLIST_REMOVE(&separate_response->requests, separate_store, coap_separate,
+      next);
     os_memblock_put(&coap_separate_pool, separate_store);
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/messaging/coap/separate.h
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/separate.h b/net/oic/src/messaging/coap/separate.h
index c39d532..71ee3be 100644
--- a/net/oic/src/messaging/coap/separate.h
+++ b/net/oic/src/messaging/coap/separate.h
@@ -46,21 +46,21 @@ extern "C" {
 #include "oic/oc_ri.h"
 
 typedef struct coap_separate {
-  struct coap_separate *next;
-  coap_message_type_t type;
+    SLIST_ENTRY(coap_separate) next;
+    coap_message_type_t type;
 
-  uint8_t token_len;
-  uint8_t token[COAP_TOKEN_LEN];
+    uint8_t token_len;
+    uint8_t token[COAP_TOKEN_LEN];
 
-  uint32_t block1_num;
-  uint16_t block1_size;
+    uint32_t block1_num;
+    uint16_t block1_size;
 
-  uint32_t block2_num;
-  uint16_t block2_size;
+    uint32_t block2_num;
+    uint16_t block2_size;
 
-  int32_t observe;
+    int32_t observe;
 
-  oc_endpoint_t endpoint;
+    oc_endpoint_t endpoint;
 } coap_separate_t;
 
 typedef struct coap_packet coap_packet_t;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/messaging/coap/transactions.c
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/transactions.c b/net/oic/src/messaging/coap/transactions.c
index c05ba63..662ca22 100644
--- a/net/oic/src/messaging/coap/transactions.c
+++ b/net/oic/src/messaging/coap/transactions.c
@@ -54,8 +54,7 @@
 static struct os_mempool oc_transaction_memb;
 static uint8_t oc_transaction_area[OS_MEMPOOL_BYTES(COAP_MAX_OPEN_TRANSACTIONS,
       sizeof(coap_transaction_t))];
-
-OC_LIST(transactions_list);
+static SLIST_HEAD(, coap_transaction) oc_transaction_list;
 
 static void coap_transaction_retrans(struct os_event *ev);
 
@@ -87,7 +86,7 @@ coap_new_transaction(uint16_t mid, oc_endpoint_t *endpoint)
             os_callout_init(&t->retrans_timer, oc_evq_get(),
               coap_transaction_retrans, t);
             /* list itself makes sure same element is not added twice */
-            oc_list_add(transactions_list, t);
+            SLIST_INSERT_HEAD(&oc_transaction_list, t, next);
         } else {
             os_memblock_put(&oc_transaction_memb, t);
             t = NULL;
@@ -171,7 +170,7 @@ coap_clear_transaction(coap_transaction_t *t)
 
         os_callout_stop(&t->retrans_timer);
         oc_message_unref(t->message);
-        oc_list_remove(transactions_list, t);
+        SLIST_REMOVE(&oc_transaction_list, t, coap_transaction, next);
         os_memblock_put(&oc_transaction_memb, t);
   }
 }
@@ -179,16 +178,15 @@ coap_clear_transaction(coap_transaction_t *t)
 coap_transaction_t *
 coap_get_transaction_by_mid(uint16_t mid)
 {
-  coap_transaction_t *t = NULL;
+    coap_transaction_t *t;
 
-  for (t = (coap_transaction_t *)oc_list_head(transactions_list); t;
-       t = t->next) {
-    if (t->mid == mid) {
-      LOG("Found transaction for MID %u: %p\n", t->mid, t);
-      return t;
+    SLIST_FOREACH(t, &oc_transaction_list, next) {
+        if (t->mid == mid) {
+            LOG("Found transaction for MID %u: %p\n", t->mid, t);
+            return t;
+        }
     }
-  }
-  return NULL;
+    return NULL;
 }
 
 static void

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d541740a/net/oic/src/messaging/coap/transactions.h
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/transactions.h b/net/oic/src/messaging/coap/transactions.h
index 266f2fd..794b189 100644
--- a/net/oic/src/messaging/coap/transactions.h
+++ b/net/oic/src/messaging/coap/transactions.h
@@ -56,7 +56,7 @@ extern "C" {
 /* container for transactions with message buffer and retransmission info */
 typedef struct coap_transaction
 {
-  struct coap_transaction *next; /* for LIST */
+  SLIST_ENTRY(coap_transaction) next;
 
   uint16_t mid;
   uint8_t retrans_counter;