libcoap 4.3.2rc2

Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
coap_uri.c File Reference

URI handling functions. More...

`#include "coap3/coap_internal.h"`
`#include <stdint.h>`
`#include <stdio.h>`
`#include <string.h>`
`#include <ctype.h>`

Go to the source code of this file.

## Data Structures
struct | cnt_str

## Macros
#define | hexchar_to_dec(c)
| Calculates decimal value from hexadecimal ASCII character given in `c`. More...
#define | min(a, b) ((a) < (b) ? (a) : (b))
#define | URI_DATA(uriobj) ((unsigned char *)(uriobj) + sizeof(coap_uri_t))

## Typedefs
typedef enum coap_uri_check_t | coap_uri_check_t
typedef void(* | segment_handler_t) (const uint8_t *, size_t, void *)

## Enumerations
enum | coap_uri_check_t { COAP_URI_CHECK_URI , COAP_URI_CHECK_PROXY }

## Functions
COAP_STATIC_INLINE const uint8_t * | strnchr (const uint8_t *s, size_t len, unsigned char c)
| A length-safe version of strchr(). More...
static int | coap_split_uri_sub (const uint8_t *str_var, size_t len, coap_uri_t *uri, coap_uri_check_t check_proxy)
int | coap_split_uri (const uint8_t *str_var, size_t len, coap_uri_t *uri)
| Parses a given string into URI components. More...
int | coap_split_proxy_uri (const uint8_t *str_var, size_t len, coap_uri_t *uri)
| Parses a given string into URI components. More...
int | coap_uri_into_options (const coap_uri_t *uri, const coap_address_t *dst, coap_optlist_t **optlist_chain, int create_port_host_opt, uint8_t *_buf, size_t _buflen)
| Takes a coap_uri_t and then adds CoAP options into the `optlist_chain`. More...
int | coap_host_is_unix_domain (const coap_str_const_t *host)
| Determines from the `host` whether this is a Unix Domain socket request. More...
static void | decode_segment (const uint8_t *seg, size_t length, unsigned char *buf)
| Decodes percent-encoded characters while copying the string `seg` of size `length` to `buf`. More...
static int | check_segment (const uint8_t *s, size_t length, size_t *segment_size)
| Runs through the given path (or query) segment and checks if percent-encodings are correct. More...
static int | make_decoded_option (const uint8_t *s, size_t length, unsigned char *buf, size_t buflen, size_t *optionsize)
| Writes a coap option from given string `s` to `buf`. More...
COAP_STATIC_INLINE int | dots (const uint8_t *s, size_t len)
| Checks if path segment `s` consists of one or two dots. More...
static size_t | coap_split_path_impl (const uint8_t *s, size_t length, segment_handler_t h, void *data)
| Splits the given string into segments. More...
static void | write_option (const uint8_t *s, size_t len, void *data)
int | coap_split_path (const uint8_t *s, size_t length, unsigned char *buf, size_t *buflen)
| Splits the given URI path into segments. More...
int | coap_split_query (const uint8_t *s, size_t length, unsigned char *buf, size_t *buflen)
| Splits the given URI query into segments. More...
coap_uri_t * | coap_new_uri (const uint8_t *uri, unsigned int length)
| Creates a new coap_uri_t object from the specified URI. More...
coap_uri_t * | coap_clone_uri (const coap_uri_t *uri)
| Clones the specified coap_uri_t object. More...
void | coap_delete_uri (coap_uri_t *uri)
| Removes the specified coap_uri_t object. More...
COAP_STATIC_INLINE int | is_unescaped_in_path (const uint8_t c)
COAP_STATIC_INLINE int | is_unescaped_in_query (const uint8_t c)
coap_string_t * | coap_get_query (const coap_pdu_t *request)
| Extract query string from request PDU according to escape rules in 6.5.8. More...
coap_string_t * | coap_get_uri_path (const coap_pdu_t *request)
| Extract uri_path string from request PDU. More...

## Variables
coap_uri_info_t | coap_uri_scheme [COAP_URI_SCHEME_LAST]

## Detailed Description

URI handling functions.

Definition in file coap_uri.c.

## Macro Definition Documentation

## ◆ hexchar_to_dec

#define hexchar_to_dec | ( |  | c | ) |

Calculates decimal value from hexadecimal ASCII character given in `c`.

The caller must ensure that `c` actually represents a valid heaxdecimal character, e.g. with isxdigit(3).

Definition at line 404 of file coap_uri.c.

## ◆ min

#define min | ( |  | a,
|  |  | b
| ) |  | ((a) < (b) ? (a) : (b))

Definition at line 526 of file coap_uri.c.

## ◆ URI_DATA

#define URI_DATA | ( |  | uriobj | ) | ((unsigned char *)(uriobj) + sizeof(coap_uri_t))

Definition at line 635 of file coap_uri.c.

## Typedef Documentation

## ◆ coap_uri_check_t

typedef enum coap_uri_check_t coap_uri_check_t

## ◆ segment_handler_t

typedef void(* segment_handler_t) (const uint8_t *, size_t, void *)

Definition at line 529 of file coap_uri.c.

## Enumeration Type Documentation

## ◆ coap_uri_check_t

enum coap_uri_check_t

Enumerator
COAP_URI_CHECK_URI |
COAP_URI_CHECK_PROXY |

Definition at line 46 of file coap_uri.c.

## Function Documentation

## ◆ check_segment()

static int check_segment | ( | const uint8_t * | s,
|  | size_t | length,
|  | size_t * | segment_size
| ) |  |
| static

Runs through the given path (or query) segment and checks if percent-encodings are correct.

This function returns `0` on success and `-1` on error.

Definition at line 443 of file coap_uri.c.

## ◆ coap_clone_uri()

coap_uri_t * coap_clone_uri | ( | const coap_uri_t * | uri | ) |

Clones the specified coap_uri_t object.

This function allocates sufficient memory to hold the coap_uri_t structure and its contents. The object should be released with delete_uri().

Parameters

  uri | The coap_uri_t structure to copy.

Returns
  New URI object or NULL on error.

Definition at line 657 of file coap_uri.c.

## ◆ coap_delete_uri()

void coap_delete_uri | ( | coap_uri_t * | uri | ) |

Removes the specified coap_uri_t object.

Parameters

  uri | The coap_uri_t structure to remove.

Definition at line 699 of file coap_uri.c.

## ◆ coap_host_is_unix_domain()

int coap_host_is_unix_domain | ( | const coap_str_const_t * | host | ) |

Determines from the `host` whether this is a Unix Domain socket request.

Parameters

  host | The host object.

Returns
  `0` on failure, or `1` on success.

Definition at line 386 of file coap_uri.c.

## ◆ coap_new_uri()

coap_uri_t * coap_new_uri | ( | const uint8_t * | uri,
|  | unsigned int | length
| ) |  |

Creates a new coap_uri_t object from the specified URI.

Returns the new object or NULL on error. The memory allocated by the new coap_uri_t should be released using coap_delete_uri().

Parameters

  uri | The URI path to copy.
  length | The length of uri.

Returns
  New URI object or NULL on error.

Definition at line 638 of file coap_uri.c.

## ◆ coap_split_path_impl()

static size_t coap_split_path_impl | ( | const uint8_t * | s,
|  | size_t | length,
|  | segment_handler_t | h,
|  | void * | data
| ) |  |
| static

Splits the given string into segments.

You should call one of the macros coap_split_path() or coap_split_query() instead.

Parameters

  s | The URI string to be tokenized.
  length | The length of `s`.
  h | A handler that is called with every token.
  data | Opaque data that is passed to `h` when called.

Returns
  The number of characters that have been parsed from `s`.

Definition at line 551 of file coap_uri.c.

## ◆ coap_split_uri_sub()

static int coap_split_uri_sub | ( | const uint8_t * | str_var,
|  | size_t | len,
|  | coap_uri_t * | uri,
|  | coap_uri_check_t | check_proxy
| ) |  |
| static

Definition at line 63 of file coap_uri.c.

## ◆ decode_segment()

static void decode_segment | ( | const uint8_t * | seg,
|  | size_t | length,
|  | unsigned char * | buf
| ) |  |
| static

Decodes percent-encoded characters while copying the string `seg` of size `length` to `buf`.

The caller of this function must ensure that the percent-encodings are correct (i.e. the character '' is always followed by two hex digits. and that `buf` provides sufficient space to hold the result. This function is supposed to be called by make_decoded_option() only.

Parameters

  seg | The segment to decode and copy.
  length | Length of `seg`.
  buf | The result buffer.

Definition at line 419 of file coap_uri.c.

## ◆ dots()

COAP_STATIC_INLINE int dots | ( | const uint8_t * | s,
|  | size_t | len
| ) |  |

Checks if path segment `s` consists of one or two dots.

Definition at line 535 of file coap_uri.c.

## ◆ is_unescaped_in_path()

COAP_STATIC_INLINE int is_unescaped_in_path | ( | const uint8_t | c | ) |

Definition at line 704 of file coap_uri.c.

## ◆ is_unescaped_in_query()

COAP_STATIC_INLINE int is_unescaped_in_query | ( | const uint8_t | c | ) |

Definition at line 713 of file coap_uri.c.

## ◆ make_decoded_option()

static int make_decoded_option | ( | const uint8_t * | s,
|  | size_t | length,
|  | unsigned char * | buf,
|  | size_t | buflen,
|  | size_t * | optionsize
| ) |  |
| static

Writes a coap option from given string `s` to `buf`.

`s` should point to a (percent-encoded) path or query segment of a coap_uri_t object. The created option will have type `0`, and the length parameter will be set according to the size of the decoded string. On success, this function returns `0` and sets `optionsize` to the option's size. On error the function returns a value less than zero. This function must be called from coap_split_path_impl() only.

Parameters

  s | The string to decode.
  length | The size of the percent-encoded string `s`.
  buf | The buffer to store the new coap option.
  buflen | The maximum size of `buf`.
  optionsize | The option's size.

Returns
  `0` on success and `-1` on error.

Definition at line 486 of file coap_uri.c.

## ◆ strnchr()

COAP_STATIC_INLINE const uint8_t * strnchr | ( | const uint8_t * | s,
|  | size_t | len,
|  | unsigned char | c
| ) |  |

A length-safe version of strchr().

This function returns a pointer to the first occurrence of `c` in `s`, or `NULL` if not found.

Parameters

  s | The string to search for `c`.
  len | The length of `s`.
  c | The character to search.

Returns
  A pointer to the first occurence of `c`, or `NULL` if not found.

Definition at line 39 of file coap_uri.c.

## ◆ write_option()

static void write_option | ( | const uint8_t * | s,
|  | size_t | len,
|  | void * | data
| ) |  |
| static

Definition at line 585 of file coap_uri.c.