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 ? message->options->entries->data : 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
423int unicoap_print_code(uint8_t code, char* string);
424
433const char* unicoap_string_from_code(uint8_t code);
434
443const char* unicoap_string_from_code_class(uint8_t code);
445
446/* MARK: - Message initializers */
458static inline void unicoap_message_init_empty(unicoap_message_t* message, uint8_t code)
459{
460 message->code = code;
461 message->options = NULL;
462 message->payload = NULL;
463 message->payload_size = 0;
464}
465
472{
473 return (unicoap_message_t){ .code = code };
474}
475
485static inline void unicoap_message_init(unicoap_message_t* message, uint8_t code, uint8_t* payload,
486 size_t payload_size)
487{
488 message->code = code;
489 message->options = NULL;
490 message->payload = payload;
491 message->payload_size = payload_size;
492}
493
501static inline unicoap_message_t unicoap_message_alloc(uint8_t code, uint8_t* payload,
502 size_t payload_size)
503{
504 return (unicoap_message_t){ .code = code, .payload = payload, .payload_size = payload_size };
505}
506
516static inline void unicoap_message_init_string(unicoap_message_t* message, uint8_t code,
517 const char* payload)
518{
519 message->code = code;
520 message->options = NULL;
521 message->payload = (uint8_t*)payload;
522 message->payload_size = 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 .payload = (uint8_t*)payload,
535 .payload_size = payload ? strlen(payload) : 0 };
536}
537
550static inline void unicoap_message_init_with_options(unicoap_message_t* message, uint8_t code,
551 uint8_t* payload, size_t payload_size,
553{
554 message->code = code;
555 message->options = options;
556 message->payload = payload;
557 message->payload_size = payload_size;
558}
559
569static inline unicoap_message_t unicoap_message_alloc_with_options(uint8_t code, uint8_t* payload,
570 size_t payload_size,
571 unicoap_options_t* options)
572{
573 return (unicoap_message_t){
574 .code = code, .options = options, .payload = payload, .payload_size = payload_size
575 };
576}
577
589static inline
591 const char* payload,
593{
595 payload ? strlen(payload) : 0, options);
596}
597
606static inline
608 const char* payload,
609 unicoap_options_t* options)
610{
611 return (unicoap_message_t){ .code = code,
612 .options = options,
613 .payload = (uint8_t*)payload,
614 .payload_size = payload ? strlen(payload) : 0 };
615}
616
617
618/* MARK: - Signaling messages */
632static inline bool unicoap_message_code_is_signal(uint8_t code)
633{
635}
636
645{
646 return message->signal;
647}
648
657{
658 message->signal = signal;
659}
660
671
672/* MARK: - Request messages */
685static inline bool unicoap_message_code_is_request(uint8_t code)
686{
688}
689
698{
699 return request->method;
700}
701
711{
712 request->method = method;
713}
714
724
734{
735 unicoap_message_init_empty(request, (uint8_t)method);
736}
737
744{
745 return unicoap_message_alloc_empty((uint8_t)method);
746}
747
759 uint8_t* payload, size_t payload_size)
760{
761 unicoap_message_init(request, (uint8_t)method, payload, payload_size);
762}
763
771static inline unicoap_message_t unicoap_request_alloc(unicoap_method_t method, uint8_t* payload,
772 size_t payload_size)
773{
774 return unicoap_message_alloc((uint8_t)method, payload, payload_size);
775}
776
787 const char* payload)
788{
789 unicoap_message_init_string(request, (uint8_t)method, payload);
790}
791
799 const char* payload)
800{
801 return unicoap_message_alloc_string((uint8_t)method, payload);
802}
803
823
834 uint8_t* payload,
835 size_t payload_size,
836 unicoap_options_t* options)
837{
838 return unicoap_message_alloc_with_options((uint8_t)method, payload, payload_size, options);
839}
840
859
868static inline
870 const char* payload,
871 unicoap_options_t* options)
872{
873 return unicoap_message_alloc_string_with_options((uint8_t)method, payload, options);
874}
875
876
877/* MARK: - Response messages */
892
901{
902 return response->status;
903}
904
914{
915 response->status = status;
916}
917
924
934{
935 unicoap_message_init_empty(response, (uint8_t)status);
936}
937
944{
945 return unicoap_message_alloc_empty((uint8_t)status);
946}
947
959 uint8_t* payload, size_t payload_size)
960{
961 unicoap_message_init(response, (uint8_t)status, payload, payload_size);
962}
963
971static inline unicoap_message_t unicoap_response_alloc(unicoap_status_t status, uint8_t* payload,
972 size_t payload_size)
973{
974 return unicoap_message_alloc((uint8_t)status, payload, payload_size);
975}
976
987 unicoap_status_t status, const char* payload)
988{
989 unicoap_message_init_string(response, (uint8_t)status, payload);
990}
991
999 const char* payload)
1000{
1001 return unicoap_message_alloc_string((uint8_t)status, payload);
1002}
1003
1018 uint8_t* payload,
1019 size_t payload_size,
1021{
1023}
1024
1035 uint8_t* payload,
1036 size_t payload_size,
1037 unicoap_options_t* options)
1038{
1039 return unicoap_message_alloc_with_options((uint8_t)status, payload, payload_size, options);
1040}
1041
1060
1069static inline
1071 const char* payload,
1072 unicoap_options_t* options)
1073{
1074 return unicoap_message_alloc_string_with_options((uint8_t)status, payload, options);
1075}
1076
1078
1079/* MARK: - Parsing and Serialization ------------------------------------------------------- */
1084/* MARK: - Parsing */
1104typedef ssize_t (*unicoap_parser_t)(const uint8_t* pdu, size_t size, unicoap_message_t* message,
1105 unicoap_message_properties_t* properties);
1106
1122
1149ssize_t unicoap_pdu_parse_options_and_payload(uint8_t* cursor, const uint8_t* end,
1150 unicoap_message_t* message);
1152
1153/* MARK: - Serializing */
1171ssize_t unicoap_pdu_build_options_and_payload(uint8_t* cursor, size_t remaining_capacity,
1172 const unicoap_message_t* message);
1173
1178#define UNICOAP_PDU_IOLIST_COUNT (4)
1179
1197int unicoap_pdu_buildv_options_and_payload(uint8_t* header, size_t header_size,
1198 const unicoap_message_t* message,
1202
1240ssize_t unicoap_pdu_parse_rfc7252(uint8_t* pdu, size_t size, unicoap_message_t* message,
1241 unicoap_message_properties_t* properties);
1242
1267static inline ssize_t unicoap_pdu_parse_rfc7252_result(uint8_t* pdu, size_t size,
1269{
1270 parsed->message.options = &parsed->options;
1271 return unicoap_pdu_parse_rfc7252(pdu, size, &parsed->message, &parsed->properties);
1272}
1273
1274
1290ssize_t unicoap_pdu_build_header_rfc7252(uint8_t* header, size_t capacity,
1291 const unicoap_message_t* message,
1292 const unicoap_message_properties_t* properties);
1293
1306static inline ssize_t unicoap_pdu_build_rfc7252(uint8_t* pdu, size_t capacity,
1307 const unicoap_message_t* message,
1308 const unicoap_message_properties_t* properties)
1309{
1310 ssize_t res = 0;
1311
1312 if ((res = unicoap_pdu_build_header_rfc7252(pdu, capacity, message, properties)) < 0) {
1313 return res;
1314 }
1315 return unicoap_pdu_build_options_and_payload(pdu + res, capacity - res, message) + res;
1316}
1317
1318/* MARK: unicoap_driver_extension_point */
1319
1336static inline ssize_t unicoap_pdu_buildv_rfc7252(uint8_t* header, size_t header_capacity,
1337 const unicoap_message_t* message,
1338 const unicoap_message_properties_t* properties,
1340{
1341 ssize_t res = 0;
1342
1343 if ((res =
1344 unicoap_pdu_build_header_rfc7252(header, header_capacity, message, properties)) < 0) {
1345 return res;
1346 }
1347 return unicoap_pdu_buildv_options_and_payload(header, res, message, iolists);
1348}
1349
1352/* MARK: unicoap_driver_extension_point */
1353
1354#ifdef __cplusplus
1355}
1356#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.
static void unicoap_request_set_method(unicoap_message_t *request, unicoap_method_t method)
Sets request method.
Definition message.h:710
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:833
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:971
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:550
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:771
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:816
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:607
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:786
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:869
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:685
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:943
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:501
static void unicoap_message_set_signal(unicoap_message_t *message, unicoap_signal_t signal)
Sets signal code of given signal message.
Definition message.h:656
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:1070
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:933
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:590
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:986
static unicoap_message_t unicoap_message_alloc_empty(uint8_t code)
Creates message with no payload and no options.
Definition message.h:471
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:632
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:75
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.
int unicoap_print_code(uint8_t code, char *string)
Prints a c.dd class-detail string into the 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:852
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:758
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:1016
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:900
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:1053
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:1034
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:958
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:733
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:569
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:697
unicoap_status_t
CoAP response status codes.
Definition constants.h:212
static unicoap_message_t unicoap_request_alloc_empty(unicoap_method_t method)
Creates request with no payload and no options.
Definition message.h:743
static void unicoap_message_init_empty(unicoap_message_t *message, uint8_t code)
Initializes message with no payload and no options.
Definition message.h:458
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:998
unicoap_signal_t
CoAP Signal Message Codes (7.xx range)
Definition constants.h:174
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:798
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:80
static void unicoap_response_set_status(unicoap_message_t *response, unicoap_status_t status)
Sets response status.
Definition message.h:913
static unicoap_signal_t unicoap_message_get_signal(const unicoap_message_t *message)
Retrieves signal code from given signal message.
Definition message.h:644
#define UNICOAP_TOKEN_LENGTH_FIXED_WIDTH
Numbers of bits needed to represent token length.
Definition constants.h:64
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:516
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:138
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:485
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:132
@ UNICOAP_CODE_CLASS_REQUEST
Message class for requests.
Definition constants.h:120
@ 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:1306
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:1336
#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:1178
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:1267
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:1104
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
uint8_t * data
Pointer into options storage where this option starts.
Definition base.h:76
CoAP options container.
Definition base.h:97
size_t storage_size
Current size of encoded options.
Definition base.h:103
unicoap_option_entry_t entries[CONFIG_UNICOAP_OPTIONS_MAX]
Helper array used to encode and decode options into options storage.
Definition base.h:118
Helper structure for parsing PDUs manually.
Definition message.h:1112
unicoap_message_properties_t properties
Parsed message properties.
Definition message.h:1120
unicoap_options_t options
Parsed options.
Definition message.h:1117
unicoap_message_t message
Message.
Definition message.h:1114