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 #ifndef _NETQ_H_
ashleymills 0:ff9ebe0cf0e9 10 #define _NETQ_H_
ashleymills 0:ff9ebe0cf0e9 11
ashleymills 0:ff9ebe0cf0e9 12 #include "config.h"
ashleymills 0:ff9ebe0cf0e9 13 #include "global.h"
ashleymills 0:ff9ebe0cf0e9 14 #include "dtls.h"
ashleymills 0:ff9ebe0cf0e9 15 #include "dtls_time.h"
ashleymills 0:ff9ebe0cf0e9 16
ashleymills 0:ff9ebe0cf0e9 17 /**
ashleymills 0:ff9ebe0cf0e9 18 * \defgroup netq Network Packet Queue
ashleymills 0:ff9ebe0cf0e9 19 * The netq utility functions implement an ordered queue of data packets
ashleymills 0:ff9ebe0cf0e9 20 * to send over the network and can also be used to queue received packets
ashleymills 0:ff9ebe0cf0e9 21 * from the network.
ashleymills 0:ff9ebe0cf0e9 22 * @{
ashleymills 0:ff9ebe0cf0e9 23 */
ashleymills 0:ff9ebe0cf0e9 24
ashleymills 0:ff9ebe0cf0e9 25 #ifndef NETQ_MAXCNT
ashleymills 0:ff9ebe0cf0e9 26 #define NETQ_MAXCNT 4 /**< maximum number of elements in netq structure */
ashleymills 0:ff9ebe0cf0e9 27 #endif
ashleymills 0:ff9ebe0cf0e9 28
ashleymills 0:ff9ebe0cf0e9 29 /**
ashleymills 0:ff9ebe0cf0e9 30 * Datagrams in the netq_t structure have a fixed maximum size of
ashleymills 0:ff9ebe0cf0e9 31 * DTLS_MAX_BUF to simplify memory management on constrained nodes. */
ashleymills 0:ff9ebe0cf0e9 32 typedef unsigned char netq_packet_t[DTLS_MAX_BUF];
ashleymills 0:ff9ebe0cf0e9 33
ashleymills 0:ff9ebe0cf0e9 34 typedef struct netq_t {
ashleymills 0:ff9ebe0cf0e9 35 struct netq_t *next;
ashleymills 0:ff9ebe0cf0e9 36
ashleymills 0:ff9ebe0cf0e9 37 clock_time_t t; /**< when to send PDU for the next time */
ashleymills 0:ff9ebe0cf0e9 38 unsigned char retransmit_cnt; /**< retransmission counter, will be removed when zero */
ashleymills 0:ff9ebe0cf0e9 39 unsigned int timeout; /**< randomized timeout value */
ashleymills 0:ff9ebe0cf0e9 40
ashleymills 0:ff9ebe0cf0e9 41 dtls_peer_t *peer; /**< remote address */
ashleymills 0:ff9ebe0cf0e9 42
ashleymills 0:ff9ebe0cf0e9 43 size_t length; /**< actual length of data */
ashleymills 0:ff9ebe0cf0e9 44 netq_packet_t data; /**< the datagram to send */
ashleymills 0:ff9ebe0cf0e9 45 } netq_t;
ashleymills 0:ff9ebe0cf0e9 46
ashleymills 0:ff9ebe0cf0e9 47 #ifndef WITH_CONTIKI
ashleymills 0:ff9ebe0cf0e9 48 static inline void netq_init()
ashleymills 0:ff9ebe0cf0e9 49 { }
ashleymills 0:ff9ebe0cf0e9 50 #else
ashleymills 0:ff9ebe0cf0e9 51 void netq_init();
ashleymills 0:ff9ebe0cf0e9 52 #endif
ashleymills 0:ff9ebe0cf0e9 53
ashleymills 0:ff9ebe0cf0e9 54 /**
ashleymills 0:ff9ebe0cf0e9 55 * Adds a node to the given queue, ordered by their time-stamp t.
ashleymills 0:ff9ebe0cf0e9 56 * This function returns @c 0 on error, or non-zero if @p node has
ashleymills 0:ff9ebe0cf0e9 57 * been added successfully.
ashleymills 0:ff9ebe0cf0e9 58 *
ashleymills 0:ff9ebe0cf0e9 59 * @param queue A pointer to the queue head where @p node will be added.
ashleymills 0:ff9ebe0cf0e9 60 * @param node The new item to add.
ashleymills 0:ff9ebe0cf0e9 61 * @return @c 0 on error, or non-zero if the new item was added.
ashleymills 0:ff9ebe0cf0e9 62 */
ashleymills 0:ff9ebe0cf0e9 63 int netq_insert_node(netq_t **queue, netq_t *node);
ashleymills 0:ff9ebe0cf0e9 64
ashleymills 0:ff9ebe0cf0e9 65 /** Destroys specified node and releases any memory that was allocated
ashleymills 0:ff9ebe0cf0e9 66 * for the associated datagram. */
ashleymills 0:ff9ebe0cf0e9 67 void netq_node_free(netq_t *node);
ashleymills 0:ff9ebe0cf0e9 68
ashleymills 0:ff9ebe0cf0e9 69 /** Removes all items from given queue and frees the allocated storage */
ashleymills 0:ff9ebe0cf0e9 70 void netq_delete_all(netq_t *queue);
ashleymills 0:ff9ebe0cf0e9 71
ashleymills 0:ff9ebe0cf0e9 72 /** Creates a new node suitable for adding to a netq_t queue. */
ashleymills 0:ff9ebe0cf0e9 73 netq_t *netq_node_new();
ashleymills 0:ff9ebe0cf0e9 74
ashleymills 0:ff9ebe0cf0e9 75 /**
ashleymills 0:ff9ebe0cf0e9 76 * Returns a pointer to the first item in given queue or NULL if
ashleymills 0:ff9ebe0cf0e9 77 * empty.
ashleymills 0:ff9ebe0cf0e9 78 */
ashleymills 0:ff9ebe0cf0e9 79 netq_t *netq_head(netq_t **queue);
ashleymills 0:ff9ebe0cf0e9 80
ashleymills 0:ff9ebe0cf0e9 81 /**
ashleymills 0:ff9ebe0cf0e9 82 * Removes the first item in given queue and returns a pointer to the
ashleymills 0:ff9ebe0cf0e9 83 * removed element. If queue is empty when netq_pop_first() is called,
ashleymills 0:ff9ebe0cf0e9 84 * this function returns NULL.
ashleymills 0:ff9ebe0cf0e9 85 */
ashleymills 0:ff9ebe0cf0e9 86 netq_t *netq_pop_first(netq_t **queue);
ashleymills 0:ff9ebe0cf0e9 87
ashleymills 0:ff9ebe0cf0e9 88 /**@}*/
ashleymills 0:ff9ebe0cf0e9 89
ashleymills 0:ff9ebe0cf0e9 90 #endif /* _NETQ_H_ */