Version 0.5.0 of tinydtls

Dependents:   tinydtls_test_cellular tinydtls_test_ethernet tiny-dtls

Committer:
ashleymills
Date:
Wed Feb 12 09:30:16 2014 +0000
Revision:
1:598a56fe116e
Parent:
0:ff9ebe0cf0e9
Explicitly removed something instead of relying on MACRO to disable it. Mbed can't use it.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 0:ff9ebe0cf0e9 1 /* netq.h -- Simple packet queue
ashleymills 0:ff9ebe0cf0e9 2 *
ashleymills 0:ff9ebe0cf0e9 3 * Copyright (C) 2010--2012 Olaf Bergmann <bergmann@tzi.org>
ashleymills 0:ff9ebe0cf0e9 4 *
ashleymills 0:ff9ebe0cf0e9 5 * This file is part of the library tinyDTLS. Please see the file
ashleymills 0:ff9ebe0cf0e9 6 * LICENSE for terms of use.
ashleymills 0:ff9ebe0cf0e9 7 */
ashleymills 0:ff9ebe0cf0e9 8
ashleymills 0:ff9ebe0cf0e9 9 #include "debug.h"
ashleymills 0:ff9ebe0cf0e9 10 #include "netq.h"
ashleymills 0:ff9ebe0cf0e9 11
ashleymills 0:ff9ebe0cf0e9 12 #ifdef HAVE_ASSERT_H
ashleymills 0:ff9ebe0cf0e9 13 #include <assert.h>
ashleymills 0:ff9ebe0cf0e9 14 #else
ashleymills 0:ff9ebe0cf0e9 15 #ifndef assert
ashleymills 0:ff9ebe0cf0e9 16 #warning "assertions are disabled"
ashleymills 0:ff9ebe0cf0e9 17 # define assert(x)
ashleymills 0:ff9ebe0cf0e9 18 #endif
ashleymills 0:ff9ebe0cf0e9 19 #endif
ashleymills 0:ff9ebe0cf0e9 20
ashleymills 0:ff9ebe0cf0e9 21 #include "t_list.h"
ashleymills 0:ff9ebe0cf0e9 22
ashleymills 0:ff9ebe0cf0e9 23 #ifndef WITH_CONTIKI
ashleymills 0:ff9ebe0cf0e9 24 #include <stdlib.h>
ashleymills 0:ff9ebe0cf0e9 25
ashleymills 0:ff9ebe0cf0e9 26 static inline netq_t *
ashleymills 0:ff9ebe0cf0e9 27 netq_malloc_node() {
ashleymills 0:ff9ebe0cf0e9 28 return (netq_t *)malloc(sizeof(netq_t));
ashleymills 0:ff9ebe0cf0e9 29 }
ashleymills 0:ff9ebe0cf0e9 30
ashleymills 0:ff9ebe0cf0e9 31 static inline void
ashleymills 0:ff9ebe0cf0e9 32 netq_free_node(netq_t *node) {
ashleymills 0:ff9ebe0cf0e9 33 free(node);
ashleymills 0:ff9ebe0cf0e9 34 }
ashleymills 0:ff9ebe0cf0e9 35
ashleymills 0:ff9ebe0cf0e9 36 /* FIXME: implement Contiki's list functions using utlist.h */
ashleymills 0:ff9ebe0cf0e9 37
ashleymills 0:ff9ebe0cf0e9 38 #else /* WITH_CONTIKI */
ashleymills 0:ff9ebe0cf0e9 39 #include "memb.h"
ashleymills 0:ff9ebe0cf0e9 40
ashleymills 0:ff9ebe0cf0e9 41 MEMB(netq_storage, netq_t, NETQ_MAXCNT);
ashleymills 0:ff9ebe0cf0e9 42
ashleymills 0:ff9ebe0cf0e9 43 static inline netq_t *
ashleymills 0:ff9ebe0cf0e9 44 netq_malloc_node() {
ashleymills 0:ff9ebe0cf0e9 45 return (netq_t *)memb_alloc(&netq_storage);
ashleymills 0:ff9ebe0cf0e9 46 }
ashleymills 0:ff9ebe0cf0e9 47
ashleymills 0:ff9ebe0cf0e9 48 static inline void
ashleymills 0:ff9ebe0cf0e9 49 netq_free_node(netq_t *node) {
ashleymills 0:ff9ebe0cf0e9 50 memb_free(&netq_storage, node);
ashleymills 0:ff9ebe0cf0e9 51 }
ashleymills 0:ff9ebe0cf0e9 52
ashleymills 0:ff9ebe0cf0e9 53 void
ashleymills 0:ff9ebe0cf0e9 54 netq_init() {
ashleymills 0:ff9ebe0cf0e9 55 memb_init(&netq_storage);
ashleymills 0:ff9ebe0cf0e9 56 }
ashleymills 0:ff9ebe0cf0e9 57 #endif /* WITH_CONTIKI */
ashleymills 0:ff9ebe0cf0e9 58
ashleymills 0:ff9ebe0cf0e9 59 int
ashleymills 0:ff9ebe0cf0e9 60 netq_insert_node(netq_t **queue, netq_t *node) {
ashleymills 0:ff9ebe0cf0e9 61 netq_t *p;
ashleymills 0:ff9ebe0cf0e9 62
ashleymills 0:ff9ebe0cf0e9 63 assert(queue);
ashleymills 0:ff9ebe0cf0e9 64 assert(node);
ashleymills 0:ff9ebe0cf0e9 65
ashleymills 0:ff9ebe0cf0e9 66 p = (netq_t *)list_head((list_t)queue);
ashleymills 0:ff9ebe0cf0e9 67 while(p && p->t <= node->t)
ashleymills 0:ff9ebe0cf0e9 68 p = list_item_next(p);
ashleymills 0:ff9ebe0cf0e9 69
ashleymills 0:ff9ebe0cf0e9 70 if (p)
ashleymills 0:ff9ebe0cf0e9 71 list_insert((list_t)queue, p, node);
ashleymills 0:ff9ebe0cf0e9 72 else
ashleymills 0:ff9ebe0cf0e9 73 list_push((list_t)queue, node);
ashleymills 0:ff9ebe0cf0e9 74
ashleymills 0:ff9ebe0cf0e9 75 return 1;
ashleymills 0:ff9ebe0cf0e9 76 }
ashleymills 0:ff9ebe0cf0e9 77
ashleymills 0:ff9ebe0cf0e9 78 netq_t *
ashleymills 0:ff9ebe0cf0e9 79 netq_head(netq_t **queue) {
ashleymills 0:ff9ebe0cf0e9 80 if (!queue)
ashleymills 0:ff9ebe0cf0e9 81 return NULL;
ashleymills 0:ff9ebe0cf0e9 82
ashleymills 0:ff9ebe0cf0e9 83 return list_head((list_t)queue);
ashleymills 0:ff9ebe0cf0e9 84 }
ashleymills 0:ff9ebe0cf0e9 85
ashleymills 0:ff9ebe0cf0e9 86 netq_t *netq_pop_first(netq_t **queue) {
ashleymills 0:ff9ebe0cf0e9 87 if (!queue)
ashleymills 0:ff9ebe0cf0e9 88 return NULL;
ashleymills 0:ff9ebe0cf0e9 89
ashleymills 0:ff9ebe0cf0e9 90 return list_pop((list_t)queue);
ashleymills 0:ff9ebe0cf0e9 91 }
ashleymills 0:ff9ebe0cf0e9 92
ashleymills 0:ff9ebe0cf0e9 93 netq_t *
ashleymills 0:ff9ebe0cf0e9 94 netq_node_new() {
ashleymills 0:ff9ebe0cf0e9 95 netq_t *node;
ashleymills 0:ff9ebe0cf0e9 96 node = netq_malloc_node();
ashleymills 0:ff9ebe0cf0e9 97
ashleymills 0:ff9ebe0cf0e9 98 #ifndef NDEBUG
ashleymills 0:ff9ebe0cf0e9 99 if (!node)
ashleymills 0:ff9ebe0cf0e9 100 dsrv_log(LOG_WARN, "netq_node_new: malloc\n");
ashleymills 0:ff9ebe0cf0e9 101 #endif
ashleymills 0:ff9ebe0cf0e9 102
ashleymills 0:ff9ebe0cf0e9 103 if (node)
ashleymills 0:ff9ebe0cf0e9 104 memset(node, 0, sizeof(netq_t));
ashleymills 0:ff9ebe0cf0e9 105
ashleymills 0:ff9ebe0cf0e9 106 return node;
ashleymills 0:ff9ebe0cf0e9 107 }
ashleymills 0:ff9ebe0cf0e9 108
ashleymills 0:ff9ebe0cf0e9 109 void
ashleymills 0:ff9ebe0cf0e9 110 netq_node_free(netq_t *node) {
ashleymills 0:ff9ebe0cf0e9 111 if (node)
ashleymills 0:ff9ebe0cf0e9 112 netq_free_node(node);
ashleymills 0:ff9ebe0cf0e9 113 }
ashleymills 0:ff9ebe0cf0e9 114
ashleymills 0:ff9ebe0cf0e9 115 void
ashleymills 0:ff9ebe0cf0e9 116 netq_delete_all(netq_t *queue) {
ashleymills 0:ff9ebe0cf0e9 117 netq_t *p;
ashleymills 0:ff9ebe0cf0e9 118 if (queue) {
ashleymills 0:ff9ebe0cf0e9 119 while((p = list_pop((list_t)&queue)))
ashleymills 0:ff9ebe0cf0e9 120 netq_free_node(p);
ashleymills 0:ff9ebe0cf0e9 121 }
ashleymills 0:ff9ebe0cf0e9 122 }
ashleymills 0:ff9ebe0cf0e9 123