1 /* netq.h -- Simple packet queue
3 * Copyright (C) 2010--2012 Olaf Bergmann <bergmann@tzi.org>
5 * This file is part of the library tinyDTLS. Please see the file
6 * LICENSE for terms of use.
9 #include "dtls_config.h"
17 #warning "assertions are disabled"
27 static inline netq_t *
28 netq_malloc_node(size_t size) {
29 return (netq_t *)malloc(sizeof(netq_t) + size);
33 netq_free_node(netq_t *node) {
37 /* FIXME: implement Contiki's list functions using utlist.h */
39 #else /* WITH_CONTIKI */
42 MEMB(netq_storage, netq_t, NETQ_MAXCNT);
44 static inline netq_t *
45 netq_malloc_node(size_t size) {
46 return (netq_t *)memb_alloc(&netq_storage);
50 netq_free_node(netq_t *node) {
51 memb_free(&netq_storage, node);
56 memb_init(&netq_storage);
58 #endif /* WITH_CONTIKI */
61 netq_insert_node(list_t queue, netq_t *node) {
67 p = (netq_t *)list_head(queue);
68 while(p && p->t <= node->t && list_item_next(p))
69 p = list_item_next(p);
72 list_insert(queue, p, node);
74 list_push(queue, node);
80 netq_head(list_t queue) {
84 return list_head(queue);
88 netq_next(netq_t *p) {
92 return list_item_next(p);
96 netq_remove(list_t queue, netq_t *p) {
100 list_remove(queue, p);
103 netq_t *netq_pop_first(list_t queue) {
107 return list_pop(queue);
111 netq_node_new(size_t size) {
113 node = netq_malloc_node(size);
117 dtls_warn("netq_node_new: malloc\n");
121 memset(node, 0, sizeof(netq_t));
127 netq_node_free(netq_t *node) {
129 netq_free_node(node);
133 netq_delete_all(list_t queue) {
136 while((p = list_pop(queue)))