* README for terms of use.
*/
-#include "config.h"
-#include "net.h"
-#include "debug.h"
-#include "resource.h"
-#include "subscribe.h"
+#include "include/coap/config.h"
+#include "include/coap/net.h"
+#include "include/coap/debug.h"
+#include "include/coap/resource.h"
+#include "include/coap/subscribe.h"
#ifdef WITH_LWIP
-#include "utlist.h"
+#include "include/coap/utlist.h"
/* mem.h is only needed for the string free calls for
* COAP_ATTR_FLAGS_RELEASE_NAME / COAP_ATTR_FLAGS_RELEASE_VALUE /
* COAP_RESOURCE_FLAGS_RELEASE_URI. not sure what those lines should actually
* do on lwip. */
-#include "mem.h"
+#include "include/coap/mem.h"
#include <lwip/memp.h>
#define COAP_FREE_TYPE(Type, Object) memp_free(MEMP_COAP_##Type, Object)
#endif
-#ifdef WITH_POSIX
-#include "utlist.h"
-#include "mem.h"
+#if defined(WITH_POSIX) || defined(WITH_ARDUINO) || defined(_WIN32)
+#include "include/coap/utlist.h"
+#include "include/coap/mem.h"
#define COAP_MALLOC_TYPE(Type) \
((coap_##Type##_t *)coap_malloc(sizeof(coap_##Type##_t)))
}
#endif /* WITH_CONTIKI */
+#ifndef min
#define min(a,b) ((a) < (b) ? (a) : (b))
+#endif
/* Helper functions for conditional output of character sequences into
* a given buffer. The first Offset characters are skipped.
} \
}
-int match(const str *text, const str *pattern, int match_prefix, int match_substring)
+static int match(const str *text, const str *pattern, int match_prefix, int match_substring)
{
assert(text);
assert(pattern);
{
size_t token_length;
unsigned char *token = next_token;
- next_token = memchr(token, ' ', remaining_length);
+ next_token = (unsigned char *) memchr(token, ' ', remaining_length);
if (next_token)
{
{
coap_resource_t *r;
-#ifdef WITH_POSIX
+#if defined(WITH_POSIX) || defined(WITH_ARDUINO) || defined(_WIN32)
r = (coap_resource_t *)coap_malloc(sizeof(coap_resource_t));
#endif
#ifdef WITH_LWIP
coap_add_attr(coap_resource_t *resource, const unsigned char *name, size_t nlen,
const unsigned char *val, size_t vlen, int flags)
{
- coap_attr_t *attr;
+ coap_attr_t *attr = NULL;
if (!resource || !name)
return NULL;
-#ifdef WITH_POSIX
+#if defined(WITH_POSIX) || defined(WITH_ARDUINO) || defined(_WIN32)
attr = (coap_attr_t *)coap_malloc(sizeof(coap_attr_t));
#endif
#ifdef WITH_LWIP
int coap_delete_resource(coap_context_t *context, coap_key_t key)
{
- coap_resource_t *resource;
- coap_attr_t *attr, *tmp;
+ coap_resource_t *resource = NULL;
+ coap_attr_t *attr = NULL, *tmp = NULL;
#ifdef WITH_CONTIKI
coap_subscription_t *obs;
#endif
if (!resource)
return 0;
-#if defined(WITH_POSIX) || defined(WITH_LWIP)
+#if defined(WITH_POSIX) || defined(WITH_LWIP) || defined(WITH_ARDUINO) || defined(_WIN32)
#ifdef COAP_RESOURCES_NOHASH
LL_DELETE(context->resources, resource);
#else
LL_FOREACH_SAFE(resource->link_attr, attr, tmp) coap_delete_attr(attr);
if (resource->flags & COAP_RESOURCE_FLAGS_RELEASE_URI)
- coap_free(resource->uri.s);
+ coap_free(resource->uri.s);
-#ifdef WITH_POSIX
+#if defined(WITH_POSIX) || defined(WITH_ARDUINO) || defined(_WIN32)
coap_free(resource);
#endif
#ifdef WITH_LWIP
memp_free(MEMP_COAP_RESOURCE, resource);
#endif
-#else /* not (WITH_POSIX || WITH_LWIP) */
+#else /* not (WITH_POSIX || WITH_LWIP || WITH_ARDUINO) */
/* delete registered attributes */
while ((attr = list_pop(resource->link_attr)))
memb_free(&attribute_storage, attr);
assert(resource);
assert(peer);
- for (s = list_head(resource->subscribers); s; s = list_item_next(s))
+ for (s = (coap_subscription_t *) list_head(resource->subscribers);
+ s; s = (coap_subscription_t *) list_item_next((void *) s))
{
if (coap_address_equals(&s->subscriber, peer)
&& (!token
assert(h); /* we do not allow subscriptions if no
* GET handler is defined */
- for (obs = list_head(r->subscribers); obs; obs = list_item_next(obs))
+ for (obs = (coap_subscription_t *) list_head(r->subscribers);
+ obs; obs = (coap_subscription_t *) list_item_next((void *) obs))
{
if (r->dirty == 0 && obs->dirty == 0)
- /* running this resource due to partiallydirty, but this observation's notification was already enqueued */
+ /* running this resource due to partiallydirty,
+ * but this observation's notification was already enqueued */
continue;
coap_tid_t tid = COAP_INVALID_TID;
token.length = obs->token_length;
token.s = obs->token;
- response->hdr->id = coap_new_message_id(context);
+ response->transport_hdr->udp.id = coap_new_message_id(context);
if (obs->non && obs->non_cnt < COAP_OBS_MAX_NON)
{
- response->hdr->type = COAP_MESSAGE_NON;
+ response->transport_hdr->udp.type = COAP_MESSAGE_NON;
}
else
{
- response->hdr->type = COAP_MESSAGE_CON;
+ response->transport_hdr->udp.type = COAP_MESSAGE_CON;
}
/* fill with observer-specific data */
h(context, r, &obs->subscriber, NULL, &token, response);
- if (response->hdr->type == COAP_MESSAGE_CON)
+ if (response->transport_hdr->udp.type == COAP_MESSAGE_CON)
{
tid = coap_send_confirmed(context, &obs->subscriber, response);
obs->non_cnt = 0;
obs->non_cnt++;
}
- if (COAP_INVALID_TID == tid || response->hdr->type != COAP_MESSAGE_CON)
+ if (COAP_INVALID_TID == tid || response->transport_hdr->udp.type != COAP_MESSAGE_CON)
coap_delete_pdu(response);
if (COAP_INVALID_TID == tid)
{
{
coap_subscription_t *obs;
- for (obs = list_head(resource->subscribers); obs; obs = list_item_next(obs))
+ for (obs = (coap_subscription_t *) list_head(resource->subscribers);
+ obs; obs = (coap_subscription_t *) list_item_next((void *) obs))
{
if (coap_address_equals(peer, &obs->subscriber) && token->length == obs->token_length
&& memcmp(token->s, obs->token, token->length) == 0)