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
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;
465}
466
473{
474 return (unicoap_message_t){ .code = code };
475}
476
486static inline void unicoap_message_init(unicoap_message_t* message, uint8_t code, uint8_t* payload,
487 size_t payload_size)
488{
489 message->code = code;
490 message->options = NULL;
491 message->payload = payload;
492 message->payload_size = payload_size;
494}
495
503static inline unicoap_message_t unicoap_message_alloc(uint8_t code, uint8_t* payload,
504 size_t payload_size)
505{
506 return (unicoap_message_t){ .code = code,
507 .options = NULL,
508 .payload = payload,
509 .payload_size = payload_size,
510 .payload_representation = UNICOAP_PAYLOAD_CONTIGUOUS };
511}
512
522static inline void unicoap_message_init_string(unicoap_message_t* message, uint8_t code,
523 const char* payload)
524{
525 unicoap_message_init(message, code, (uint8_t*)payload, payload ? strlen(payload) : 0);
526}
527
534static inline unicoap_message_t unicoap_message_alloc_string(uint8_t code, const char* payload)
535{
536 return (unicoap_message_t){ .code = code,
537 .options = NULL,
538 .payload = (uint8_t*)payload,
539 .payload_size = payload ? strlen(payload) : 0,
540 .payload_representation = UNICOAP_PAYLOAD_CONTIGUOUS };
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;
564}
565
575static inline unicoap_message_t unicoap_message_alloc_with_options(uint8_t code, uint8_t* payload,
576 size_t payload_size,
577 unicoap_options_t* options)
578{
579 return (unicoap_message_t){ .code = code,
580 .options = options,
581 .payload = payload,
582 .payload_size = payload_size,
583 .payload_representation = UNICOAP_PAYLOAD_CONTIGUOUS };
584}
585
597static inline
599 const char* payload,
601{
603 payload ? strlen(payload) : 0, options);
604}
605
614static inline
616 const char* payload,
617 unicoap_options_t* options)
618{
619 return (unicoap_message_t){ .code = code,
620 .options = options,
621 .payload = (uint8_t*)payload,
622 .payload_size = payload ? strlen(payload) : 0,
623 .payload_representation = UNICOAP_PAYLOAD_CONTIGUOUS };
624}
625
626
627/* MARK: - Signaling messages */
641static inline bool unicoap_message_code_is_signal(uint8_t code)
642{
644}
645
654{
655 return message->signal;
656}
657
666{
667 message->signal = signal;
668}
669
680
681/* MARK: - Request messages */
694static inline bool unicoap_message_code_is_request(uint8_t code)
695{
697}
698
707{
708 return request->method;
709}
710
720{
721 request->method = method;
722}
723
733
743{
744 unicoap_message_init_empty(request, (uint8_t)method);
745}
746
753{
754 return unicoap_message_alloc_empty((uint8_t)method);
755}
756
768 uint8_t* payload, size_t payload_size)
769{
770 unicoap_message_init(request, (uint8_t)method, payload, payload_size);
771}
772
780static inline unicoap_message_t unicoap_request_alloc(unicoap_method_t method, uint8_t* payload,
781 size_t payload_size)
782{
783 return unicoap_message_alloc((uint8_t)method, payload, payload_size);
784}
785
796 const char* payload)
797{
798 unicoap_message_init_string(request, (uint8_t)method, payload);
799}
800
808 const char* payload)
809{
810 return unicoap_message_alloc_string((uint8_t)method, payload);
811}
812
832
843 uint8_t* payload,
844 size_t payload_size,
845 unicoap_options_t* options)
846{
847 return unicoap_message_alloc_with_options((uint8_t)method, payload, payload_size, options);
848}
849
868
877static inline
879 const char* payload,
880 unicoap_options_t* options)
881{
882 return unicoap_message_alloc_string_with_options((uint8_t)method, payload, options);
883}
884
885
886/* MARK: - Response messages */
901
910{
911 return response->status;
912}
913
923{
924 response->status = status;
925}
926
933
943{
944 unicoap_message_init_empty(response, (uint8_t)status);
945}
946
953{
954 return unicoap_message_alloc_empty((uint8_t)status);
955}
956
968 uint8_t* payload, size_t payload_size)
969{
970 unicoap_message_init(response, (uint8_t)status, payload, payload_size);
971}
972
980static inline unicoap_message_t unicoap_response_alloc(unicoap_status_t status, uint8_t* payload,
981 size_t payload_size)
982{
983 return unicoap_message_alloc((uint8_t)status, payload, payload_size);
984}
985
996 unicoap_status_t status, const char* payload)
997{
998 unicoap_message_init_string(response, (uint8_t)status, payload);
999}
1000
1008 const char* payload)
1009{
1010 return unicoap_message_alloc_string((uint8_t)status, payload);
1011}
1012
1027 uint8_t* payload,
1028 size_t payload_size,
1030{
1032}
1033
1044 uint8_t* payload,
1045 size_t payload_size,
1046 unicoap_options_t* options)
1047{
1048 return unicoap_message_alloc_with_options((uint8_t)status, payload, payload_size, options);
1049}
1050
1069
1078static inline
1080 const char* payload,
1081 unicoap_options_t* options)
1082{
1083 return unicoap_message_alloc_string_with_options((uint8_t)status, payload, options);
1084}
1085
1087
1088/* MARK: - Parsing and Serialization ------------------------------------------------------- */
1093/* MARK: - Parsing */
1113typedef ssize_t (*unicoap_parser_t)(const uint8_t* pdu, size_t size, unicoap_message_t* message,
1114 unicoap_message_properties_t* properties);
1115
1131
1158ssize_t unicoap_pdu_parse_options_and_payload(uint8_t* cursor, const uint8_t* end,
1159 unicoap_message_t* message);
1161
1162/* MARK: - Serializing */
1180ssize_t unicoap_pdu_build_options_and_payload(uint8_t* cursor, size_t remaining_capacity,
1181 const unicoap_message_t* message);
1182
1187#define UNICOAP_PDU_IOLIST_COUNT (4)
1188
1206int unicoap_pdu_buildv_options_and_payload(uint8_t* header, size_t header_size,
1207 const unicoap_message_t* message,
1211
1249ssize_t unicoap_pdu_parse_rfc7252(uint8_t* pdu, size_t size, unicoap_message_t* message,
1250 unicoap_message_properties_t* properties);
1251
1276static inline ssize_t unicoap_pdu_parse_rfc7252_result(uint8_t* pdu, size_t size,
1278{
1279 parsed->message.options = &parsed->options;
1280 return unicoap_pdu_parse_rfc7252(pdu, size, &parsed->message, &parsed->properties);
1281}
1282
1283
1299ssize_t unicoap_pdu_build_header_rfc7252(uint8_t* header, size_t capacity,
1300 const unicoap_message_t* message,
1301 const unicoap_message_properties_t* properties);
1302
1315static inline ssize_t unicoap_pdu_build_rfc7252(uint8_t* pdu, size_t capacity,
1316 const unicoap_message_t* message,
1317 const unicoap_message_properties_t* properties)
1318{
1319 ssize_t res = 0;
1320
1321 if ((res = unicoap_pdu_build_header_rfc7252(pdu, capacity, message, properties)) < 0) {
1322 return res;
1323 }
1324 return unicoap_pdu_build_options_and_payload(pdu + res, capacity - res, message) + res;
1325}
1326
1327/* MARK: unicoap_driver_extension_point */
1328
1345static inline ssize_t unicoap_pdu_buildv_rfc7252(uint8_t* header, size_t header_capacity,
1346 const unicoap_message_t* message,
1347 const unicoap_message_properties_t* properties,
1349{
1350 ssize_t res = 0;
1351
1352 if ((res =
1353 unicoap_pdu_build_header_rfc7252(header, header_capacity, message, properties)) < 0) {
1354 return res;
1355 }
1356 return unicoap_pdu_buildv_options_and_payload(header, res, message, iolists);
1357}
1358
1361/* MARK: unicoap_driver_extension_point */
1362
1363#ifdef __cplusplus
1364}
1365#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:719
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:842
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:980
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:780
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:825
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:615
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:795
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:878
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:694
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:952
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:503
static void unicoap_message_set_signal(unicoap_message_t *message, unicoap_signal_t signal)
Sets signal code of given signal message.
Definition message.h:665
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:1079
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:942
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:598
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:995
static unicoap_message_t unicoap_message_alloc_empty(uint8_t code)
Creates message with no payload and no options.
Definition message.h:472
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:641
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:534
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:861
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:767
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:1025
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:909
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:1062
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:1043
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:967
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:742
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:575
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:706
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:752
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:1007
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:807
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:922
static unicoap_signal_t unicoap_message_get_signal(const unicoap_message_t *message)
Retrieves signal code from given signal message.
Definition message.h:653
#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:522
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:486
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:1315
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:1345
#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:1187
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:1276
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:1113
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:1121
unicoap_message_properties_t properties
Parsed message properties.
Definition message.h:1129
unicoap_options_t options
Parsed options.
Definition message.h:1126
unicoap_message_t message
Message.
Definition message.h:1123