Coverage Report

Created: 2025-10-13 06:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libcoap/include/coap3/coap_option.h
Line
Count
Source
1
/*
2
 * coap_option.h -- helpers for handling options in CoAP PDUs
3
 *
4
 * Copyright (C) 2010-2013,2022-2025 Olaf Bergmann <bergmann@tzi.org>
5
 *
6
 * SPDX-License-Identifier: BSD-2-Clause
7
 *
8
 * This file is part of the CoAP library libcoap. Please see README for terms
9
 * of use.
10
 */
11
12
/**
13
 * @file coap_option.h
14
 * @brief Helpers for handling options in CoAP PDUs
15
 */
16
17
#ifndef COAP_OPTION_H_
18
#define COAP_OPTION_H_
19
20
#ifdef __cplusplus
21
extern "C" {
22
#endif
23
24
typedef uint16_t coap_option_num_t;
25
26
/**
27
 * Use byte-oriented access methods here because sliding a complex struct
28
 * coap_opt_t over the data buffer may cause bus error on certain platforms.
29
 */
30
typedef uint8_t coap_opt_t;
31
#define PCHAR(p) ((coap_opt_t *)(p))
32
33
/**
34
 * Representation of CoAP options.
35
 */
36
typedef struct {
37
  uint16_t delta;
38
  size_t length;
39
  const uint8_t *value;
40
} coap_option_t;
41
42
/**
43
 * Parses the option pointed to by @p opt into @p result. This function returns
44
 * the number of bytes that have been parsed, or @c 0 on error. An error is
45
 * signaled when illegal delta or length values are encountered or when option
46
 * parsing would result in reading past the option (i.e. beyond opt + length).
47
 *
48
 * @param opt    The beginning of the option to parse.
49
 * @param length The maximum length of @p opt.
50
 * @param result A pointer to the coap_option_t structure that is filled with
51
 *               actual values iff coap_opt_parse() > 0.
52
 * @return       The number of bytes parsed or @c 0 on error.
53
 */
54
size_t coap_opt_parse(const coap_opt_t *opt,
55
                      size_t length,
56
                      coap_option_t *result);
57
58
/**
59
 * Returns the size of the given option, taking into account a possible option
60
 * jump.
61
 *
62
 * @param opt An option jump or the beginning of the option.
63
 * @return    The number of bytes between @p opt and the end of the option
64
 *            starting at @p opt. In case of an error, this function returns
65
 *            @c 0 as options need at least one byte storage space.
66
 */
67
size_t coap_opt_size(const coap_opt_t *opt);
68
69
/**
70
 * @ingroup application_api
71
 * @defgroup opt_filter Option Filters
72
 * API for access option filters
73
 * @{
74
 */
75
76
/**
77
 * The number of option types below 256 that can be stored in an
78
 * option filter. COAP_OPT_FILTER_SHORT + COAP_OPT_FILTER_LONG must be
79
 * at most 16. Each coap_option_filter_t object reserves
80
 * ((COAP_OPT_FILTER_SHORT + 1) / 2) * 2 bytes for short options.
81
 */
82
751M
#define COAP_OPT_FILTER_SHORT 6
83
84
/**
85
 * The number of option types above 255 that can be stored in an
86
 * option filter. COAP_OPT_FILTER_SHORT + COAP_OPT_FILTER_LONG must be
87
 * at most 16. Each coap_option_filter_t object reserves
88
 * COAP_OPT_FILTER_LONG * 2 bytes for short options.
89
 */
90
316M
#define COAP_OPT_FILTER_LONG  2
91
92
/* Ensure that COAP_OPT_FILTER_SHORT and COAP_OPT_FILTER_LONG are set
93
 * correctly. */
94
#if (COAP_OPT_FILTER_SHORT + COAP_OPT_FILTER_LONG > 16)
95
#error COAP_OPT_FILTER_SHORT + COAP_OPT_FILTER_LONG must be less or equal 16
96
#endif /* (COAP_OPT_FILTER_SHORT + COAP_OPT_FILTER_LONG > 16) */
97
98
/*
99
 * mask contains a bit vector that indicates which fields in the long_opts[]
100
 * and subsequent short_opts[] are used. The first COAP_OPT_FILTER_LONG bits
101
 * correspond to the long option types that are stored in long_opts[]
102
 * elements. The next COAP_OPT_FILTER_SHORT bits correspond to the short
103
 * option types that are stored in short_opts[].
104
 */
105
typedef struct coap_opt_filter_t {
106
  uint16_t mask;
107
  uint16_t long_opts[COAP_OPT_FILTER_LONG];
108
  uint8_t short_opts[COAP_OPT_FILTER_SHORT];
109
} coap_opt_filter_t;
110
111
/** Pre-defined filter that includes all options. */
112
7.03k
#define COAP_OPT_ALL NULL
113
114
/**
115
 * Clears filter @p filter.
116
 *
117
 * @param filter The filter to clear.
118
 */
119
void coap_option_filter_clear(coap_opt_filter_t *filter);
120
121
/**
122
 * Sets the corresponding entry for @p number in @p filter. This
123
 * function returns @c 1 if bit was set or @c 0 on error (i.e. when
124
 * there is not enough space to fit the given number in the filter).
125
 *
126
 * @param filter The filter object to change.
127
 * @param number The option number for which the bit should be set.
128
 *
129
 * @return       @c 1 if bit was set, @c 0 otherwise.
130
 */
131
int coap_option_filter_set(coap_opt_filter_t *filter, coap_option_num_t number);
132
133
/**
134
 * Clears the corresponding entry for @p number in @p filter. This
135
 * function returns @c 1 if bit was set or @c 0 if not previously set.
136
 *
137
 * @param filter The filter object to change.
138
 * @param number The option number that should be cleared from the filter.
139
 *
140
 * @return       @c 1 if bit was cleared, @c 0 otherwise.
141
 */
142
int coap_option_filter_unset(coap_opt_filter_t *filter,
143
                             coap_option_num_t number);
144
145
/**
146
 * Checks if @p number is contained in @p filter. This function returns
147
 * @c 1 if found, @c 0 if not.
148
 *
149
 * @param filter The filter object to search.
150
 * @param number The option number to search for.
151
 *
152
 * @return       @c 1 if @p number was found, @c 0 otherwise
153
 */
154
int coap_option_filter_get(coap_opt_filter_t *filter, coap_option_num_t number);
155
156
/**
157
 * Iterator to run through PDU options. This object must be
158
 * initialized with coap_option_iterator_init(). Call
159
 * coap_option_next() to walk through the list of options until
160
 * coap_option_next() returns @c NULL.
161
 *
162
 * @code
163
 * coap_opt_t *option;
164
 * coap_opt_iterator_t opt_iter;
165
 * coap_option_iterator_init(pdu, &opt_iter, COAP_OPT_ALL);
166
 *
167
 * while ((option = coap_option_next(&opt_iter))) {
168
 *   ... do something with option ...
169
 * }
170
 * @endcode
171
 */
172
typedef struct {
173
  size_t length;                /**< remaining length of PDU */
174
  coap_option_num_t number;     /**< decoded option number */
175
  unsigned int bad:1;           /**< iterator object is ok if not set */
176
  unsigned int filtered:1;      /**< denotes whether or not filter is used */
177
  coap_opt_t *next_option;      /**< pointer to the unparsed next option */
178
  coap_opt_filter_t filter;     /**< option filter */
179
} coap_opt_iterator_t;
180
181
/**
182
 * Initializes the given option iterator @p oi to point to the beginning of the
183
 * @p pdu's option list. This function returns @p oi on success, @c NULL
184
 * otherwise (i.e. when no options exist). Note that a length check on the
185
 * option list must be performed before coap_option_iterator_init() is called.
186
 *
187
 * @param pdu    The PDU the options of which should be walked through.
188
 * @param oi     An iterator object that will be initilized.
189
 * @param filter An optional option number filter.
190
 *               With @p number != @c COAP_OPT_ALL, coap_option_next()
191
 *               will return only options matching this bitmask.
192
 *               Fence-post options @c 14, @c 28, @c 42, ... are always
193
 *               skipped.
194
 *
195
 * @return       The iterator object @p oi on success, @c NULL otherwise.
196
 */
197
coap_opt_iterator_t *coap_option_iterator_init(const coap_pdu_t *pdu,
198
                                               coap_opt_iterator_t *oi,
199
                                               const coap_opt_filter_t *filter);
200
201
/**
202
 * Updates the iterator @p oi to point to the next option. This function returns
203
 * a pointer to that option or @c NULL if no more options exist. The contents of
204
 * @p oi will be updated. In particular, @c oi->n specifies the current option's
205
 * ordinal number (counted from @c 1), @c oi->number is the option's number
206
 * value, and @c oi->option points to the beginning of the current option
207
 * itself. When * advanced past the last option, @c oi->option will be @c NULL.
208
 *
209
 * Note that options are skipped whose corresponding bits in the filter
210
 * specified with coap_option_iterator_init() are @c 0. Options with numbers
211
 * that do not fit in this filter hence will always be returned.
212
 *
213
 * @param oi The option iterator to update.
214
 *
215
 * @return   The next option or @c NULL if no more options exist.
216
 */
217
coap_opt_t *coap_option_next(coap_opt_iterator_t *oi);
218
219
/**
220
 * Retrieves the first option of number @p number from @p pdu. @p oi must
221
 * point to a coap_opt_iterator_t object that will be initialized by this
222
 * function to filter only options with number @p number. This function returns
223
 * the first option with this number, or @c NULL if not found.
224
 *
225
 * @param pdu  The PDU to parse for options.
226
 * @param number The option number to search for.
227
 * @param oi   An iterator object to use.
228
 *
229
 * @return     A pointer to the first option of number @p number, or @c NULL if
230
 *             not found.
231
 */
232
coap_opt_t *coap_check_option(const coap_pdu_t *pdu,
233
                              coap_option_num_t number,
234
                              coap_opt_iterator_t *oi);
235
236
/**
237
 * Encodes the given delta and length values into @p opt. This function returns
238
 * the number of bytes that were required to encode @p delta and @p length or @c
239
 * 0 on error. Note that the result indicates by how many bytes @p opt must be
240
 * advanced to encode the option value.
241
 *
242
 * @param opt    The option buffer space where @p delta and @p length are
243
 *               written.
244
 * @param maxlen The maximum length of @p opt.
245
 * @param delta  The actual delta value to encode.
246
 * @param length The actual length value to encode.
247
 *
248
 * @return       The number of bytes used or @c 0 on error.
249
 */
250
size_t coap_opt_setheader(coap_opt_t *opt,
251
                          size_t maxlen,
252
                          uint16_t delta,
253
                          size_t length);
254
255
/**
256
 * Compute storage bytes needed for an option with given @p delta and
257
 * @p length
258
 *
259
 * @param delta  The option delta.
260
 * @param length The option length.
261
 *
262
 * @return       The number of bytes required to encode this option.
263
 */
264
size_t coap_opt_encode_size(uint16_t delta, size_t length);
265
266
/**
267
 * Encodes option with given @p delta into @p opt. This function returns the
268
 * number of bytes written to @p opt or @c 0 on error. This happens especially
269
 * when @p opt does not provide sufficient space to store the option value,
270
 * delta, and option jumps when required.
271
 *
272
 * @param opt    The option buffer space where @p val is written.
273
 * @param n      Maximum length of @p opt.
274
 * @param delta  The option delta.
275
 * @param val    The option value to copy into @p opt.
276
 * @param length The actual length of @p val.
277
 *
278
 * @return       The number of bytes that have been written to @p opt or @c 0 on
279
 *               error. The return value will always be less than @p n.
280
 */
281
size_t coap_opt_encode(coap_opt_t *opt,
282
                       size_t n,
283
                       uint16_t delta,
284
                       const uint8_t *val,
285
                       size_t length);
286
287
/**
288
 * Returns the length of the given option. @p opt must point to an option jump
289
 * or the beginning of the option. This function returns @c 0 when @p opt is not
290
 * an option or the actual length of @p opt (which can be @c 0 as well).
291
 *
292
 * @note {The rationale for using @c 0 in case of an error is that in most
293
 * contexts, the result of this function is used to skip the next
294
 * coap_opt_length() bytes.}
295
 *
296
 * @param opt  The option whose length should be returned.
297
 *
298
 * @return     The option's length or @c 0 when undefined.
299
 */
300
uint32_t coap_opt_length(const coap_opt_t *opt);
301
302
/**
303
 * Returns a pointer to the value of the given option. @p opt must point to an
304
 * option jump or the beginning of the option. This function returns @c NULL if
305
 * @p opt is not a valid option.
306
 *
307
 * @param opt The option whose value should be returned.
308
 *
309
 * @return    A pointer to the option value or @c NULL on error.
310
 */
311
const uint8_t *coap_opt_value(const coap_opt_t *opt);
312
313
/**
314
 * Representation of chained list of CoAP options to install.
315
 *
316
 * @code
317
 * coap_optlist_t *optlist_chain = NULL;
318
 * coap_pdu_t *pdu = coap_new_pdu(session);
319
 *
320
 * ... other set up code ...
321
 * coap_insert_optlist(&optlist_chain, coap_new_optlist(COAP_OPTION_OBSERVE,
322
 *                    COAP_OBSERVE_ESTABLISH, NULL));
323
 *
324
 * coap_add_optlist_pdu(pdu, &optlist_chain);
325
 * ... other code ...
326
 * coap_delete_optlist(optlist_chain);
327
 * @endcode
328
 */
329
typedef struct coap_optlist_t {
330
  struct coap_optlist_t *next;  /**< next entry in the optlist chain */
331
  uint16_t number;              /**< the option number (no delta coding) */
332
  size_t length;                /**< the option value length */
333
  uint8_t *data;                /**< the option data */
334
} coap_optlist_t;
335
336
/**
337
 * Create a new optlist entry.
338
 *
339
 * Note: Where possible, the option data needs to be stripped of leading zeros
340
 * (big endian) to reduce the amount of data needed in the PDU, as well as in
341
 * some cases the maximum data size of an opton can be exceeded if not stripped
342
 * and hence be illegal.  This is done by using coap_encode_var_safe() or
343
 * coap_encode_var_safe8().
344
 *
345
 * @param number    The option number (COAP_OPTION_*)
346
 * @param length    The option length
347
 * @param data      The option value data
348
 *
349
 * @return          A pointer to the new optlist entry, or @c NULL if error
350
 */
351
coap_optlist_t *coap_new_optlist(uint16_t number,
352
                                 size_t length,
353
                                 const uint8_t *data);
354
355
/**
356
 * The current optlist of @p optlist_chain is first sorted (as per RFC7272
357
 * ordering requirements) and then added to the @p pdu.
358
 *
359
 * @param pdu  The pdu to add the options to from the chain list
360
 * @param optlist_chain The chained list of optlist to add to the pdu
361
 *
362
 * @return     @c 1 if succesful or @c 0 if failure;
363
 */
364
int coap_add_optlist_pdu(coap_pdu_t *pdu, coap_optlist_t **optlist_chain);
365
366
/**
367
 * Adds @p optlist to the given @p optlist_chain. The optlist_chain variable
368
 * be set to NULL before the initial call to coap_insert_optlist().
369
 * The optlist_chain will need to be deleted using coap_delete_optlist()
370
 * when no longer required.
371
 *
372
 * @param optlist_chain The chain to add optlist to
373
 * @param optlist  The optlist to add to the queue
374
 *
375
 * @return         @c 1 if successful, @c 0 otherwise.
376
 */
377
int coap_insert_optlist(coap_optlist_t **optlist_chain,
378
                        coap_optlist_t *optlist);
379
380
/**
381
 * Removes all entries from the @p optlist_chain, freeing off their
382
 * memory usage.
383
 *
384
 * @param optlist_chain The optlist chain to remove all the entries from
385
 */
386
void coap_delete_optlist(coap_optlist_t *optlist_chain);
387
388
/** @} */
389
390
/**
391
 * Sets the corresponding bit for @p type in @p filter. This function returns @c
392
 * 1 if bit was set or @c -1 on error (i.e. when the given type does not fit in
393
 * the filter).
394
 *
395
 * @deprecated Use coap_option_filter_set() instead.
396
 *
397
 * @param filter The filter object to change.
398
 * @param type   The type for which the bit should be set.
399
 *
400
 * @return       @c 1 if bit was set, @c -1 otherwise.
401
 */
402
COAP_STATIC_INLINE COAP_DEPRECATED int
403
0
coap_option_setb(coap_opt_filter_t *filter, uint16_t type) {
404
0
  return coap_option_filter_set(filter, type) ? 1 : -1;
405
0
}
Unexecuted instantiation: coap_debug.c:coap_option_setb
Unexecuted instantiation: coap_encode.c:coap_option_setb
Unexecuted instantiation: coap_net.c:coap_option_setb
Unexecuted instantiation: coap_netif.c:coap_option_setb
Unexecuted instantiation: coap_notls.c:coap_option_setb
Unexecuted instantiation: coap_option.c:coap_option_setb
Unexecuted instantiation: coap_oscore.c:coap_option_setb
Unexecuted instantiation: coap_pdu.c:coap_option_setb
Unexecuted instantiation: coap_proxy.c:coap_option_setb
Unexecuted instantiation: coap_prng.c:coap_option_setb
Unexecuted instantiation: coap_resource.c:coap_option_setb
Unexecuted instantiation: coap_session.c:coap_option_setb
Unexecuted instantiation: coap_sha1.c:coap_option_setb
Unexecuted instantiation: coap_str.c:coap_option_setb
Unexecuted instantiation: coap_strm_posix.c:coap_option_setb
Unexecuted instantiation: coap_subscribe.c:coap_option_setb
Unexecuted instantiation: coap_threadsafe.c:coap_option_setb
Unexecuted instantiation: coap_time.c:coap_option_setb
Unexecuted instantiation: coap_uri.c:coap_option_setb
Unexecuted instantiation: coap_ws.c:coap_option_setb
Unexecuted instantiation: oscore.c:coap_option_setb
Unexecuted instantiation: oscore_cbor.c:coap_option_setb
Unexecuted instantiation: oscore_context.c:coap_option_setb
Unexecuted instantiation: oscore_cose.c:coap_option_setb
Unexecuted instantiation: oscore_crypto.c:coap_option_setb
Unexecuted instantiation: coap_address.c:coap_option_setb
Unexecuted instantiation: coap_async.c:coap_option_setb
Unexecuted instantiation: coap_block.c:coap_option_setb
Unexecuted instantiation: coap_cache.c:coap_option_setb
Unexecuted instantiation: coap_dgrm_posix.c:coap_option_setb
Unexecuted instantiation: coap_dtls.c:coap_option_setb
Unexecuted instantiation: coap_hashkey.c:coap_option_setb
Unexecuted instantiation: coap_io.c:coap_option_setb
Unexecuted instantiation: coap_io_posix.c:coap_option_setb
Unexecuted instantiation: coap_layers.c:coap_option_setb
Unexecuted instantiation: coap_mem.c:coap_option_setb
406
407
/**
408
 * Clears the corresponding bit for @p type in @p filter. This function returns
409
 * @c 1 if bit was cleared or @c -1 on error (i.e. bit not set).
410
 *
411
 * @deprecated Use coap_option_filter_unset() instead.
412
 *
413
 * @param filter The filter object to change.
414
 * @param type   The type for which the bit should be cleared.
415
 *
416
 * @return       @c 1 if bit was set, @c -1 otherwise.
417
 */
418
COAP_STATIC_INLINE COAP_DEPRECATED int
419
0
coap_option_clrb(coap_opt_filter_t *filter, uint16_t type) {
420
0
  return coap_option_filter_unset(filter, type) ? 1 : -1;
421
0
}
Unexecuted instantiation: coap_debug.c:coap_option_clrb
Unexecuted instantiation: coap_encode.c:coap_option_clrb
Unexecuted instantiation: coap_net.c:coap_option_clrb
Unexecuted instantiation: coap_netif.c:coap_option_clrb
Unexecuted instantiation: coap_notls.c:coap_option_clrb
Unexecuted instantiation: coap_option.c:coap_option_clrb
Unexecuted instantiation: coap_oscore.c:coap_option_clrb
Unexecuted instantiation: coap_pdu.c:coap_option_clrb
Unexecuted instantiation: coap_proxy.c:coap_option_clrb
Unexecuted instantiation: coap_prng.c:coap_option_clrb
Unexecuted instantiation: coap_resource.c:coap_option_clrb
Unexecuted instantiation: coap_session.c:coap_option_clrb
Unexecuted instantiation: coap_sha1.c:coap_option_clrb
Unexecuted instantiation: coap_str.c:coap_option_clrb
Unexecuted instantiation: coap_strm_posix.c:coap_option_clrb
Unexecuted instantiation: coap_subscribe.c:coap_option_clrb
Unexecuted instantiation: coap_threadsafe.c:coap_option_clrb
Unexecuted instantiation: coap_time.c:coap_option_clrb
Unexecuted instantiation: coap_uri.c:coap_option_clrb
Unexecuted instantiation: coap_ws.c:coap_option_clrb
Unexecuted instantiation: oscore.c:coap_option_clrb
Unexecuted instantiation: oscore_cbor.c:coap_option_clrb
Unexecuted instantiation: oscore_context.c:coap_option_clrb
Unexecuted instantiation: oscore_cose.c:coap_option_clrb
Unexecuted instantiation: oscore_crypto.c:coap_option_clrb
Unexecuted instantiation: coap_address.c:coap_option_clrb
Unexecuted instantiation: coap_async.c:coap_option_clrb
Unexecuted instantiation: coap_block.c:coap_option_clrb
Unexecuted instantiation: coap_cache.c:coap_option_clrb
Unexecuted instantiation: coap_dgrm_posix.c:coap_option_clrb
Unexecuted instantiation: coap_dtls.c:coap_option_clrb
Unexecuted instantiation: coap_hashkey.c:coap_option_clrb
Unexecuted instantiation: coap_io.c:coap_option_clrb
Unexecuted instantiation: coap_io_posix.c:coap_option_clrb
Unexecuted instantiation: coap_layers.c:coap_option_clrb
Unexecuted instantiation: coap_mem.c:coap_option_clrb
422
423
/**
424
 * Gets the corresponding bit for @p type in @p filter. This function returns @c
425
 * 1 if the bit is set @c 0 if not.
426
 *
427
 * @deprecated Use coap_option_filter_get() instead.
428
 *
429
 * @param filter The filter object to read bit from.
430
 * @param type   The type for which the bit should be read.
431
 *
432
 * @return       @c 1 if bit was set, @c 0 if not.
433
 */
434
COAP_STATIC_INLINE COAP_DEPRECATED int
435
0
coap_option_getb(coap_opt_filter_t *filter, uint16_t type) {
436
0
  return coap_option_filter_get(filter, type);
437
0
}
Unexecuted instantiation: coap_debug.c:coap_option_getb
Unexecuted instantiation: coap_encode.c:coap_option_getb
Unexecuted instantiation: coap_net.c:coap_option_getb
Unexecuted instantiation: coap_netif.c:coap_option_getb
Unexecuted instantiation: coap_notls.c:coap_option_getb
Unexecuted instantiation: coap_option.c:coap_option_getb
Unexecuted instantiation: coap_oscore.c:coap_option_getb
Unexecuted instantiation: coap_pdu.c:coap_option_getb
Unexecuted instantiation: coap_proxy.c:coap_option_getb
Unexecuted instantiation: coap_prng.c:coap_option_getb
Unexecuted instantiation: coap_resource.c:coap_option_getb
Unexecuted instantiation: coap_session.c:coap_option_getb
Unexecuted instantiation: coap_sha1.c:coap_option_getb
Unexecuted instantiation: coap_str.c:coap_option_getb
Unexecuted instantiation: coap_strm_posix.c:coap_option_getb
Unexecuted instantiation: coap_subscribe.c:coap_option_getb
Unexecuted instantiation: coap_threadsafe.c:coap_option_getb
Unexecuted instantiation: coap_time.c:coap_option_getb
Unexecuted instantiation: coap_uri.c:coap_option_getb
Unexecuted instantiation: coap_ws.c:coap_option_getb
Unexecuted instantiation: oscore.c:coap_option_getb
Unexecuted instantiation: oscore_cbor.c:coap_option_getb
Unexecuted instantiation: oscore_context.c:coap_option_getb
Unexecuted instantiation: oscore_cose.c:coap_option_getb
Unexecuted instantiation: oscore_crypto.c:coap_option_getb
Unexecuted instantiation: coap_address.c:coap_option_getb
Unexecuted instantiation: coap_async.c:coap_option_getb
Unexecuted instantiation: coap_block.c:coap_option_getb
Unexecuted instantiation: coap_cache.c:coap_option_getb
Unexecuted instantiation: coap_dgrm_posix.c:coap_option_getb
Unexecuted instantiation: coap_dtls.c:coap_option_getb
Unexecuted instantiation: coap_hashkey.c:coap_option_getb
Unexecuted instantiation: coap_io.c:coap_option_getb
Unexecuted instantiation: coap_io_posix.c:coap_option_getb
Unexecuted instantiation: coap_layers.c:coap_option_getb
Unexecuted instantiation: coap_mem.c:coap_option_getb
438
439
#ifdef __cplusplus
440
}
441
#endif
442
443
#endif /* COAP_OPTION_H_ */