Loading...
Searching...
No Matches
message.h
Go to the documentation of this file.
1 /*
2 * SPDX-FileCopyrightText: 2024-2026 Carl Seifert
3 * SPDX-FileCopyrightText: 2024-2026 TU Dresden
4 * SPDX-License-Identifier: LGPL-2.1-only
5 */
6
7#pragma once
8
9#include <stdint.h>
10#include <stdbool.h>
11#include <stddef.h>
12#include <string.h>
13
14#include "iolist.h"
15
17#include "net/unicoap/options.h"
18
23
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34/* MARK: - CoAP message */
53
72typedef struct {
81
85 union {
89 struct {
95 uint8_t* payload;
96
104 };
105
115 };
116
117 union {
128 uint8_t code;
129
130 /* Note:
131 * Method, status, and signal are guaranteed to have the same size as uint8_t,
132 * see static_asserts in definitions.h
133 */
134
142
150
158 };
159
168
178static inline uint8_t* unicoap_message_payload_get(unicoap_message_t* message)
179{
181 return message->payload;
182}
183
192static inline void unicoap_message_payload_set(unicoap_message_t* message, uint8_t* payload,
193 size_t size)
194{
196 message->payload = payload;
197 message->payload_size = size;
198}
199
214
223{
225 message->payload_chunks = chunks;
226}
227
237
248static inline size_t unicoap_message_payload_get_size(const unicoap_message_t* message)
249{
251 iolist_size(message->payload_chunks) :
252 message->payload_size;
253}
254
265
278ssize_t unicoap_message_payload_copy(const unicoap_message_t* message, uint8_t* buffer,
279 size_t capacity);
280
292 size_t capacity);
293
327
341
348static inline uint8_t* unicoap_message_options_data(const unicoap_message_t* message)
349{
350 return message->options ? unicoap_options_data(message->options) : NULL;
351}
352
359static inline size_t unicoap_message_options_size(const unicoap_message_t* message)
360{
361 return message->options ? message->options->storage_size : 0;
362}
363
364
365/* MARK: - CoAP code */
388static inline uint8_t unicoap_code_class(uint8_t code)
389{
390 return code >> 5;
391}
392
411static inline uint8_t unicoap_code_detail(uint8_t code)
412{
413 return code & 0x1f;
414}
415
420int unicoap_print_code(uint8_t code);
421
430const char* unicoap_string_from_code(uint8_t code);
431
440const char* unicoap_string_from_code_class(uint8_t code);
442
443/* MARK: - Message initializers */
455static inline void unicoap_message_init_empty(unicoap_message_t* message, uint8_t code)
456{
457 message->code = code;
458 message->options = NULL;
459 message->payload = NULL;
460 message->payload_size = 0;
462}
463
470{
471 return (unicoap_message_t){ .code = code };
472}
473
483static inline void unicoap_message_init(unicoap_message_t* message, uint8_t code, uint8_t* payload,
484 size_t payload_size)
485{
486 message->code = code;
487 message->options = NULL;
488 message->payload = payload;
489 message->payload_size = payload_size;
491}
492
500static inline unicoap_message_t unicoap_message_alloc(uint8_t code, uint8_t* payload,
501 size_t payload_size)
502{
503 return (unicoap_message_t){ .code = code,
504 .options = NULL,
505 .payload = payload,
506 .payload_size = payload_size,
507 .payload_representation = UNICOAP_PAYLOAD_CONTIGUOUS };
508}
509
519static inline void unicoap_message_init_string(unicoap_message_t* message, uint8_t code,
520 const char* payload)
521{
522 unicoap_message_init(message, code, (uint8_t*)payload, payload ? strlen(payload) : 0);
523}
524
531static inline unicoap_message_t unicoap_message_alloc_string(uint8_t code, const char* payload)
532{
533 return (unicoap_message_t){ .code = code,
534 .options = NULL,
535 .payload = (uint8_t*)payload,
536 .payload_size = payload ? strlen(payload) : 0,
537 .payload_representation = UNICOAP_PAYLOAD_CONTIGUOUS };
538}
539
552static inline void unicoap_message_init_with_options(unicoap_message_t* message, uint8_t code,
553 uint8_t* payload, size_t payload_size,
555{
556 message->code = code;
557 message->options = options;
558 message->payload = payload;
559 message->payload_size = payload_size;
561}
562
572static inline unicoap_message_t unicoap_message_alloc_with_options(uint8_t code, uint8_t* payload,
573 size_t payload_size,
574 unicoap_options_t* options)
575{
576 return (unicoap_message_t){ .code = code,
577 .options = options,
578 .payload = payload,
579 .payload_size = payload_size,
580 .payload_representation = UNICOAP_PAYLOAD_CONTIGUOUS };
581}
582
594static inline
596 const char* payload,
598{
600 payload ? strlen(payload) : 0, options);
601}
602
611static inline
613 const char* payload,
614 unicoap_options_t* options)
615{
616 return (unicoap_message_t){ .code = code,
617 .options = options,
618 .payload = (uint8_t*)payload,
619 .payload_size = payload ? strlen(payload) : 0,
620 .payload_representation = UNICOAP_PAYLOAD_CONTIGUOUS };
621}
622
623
624/* MARK: - Signaling messages */
638static inline bool unicoap_message_code_is_signal(uint8_t code)
639{
641}
642
651{
652 return message->signal;
653}
654
663{
664 message->signal = signal;
665}
666
677
678/* MARK: - Request messages */
691static inline bool unicoap_message_code_is_request(uint8_t code)
692{
694}
695
704{
705 return request->method;
706}
707
717{
718 request->method = method;
719}
720
730
740{
741 unicoap_message_init_empty(request, (uint8_t)method);
742}
743
750{
751 return unicoap_message_alloc_empty((uint8_t)method);
752}
753
765 uint8_t* payload, size_t payload_size)
766{
767 unicoap_message_init(request, (uint8_t)method, payload, payload_size);
768}
769
777static inline unicoap_message_t unicoap_request_alloc(unicoap_method_t method, uint8_t* payload,
778 size_t payload_size)
779{
780 return unicoap_message_alloc((uint8_t)method, payload, payload_size);
781}
782
793 const char* payload)
794{
795 unicoap_message_init_string(request, (uint8_t)method, payload);
796}
797
805 const char* payload)
806{
807 return unicoap_message_alloc_string((uint8_t)method, payload);
808}
809
829
840 uint8_t* payload,
841 size_t payload_size,
842 unicoap_options_t* options)
843{
844 return unicoap_message_alloc_with_options((uint8_t)method, payload, payload_size, options);
845}
846
865
874static inline
876 const char* payload,
877 unicoap_options_t* options)
878{
879 return unicoap_message_alloc_string_with_options((uint8_t)method, payload, options);
880}
881
882
883/* MARK: - Response messages */
898
907{
908 return response->status;
909}
910
920{
921 response->status = status;
922}
923
930
940{
941 unicoap_message_init_empty(response, (uint8_t)status);
942}
943
950{
951 return unicoap_message_alloc_empty((uint8_t)status);
952}
953
965 uint8_t* payload, size_t payload_size)
966{
967 unicoap_message_init(response, (uint8_t)status, payload, payload_size);
968}
969
977static inline unicoap_message_t unicoap_response_alloc(unicoap_status_t status, uint8_t* payload,
978 size_t payload_size)
979{
980 return unicoap_message_alloc((uint8_t)status, payload, payload_size);
981}
982
993 unicoap_status_t status, const char* payload)
994{
995 unicoap_message_init_string(response, (uint8_t)status, payload);
996}
997
1005 const char* payload)
1006{
1007 return unicoap_message_alloc_string((uint8_t)status, payload);
1008}
1009
1024 uint8_t* payload,
1025 size_t payload_size,
1027{
1029}
1030
1041 uint8_t* payload,
1042 size_t payload_size,
1043 unicoap_options_t* options)
1044{
1045 return unicoap_message_alloc_with_options((uint8_t)status, payload, payload_size, options);
1046}
1047
1066
1075static inline
1077 const char* payload,
1078 unicoap_options_t* options)
1079{
1080 return unicoap_message_alloc_string_with_options((uint8_t)status, payload, options);
1081}
1082
1084
1085/* MARK: - Parsing and Serialization ------------------------------------------------------- */
1090/* MARK: - Parsing */
1110typedef ssize_t (*unicoap_parser_t)(const uint8_t* pdu, size_t size, unicoap_message_t* message,
1111 unicoap_message_properties_t* properties);
1112
1128
1155ssize_t unicoap_pdu_parse_options_and_payload(uint8_t* cursor, const uint8_t* end,
1156 unicoap_message_t* message);
1158
1159/* MARK: - Serializing */
1177ssize_t unicoap_pdu_build_options_and_payload(uint8_t* cursor, size_t remaining_capacity,
1178 const unicoap_message_t* message);
1179
1184#define UNICOAP_PDU_IOLIST_COUNT (4)
1185
1203int unicoap_pdu_buildv_options_and_payload(uint8_t* header, size_t header_size,
1204 const unicoap_message_t* message,
1208
1246ssize_t unicoap_pdu_parse_rfc7252(uint8_t* pdu, size_t size, unicoap_message_t* message,
1247 unicoap_message_properties_t* properties);
1248
1273static inline ssize_t unicoap_pdu_parse_rfc7252_result(uint8_t* pdu, size_t size,
1275{
1276 parsed->message.options = &parsed->options;
1277 return unicoap_pdu_parse_rfc7252(pdu, size, &parsed->message, &parsed->properties);
1278}
1279
1280
1296ssize_t unicoap_pdu_build_header_rfc7252(uint8_t* header, size_t capacity,
1297 const unicoap_message_t* message,
1298 const unicoap_message_properties_t* properties);
1299
1312static inline ssize_t unicoap_pdu_build_rfc7252(uint8_t* pdu, size_t capacity,
1313 const unicoap_message_t* message,
1314 const unicoap_message_properties_t* properties)
1315{
1316 ssize_t res = 0;
1317
1318 if ((res = unicoap_pdu_build_header_rfc7252(pdu, capacity, message, properties)) < 0) {
1319 return res;
1320 }
1321 return unicoap_pdu_build_options_and_payload(pdu + res, capacity - res, message) + res;
1322}
1323
1324/* MARK: unicoap_driver_extension_point */
1325
1342static inline ssize_t unicoap_pdu_buildv_rfc7252(uint8_t* header, size_t header_capacity,
1343 const unicoap_message_t* message,
1344 const unicoap_message_properties_t* properties,
1346{
1347 ssize_t res = 0;
1348
1349 if ((res =
1350 unicoap_pdu_build_header_rfc7252(header, header_capacity, message, properties)) < 0) {
1351 return res;
1352 }
1353 return unicoap_pdu_buildv_options_and_payload(header, res, message, iolists);
1354}
1355
1358/* MARK: unicoap_driver_extension_point */
1359
1360#ifdef __cplusplus
1361}
1362#endif
#define assert(cond)
abort the program if assertion is false
Definition assert.h:143
Constants used in CoAP such as option numbers and message codes.
int unicoap_print_code(uint8_t code)
Prints a c.dd class-detail string.
static void unicoap_request_set_method(unicoap_message_t *request, unicoap_method_t method)
Sets request method.
Definition message.h:716
static void unicoap_message_payload_set(unicoap_message_t *message, uint8_t *payload, size_t size)
Assigns the given message a contiguous payload.
Definition message.h:192
static unicoap_message_t unicoap_request_alloc_with_options(unicoap_method_t method, uint8_t *payload, size_t payload_size, unicoap_options_t *options)
Creates request with byte payload and options.
Definition message.h:839
static iolist_t * unicoap_message_payload_get_chunks(unicoap_message_t *message)
Retrieves noncontiguous message payload, if available.
Definition message.h:209
static unicoap_message_t unicoap_response_alloc(unicoap_status_t status, uint8_t *payload, size_t payload_size)
Creates response with no payload and no options.
Definition message.h:977
static void unicoap_message_init_with_options(unicoap_message_t *message, uint8_t code, uint8_t *payload, size_t payload_size, unicoap_options_t *options)
Initializes message with byte payload and options.
Definition message.h:552
const char * unicoap_string_from_signal(unicoap_signal_t signal)
Returns label for given CoAP signal code.
static unicoap_message_t unicoap_request_alloc(unicoap_method_t method, uint8_t *payload, size_t payload_size)
Creates request with no payload and no options.
Definition message.h:777
const char * unicoap_string_from_status(unicoap_status_t status)
Generates short descriptive label from CoAP status code.
static void unicoap_request_init_with_options(unicoap_message_t *request, unicoap_method_t method, uint8_t *payload, size_t payload_size, unicoap_options_t *options)
Initializes request with byte payload and options.
Definition message.h:822
static unicoap_message_t unicoap_message_alloc_string_with_options(uint8_t code, const char *payload, unicoap_options_t *options)
Creates message with payload from null-terminated UTF-8 string and options.
Definition message.h:612
static void unicoap_request_init_string(unicoap_message_t *request, unicoap_method_t method, const char *payload)
Initializes request with payload from null-terminated UTF-8 string but no options.
Definition message.h:792
static uint8_t * unicoap_message_options_data(const unicoap_message_t *message)
Retrieves options storage buffer.
Definition message.h:348
static unicoap_message_t unicoap_request_alloc_string_with_options(unicoap_method_t method, const char *payload, unicoap_options_t *options)
Creates request with payload from null-terminated UTF-8 string and options.
Definition message.h:875
static bool unicoap_message_code_is_request(uint8_t code)
Determines if the the given message's code is a a request code.
Definition message.h:691
static uint8_t * unicoap_message_payload_get(unicoap_message_t *message)
Retrieves contiguous message payload, if available.
Definition message.h:178
static unicoap_message_t unicoap_response_alloc_empty(unicoap_status_t status)
Creates response with no payload and no options.
Definition message.h:949
static unicoap_message_t unicoap_message_alloc(uint8_t code, uint8_t *payload, size_t payload_size)
Creates message with no payload and no options.
Definition message.h:500
static void unicoap_message_set_signal(unicoap_message_t *message, unicoap_signal_t signal)
Sets signal code of given signal message.
Definition message.h:662
static unicoap_message_t unicoap_response_alloc_string_with_options(unicoap_status_t status, const char *payload, unicoap_options_t *options)
Creates response with payload from null-terminated UTF-8 string and options.
Definition message.h:1076
static void unicoap_response_init_empty(unicoap_message_t *response, unicoap_status_t status)
Initializes response with no payload and no options.
Definition message.h:939
static void unicoap_message_init_string_with_options(unicoap_message_t *message, uint8_t code, const char *payload, unicoap_options_t *options)
Initializes message with payload from null-terminated UTF-8 string and options.
Definition message.h:595
ssize_t unicoap_message_payload_make_contiguous(unicoap_message_t *message, uint8_t *buffer, size_t capacity)
Copies noncontiguous payload into contiguous storage buffer.
static void unicoap_response_init_string(unicoap_message_t *response, unicoap_status_t status, const char *payload)
Initializes response with payload from null-terminated UTF-8 string but no options.
Definition message.h:992
static unicoap_message_t unicoap_message_alloc_empty(uint8_t code)
Creates message with no payload and no options.
Definition message.h:469
static bool unicoap_message_code_is_signal(uint8_t code)
Determines if the given message's code is a a signaling code.
Definition message.h:638
static uint8_t unicoap_code_detail(uint8_t code)
Reads the code detail number encoded in the given code.
Definition message.h:411
#define UNICOAP_RFC7252_MESSAGE_TYPE_FIXED_WIDTH
Number of bits needed to represent unicoap_rfc7252_message_type_t.
Definition constants.h:76
static unicoap_message_t unicoap_message_alloc_string(uint8_t code, const char *payload)
Creates message with payload from null-terminated but no options.
Definition message.h:531
ssize_t unicoap_message_payload_copy(const unicoap_message_t *message, uint8_t *buffer, size_t capacity)
Copies payload into given buffer.
static uint8_t unicoap_code_class(uint8_t code)
Reads the code class number encoded in the given code.
Definition message.h:388
static void unicoap_request_init_string_with_options(unicoap_message_t *request, unicoap_method_t method, const char *payload, unicoap_options_t *options)
Initializes request with payload from null-terminated UTF-8 string and options.
Definition message.h:858
const char * unicoap_string_from_rfc7252_type(unicoap_rfc7252_message_type_t type)
Returns a null-terminated label for the CoAP over UDP/DTLS message type.
static void unicoap_request_init(unicoap_message_t *request, unicoap_method_t method, uint8_t *payload, size_t payload_size)
Initializes request with payload but no options.
Definition message.h:764
static void unicoap_response_init_with_options(unicoap_message_t *response, unicoap_status_t status, uint8_t *payload, size_t payload_size, unicoap_options_t *options)
Initializes response with byte payload and options.
Definition message.h:1022
static unicoap_status_t unicoap_response_get_status(const unicoap_message_t *response)
Obtains response status from the given message's code.
Definition message.h:906
static size_t unicoap_message_payload_get_size(const unicoap_message_t *message)
Retrieves payload size, regardless of payload representation.
Definition message.h:248
static void unicoap_response_init_string_with_options(unicoap_message_t *response, unicoap_status_t status, const char *payload, unicoap_options_t *options)
Initializes response with payload from null-terminated UTF-8 string and options.
Definition message.h:1059
const char * unicoap_string_from_method(unicoap_method_t method)
Obtains label for given request method.
static unicoap_message_t unicoap_response_alloc_with_options(unicoap_status_t status, uint8_t *payload, size_t payload_size, unicoap_options_t *options)
Creates response with string byte and options.
Definition message.h:1040
static void unicoap_response_init(unicoap_message_t *response, unicoap_status_t status, uint8_t *payload, size_t payload_size)
Initializes response with payload but no options.
Definition message.h:964
unicoap_payload_representation_t
A type indicating how a message's payload is represented.
Definition message.h:42
static void unicoap_request_init_empty(unicoap_message_t *request, unicoap_method_t method)
Initializes request with no payload and no options.
Definition message.h:739
bool unicoap_message_payload_is_empty(const unicoap_message_t *message)
Determines whether message has any payload.
static unicoap_message_t unicoap_message_alloc_with_options(uint8_t code, uint8_t *payload, size_t payload_size, unicoap_options_t *options)
Creates message with byte payload and options.
Definition message.h:572
static unicoap_method_t unicoap_request_get_method(const unicoap_message_t *request)
Obtains request method from the given message's code.
Definition message.h:703
unicoap_status_t
CoAP response status codes.
Definition constants.h:213
static unicoap_message_t unicoap_request_alloc_empty(unicoap_method_t method)
Creates request with no payload and no options.
Definition message.h:749
static void unicoap_message_init_empty(unicoap_message_t *message, uint8_t code)
Initializes message with no payload and no options.
Definition message.h:455
const char * unicoap_string_from_code_class(uint8_t code)
Returns label for given CoAP message code class.
static unicoap_message_t unicoap_response_alloc_string(unicoap_status_t status, const char *payload)
Creates response with payload from null-terminated UTF-8 string but no options.
Definition message.h:1004
unicoap_signal_t
CoAP Signal Message Codes (7.xx range)
Definition constants.h:175
static unicoap_message_t unicoap_request_alloc_string(unicoap_method_t method, const char *payload)
Creates request with payload from null-terminated UTF-8 string but no options.
Definition message.h:804
static void unicoap_message_payload_set_chunks(unicoap_message_t *message, iolist_t *chunks)
Assigns the given message a noncontiguous payload.
Definition message.h:222
unicoap_rfc7252_message_type_t
RFC 7252 message type.
Definition constants.h:81
static void unicoap_response_set_status(unicoap_message_t *response, unicoap_status_t status)
Sets response status.
Definition message.h:919
static unicoap_signal_t unicoap_message_get_signal(const unicoap_message_t *message)
Retrieves signal code from given signal message.
Definition message.h:650
#define UNICOAP_TOKEN_LENGTH_FIXED_WIDTH
Numbers of bits needed to represent token length.
Definition constants.h:65
static void unicoap_message_init_string(unicoap_message_t *message, uint8_t code, const char *payload)
Initializes message with payload from null-terminated UTF-8 string but no options.
Definition message.h:519
const char * unicoap_string_from_code(uint8_t code)
Returns label for given CoAP message code.
bool unicoap_message_code_is_response(uint8_t code)
Determines if the the given message's code is a a response code.
unicoap_method_t
CoAP request method codes (0.xx range)
Definition constants.h:139
static void unicoap_message_init(unicoap_message_t *message, uint8_t code, uint8_t *payload, size_t payload_size)
Initializes message with payload but no options.
Definition message.h:483
static size_t unicoap_message_options_size(const unicoap_message_t *message)
Retrieves total size of options in buffer.
Definition message.h:359
void unicoap_message_payload_append_chunk(unicoap_message_t *message, iolist_t *chunk)
Appends a payload chunk to a message.
@ UNICOAP_CODE_CLASS_SIGNAL
Signaling message.
Definition constants.h:133
@ UNICOAP_CODE_CLASS_REQUEST
Message class for requests.
Definition constants.h:121
@ UNICOAP_PAYLOAD_NONCONTIGUOUS
iolist_t payload vector
Definition message.h:51
@ UNICOAP_PAYLOAD_CONTIGUOUS
Contiguous payload buffer.
Definition message.h:46
ssize_t unicoap_pdu_build_options_and_payload(uint8_t *cursor, size_t remaining_capacity, const unicoap_message_t *message)
Populates the given buffer with options and payload.
ssize_t unicoap_pdu_parse_rfc7252(uint8_t *pdu, size_t size, unicoap_message_t *message, unicoap_message_properties_t *properties)
Parses RFC 7252 PDU.
ssize_t unicoap_pdu_parse_options_and_payload(uint8_t *cursor, const uint8_t *end, unicoap_message_t *message)
Parses PDU starting at options.
static ssize_t unicoap_pdu_build_rfc7252(uint8_t *pdu, size_t capacity, const unicoap_message_t *message, const unicoap_message_properties_t *properties)
Writes RFC 7252 PDU into buffer.
Definition message.h:1312
static ssize_t unicoap_pdu_buildv_rfc7252(uint8_t *header, size_t header_capacity, const unicoap_message_t *message, const unicoap_message_properties_t *properties, iolist_t iolists[UNICOAP_PDU_IOLIST_COUNT])
Populates the given iolist with header according to RFC 7252, options, and payload.
Definition message.h:1342
#define UNICOAP_PDU_IOLIST_COUNT
Number of iolists in the iolist buffer that must be passed to unicoap_pdu_buildv_options_and_payload.
Definition message.h:1184
ssize_t unicoap_pdu_build_header_rfc7252(uint8_t *header, size_t capacity, const unicoap_message_t *message, const unicoap_message_properties_t *properties)
Writes RFC 7252 PDU header in the given buffer.
static ssize_t unicoap_pdu_parse_rfc7252_result(uint8_t *pdu, size_t size, unicoap_parser_result_t *parsed)
Helper method for manually parsing a PDU.
Definition message.h:1273
ssize_t(* unicoap_parser_t)(const uint8_t *pdu, size_t size, unicoap_message_t *message, unicoap_message_properties_t *properties)
Common PDU parser.
Definition message.h:1110
int unicoap_pdu_buildv_options_and_payload(uint8_t *header, size_t header_size, const unicoap_message_t *message, iolist_t iolists[UNICOAP_PDU_IOLIST_COUNT])
Populates the given iolist with header, options, payload separator and payload.
size_t iolist_size(const iolist_t *iolist)
Sum up number of bytes in iolist.
struct iolist iolist_t
iolist forward declaration
Definition iolist.h:30
iolist scatter / gather IO
Options umbrella header.
Properties of a CoAP message.
Definition message.h:297
bool is_registration
Determines if the corresponding message is considered an Observe registration.
Definition message.h:309
uint16_t id
RFC 7252 message ID.
Definition message.h:324
uint8_t * token
CoAP token used to correlate requests to responses.
Definition message.h:299
uint8_t token_length
Length of unicoap_message_properties_t::token.
Definition message.h:302
bool is_notification
Determines if the corresponding message is considered an Observe notification.
Definition message.h:316
unicoap_rfc7252_message_type_t type
RFC 7252 message type.
Definition message.h:321
Generic CoAP message.
Definition message.h:72
unicoap_payload_representation_t payload_representation
A value indicating how the payload is represented.
Definition message.h:166
unicoap_method_t method
CoAP request method.
Definition message.h:141
size_t payload_size
Size of message payload.
Definition message.h:103
unicoap_status_t status
CoAP response status.
Definition message.h:149
uint8_t * payload
Message payload.
Definition message.h:95
uint8_t code
CoAP message code.
Definition message.h:128
unicoap_signal_t signal
CoAP signal.
Definition message.h:157
unicoap_options_t * options
Message options.
Definition message.h:80
iolist_t * payload_chunks
Noncontiguous payload.
Definition message.h:114
CoAP options container.
Definition base.h:97
size_t storage_size
Current size of encoded options.
Definition base.h:103
Helper structure for parsing PDUs manually.
Definition message.h:1118
unicoap_message_properties_t properties
Parsed message properties.
Definition message.h:1126
unicoap_options_t options
Parsed options.
Definition message.h:1123
unicoap_message_t message
Message.
Definition message.h:1120