libcoap 4.3.2rc2

coap_session_internal.h
Go to the documentation of this file.
1/*
2 * coap_session_internal.h -- Structures, Enums & Functions that are not
3 * exposed to application programming
4 *
5 * Copyright (C) 2010-2023 Olaf Bergmann <bergmann@tzi.org>
6 *
7 * SPDX-License-Identifier: BSD-2-Clause
8 *
9 * This file is part of the CoAP library libcoap. Please see README for terms
10 * of use.
11 */
12
18#ifndef COAP_SESSION_INTERNAL_H_
19#define COAP_SESSION_INTERNAL_H_
20
21#include "coap_internal.h"
22#include "coap_io_internal.h"
23#include "coap_ws_internal.h"
24
25#define COAP_DEFAULT_SESSION_TIMEOUT 300
26#define COAP_PARTIAL_SESSION_TIMEOUT_TICKS (30 * COAP_TICKS_PER_SECOND)
27#define COAP_DEFAULT_MAX_HANDSHAKE_SESSIONS 100
28
40 struct coap_addr_hash_t {
41 coap_address_t remote;
42 uint16_t lport;
43 coap_proto_t proto;
44};
45
46 typedef enum {
47 COAP_OSCORE_B_2_NONE = 0,
48 COAP_OSCORE_B_2_STEP_1,
49 COAP_OSCORE_B_2_STEP_2,
50 COAP_OSCORE_B_2_STEP_3,
51 COAP_OSCORE_B_2_STEP_4,
52 COAP_OSCORE_B_2_STEP_5,
53} COAP_OSCORE_B_2_STEP;
54
58 typedef enum coap_ext_token_check_t {
59 COAP_EXT_T_NOT_CHECKED = 0,
60 COAP_EXT_T_CHECKED,
61 COAP_EXT_T_CHECKING,
62} coap_ext_token_check_t;
63
68 struct coap_session_t {
69 coap_proto_t proto;
70 coap_session_type_t type;
71 coap_session_state_t state;
73 unsigned ref;
74 size_t tls_overhead;
75 size_t mtu;
76 size_t csm_rcv_mtu;
77 coap_addr_hash_t addr_hash;
78 UT_hash_handle hh;
79 coap_addr_tuple_t addr_info;
80 int ifindex;
81 coap_socket_t sock;
83#if COAP_SERVER_SUPPORT
84 coap_endpoint_t *endpoint;
85#endif /* COAP_SERVER_SUPPORT */
86 coap_context_t *context;
87 void *tls;
88 uint16_t tx_mid;
90 uint8_t con_active;
91 uint8_t csm_block_supported;
92 coap_mid_t last_ping_mid;
94 coap_queue_t *delayqueue;
96 coap_lg_xmit_t *lg_xmit;
97#if COAP_CLIENT_SUPPORT
98 coap_lg_crcv_t *lg_crcv;
99#endif /* COAP_CLIENT_SUPPORT */
100#if COAP_SERVER_SUPPORT
101 coap_lg_srcv_t *lg_srcv;
102#endif /* COAP_SERVER_SUPPORT */
103 size_t partial_write;
106 uint8_t read_header[8];
108 size_t partial_read;
110 coap_pdu_t *partial_pdu;
111 coap_tick_t last_rx_tx;
112 coap_tick_t last_tx_rst;
113 coap_tick_t last_ping;
114 coap_tick_t last_pong;
115 coap_tick_t csm_tx;
116 coap_dtls_cpsk_t cpsk_setup_data;
118 coap_bin_const_t *psk_identity;
127 coap_bin_const_t *psk_key;
136 coap_bin_const_t *psk_hint;
145 void *app;
146 coap_fixed_point_t ack_timeout;
148 coap_fixed_point_t ack_random_factor;
150 uint16_t max_retransmit;
152 uint16_t nstart;
154 coap_fixed_point_t default_leisure;
156 uint32_t probing_rate;
158#if COAP_Q_BLOCK_SUPPORT
159 uint16_t max_payloads;
161 uint16_t non_max_retransmit;
163 coap_fixed_point_t non_timeout;
165 coap_fixed_point_t non_receive_timeout;
168 coap_fixed_point_t non_probing_wait_base;
171 coap_fixed_point_t non_partial_timeout;
174#endif /* COAP_Q_BLOCK_SUPPORT */
175 unsigned int dtls_timeout_count;
176 int dtls_event;
178 uint32_t tx_rtag;
179 uint8_t csm_bert_rem_support;
180 uint8_t csm_bert_loc_support;
181 uint8_t block_mode;
182 uint8_t doing_first;
183 uint8_t proxy_session;
184 uint8_t delay_recursive;
185 uint8_t no_observe_cancel;
187#if COAP_OSCORE_SUPPORT
188 uint8_t oscore_encryption;
189 COAP_OSCORE_B_2_STEP b_2_step;
190 oscore_recipient_ctx_t *recipient_ctx;
192 oscore_association_t *associations;
194 uint64_t oscore_r2;
195#endif /* COAP_OSCORE_SUPPORT */
196#if COAP_WS_SUPPORT
197 coap_ws_state_t *ws;
198 coap_str_const_t *ws_host;
199#endif /* COAP_WS_SUPPORT */
200 volatile uint8_t max_token_checked;
202 uint16_t remote_test_mid;
204 uint32_t max_token_size;
205 uint64_t tx_token;
206 coap_bin_const_t *last_token;
207 coap_bin_const_t *echo;
208 coap_mid_t last_ack_mid;
210 coap_mid_t last_con_mid;
212};
213
214#if COAP_SERVER_SUPPORT
219 struct coap_endpoint_t {
220 struct coap_endpoint_t *next;
221 coap_context_t *context;
222 coap_proto_t proto;
223 uint16_t default_mtu;
224 coap_socket_t sock;
226 coap_address_t bind_addr;
227 coap_session_t *sessions;
228};
229#endif /* COAP_SERVER_SUPPORT */
230
231 coap_fixed_point_t coap_multi_fixed_fixed(coap_fixed_point_t fp1,
232 coap_fixed_point_t fp2);
233
234 coap_fixed_point_t coap_multi_fixed_uint(coap_fixed_point_t fp1,
235 uint32_t u2);
236
237 coap_fixed_point_t coap_add_fixed_fixed(coap_fixed_point_t fp1,
238 coap_fixed_point_t fp2);
239
240 coap_fixed_point_t coap_add_fixed_uint(coap_fixed_point_t fp1,
241 uint32_t u2);
242
243 coap_fixed_point_t coap_sub_fixed_uint(coap_fixed_point_t fp1,
244 uint32_t u2);
245
246 coap_fixed_point_t coap_div_fixed_uint(coap_fixed_point_t fp1, uint32_t u2);
247
248 coap_fixed_point_t coap_get_non_timeout_random(coap_session_t *session);
249
250 coap_tick_t coap_get_non_timeout_random_ticks(coap_session_t *session);
251
252
258 void coap_session_send_csm(coap_session_t *session);
259
265 void coap_session_connected(coap_session_t *session);
266
277 int coap_session_refresh_psk_hint(coap_session_t *session,
278 const coap_bin_const_t *psk_hint);
279
290 int coap_session_refresh_psk_key(coap_session_t *session,
291 const coap_bin_const_t *psk_key);
292
303 int coap_session_refresh_psk_identity(coap_session_t *session,
304 const coap_bin_const_t *psk_identity);
305
306#if COAP_SERVER_SUPPORT
315 coap_session_t *coap_new_server_session(
316 coap_context_t *ctx,
317 coap_endpoint_t *ep
318);
319#endif /* COAP_SERVER_SUPPORT */
320
329 void coap_session_establish(coap_session_t *session);
330
342ssize_t coap_session_send_pdu(coap_session_t *session, coap_pdu_t *pdu);
343
344ssize_t coap_session_delay_pdu(coap_session_t *session, coap_pdu_t *pdu,
345 coap_queue_t *node);
346
347#if COAP_SERVER_SUPPORT
357 coap_session_t *coap_endpoint_get_session(coap_endpoint_t *endpoint,
358 const coap_packet_t *packet, coap_tick_t now);
359#endif /* COAP_SERVER_SUPPORT */
360
367 size_t coap_session_max_pdu_rcv_size(const coap_session_t *session);
368
380 coap_session_t *coap_session_new_dtls_session(coap_session_t *session,
381 coap_tick_t now);
382
383 void coap_session_free(coap_session_t *session);
384 void coap_session_mfree(coap_session_t *session);
385
386#define COAP_SESSION_REF(s) ((s)->ref
387
388/* RFC7252 */
389#define COAP_ACK_TIMEOUT(s) ((s)->ack_timeout)
390#define COAP_ACK_RANDOM_FACTOR(s) ((s)->ack_random_factor)
391#define COAP_MAX_RETRANSMIT(s) ((s)->max_retransmit)
392#define COAP_NSTART(s) ((s)->nstart)
393#define COAP_DEFAULT_LEISURE(s) ((s)->default_leisure)
394#define COAP_PROBING_RATE(s) ((s)->probing_rate)
395/* RFC9177 */
396#define COAP_MAX_PAYLOADS(s) ((s)->max_payloads)
397#define COAP_NON_MAX_RETRANSMIT(s) ((s)->non_max_retransmit)
398#define COAP_NON_TIMEOUT(s) ((s)->non_timeout)
399#define COAP_NON_TIMEOUT_TICKS(s) \
400 (COAP_NON_TIMEOUT(s).integer_part * COAP_TICKS_PER_SECOND + \
401 COAP_NON_TIMEOUT(s).fractional_part * COAP_TICKS_PER_SECOND / 1000)
402#define COAP_NON_RECEIVE_TIMEOUT(s) ((s)->non_receive_timeout)
403#define COAP_NON_PROBING_WAIT_BASE(s) ((s)->non_probing_wait_base)
404#define COAP_NON_PARTIAL_TIMEOUT(s) ((s)->non_partial_timeout)
405
412#define COAP_DEFAULT_LEISURE_TICKS(s) \
413 (COAP_DEFAULT_LEISURE(s).integer_part * COAP_TICKS_PER_SECOND + \
414 COAP_DEFAULT_LEISURE(s).fractional_part * COAP_TICKS_PER_SECOND / 1000)
421#define COAP_MAX_TRANSMIT_SPAN(s) \
422 (((s)->ack_timeout.integer_part * 1000 + (s)->ack_timeout.fractional_part) * \
423 ((1 << ((s)->max_retransmit)) -1) * \
424 ((s)->ack_random_factor.integer_part * 1000 + \
425 (s)->ack_random_factor.fractional_part) \
426 / 1000000)
427
434#define COAP_MAX_TRANSMIT_WAIT(s) \
435 (((s)->ack_timeout.integer_part * 1000 + (s)->ack_timeout.fractional_part) * \
436 ((1 << ((s)->max_retransmit + 1)) -1) * \
437 ((s)->ack_random_factor.integer_part * 1000 + \
438 (s)->ack_random_factor.fractional_part) \
439 / 1000000)
440
441#define COAP_MAX_TRANSMIT_WAIT_TICKS(s) \
442 (COAP_MAX_TRANSMIT_WAIT(s) * COAP_TICKS_PER_SECOND)
443
450#define COAP_PROCESSING_DELAY(s) \
451 (((s)->ack_timeout.integer_part * 1000 + (s)->ack_timeout.fractional_part + \
452 500) / 1000)
453
460#define COAP_MAX_RTT(s) \
461 ((2 * COAP_DEFAULT_MAX_LATENCY) + COAP_PROCESSING_DELAY(s))
462
469#define COAP_EXCHANGE_LIFETIME(s) \
470 (COAP_MAX_TRANSMIT_SPAN(s) + (2 * COAP_DEFAULT_MAX_LATENCY) + \
471 COAP_PROCESSING_DELAY(s))
472
479#define COAP_NON_LIFETIME(s) \
480 (COAP_MAX_TRANSMIT_SPAN(s) + COAP_DEFAULT_MAX_LATENCY)
481
488#define COAP_NON_RECEIVE_TIMEOUT_TICKS(s) ( \
489 COAP_NON_RECEIVE_TIMEOUT(s).integer_part * COAP_TICKS_PER_SECOND + \
490 COAP_NON_RECEIVE_TIMEOUT(s).fractional_part * COAP_TICKS_PER_SECOND / 1000)
491
500#define COAP_NON_PROBING_WAIT(s) \
501 coap_add_fixed_fixed(COAP_NON_PROBING_WAIT_BASE(s), \
502 COAP_NON_TIMEOUT_RANDOM(s))
503
504#define COAP_NON_PROBING_WAIT_TICKS(s) \
505 (COAP_NON_PROBING_WAIT(s).integer_part * COAP_TICKS_PER_SECOND + \
506 COAP_NON_PROBING_WAIT(s).fractional_part * COAP_TICKS_PER_SECOND / 1000)
507
514#define COAP_NON_PARTIAL_TIMEOUT_TICKS(s) \
515 (COAP_NON_PARTIAL_TIMEOUT(s).integer_part * COAP_TICKS_PER_SECOND + \
516 COAP_NON_PARTIAL_TIMEOUT(s).fractional_part * COAP_TICKS_PER_SECOND / 1000)
517
524#define COAP_NON_TIMEOUT_RANDOM(s) \
525 coap_get_non_timeout_random(s)
526
529#define SESSIONS_ADD(e, obj) \
530 HASH_ADD(hh, (e), addr_hash, sizeof((obj)->addr_hash), (obj))
531
532#define SESSIONS_DELETE(e, obj) \
533 HASH_DELETE(hh, (e), (obj))
534
535#define SESSIONS_ITER(e, el, rtmp) \
536 HASH_ITER(hh, (e), el, rtmp)
537
538#define SESSIONS_ITER_SAFE(e, el, rtmp) \
539 for ((el) = (e); (el) && ((rtmp) = (el)->hh.next, 1); (el) = (rtmp))
540
541#define SESSIONS_FIND(e, k, res) { \
542 HASH_FIND(hh, (e), &(k), sizeof(k), (res)); \
543 }
544
545#endif /* COAP_SESSION_INTERNAL_H_ */
coap_internal.h
Pulls together all the internal only header files.
coap_io_internal.h
Internal network I/O functions.
coap_ws_internal.h
Internal CoAP WebSockets support.
coap_tick_t
uint64_t coap_tick_t
This data type represents internal timer ticks with COAP_TICKS_PER_SECOND resolution.
Definition: coap_time.h:144
coap_session_new_dtls_session
coap_session_t * coap_session_new_dtls_session(coap_session_t *session, coap_tick_t now)
Create a new DTLS session for the session.
coap_mid_t
int coap_mid_t
coap_mid_t is used to store the CoAP Message ID of a CoAP PDU.
Definition: coap_pdu.h:255
coap_proto_t
coap_proto_t
CoAP protocol types.
Definition: coap_pdu.h:304
coap_new_server_session
coap_session_t * coap_new_server_session(coap_context_t *ctx, coap_endpoint_t *ep)
Creates a new server session for the specified endpoint.
coap_session_delay_pdu
ssize_t coap_session_delay_pdu(coap_session_t *session, coap_pdu_t *pdu, coap_queue_t *node)
Definition: coap_session.c:650
coap_session_refresh_psk_hint
int coap_session_refresh_psk_hint(coap_session_t *session, const coap_bin_const_t *psk_hint)
Refresh the session's current Identity Hint (PSK).
Definition: coap_session.c:1376
coap_session_send_csm
void coap_session_send_csm(coap_session_t *session)
Notify session transport has just connected and CSM exchange can now start.
Definition: coap_session.c:691
coap_add_fixed_uint
coap_fixed_point_t coap_add_fixed_uint(coap_fixed_point_t fp1, uint32_t u2)
Definition: coap_session.c:60
coap_session_max_pdu_rcv_size
size_t coap_session_max_pdu_rcv_size(const coap_session_t *session)
Get maximum acceptable receive PDU size.
Definition: coap_session.c:598
coap_sub_fixed_uint
coap_fixed_point_t coap_sub_fixed_uint(coap_fixed_point_t fp1, uint32_t u2)
Definition: coap_session.c:68
coap_endpoint_get_session
coap_session_t * coap_endpoint_get_session(coap_endpoint_t *endpoint, const coap_packet_t *packet, coap_tick_t now)
Lookup the server session for the packet received on an endpoint, or create a new one.
coap_ext_token_check_t
coap_ext_token_check_t
coap_ext_token_check_t values
Definition: coap_session_internal.h:58
coap_session_establish
void coap_session_establish(coap_session_t *session)
Layer function interface for layer below session accept/connect being established.
Definition: coap_session.c:1270
coap_add_fixed_fixed
coap_fixed_point_t coap_add_fixed_fixed(coap_fixed_point_t fp1, coap_fixed_point_t fp2)
Definition: coap_session.c:50
coap_get_non_timeout_random_ticks
coap_tick_t coap_get_non_timeout_random_ticks(coap_session_t *session)
coap_session_refresh_psk_key
int coap_session_refresh_psk_key(coap_session_t *session, const coap_bin_const_t *psk_key)
Refresh the session's current pre-shared key (PSK).
Definition: coap_session.c:1405
coap_session_connected
void coap_session_connected(coap_session_t *session)
Notify session that it has just connected or reconnected.
Definition: coap_session.c:759
coap_multi_fixed_fixed
coap_fixed_point_t coap_multi_fixed_fixed(coap_fixed_point_t fp1, coap_fixed_point_t fp2)
Definition: coap_session.c:30
coap_session_send_pdu
ssize_t coap_session_send_pdu(coap_session_t *session, coap_pdu_t *pdu)
Send a pdu according to the session's protocol.
Definition: coap_net.c:784
coap_div_fixed_uint
coap_fixed_point_t coap_div_fixed_uint(coap_fixed_point_t fp1, uint32_t u2)
Definition: coap_session.c:76
coap_session_free
void coap_session_free(coap_session_t *session)
Definition: coap_session.c:545
coap_session_mfree
void coap_session_mfree(coap_session_t *session)
Definition: coap_session.c:464
coap_session_refresh_psk_identity
int coap_session_refresh_psk_identity(coap_session_t *session, const coap_bin_const_t *psk_identity)
Refresh the session's current pre-shared identity (PSK).
Definition: coap_session.c:1433
coap_get_non_timeout_random
coap_fixed_point_t coap_get_non_timeout_random(coap_session_t *session)
COAP_OSCORE_B_2_STEP
COAP_OSCORE_B_2_STEP
Definition: coap_session_internal.h:46
coap_multi_fixed_uint
coap_fixed_point_t coap_multi_fixed_uint(coap_fixed_point_t fp1, uint32_t u2)
Definition: coap_session.c:40
COAP_EXT_T_NOT_CHECKED
@ COAP_EXT_T_NOT_CHECKED
Not checked.
Definition: coap_session_internal.h:59
COAP_EXT_T_CHECKING
@ COAP_EXT_T_CHECKING
Token size check request sent.
Definition: coap_session_internal.h:61
COAP_EXT_T_CHECKED
@ COAP_EXT_T_CHECKED
Token size valid.
Definition: coap_session_internal.h:60
COAP_OSCORE_B_2_NONE
@ COAP_OSCORE_B_2_NONE
Definition: coap_session_internal.h:47
COAP_OSCORE_B_2_STEP_3
@ COAP_OSCORE_B_2_STEP_3
Definition: coap_session_internal.h:50
COAP_OSCORE_B_2_STEP_1
@ COAP_OSCORE_B_2_STEP_1
Definition: coap_session_internal.h:48
COAP_OSCORE_B_2_STEP_4
@ COAP_OSCORE_B_2_STEP_4
Definition: coap_session_internal.h:51
COAP_OSCORE_B_2_STEP_5
@ COAP_OSCORE_B_2_STEP_5
Definition: coap_session_internal.h:52
COAP_OSCORE_B_2_STEP_2
@ COAP_OSCORE_B_2_STEP_2
Definition: coap_session_internal.h:49
coap_session_type_t
coap_session_type_t
coap_session_type_t values
Definition: coap_session.h:43
coap_session_state_t
coap_session_state_t
coap_session_state_t values
Definition: coap_session.h:54
coap_addr_hash_t
Only used for servers for hashing incoming packets.
Definition: coap_session_internal.h:40
coap_addr_hash_t::lport
uint16_t lport
local port
Definition: coap_session_internal.h:42
coap_addr_hash_t::remote
coap_address_t remote
remote address and port
Definition: coap_session_internal.h:41
coap_addr_hash_t::proto
coap_proto_t proto
CoAP protocol.
Definition: coap_session_internal.h:43
coap_addr_tuple_t
Definition: coap_io.h:55
coap_address_t
Multi-purpose address abstraction.
Definition: coap_address.h:109
coap_bin_const_t
CoAP binary data definition with const data.
Definition: coap_str.h:64
coap_context_t
The CoAP stack's global state is stored in a coap_context_t object.
Definition: coap_net_internal.h:49
coap_dtls_cpsk_t
The structure used for defining the Client PSK setup data to be used.
Definition: coap_dtls.h:378
coap_endpoint_t
Abstraction of virtual endpoint that can be attached to coap_context_t.
Definition: coap_session_internal.h:219
coap_endpoint_t::context
coap_context_t * context
endpoint's context
Definition: coap_session_internal.h:221
coap_endpoint_t::default_mtu
uint16_t default_mtu
default mtu for this interface
Definition: coap_session_internal.h:223
coap_endpoint_t::sessions
coap_session_t * sessions
hash table or list of active sessions
Definition: coap_session_internal.h:227
coap_endpoint_t::next
struct coap_endpoint_t * next
Definition: coap_session_internal.h:220
coap_endpoint_t::bind_addr
coap_address_t bind_addr
local interface address
Definition: coap_session_internal.h:226
coap_endpoint_t::sock
coap_socket_t sock
socket object for the interface, if any
Definition: coap_session_internal.h:224
coap_endpoint_t::proto
coap_proto_t proto
protocol used on this interface
Definition: coap_session_internal.h:222
coap_fixed_point_t
Abstraction of a fixed point number that can be used where necessary instead of a float.
Definition: coap_session.h:30
coap_lg_crcv_t
Structure to hold large body (many blocks) client receive information.
Definition: coap_block_internal.h:146
coap_lg_srcv_t
Structure to hold large body (many blocks) server receive information.
Definition: coap_block_internal.h:177
coap_lg_xmit_t
Structure to hold large body (many blocks) transmission information.
Definition: coap_block_internal.h:117
coap_packet_t
Definition: coap_io_internal.h:207
coap_pdu_t
structure for CoAP PDUs
Definition: coap_pdu_internal.h:119
coap_queue_t
Queue entry.
Definition: coap_net_internal.h:34
coap_session_t
Abstraction of virtual session that can be attached to coap_context_t (client) or coap_endpoint_t (se...
Definition: coap_session_internal.h:68
coap_session_t::last_pong
coap_tick_t last_pong
Definition: coap_session_internal.h:114
coap_session_t::lg_xmit
coap_lg_xmit_t * lg_xmit
list of large transmissions
Definition: coap_session_internal.h:96
coap_session_t::max_token_checked
volatile uint8_t max_token_checked
Check for max token size coap_ext_token_check_t.
Definition: coap_session_internal.h:200
coap_session_t::dtls_timeout_count
unsigned int dtls_timeout_count
dtls setup retry counter
Definition: coap_session_internal.h:175
coap_session_t::psk_key
coap_bin_const_t * psk_key
If client, this field contains the current pre-shared key for server; When this field is NULL,...
Definition: coap_session_internal.h:127
coap_session_t::endpoint
coap_endpoint_t * endpoint
session's endpoint
Definition: coap_session_internal.h:84
coap_session_t::doing_first
uint8_t doing_first
Set if doing client's first request.
Definition: coap_session_internal.h:182
coap_session_t::delay_recursive
uint8_t delay_recursive
Set if in coap_client_delay_first()
Definition: coap_session_internal.h:184
coap_session_t::last_rx_tx
coap_tick_t last_rx_tx
Definition: coap_session_internal.h:111
coap_session_t::sock
coap_socket_t sock
socket object for the session, if any
Definition: coap_session_internal.h:81
coap_session_t::partial_pdu
coap_pdu_t * partial_pdu
incomplete incoming pdu
Definition: coap_session_internal.h:110
coap_session_t::max_token_size
uint32_t max_token_size
Largest token size supported RFC8974.
Definition: coap_session_internal.h:204
coap_session_t::nstart
uint16_t nstart
maximum concurrent confirmable xmits (default 1)
Definition: coap_session_internal.h:152
coap_session_t::psk_identity
coap_bin_const_t * psk_identity
If client, this field contains the current identity for server; When this field is NULL,...
Definition: coap_session_internal.h:118
coap_session_t::state
coap_session_state_t state
current state of relationship with peer
Definition: coap_session_internal.h:71
coap_session_t::csm_bert_rem_support
uint8_t csm_bert_rem_support
CSM TCP BERT blocks supported (remote)
Definition: coap_session_internal.h:179
coap_session_t::hh
UT_hash_handle hh
Definition: coap_session_internal.h:78
coap_session_t::tx_token
uint64_t tx_token
Next token number to use.
Definition: coap_session_internal.h:205
coap_session_t::block_mode
uint8_t block_mode
Zero or more COAP_BLOCK_ or'd options.
Definition: coap_session_internal.h:181
coap_session_t::read_header
uint8_t read_header[8]
storage space for header of incoming message header
Definition: coap_session_internal.h:106
coap_session_t::csm_bert_loc_support
uint8_t csm_bert_loc_support
CSM TCP BERT blocks supported (local)
Definition: coap_session_internal.h:180
coap_session_t::addr_info
coap_addr_tuple_t addr_info
remote/local address info
Definition: coap_session_internal.h:79
coap_session_t::proto
coap_proto_t proto
protocol used
Definition: coap_session_internal.h:69
coap_session_t::tx_mid
uint16_t tx_mid
the last message id that was used in this session
Definition: coap_session_internal.h:88
coap_session_t::ref
unsigned ref
reference count from queues
Definition: coap_session_internal.h:73
coap_session_t::csm_rcv_mtu
size_t csm_rcv_mtu
CSM mtu (rcv)
Definition: coap_session_internal.h:76
coap_session_t::psk_hint
coap_bin_const_t * psk_hint
If client, this field contains the server provided identity hint.
Definition: coap_session_internal.h:136
coap_session_t::last_token
coap_bin_const_t * last_token
Definition: coap_session_internal.h:206
coap_session_t::cpsk_setup_data
coap_dtls_cpsk_t cpsk_setup_data
client provided PSK initial setup data
Definition: coap_session_internal.h:116
coap_session_t::mtu
size_t mtu
path or CSM mtu (xmt)
Definition: coap_session_internal.h:75
coap_session_t::remote_test_mid
uint16_t remote_test_mid
mid used for checking remote support
Definition: coap_session_internal.h:202
coap_session_t::no_observe_cancel
uint8_t no_observe_cancel
Set if do not cancel observe on session close.
Definition: coap_session_internal.h:185
coap_session_t::partial_read
size_t partial_read
if > 0 indicates number of bytes already read for an incoming message
Definition: coap_session_internal.h:108
coap_session_t::dtls_event
int dtls_event
Tracking any (D)TLS events on this session.
Definition: coap_session_internal.h:176
coap_session_t::tls
void * tls
security parameters
Definition: coap_session_internal.h:87
coap_session_t::max_retransmit
uint16_t max_retransmit
maximum re-transmit count (default 4)
Definition: coap_session_internal.h:150
coap_session_t::csm_block_supported
uint8_t csm_block_supported
CSM TCP blocks supported.
Definition: coap_session_internal.h:91
coap_session_t::ack_random_factor
coap_fixed_point_t ack_random_factor
ack random factor backoff (default 1.5)
Definition: coap_session_internal.h:148
coap_session_t::proxy_session
uint8_t proxy_session
Set if this is an ongoing proxy session.
Definition: coap_session_internal.h:183
coap_session_t::con_active
uint8_t con_active
Active CON request sent.
Definition: coap_session_internal.h:90
coap_session_t::delayqueue
coap_queue_t * delayqueue
list of delayed messages waiting to be sent
Definition: coap_session_internal.h:94
coap_session_t::tls_overhead
size_t tls_overhead
overhead of TLS layer
Definition: coap_session_internal.h:74
coap_session_t::app
void * app
application-specific data
Definition: coap_session_internal.h:145
coap_session_t::tx_rtag
uint32_t tx_rtag
Next Request-Tag number to use.
Definition: coap_session_internal.h:178
coap_session_t::last_ping_mid
coap_mid_t last_ping_mid
the last keepalive message id that was used in this session
Definition: coap_session_internal.h:92
coap_session_t::lg_srcv
coap_lg_srcv_t * lg_srcv
Server list of expected large receives.
Definition: coap_session_internal.h:101
coap_session_t::last_ping
coap_tick_t last_ping
Definition: coap_session_internal.h:113
coap_session_t::lg_crcv
coap_lg_crcv_t * lg_crcv
Client list of expected large receives.
Definition: coap_session_internal.h:98
coap_session_t::ack_timeout
coap_fixed_point_t ack_timeout
timeout waiting for ack (default 2.0 secs)
Definition: coap_session_internal.h:146
coap_session_t::default_leisure
coap_fixed_point_t default_leisure
Mcast leisure time (default 5.0 secs)
Definition: coap_session_internal.h:154
coap_session_t::last_con_mid
coap_mid_t last_con_mid
The last CON mid that has been been processed.
Definition: coap_session_internal.h:210
coap_session_t::type
coap_session_type_t type
client or server side socket
Definition: coap_session_internal.h:70
coap_session_t::probing_rate
uint32_t probing_rate
Max transfer wait when remote is not respoding (default 1 byte/sec)
Definition: coap_session_internal.h:156
coap_session_t::last_ack_mid
coap_mid_t last_ack_mid
The last ACK mid that has been been processed.
Definition: coap_session_internal.h:208
coap_session_t::last_tx_rst
coap_tick_t last_tx_rst
Definition: coap_session_internal.h:112
coap_session_t::context
coap_context_t * context
session's context
Definition: coap_session_internal.h:86
coap_session_t::partial_write
size_t partial_write
if > 0 indicates number of bytes already written from the pdu at the head of sendqueue
Definition: coap_session_internal.h:103
coap_session_t::addr_hash
coap_addr_hash_t addr_hash
Address hash for server incoming packets.
Definition: coap_session_internal.h:77
coap_session_t::csm_tx
coap_tick_t csm_tx
Definition: coap_session_internal.h:115
coap_session_t::ifindex
int ifindex
interface index
Definition: coap_session_internal.h:80
coap_session_t::echo
coap_bin_const_t * echo
last token used to make a request
Definition: coap_session_internal.h:207
coap_socket_t
Definition: coap_io_internal.h:34
coap_str_const_t
CoAP string data definition with const data.
Definition: coap_str.h:46
coap_ws_state_t
WebSockets session state.
Definition: coap_ws_internal.h:37
oscore_association_t
Definition: oscore_context.h:142
oscore_recipient_ctx_t
Definition: oscore_context.h:112