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;