libcoap 4.3.5-develop-72190a8
|
URI handling functions. More...
#include "coap3/coap_libcoap_build.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 . | |
#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(). | |
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. | |
int | coap_split_proxy_uri (const uint8_t *str_var, size_t len, coap_uri_t *uri) |
Parses a given string into URI components. | |
static void | coap_replace_upper_lower (coap_optlist_t *optlist) |
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 COAP_UNUSED, size_t buflen COAP_UNUSED) |
int | coap_uri_into_optlist (const coap_uri_t *uri, const coap_address_t *dst, coap_optlist_t **optlist_chain, int create_port_host_opt) |
Takes a coap_uri_t and then adds CoAP options into the optlist_chain . | |
int | coap_host_is_unix_domain (const coap_str_const_t *host) |
Determines from the host whether this is a Unix Domain socket request. | |
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 . | |
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. | |
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 . | |
static int | dots (const uint8_t *s, size_t len) |
Checks if path segment s consists of one or two dots. | |
static void | backup_segment (void *data) |
static size_t | coap_split_path_impl (const uint8_t *path, size_t len, segment_handler_t h, void *data) |
Splits the given string into segments. | |
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. | |
void | coap_replace_percents (coap_optlist_t *optlist) |
replace any % hex definitions with the actual character. | |
static void | backup_optlist (coap_optlist_t **optlist_begin) |
int | coap_path_into_optlist (const uint8_t *s, size_t length, coap_option_num_t optnum, coap_optlist_t **optlist_chain) |
Splits the given URI path into '/' separate segments, and then adds the Uri-Path / Location-Path option for each segment to the optlist_chain . | |
int | coap_split_query (const uint8_t *s, size_t length, unsigned char *buf, size_t *buflen) |
Splits the given URI query into segments. | |
int | coap_query_into_optlist (const uint8_t *s, size_t length, coap_option_num_t optnum, coap_optlist_t **optlist_chain) |
Splits the given URI query into '&' separate segments, and then adds the Uri-Query / Location-Query option for each segment to the optlist_chain . | |
coap_uri_t * | coap_new_uri (const uint8_t *uri, unsigned int length) |
Creates a new coap_uri_t object from the specified URI. | |
coap_uri_t * | coap_clone_uri (const coap_uri_t *uri) |
Clones the specified coap_uri_t object. | |
void | coap_delete_uri (coap_uri_t *uri) |
Removes the specified coap_uri_t object. | |
static int | is_unescaped_in_path (const uint8_t c) |
static 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. | |
coap_string_t * | coap_get_uri_path (const coap_pdu_t *request) |
Extract uri_path string from request PDU. | |
Variables | |
coap_uri_info_t | coap_uri_scheme [COAP_URI_SCHEME_LAST] |
URI handling functions.
Definition in file coap_uri.c.
#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 407 of file coap_uri.c.
#define min | ( | a, | |
b | |||
) | ((a) < (b) ? (a) : (b)) |
Definition at line 529 of file coap_uri.c.
#define URI_DATA | ( | uriobj | ) | ((unsigned char *)(uriobj) + sizeof(coap_uri_t)) |
Definition at line 854 of file coap_uri.c.
typedef enum coap_uri_check_t coap_uri_check_t |
typedef void(* segment_handler_t) (const uint8_t *, size_t, void *) |
Definition at line 532 of file coap_uri.c.
enum coap_uri_check_t |
Enumerator | |
---|---|
COAP_URI_CHECK_URI | |
COAP_URI_CHECK_PROXY |
Definition at line 51 of file coap_uri.c.
|
static |
Definition at line 715 of file coap_uri.c.
|
static |
Definition at line 587 of file coap_uri.c.
|
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 446 of file coap_uri.c.
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().
uri | The coap_uri_t structure to copy. |
Definition at line 878 of file coap_uri.c.
void coap_delete_uri | ( | coap_uri_t * | uri | ) |
Removes the specified coap_uri_t object.
uri | The coap_uri_t structure to remove. |
Definition at line 920 of file coap_uri.c.
int coap_host_is_unix_domain | ( | const coap_str_const_t * | host | ) |
Determines from the host
whether this is a Unix Domain socket request.
host | The host object. |
0
on failure, or 1
on success. Definition at line 389 of file coap_uri.c.
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().
uri | The URI path to copy. |
length | The length of uri. |
Definition at line 857 of file coap_uri.c.
|
static |
|
static |
Splits the given string into segments.
You should call one of the functions coap_split_path() or coap_split_query() instead.
path | The URI path string to be tokenized. |
len | The length of path . |
h | A handler that is called with every token. |
data | Opaque data that is passed to h when called. |
s
. Definition at line 616 of file coap_uri.c.
|
static |
Definition at line 68 of file coap_uri.c.
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 | COAP_UNUSED, | ||
size_t buflen | COAP_UNUSED | ||
) |
|
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.
seg | The segment to decode and copy. |
length | Length of seg . |
buf | The result buffer. |
Definition at line 422 of file coap_uri.c.
|
static |
Checks if path segment s
consists of one or two dots.
returns 1 if . , 2 if .. else 0.
Definition at line 540 of file coap_uri.c.
|
static |
|
static |
Definition at line 934 of file coap_uri.c.
|
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.
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. |
0
on success and -1
on error.Definition at line 489 of file coap_uri.c.
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.
s | The string to search for c . |
len | The length of s . |
c | The character to search. |
c
, or NULL
if not found. Definition at line 44 of file coap_uri.c.
|
static |
Definition at line 670 of file coap_uri.c.