Loading...
Searching...
No Matches
message.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024-2025 Carl Seifert
3 * Copyright (C) 2024-2025 TU Dresden
4 *
5 * This file is subject to the terms and conditions of the GNU Lesser General
6 * Public License v2.1. See the file LICENSE in the top level directory for
7 * more details.
8 */
9
10#pragma once
11
12#include <stdint.h>
13#include <stdbool.h>
14#include <stddef.h>
15#include <string.h>
16
17#include "iolist.h"
18
20#include "net/unicoap/options.h"
21
26
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
37/* MARK: - CoAP message */
56
75typedef struct {
84
88 union {
92 struct {
98 uint8_t* payload;
99
107 };
108
118 };
119
120 union {
131 uint8_t code;
132
133 /* Note:
134 * Method, status, and signal are guaranteed to have the same size as uint8_t,
135 * see static_asserts in definitions.h
136 */
137
145
153
161 };
162
171
181static inline uint8_t* unicoap_message_payload_get(unicoap_message_t* message)
182{
184 return message->payload;
185}
186
195static inline void unicoap_message_payload_set(unicoap_message_t* message, uint8_t* payload,
196 size_t size)
197{
199 message->payload = payload;
200 message->payload_size = size;
201}
202
217
226{
228 message->payload_chunks = chunks;
229}
230
240
251static inline size_t unicoap_message_payload_get_size(const unicoap_message_t* message)
252{
254 iolist_size(message->payload_chunks) :
255 message->payload_size;
256}
257
268
281ssize_t unicoap_message_payload_copy(const unicoap_message_t* message, uint8_t* buffer,
282 size_t capacity);
283
295 size_t capacity);
296
332
346
353static inline uint8_t* unicoap_message_options_data(const unicoap_message_t* message)
354{
355 return message->options ? message->options->entries->data : NULL;
356}
357
364static inline size_t unicoap_message_options_size(const unicoap_message_t* message)
365{
366 return message->options ? message->options->storage_size : 0;
367}
368
369
370/* MARK: - CoAP code */
393static inline uint8_t unicoap_code_class(uint8_t code)
394{
395 return code >> 5;
396}
397
416static inline uint8_t unicoap_code_detail(uint8_t code)
417{
418 return code & 0x1f;
419}
420
428int unicoap_print_code(uint8_t code, char* string);
429
438const char* unicoap_string_from_code(uint8_t code);
439
448const char* unicoap_string_from_code_class(uint8_t code);
450
451/* MARK: - Message initializers */
463static inline void unicoap_message_init_empty(unicoap_message_t* message, uint8_t code)
464{
465 message->code = code;
466 message->options = NULL;
467 message->payload = NULL;
468 message->payload_size = 0;
469}
470
477{
478 return (unicoap_message_t){ .code = code };
479}
480
490static inline void unicoap_message_init(unicoap_message_t* message, uint8_t code, uint8_t* payload,
491 size_t payload_size)
492{
493 message->code = code;
494 message->options = NULL;
495 message->payload = payload;
496 message->payload_size = payload_size;
497}
498
506static inline unicoap_message_t unicoap_message_alloc(uint8_t code, uint8_t* payload,
507 size_t payload_size)
508{
509 return (unicoap_message_t){ .code = code, .payload = payload, .payload_size = payload_size };
510}
511
521static inline void unicoap_message_init_string(unicoap_message_t* message, uint8_t code,
522 const char* payload)
523{
524 message->code = code;
525 message->options = NULL;
526 message->payload = (uint8_t*)payload;
527 message->payload_size = payload ? strlen(payload) : 0;
528}
529
536static inline unicoap_message_t unicoap_message_alloc_string(uint8_t code, const char* payload)
537{
538 return (unicoap_message_t){ .code = code,
539 .payload = (uint8_t*)payload,
540 .payload_size = payload ? strlen(payload) : 0 };
541}
542
555static inline void unicoap_message_init_with_options(unicoap_message_t* message, uint8_t code,
556 uint8_t* payload, size_t payload_size,
558{
559 message->code = code;
560 message->options = options;
561 message->payload = payload;
562 message->payload_size = payload_size;
563}
564
574static inline unicoap_message_t unicoap_message_alloc_with_options(uint8_t code, uint8_t* payload,
575 size_t payload_size,
576 unicoap_options_t* options)
577{
578 return (unicoap_message_t){
579 .code = code, .options = options, .payload = payload, .payload_size = payload_size
580 };
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}
621
622
623/* MARK: - Signaling messages */
637static inline bool unicoap_message_is_signal(uint8_t code)
638{
640}
641
650{
651 return message->signal;
652}
653
662{
663 message->signal = signal;
664}
665
676
677/* MARK: - Request messages */
690static inline bool unicoap_message_is_request(uint8_t code)
691{
693}
694
703{
704 return request->method;
705}
706
716{
717 request->method = method;
718}
719
729
739{
740 unicoap_message_init_empty(request, (uint8_t)method);
741}
742
749{
750 return unicoap_message_alloc_empty((uint8_t)method);
751}
752
764 uint8_t* payload, size_t payload_size)
765{
766 unicoap_message_init(request, (uint8_t)method, payload, payload_size);
767}
768
776static inline unicoap_message_t unicoap_request_alloc(unicoap_method_t method, uint8_t* payload,
777 size_t payload_size)
778{
779 return unicoap_message_alloc((uint8_t)method, payload, payload_size);
780}
781
792 const char* payload)
793{
794 unicoap_message_init_string(request, (uint8_t)method, payload);
795}
796
804 const char* payload)
805{
806 return unicoap_message_alloc_string((uint8_t)method, payload);
807}
808
828
839 uint8_t* payload,
840 size_t payload_size,
841 unicoap_options_t* options)
842{
843 return unicoap_message_alloc_with_options((uint8_t)method, payload, payload_size, options);
844}
845
864
873static inline
875 const char* payload,
876 unicoap_options_t* options)
877{
878 return unicoap_message_alloc_string_with_options((uint8_t)method, payload, options);
879}
880
881
882/* MARK: - Response messages */
897
906{
907 return response->status;
908}
909
919{
920 response->status = status;
921}
922
929
939{
940 unicoap_message_init_empty(response, (uint8_t)status);
941}
942
949{
950 return unicoap_message_alloc_empty((uint8_t)status);
951}
952
964 uint8_t* payload, size_t payload_size)
965{
966 unicoap_message_init(response, (uint8_t)status, payload, payload_size);
967}
968
976static inline unicoap_message_t unicoap_response_alloc(unicoap_status_t status, uint8_t* payload,
977 size_t payload_size)
978{
979 return unicoap_message_alloc((uint8_t)status, payload, payload_size);
980}
981
992 unicoap_status_t status, const char* payload)
993{
994 unicoap_message_init_string(response, (uint8_t)status, payload);
995}
996
1004 const char* payload)
1005{
1006 return unicoap_message_alloc_string((uint8_t)status, payload);
1007}
1008
1023 uint8_t* payload,
1024 size_t payload_size,
1026{
1028}
1029
1040 uint8_t* payload,
1041 size_t payload_size,
1042 unicoap_options_t* options)
1043{
1044 return unicoap_message_alloc_with_options((uint8_t)status, payload, payload_size, options);
1045}
1046
1065
1074static inline
1076 const char* payload,
1077 unicoap_options_t* options)
1078{
1079 return unicoap_message_alloc_string_with_options((uint8_t)status, payload, options);
1080}
1081
1083
1084/* MARK: - Parsing and Serialization ------------------------------------------------------- */
1089/* MARK: - Parsing */
1109typedef ssize_t (*unicoap_parser_t)(const uint8_t* pdu, size_t size, unicoap_message_t* message,
1110 unicoap_message_properties_t* properties);
1111
1127
1154ssize_t unicoap_pdu_parse_options_and_payload(uint8_t* cursor, const uint8_t* end,
1155 unicoap_message_t* message);
1157
1158/* MARK: - Serializing */
1176ssize_t unicoap_pdu_build_options_and_payload(uint8_t* cursor, size_t remaining_capacity,
1177 const unicoap_message_t* message);
1178
1183#define UNICOAP_PDU_IOLIST_COUNT (4)
1184
1202int unicoap_pdu_buildv_options_and_payload(uint8_t* header, size_t header_size,
1203 const unicoap_message_t* message,
1207
1245ssize_t unicoap_pdu_parse_rfc7252(uint8_t* pdu, size_t size, unicoap_message_t* message,
1246 unicoap_message_properties_t* properties);
1247
1272static inline ssize_t unicoap_pdu_parse_rfc7252_result(uint8_t* pdu, size_t size,
1274{
1275 parsed->message.options = &parsed->options;
1276 return unicoap_pdu_parse_rfc7252(pdu, size, &parsed->message, &parsed->properties);
1277}
1278
1279
1295ssize_t unicoap_pdu_build_header_rfc7252(uint8_t* header, size_t capacity,
1296 const unicoap_message_t* message,
1297 const unicoap_message_properties_t* properties);
1298
1311static inline ssize_t unicoap_pdu_build_rfc7252(uint8_t* pdu, size_t capacity,
1312 const unicoap_message_t* message,
1313 const unicoap_message_properties_t* properties)
1314{
1315 ssize_t res = 0;
1316
1317 if ((res = unicoap_pdu_build_header_rfc7252(pdu, capacity, message, properties)) < 0) {
1318 return res;
1319 }
1320 return unicoap_pdu_build_options_and_payload(pdu + res, capacity - res, message) + res;
1321}
1322
1323/* MARK: unicoap_driver_extension_point */
1324
1341static inline ssize_t unicoap_pdu_buildv_rfc7252(uint8_t* header, size_t header_capacity,
1342 const unicoap_message_t* message,
1343 const unicoap_message_properties_t* properties,
1345{
1346 ssize_t res = 0;
1347
1348 if ((res =
1349 unicoap_pdu_build_header_rfc7252(header, header_capacity, message, properties)) < 0) {
1350 return res;
1351 }
1352 return unicoap_pdu_buildv_options_and_payload(header, res, message, iolists);
1353}
1354
1357/* MARK: unicoap_driver_extension_point */
1358
1359#ifdef __cplusplus
1360}
1361#endif
#define assert(cond)
abort the program if assertion is false
Definition assert.h:146
Constants used in CoAP such as option numbers and message codes.
static bool unicoap_message_is_request(uint8_t code)
Determines if the the given message's code is a a request code.
Definition message.h:690
static void unicoap_request_set_method(unicoap_message_t *request, unicoap_method_t method)
Sets request method.
Definition message.h:715
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:195
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:838
static iolist_t * unicoap_message_payload_get_chunks(unicoap_message_t *message)
Retrieves noncontiguous message payload, if available.
Definition message.h:212
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:976
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:555
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:776
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:821
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:791
static uint8_t * unicoap_message_options_data(const unicoap_message_t *message)
Retrieves options storage buffer.
Definition message.h:353
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:874
static uint8_t * unicoap_message_payload_get(unicoap_message_t *message)
Retrieves contiguous message payload, if available.
Definition message.h:181
static unicoap_message_t unicoap_response_alloc_empty(unicoap_status_t status)
Creates response with no payload and no options.
Definition message.h:948
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:506
static void unicoap_message_set_signal(unicoap_message_t *message, unicoap_signal_t signal)
Sets signal code of given signal message.
Definition message.h:661
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:1075
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:938
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:991
static unicoap_message_t unicoap_message_alloc_empty(uint8_t code)
Creates message with no payload and no options.
Definition message.h:476
static uint8_t unicoap_code_detail(uint8_t code)
Reads the code detail number encoded in the given code.
Definition message.h:416
#define UNICOAP_RFC7252_MESSAGE_TYPE_FIXED_WIDTH
Number of bits needed to represent unicoap_rfc7252_message_type_t.
Definition constants.h:78
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:536
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:393
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:857
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:763
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:1021
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:905
static size_t unicoap_message_payload_get_size(const unicoap_message_t *message)
Retrieves payload size, regardless of payload representation.
Definition message.h:251
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:1058
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:1039
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:963
static bool unicoap_message_is_signal(uint8_t code)
Determines if the given message's code is a a signaling code.
Definition message.h:637
unicoap_payload_representation_t
A type indicating how a message's payload is represented.
Definition message.h:45
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:738
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:574
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:702
unicoap_status_t
CoAP response status codes.
Definition constants.h:215
static unicoap_message_t unicoap_request_alloc_empty(unicoap_method_t method)
Creates request with no payload and no options.
Definition message.h:748
static void unicoap_message_init_empty(unicoap_message_t *message, uint8_t code)
Initializes message with no payload and no options.
Definition message.h:463
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:1003
unicoap_signal_t
CoAP Signal Message Codes (7.xx range)
Definition constants.h:177
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:803
static void unicoap_message_payload_set_chunks(unicoap_message_t *message, iolist_t *chunks)
Assigns the given message a noncontiguous payload.
Definition message.h:225
unicoap_rfc7252_message_type_t
RFC 7252 message type.
Definition constants.h:83
bool unicoap_message_is_response(uint8_t code)
Determines if the the given message's code is a a response code.
static void unicoap_response_set_status(unicoap_message_t *response, unicoap_status_t status)
Sets response status.
Definition message.h:918
static unicoap_signal_t unicoap_message_get_signal(const unicoap_message_t *message)
Retrieves signal code from given signal message.
Definition message.h:649
#define UNICOAP_TOKEN_LENGTH_FIXED_WIDTH
Numbers of bits needed to represent token length.
Definition constants.h:67
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:521
const char * unicoap_string_from_code(uint8_t code)
Returns label for given CoAP message code.
unicoap_method_t
CoAP request method codes (0.xx range)
Definition constants.h:141
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:490
static size_t unicoap_message_options_size(const unicoap_message_t *message)
Retrieves total size of options in buffer.
Definition message.h:364
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:135
@ UNICOAP_CODE_CLASS_REQUEST
Message class for requests.
Definition constants.h:123
@ UNICOAP_PAYLOAD_NONCONTIGUOUS
iolist_t payload vector
Definition message.h:54
@ UNICOAP_PAYLOAD_CONTIGUOUS
Contiguous payload buffer.
Definition message.h:49
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:1311
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:1341
#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:1183
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:1272
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:1109
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:33
iolist scatter / gather IO
Options header.
Properties of a CoAP message.
Definition message.h:300
bool is_registration
Determines if the corresponding message is considered an Observe registration.
Definition message.h:312
uint16_t id
RFC 7252 message ID.
Definition message.h:327
uint8_t * token
CoAP token used to correlate requests to responses.
Definition message.h:302
uint8_t token_length
Length of unicoap_message_properties_t::token.
Definition message.h:305
bool is_notification
Determines if the corresponding message is considered an Observe notification.
Definition message.h:319
unicoap_rfc7252_message_type_t type
RFC 7252 message type.
Definition message.h:324
Generic CoAP message.
Definition message.h:75
unicoap_payload_representation_t payload_representation
A value indicating how the payload is represented.
Definition message.h:169
unicoap_method_t method
CoAP request method.
Definition message.h:144
size_t payload_size
Size of message payload.
Definition message.h:106
unicoap_status_t status
CoAP response status.
Definition message.h:152
uint8_t * payload
Message payload.
Definition message.h:98
uint8_t code
CoAP message code.
Definition message.h:131
unicoap_signal_t signal
CoAP signal.
Definition message.h:160
unicoap_options_t * options
Message options.
Definition message.h:83
iolist_t * payload_chunks
Noncontiguous payload.
Definition message.h:117
uint8_t * data
Pointer into options storage where this option starts.
Definition options.h:79
CoAP options container.
Definition options.h:100
size_t storage_size
Current size of encoded options.
Definition options.h:106
unicoap_option_entry_t entries[CONFIG_UNICOAP_OPTIONS_MAX]
Helper array used to encode and decode options into options storage.
Definition options.h:121
Helper structure for parsing PDUs manually.
Definition message.h:1117
unicoap_message_properties_t properties
Parsed message properties.
Definition message.h:1125
unicoap_options_t options
Parsed options.
Definition message.h:1122
unicoap_message_t message
Message.
Definition message.h:1119