mbed port of tinydtls
Embed:
(wiki syntax)
Show/hide line numbers
netq.c
00001 /* netq.h -- Simple packet queue 00002 * 00003 * Copyright (C) 2010--2012 Olaf Bergmann <bergmann@tzi.org> 00004 * 00005 * This file is part of the library tinyDTLS. Please see the file 00006 * LICENSE for terms of use. 00007 */ 00008 00009 //#include "netinet/in.h" 00010 #include "debug.h" 00011 #include "netq.h" 00012 00013 00014 #ifdef HAVE_ASSERT_H 00015 #include <assert.h> 00016 #else 00017 #ifndef assert 00018 #warning "assertions are disabled" 00019 # define assert(x) 00020 #endif 00021 #endif 00022 00023 #include "t_list.h" 00024 00025 #ifndef WITH_CONTIKI 00026 #include <stdlib.h> 00027 00028 static inline netq_t * 00029 netq_malloc_node() { 00030 return (netq_t *)malloc(sizeof(netq_t)); 00031 } 00032 00033 static inline void 00034 netq_free_node(netq_t *node) { 00035 free(node); 00036 } 00037 00038 /* FIXME: implement Contiki's list functions using utlist.h */ 00039 00040 #else /* WITH_CONTIKI */ 00041 #include "memb.h" 00042 00043 MEMB(netq_storage, netq_t, NETQ_MAXCNT); 00044 00045 static inline netq_t * 00046 netq_malloc_node() { 00047 return (netq_t *)memb_alloc(&netq_storage); 00048 } 00049 00050 static inline void 00051 netq_free_node(netq_t *node) { 00052 memb_free(&netq_storage, node); 00053 } 00054 #endif /* WITH_CONTIKI */ 00055 00056 void 00057 netq_init() { 00058 #ifdef WITH_CONTIKI 00059 memb_init(&netq_storage); 00060 #endif /* WITH_CONTIKI */ 00061 } 00062 00063 int 00064 netq_insert_node(netq_t **queue, netq_t *node) { 00065 netq_t *p; 00066 00067 assert(queue); 00068 assert(node); 00069 00070 p = (netq_t *)list_head((list_t)queue); 00071 while(p && p->t <= node->t) 00072 p = list_item_next(p); 00073 00074 if (p) 00075 list_insert((list_t)queue, p, node); 00076 else 00077 list_push((list_t)queue, node); 00078 00079 return 1; 00080 } 00081 00082 netq_t * 00083 netq_head(netq_t **queue) { 00084 if (!queue) 00085 return NULL; 00086 00087 return list_head((list_t)queue); 00088 } 00089 00090 netq_t *netq_pop_first(netq_t **queue) { 00091 if (!queue) 00092 return NULL; 00093 00094 return list_pop((list_t)queue); 00095 } 00096 00097 netq_t * 00098 netq_node_new() { 00099 netq_t *node; 00100 node = netq_malloc_node(); 00101 00102 #ifndef NDEBUG 00103 if (!node) 00104 dsrv_log(LOG_WARN, "netq_node_new: malloc\n"); 00105 #endif 00106 00107 if (node) 00108 memset(node, 0, sizeof(netq_t)); 00109 00110 return node; 00111 } 00112 00113 void 00114 netq_node_free(netq_t *node) { 00115 if (node) 00116 netq_free_node(node); 00117 } 00118 00119 void 00120 netq_delete_all(netq_t *queue) { 00121 netq_t *p; 00122 if (queue) { 00123 while((p = list_pop((list_t)&queue))) 00124 netq_free_node(p); 00125 } 00126 } 00127
Generated on Thu Jul 14 2022 20:00:56 by 1.7.2