libcoap  4.2.0
option.h
Go to the documentation of this file.
1 /*
2  * option.h -- helpers for handling options in CoAP PDUs
3  *
4  * Copyright (C) 2010-2013 Olaf Bergmann <bergmann@tzi.org>
5  *
6  * This file is part of the CoAP library libcoap. Please see README for terms
7  * of use.
8  */
9 
15 #ifndef COAP_OPTION_H_
16 #define COAP_OPTION_H_
17 
18 #include "bits.h"
19 #include "pdu.h"
20 
26 #define PCHAR(p) ((coap_opt_t *)(p))
27 
31 typedef struct {
32  uint16_t delta;
33  size_t length;
34  const uint8_t *value;
36 
49 size_t coap_opt_parse(const coap_opt_t *opt,
50  size_t length,
51  coap_option_t *result);
52 
62 size_t coap_opt_size(const coap_opt_t *opt);
63 
76 #define COAP_OPT_FILTER_SHORT 6
77 
84 #define COAP_OPT_FILTER_LONG 2
85 
86 /* Ensure that COAP_OPT_FILTER_SHORT and COAP_OPT_FILTER_LONG are set
87  * correctly. */
88 #if (COAP_OPT_FILTER_SHORT + COAP_OPT_FILTER_LONG > 16)
89 #error COAP_OPT_FILTER_SHORT + COAP_OPT_FILTER_LONG must be less or equal 16
90 #endif /* (COAP_OPT_FILTER_SHORT + COAP_OPT_FILTER_LONG > 16) */
91 
93 #define COAP_OPT_FILTER_SIZE \
94  (((COAP_OPT_FILTER_SHORT + 1) >> 1) + COAP_OPT_FILTER_LONG) +1
95 
120 
122 #define COAP_OPT_ALL NULL
123 
131  memset(f, 0, sizeof(coap_opt_filter_t));
132 }
133 
144 int coap_option_filter_set(coap_opt_filter_t filter, uint16_t type);
145 
156 int coap_option_filter_unset(coap_opt_filter_t filter, uint16_t type);
157 
168 int coap_option_filter_get(coap_opt_filter_t filter, uint16_t type);
169 
183 coap_option_setb(coap_opt_filter_t filter, uint16_t type) {
184  return coap_option_filter_set(filter, type) ? 1 : -1;
185 }
186 
200 coap_option_clrb(coap_opt_filter_t filter, uint16_t type) {
201  return coap_option_filter_unset(filter, type) ? 1 : -1;
202 }
203 
217 coap_option_getb(coap_opt_filter_t filter, uint16_t type) {
218  return coap_option_filter_get(filter, type);
219 }
220 
237 typedef struct {
238  size_t length;
239  uint16_t type;
240  unsigned int bad:1;
241  unsigned int filtered:1;
245 
264  const coap_opt_filter_t filter);
265 
283 
298  uint16_t type,
299  coap_opt_iterator_t *oi);
300 
315 size_t coap_opt_setheader(coap_opt_t *opt,
316  size_t maxlen,
317  uint16_t delta,
318  size_t length);
319 
329 size_t coap_opt_encode_size(uint16_t delta, size_t length);
330 
346 size_t coap_opt_encode(coap_opt_t *opt,
347  size_t n,
348  uint16_t delta,
349  const uint8_t *val,
350  size_t length);
351 
362 uint16_t coap_opt_delta(const coap_opt_t *opt);
363 
377 uint16_t coap_opt_length(const coap_opt_t *opt);
378 
388 const uint8_t *coap_opt_value(const coap_opt_t *opt);
389 
408 typedef struct coap_optlist_t {
410  uint16_t number;
411  size_t length;
414 
425  size_t length,
426  const uint8_t *data);
427 
437 int coap_add_optlist_pdu(coap_pdu_t *pdu, coap_optlist_t** optlist_chain);
438 
450 int coap_insert_optlist(coap_optlist_t **optlist_chain,
451  coap_optlist_t *optlist);
452 
459 void coap_delete_optlist(coap_optlist_t *optlist_chain);
460 
461 #endif /* COAP_OPTION_H_ */
size_t length
the option value length
Definition: option.h:411
uint8_t coap_opt_t
Use byte-oriented access methods here because sliding a complex struct coap_opt_t over the data buffe...
Definition: option.h:25
COAP_STATIC_INLINE int coap_option_clrb(coap_opt_filter_t filter, uint16_t type)
Clears the corresponding bit for type in filter.
Definition: option.h:200
size_t coap_opt_size(const coap_opt_t *opt)
Returns the size of the given option, taking into account a possible option jump. ...
Definition: option.c:321
size_t coap_opt_parse(const coap_opt_t *opt, size_t length, coap_option_t *result)
Parses the option pointed to by opt into result.
Definition: option.c:46
COAP_STATIC_INLINE int coap_option_setb(coap_opt_filter_t filter, uint16_t type)
Sets the corresponding bit for type in filter.
Definition: option.h:183
void coap_delete_optlist(coap_optlist_t *optlist_chain)
Removes all entries from the optlist_chain, freeing off their memory usage.
Definition: option.c:621
int coap_insert_optlist(coap_optlist_t **optlist_chain, coap_optlist_t *optlist)
Adds optlist to the given optlist_chain.
Definition: option.c:600
struct coap_optlist_t * next
next entry in the optlist chain
Definition: option.h:409
const uint8_t * value
Definition: option.h:34
size_t length
remaining length of PDU
Definition: option.h:238
int coap_option_filter_set(coap_opt_filter_t filter, uint16_t type)
Sets the corresponding entry for type in filter.
Definition: option.c:534
coap_opt_t * coap_option_next(coap_opt_iterator_t *oi)
Updates the iterator oi to point to the next option.
Definition: option.c:157
coap_optlist_t * coap_new_optlist(uint16_t number, size_t length, const uint8_t *data)
Create a new optlist entry.
Definition: option.c:551
coap_opt_filter_t filter
option filter
Definition: option.h:243
#define COAP_OPT_FILTER_SIZE
The number of elements in coap_opt_filter_t.
Definition: option.h:93
uint16_t type
decoded option type
Definition: option.h:239
struct coap_optlist_t coap_optlist_t
Representation of chained list of CoAP options to install.
Representation of chained list of CoAP options to install.
Definition: option.h:408
size_t coap_opt_encode_size(uint16_t delta, size_t length)
Compute storage bytes needed for an option with given delta and length.
Definition: option.c:388
coap_opt_t * coap_check_option(coap_pdu_t *pdu, uint16_t type, coap_opt_iterator_t *oi)
Retrieves the first option of type type from pdu.
Definition: option.c:207
uint16_t delta
Definition: option.h:32
structure for CoAP PDUs token, if any, follows the fixed size header, then options until payload mark...
Definition: pdu.h:287
int coap_option_filter_get(coap_opt_filter_t filter, uint16_t type)
Checks if type is contained in filter.
Definition: option.c:544
uint16_t coap_opt_length(const coap_opt_t *opt)
Returns the length of the given option.
Definition: option.c:249
size_t length
Definition: option.h:33
Representation of CoAP options.
Definition: option.h:31
uint16_t coap_opt_delta(const coap_opt_t *opt)
Decodes the delta value of the next option.
Definition: option.c:220
uint8_t * data
the option data
Definition: option.h:412
int coap_add_optlist_pdu(coap_pdu_t *pdu, coap_optlist_t **optlist_chain)
The current optlist of optlist_chain is first sorted (as per RFC7272 ordering requirements) and then ...
Definition: option.c:584
coap_opt_t * next_option
pointer to the unparsed next option
Definition: option.h:242
Iterator to run through PDU options.
Definition: option.h:237
unsigned int bad
iterator object is ok if not set
Definition: option.h:240
int coap_option_filter_unset(coap_opt_filter_t filter, uint16_t type)
Clears the corresponding entry for type in filter.
Definition: option.c:539
COAP_STATIC_INLINE void coap_option_filter_clear(coap_opt_filter_t f)
Clears filter f.
Definition: option.h:130
uint16_t number
the option number (no delta coding)
Definition: option.h:410
#define COAP_STATIC_INLINE
Definition: libcoap.h:38
Pre-defined constants that reflect defaults for CoAP.
unsigned int filtered
denotes whether or not filter is used
Definition: option.h:241
uint16_t coap_opt_filter_t[COAP_OPT_FILTER_SIZE]
Fixed-size vector we use for option filtering.
Definition: option.h:119
COAP_STATIC_INLINE int coap_option_getb(coap_opt_filter_t filter, uint16_t type)
Gets the corresponding bit for type in filter.
Definition: option.h:217
size_t coap_opt_encode(coap_opt_t *opt, size_t n, uint16_t delta, const uint8_t *val, size_t length)
Encodes option with given delta into opt.
Definition: option.c:409
size_t coap_opt_setheader(coap_opt_t *opt, size_t maxlen, uint16_t delta, size_t length)
Encodes the given delta and length values into opt.
Definition: option.c:329
const uint8_t * coap_opt_value(const coap_opt_t *opt)
Returns a pointer to the value of the given option.
Definition: option.c:286
Bit vector manipulation.
unsigned char uint8_t
Definition: uthash.h:79
coap_opt_iterator_t * coap_option_iterator_init(const coap_pdu_t *pdu, coap_opt_iterator_t *oi, const coap_opt_filter_t filter)
Initializes the given option iterator oi to point to the beginning of the pdu&#39;s option list...
Definition: option.c:121