59 lines
1.6 KiB
C
59 lines
1.6 KiB
C
|
#ifndef _NODE_H
|
||
|
#define _NODE_H 1
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include "hash.h"
|
||
|
#include "pdu.h"
|
||
|
|
||
|
struct coap_queue_t;
|
||
|
typedef uint32_t coap_tick_t;
|
||
|
|
||
|
/*
|
||
|
1. queue(first)->t store when to send PDU for the next time, it's a base(absolute) time
|
||
|
2. queue->next->t store the delta between time and base-time. queue->next->t = timeout + now - basetime
|
||
|
3. node->next->t store the delta between time and previous->t. node->next->t = timeout + now - node->t - basetime
|
||
|
4. time to fire: 10, 15, 18, 25
|
||
|
node->t: 10, 5, 3, 7
|
||
|
*/
|
||
|
|
||
|
typedef struct coap_queue_t {
|
||
|
struct coap_queue_t *next;
|
||
|
|
||
|
coap_tick_t t; /**< when to send PDU for the next time */
|
||
|
unsigned char retransmit_cnt; /**< retransmission counter, will be removed when zero */
|
||
|
unsigned int timeout; /**< the randomized timeout value */
|
||
|
|
||
|
coap_tid_t id; /**< unique transaction id */
|
||
|
|
||
|
// coap_packet_t *pkt;
|
||
|
coap_pdu_t *pdu; /**< the CoAP PDU to send */
|
||
|
struct espconn *pconn;
|
||
|
} coap_queue_t;
|
||
|
|
||
|
void coap_free_node(coap_queue_t *node);
|
||
|
|
||
|
/** Adds node to given queue, ordered by node->t. */
|
||
|
int coap_insert_node(coap_queue_t **queue, coap_queue_t *node);
|
||
|
|
||
|
/** Destroys specified node. */
|
||
|
int coap_delete_node(coap_queue_t *node);
|
||
|
|
||
|
/** Removes all items from given queue and frees the allocated storage. */
|
||
|
void coap_delete_all(coap_queue_t *queue);
|
||
|
|
||
|
/** Creates a new node suitable for adding to the CoAP sendqueue. */
|
||
|
coap_queue_t *coap_new_node(void);
|
||
|
|
||
|
coap_queue_t *coap_pop_next( coap_queue_t **queue );
|
||
|
|
||
|
int coap_remove_node( coap_queue_t **queue, const coap_tid_t id);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|