Helium
he_internal.h
Go to the documentation of this file.
1 
28 #ifndef HE_INTERNAL
29 #define HE_INTERNAL
30 
31 #include "he.h"
32 
33 // Needed headers
34 #include <stdbool.h>
35 #include <stdint.h>
36 
37 #ifdef HE_ENABLE_MULTITHREADED
38 #include <stdatomic.h>
39 #endif
40 
41 // Network headers
42 #include "he_plugin.h"
43 
44 // Dynamic MTU
45 #include "pmtud.h"
46 
47 // WolfSSL
48 #ifndef WOLFSSL_USER_SETTINGS
49 #include <wolfssl/options.h>
50 #endif
51 #include <wolfssl/ssl.h>
52 #include <wolfssl/wolfcrypt/settings.h>
53 #include <wolfssl/wolfcrypt/random.h>
54 
55 #ifdef HE_ENABLE_MULTITHREADED
56 # define HE_ATOMIC _Atomic
57 #else
58 # define HE_ATOMIC
59 #endif
60 
61 #pragma pack(1)
62 
63 #ifndef HE_THREAD_LOCAL
64 # if __STDC_VERSION__ >= 201112 && !defined __STDC_NO_THREADS__
65 # define HE_THREAD_LOCAL _Thread_local
66 # elif defined _WIN32
67 # define HE_THREAD_LOCAL __declspec(thread)
68 # elif defined __APPLE__
69 # define HE_THREAD_LOCAL __thread
70 # else
71 # error "Cannot define HE_THREAD_LOCAL"
72 # endif
73 #endif
74 
75 typedef struct he_packet_buffer {
76  // Buffer has data
77  bool has_packet;
78  // Size of packet
79  int packet_size;
80  // The packet itself
81  uint8_t packet[HE_MAX_WIRE_MTU];
83 
84 // Note that this is *not* intended for use on the wire; this struct is part of
85 // the internal API and just conveniently connects these two numbers together.
86 typedef struct he_version_info {
87  // Version of the wire protocol
88  uint8_t major_version;
89  uint8_t minor_version;
91 
92 struct he_ssl_ctx {
96  bool use_chacha;
97  // Location of Client CA certificate in PEM format
98  uint8_t *cert_buffer;
101 
102  // Server certificate location
103  char const *server_cert;
104  // Server certificate key location
105  char const *server_key;
106 
107  he_connection_type_t connection_type;
120  // Callback for events
121  he_event_cb_t event_cb;
122  // Callbacks for auth (server-only)
123  he_auth_cb_t auth_cb;
124  he_auth_buf_cb_t auth_buf_cb;
125  he_auth_token_cb_t auth_token_cb;
126  // Callback for populating the network config (server-only)
127  he_populate_network_config_ipv4_cb_t populate_network_config_ipv4_cb;
128  // Callback for pmtud
129  he_pmtud_time_cb_t pmtud_time_cb;
130  he_pmtud_state_change_cb_t pmtud_state_change_cb;
138  bool use_pqc;
139 
141  WOLFSSL_CTX *wolf_ctx;
142  // Random number generator
143  RNG wolf_rng;
144 
147  he_version_info_t maximum_supported_version;
148 
151 };
152 
153 typedef struct he_internal_pmtud_ {
156 
158  HE_ATOMIC uint16_t effective_pmtu;
159 
161  uint16_t base;
162  uint8_t probe_count;
163  uint16_t probing_size;
164  bool is_using_big_step;
165  uint16_t probe_pending_id;
167 
169 
170 struct he_conn {
171  // -------------- Configs (Immutable) -----------------
172 
176  bool is_server;
177 
178  he_plugin_chain_t *inside_plugins;
179  he_plugin_chain_t *outside_plugins;
180 
181  uint8_t auth_type;
182 
187 
190 
192  uint8_t auth_buffer[HE_MAX_MTU];
193  uint16_t auth_buffer_length;
194 
196  uint16_t outside_mtu;
197 
198  void *data;
199 
200  // Data from the SSL context config copied here to make this hermetic
208  bool use_pqc;
211 
224  // Callback for events
225  he_event_cb_t event_cb;
226  // Callback for auth (server-only)
227  he_auth_cb_t auth_cb;
228  he_auth_token_cb_t auth_token_cb;
229  he_auth_buf_cb_t auth_buf_cb;
230  // Callback for populating the network config (server-only)
231  he_populate_network_config_ipv4_cb_t populate_network_config_ipv4_cb;
232  // Callback for pmtud
233  he_pmtud_time_cb_t pmtud_time_cb;
234  he_pmtud_state_change_cb_t pmtud_state_change_cb;
235 
238 
240  RNG wolf_rng;
241 
243  WOLFSSL *wolf_ssl;
244 
245  // -------------- State (Mutable) -----------------
246 
249 
251  HE_ATOMIC int wolf_timeout;
252 
254  uint8_t *incoming_data;
263 
266 
268  HE_ATOMIC uint64_t session_id;
269  HE_ATOMIC uint64_t pending_session_id;
270 
272  HE_ATOMIC bool first_message_received;
273 
275  HE_ATOMIC bool is_nudge_timer_running;
276 
277  bool renegotiation_in_progress;
278  bool renegotiation_due;
279 
281  uint16_t ping_next_id;
283  uint16_t ping_pending_id;
284 
285  he_internal_pmtud_t pmtud;
286 
288  HE_ATOMIC uint16_t frag_next_id;
289  he_fragment_table_t *frag_table;
290 
291 #ifndef HE_ENABLE_MULTITHREADED
292  int wolf_error;
294 #endif
295 };
296 
298  plugin_struct_t *plugin;
299  he_plugin_chain_t *next;
300 };
301 
302 // MSG IDs
303 typedef enum msg_ids {
334 } msg_ids_t;
335 
336 typedef struct he_msg_hdr {
337  uint8_t msgid;
338 } he_msg_hdr_t;
339 
340 typedef struct he_msg_ping {
341  he_msg_hdr_t msg_header;
343  uint16_t id;
345  uint16_t length;
347  uint8_t payload[];
348 } he_msg_ping_t;
349 
350 typedef struct he_msg_pong {
351  he_msg_hdr_t msg_header;
353  uint16_t id;
355  uint16_t reserved;
356 } he_msg_pong_t;
357 
358 typedef struct he_msg_auth_hdr {
359  he_msg_hdr_t msg_header;
360  uint8_t auth_type;
362 
363 typedef struct he_msg_auth {
364  he_msg_auth_hdr_t header;
365  uint8_t username_length;
366  uint8_t password_length;
367  char username[HE_CONFIG_TEXT_FIELD_LENGTH];
368  char password[HE_CONFIG_TEXT_FIELD_LENGTH];
369 } he_msg_auth_t;
370 
371 typedef struct he_msg_auth_token {
372  he_msg_auth_hdr_t header;
373  uint16_t token_length;
374  uint8_t token[];
376 
377 typedef struct he_msg_auth_buf {
378  he_msg_auth_hdr_t header;
379  uint16_t buffer_length;
380  uint8_t buffer[];
382 
383 typedef struct he_msg_server_config {
384  he_msg_hdr_t msg_header;
385  uint16_t buffer_length;
386  uint8_t buffer[];
388 
389 typedef struct he_msg_config_ipv4 {
390  he_msg_hdr_t msg_header;
391  char local_ip[HE_MAX_IPV4_STRING_LENGTH];
392  char peer_ip[HE_MAX_IPV4_STRING_LENGTH];
393  char dns_ip[HE_MAX_IPV4_STRING_LENGTH];
394  char mtu[HE_MAX_IPV4_STRING_LENGTH];
395  uint64_t session;
397 
398 typedef struct he_msg_data {
399  he_msg_hdr_t msg_header;
400  uint16_t length;
401 } he_msg_data_t;
402 
403 #define HE_FRAG_MF_MASK 0x2000
404 #define HE_FRAG_OFF_MASK 0x1FFF
405 #define HE_FRAG_TTL 64
406 
407 typedef struct he_msg_data_frag {
408  he_msg_hdr_t msg_header;
409  uint16_t length;
410  uint16_t id; // fragment id
411  uint16_t offset; // fragment offset and mf flag
413 
414 typedef struct he_deprecated_msg_13 {
415  he_msg_hdr_t msg_header;
416  uint16_t length;
417  uint16_t _unused;
419 
420 #define HE_AUTH_STATUS_SUCCESS 0
421 #define HE_AUTH_STATUS_FAILURE 1
422 
423 typedef struct he_msg_auth_response {
424  he_msg_hdr_t msg_header;
425  uint8_t status;
426  uint8_t status_msg_length;
427  char status_msg[HE_CONFIG_TEXT_FIELD_LENGTH];
429 
430 typedef struct he_msg_session_request {
431  he_msg_hdr_t msg_header;
433 
434 typedef struct he_msg_session_response {
435  he_msg_hdr_t msg_header;
436  uint64_t session;
438 
439 typedef struct he_msg_goodbye {
440  he_msg_hdr_t msg_header;
442 
443 #define HE_EXT_TYPE_REQUEST 1
444 #define HE_EXT_TYPE_RESPONSE 2
445 
446 #define HE_EXT_ID_BLOCK_DNS_OVER_TLS 1
447 
448 #define HE_EXT_PAYLOAD_TYPE_MSGPACK 1
449 #define HE_EXT_PAYLOAD_TYPE_BINARY 2
450 #define HE_EXT_PAYLOAD_TYPE_INT16 3
451 
452 typedef struct he_msg_extension {
453  he_msg_hdr_t msg_header;
454  uint16_t extension_id;
455  uint8_t msg_type;
456  uint8_t payload_type;
457  uint16_t payload_length;
458  uint8_t data;
460 
461 // D/TLS headers + AES crypto fields
462 #define HE_WOLF_MAX_HEADER_SIZE 37
463 #define HE_IPV4_HEADER_SIZE 20
464 #define HE_TCP_HEADER_SIZE 20
465 #define HE_UDP_HEADER_SIZE 8
466 
467 // Add a gap to avoid normal ADSL / PPPoX type overhead
468 #define HE_HEADER_SAFE_GAP 28
469 static const size_t HE_PACKET_OVERHEAD = sizeof(he_deprecated_msg_13_t) + sizeof(he_wire_hdr_t) +
470  HE_IPV4_HEADER_SIZE + HE_UDP_HEADER_SIZE +
471  HE_WOLF_MAX_HEADER_SIZE + HE_HEADER_SAFE_GAP;
472 
473 #define HE_MSS_OVERHEAD (HE_IPV4_HEADER_SIZE + HE_TCP_HEADER_SIZE)
474 
475 #pragma pack()
476 
477 #endif
he_msg_ping
Definition: he_internal.h:340
HE_MSGID_AUTH_RESPONSE
@ HE_MSGID_AUTH_RESPONSE
Auth response.
Definition: he_internal.h:317
he_packet_buffer
Definition: he_internal.h:75
he_msg_ping::length
uint16_t length
Length of the payload.
Definition: he_internal.h:345
he_ssl_ctx::network_config_ipv4_cb
he_network_config_ipv4_cb_t network_config_ipv4_cb
Network config callback.
Definition: he_internal.h:115
he_pmtud_state_t
enum he_pmtud_state he_pmtud_state_t
Lightway Path MTU Discovery states.
he_version_info
Definition: he_internal.h:86
he_msg_config_ipv4
Definition: he_internal.h:389
he_inside_write_cb_t
he_return_code_t(* he_inside_write_cb_t)(he_conn_t *conn, uint8_t *packet, size_t length, void *context)
The prototype for the inside write callback function.
Definition: he.h:372
HE_MSGID_EXTENSION
@ HE_MSGID_EXTENSION
Helium Extension message.
Definition: he_internal.h:321
he_msg_auth_response
Definition: he_internal.h:423
he_conn::is_server
bool is_server
Definition: he_internal.h:176
he_populate_network_config_ipv4_cb_t
he_return_code_t(* he_populate_network_config_ipv4_cb_t)(he_conn_t *conn, he_network_config_ipv4_t *config, void *context)
The prototype for the population of the network config.
Definition: he.h:507
he_conn::sni_hostname
char sni_hostname[HE_MAX_HOSTNAME_LENGTH+1]
SNI Hostname.
Definition: he_internal.h:189
he_conn::padding_type
he_padding_type_t padding_type
Which padding type to use.
Definition: he_internal.h:204
he_ssl_ctx::use_pqc
bool use_pqc
Use PQC Keyshares.
Definition: he_internal.h:138
he_state_change_cb_t
he_return_code_t(* he_state_change_cb_t)(he_conn_t *conn, he_conn_state_t new_state, void *context)
The prototype for the state callback function.
Definition: he.h:358
he_conn::protocol_version
he_version_info_t protocol_version
Connection version – set on client side, accepted on server side.
Definition: he_internal.h:237
HE_MSGID_DEPRECATED_13
@ HE_MSGID_DEPRECATED_13
Deprecated message - same as Data packet with an unused int flag.
Definition: he_internal.h:329
he_plugin.h
The internal plugin API definitions.
he_nudge_time_cb_t
he_return_code_t(* he_nudge_time_cb_t)(he_conn_t *conn, int timeout, void *context)
The prototype for the nudge time callback function.
Definition: he.h:449
he_conn::frag_next_id
HE_ATOMIC uint16_t frag_next_id
UDP Fragmentation.
Definition: he_internal.h:288
he_internal_pmtud_::state
he_pmtud_state_t state
Path MTU Discovery state.
Definition: he_internal.h:155
HE_MSGID_SESSION_REQUEST
@ HE_MSGID_SESSION_REQUEST
Session Request.
Definition: he_internal.h:323
he_ssl_ctx::inside_write_cb
he_inside_write_cb_t inside_write_cb
Callback for writing to the inside (i.e. a TUN device)
Definition: he_internal.h:111
he_conn_state_t
enum he_conn_state he_conn_state_t
Status codes for a Helium connection.
he_conn::first_message_received
HE_ATOMIC bool first_message_received
Has the first message been received?
Definition: he_internal.h:272
HE_MSGID_AUTH_RESPONSE_WITH_CONFIG
@ HE_MSGID_AUTH_RESPONSE_WITH_CONFIG
Auth response with config (fast login)
Definition: he_internal.h:319
HE_MSGID_NOOP
@ HE_MSGID_NOOP
NOOP - nothing to do.
Definition: he_internal.h:305
he_msg_data
Definition: he_internal.h:398
he_conn::password
char password[HE_CONFIG_TEXT_FIELD_LENGTH+1]
VPN password – room for a null on the end.
Definition: he_internal.h:186
he_conn::disable_roaming_connections
bool disable_roaming_connections
Don't send session ID in packet header.
Definition: he_internal.h:202
he_msg_ping::id
uint16_t id
Identifier for matching the reply message.
Definition: he_internal.h:343
he_conn::incoming_data
uint8_t * incoming_data
Pointer to incoming data buffer.
Definition: he_internal.h:254
he_msg_server_config
Definition: he_internal.h:383
HE_MSGID_SERVER_CONFIG
@ HE_MSGID_SERVER_CONFIG
Server configuration data pushed to the client by the server.
Definition: he_internal.h:331
he_conn::use_aggressive_mode
bool use_aggressive_mode
Use aggressive mode.
Definition: he_internal.h:206
he_padding_type_t
enum he_padding_type he_padding_type_t
Helium supports numerous padding levels, from none to full. This enum defines which options can be ch...
he_msg_auth_hdr
Definition: he_internal.h:358
HE_MSGID_DATA
@ HE_MSGID_DATA
Data packet - contains data to be sent to the tun device.
Definition: he_internal.h:313
he_server_config_cb_t
he_return_code_t(* he_server_config_cb_t)(he_conn_t *conn, uint8_t *buffer, size_t length, void *context)
The prototype for the server config callback function.
Definition: he.h:415
HE_MSGID_DATA_WITH_FRAG
@ HE_MSGID_DATA_WITH_FRAG
Fragmented Data Packet.
Definition: he_internal.h:333
he_conn::outside_write_cb
he_outside_write_cb_t outside_write_cb
Callback for writing to the outside (i.e. a socket)
Definition: he_internal.h:219
he_pmtud_time_cb_t
he_return_code_t(* he_pmtud_time_cb_t)(he_conn_t *conn, int timeout, void *context)
The prototype for the Path MTU Discovery (PMTUD) time callback function.
Definition: he.h:528
he_conn::server_config_cb
he_server_config_cb_t server_config_cb
Server config callback.
Definition: he_internal.h:223
plugin_struct
Data structure of a helium plugin.
Definition: he_plugin.h:76
HE_MSGID_GOODBYE
@ HE_MSGID_GOODBYE
Tell the other side that we're closing down.
Definition: he_internal.h:327
he_ssl_ctx::state_change_cb
he_state_change_cb_t state_change_cb
State callback.
Definition: he_internal.h:109
HE_MSGID_AUTH
@ HE_MSGID_AUTH
Authentication Request (only server should see this)
Definition: he_internal.h:311
he_ssl_ctx::outside_write_cb
he_outside_write_cb_t outside_write_cb
Callback for writing to the outside (i.e. a socket)
Definition: he_internal.h:113
HE_MSGID_PONG
@ HE_MSGID_PONG
Pong - response to a Ping request.
Definition: he_internal.h:309
he_internal_pmtud_::base
uint16_t base
PMTUD internal data.
Definition: he_internal.h:161
he_ssl_ctx::minimum_supported_version
he_version_info_t minimum_supported_version
Supported versions for this context.
Definition: he_internal.h:146
he_msg_auth_buf
Definition: he_internal.h:377
he_auth_buf_cb_t
bool(* he_auth_buf_cb_t)(he_conn_t *conn, uint8_t auth_type, uint8_t *buffer, uint16_t length, void *context)
The prototype for the authentication buffer callback.
Definition: he.h:493
he_conn::incoming_data_length
size_t incoming_data_length
Length of the data in the.
Definition: he_internal.h:256
he_conn::inside_write_cb
he_inside_write_cb_t inside_write_cb
Callback for writing to the inside (i.e. a TUN device)
Definition: he_internal.h:217
he_conn::auth_buffer
uint8_t auth_buffer[HE_MAX_MTU]
Authentication data for either HE_AUTH_TYPE_TOKEN or HE_AUTH_TYPE_CB.
Definition: he_internal.h:192
he_conn::incoming_data_read_offset_ptr
uint8_t * incoming_data_read_offset_ptr
Index into the incoming data buffer.
Definition: he_internal.h:262
HE_MAX_IPV4_STRING_LENGTH
#define HE_MAX_IPV4_STRING_LENGTH
Maximum size of an IPV4 String.
Definition: he.h:61
he_msg_auth_token
Definition: he_internal.h:371
he_conn::outside_mtu
uint16_t outside_mtu
MTU Helium should use for the outside connection (i.e. Internet)
Definition: he_internal.h:196
he_conn::state
HE_ATOMIC he_conn_state_t state
Client State.
Definition: he_internal.h:248
he_conn::wolf_ssl
WOLFSSL * wolf_ssl
WolfSSL stuff.
Definition: he_internal.h:243
he_ssl_ctx::max_frag_entries
size_t max_frag_entries
Maximum Fragment Entries.
Definition: he_internal.h:150
he_auth_cb_t
bool(* he_auth_cb_t)(he_conn_t *conn, char const *username, char const *password, void *context)
The prototype for the authentication callback.
Definition: he.h:463
he_conn::state_change_cb
he_state_change_cb_t state_change_cb
State callback.
Definition: he_internal.h:213
HE_MAX_HOSTNAME_LENGTH
#define HE_MAX_HOSTNAME_LENGTH
Maximum size of a hostname.
Definition: he.h:63
he_conn::connection_type
he_connection_type_t connection_type
TCP or UDP?
Definition: he_internal.h:210
he_msg_auth
Definition: he_internal.h:363
he_conn::use_pqc
bool use_pqc
Use PQC Keyshares.
Definition: he_internal.h:208
he_ssl_ctx::padding_type
he_padding_type_t padding_type
Which padding type to use.
Definition: he_internal.h:134
he_ssl_ctx::wolf_ctx
WOLFSSL_CTX * wolf_ctx
WolfSSL global context.
Definition: he_internal.h:141
he_msg_session_request
Definition: he_internal.h:430
he_ssl_ctx::nudge_time_cb
he_nudge_time_cb_t nudge_time_cb
Nudge timer.
Definition: he_internal.h:119
he_ssl_ctx::use_aggressive_mode
bool use_aggressive_mode
Use aggressive mode.
Definition: he_internal.h:136
he_conn::wolf_rng
RNG wolf_rng
Random number generator.
Definition: he_internal.h:240
he_conn::nudge_time_cb
he_nudge_time_cb_t nudge_time_cb
Nudge timer.
Definition: he_internal.h:215
he.h
Core public header file for libhelium.
msg_ids
msg_ids
Definition: he_internal.h:303
he_connection_type_t
enum he_connection_type he_connection_type_t
Helium can operate in datagram or stream modes. This enum defines these two modes.
he_ssl_ctx::disable_roaming_connections
bool disable_roaming_connections
Don't send session ID in packet header.
Definition: he_internal.h:132
he_auth_token_cb_t
bool(* he_auth_token_cb_t)(he_conn_t *conn, const uint8_t *token, size_t len, void *context)
The prototype for the authentication token callback.
Definition: he.h:478
he_wire_hdr
The wire header format It is strongly discouraged to interact with this header structure,...
Definition: he.h:564
HE_MSGID_SESSION_RESPONSE
@ HE_MSGID_SESSION_RESPONSE
Session Response.
Definition: he_internal.h:325
he_ssl_ctx
Definition: he_internal.h:92
he_conn::session_id
HE_ATOMIC uint64_t session_id
Session ID.
Definition: he_internal.h:268
he_pmtud_state_change_cb_t
he_return_code_t(* he_pmtud_state_change_cb_t)(he_conn_t *conn, he_pmtud_state_t state, void *context)
The prototype for Lightway PMTUD state callback function.
Definition: he.h:546
he_plugin_chain
Definition: he_internal.h:297
he_conn::is_nudge_timer_running
HE_ATOMIC bool is_nudge_timer_running
Do we already have a timer running? If so, we don't want to generate new callbacks.
Definition: he_internal.h:275
he_ssl_ctx::use_chacha
bool use_chacha
Whether or not to use the CHACHA20 cipher.
Definition: he_internal.h:96
HE_MSGID_CONFIG_IPV4
@ HE_MSGID_CONFIG_IPV4
Config.
Definition: he_internal.h:315
he_msg_pong::id
uint16_t id
Identifier of the matching ping message.
Definition: he_internal.h:353
he_msg_hdr
Definition: he_internal.h:336
he_msg_goodbye
Definition: he_internal.h:439
he_outside_write_cb_t
he_return_code_t(* he_outside_write_cb_t)(he_conn_t *conn, uint8_t *packet, size_t length, void *context)
The prototype for the outside write callback function.
Definition: he.h:386
he_conn::ping_next_id
uint16_t ping_next_id
Identifier of the next ping message.
Definition: he_internal.h:281
he_conn::incoming_data_left_to_read
size_t incoming_data_left_to_read
Bytes left to read in the packet buffer (Streaming only)
Definition: he_internal.h:260
he_msg_session_response
Definition: he_internal.h:434
he_ssl_ctx::server_dn
char server_dn[HE_CONFIG_TEXT_FIELD_LENGTH+1]
Server Distinguished Name – room for a null on the end.
Definition: he_internal.h:94
he_conn::username
char username[HE_CONFIG_TEXT_FIELD_LENGTH+1]
VPN username – room for a null on the end.
Definition: he_internal.h:184
he_conn::packet_seen
bool packet_seen
Packet seen.
Definition: he_internal.h:258
he_conn::write_buffer
uint8_t write_buffer[HE_MAX_WIRE_MTU]
Write buffer.
Definition: he_internal.h:265
he_internal_pmtud_::effective_pmtu
HE_ATOMIC uint16_t effective_pmtu
Current effective PMTU.
Definition: he_internal.h:158
he_conn::ping_pending_id
uint16_t ping_pending_id
Identifier of the ping message pending reply.
Definition: he_internal.h:283
he_internal_pmtud_
Definition: he_internal.h:153
he_msg_extension
Definition: he_internal.h:452
he_event_cb_t
he_return_code_t(* he_event_cb_t)(he_conn_t *conn, he_conn_event_t event, void *context)
The prototype for the event callback function.
Definition: he.h:427
he_network_config_ipv4_cb_t
he_return_code_t(* he_network_config_ipv4_cb_t)(he_conn_t *conn, he_network_config_ipv4_t *config, void *context)
The prototype for the network config callback function.
Definition: he.h:399
he_conn::wolf_error
int wolf_error
Last wolfssl error.
Definition: he_internal.h:293
he_conn::wolf_timeout
HE_ATOMIC int wolf_timeout
Wolf Timeout.
Definition: he_internal.h:251
he_msg_pong::reserved
uint16_t reserved
Reserved for backward-compatibility.
Definition: he_internal.h:355
he_conn
Definition: he_internal.h:170
HE_MSGID_PING
@ HE_MSGID_PING
Ping request.
Definition: he_internal.h:307
he_ssl_ctx::server_config_cb
he_server_config_cb_t server_config_cb
Server config callback.
Definition: he_internal.h:117
he_msg_pong
Definition: he_internal.h:350
he_ssl_ctx::cert_buffer_size
size_t cert_buffer_size
The size of the Client CA certificate chain.
Definition: he_internal.h:100
he_fragment_table
Definition: frag.h:54
he_msg_ping::payload
uint8_t payload[]
Payload.
Definition: he_internal.h:347
he_conn::network_config_ipv4_cb
he_network_config_ipv4_cb_t network_config_ipv4_cb
Network config callback.
Definition: he_internal.h:221
HE_MAX_WIRE_MTU
#define HE_MAX_WIRE_MTU
Default MTU sizes.
Definition: he.h:41
pmtud.h
Path MTU Discovery functions.
he_deprecated_msg_13
Definition: he_internal.h:414
HE_CONFIG_TEXT_FIELD_LENGTH
#define HE_CONFIG_TEXT_FIELD_LENGTH
Helpful deprecation macro.
Definition: he.h:59
he_msg_data_frag
Definition: he_internal.h:407