libcoap
4.1.2
|
#include "coap_config.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "mem.h"
#include "debug.h"
#include "pdu.h"
#include "option.h"
#include "uri.h"
Go to the source code of this file.
Data Structures | |
struct | cnt_str |
Macros | |
#define | ISEQUAL_CI(a, b) ((a) == (b) || (islower(b) && ((a) == ((b) - 0x20)))) |
#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 void(* | segment_handler_t) (unsigned char *, size_t, void *) |
Functions | |
static unsigned char * | strnchr (unsigned char *s, size_t len, unsigned char c) |
A length-safe version of strchr(). More... | |
int | coap_split_uri (const unsigned char *str_var, size_t len, coap_uri_t *uri) |
Parses a given string into URI components. More... | |
static void | decode_segment (const unsigned char *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 unsigned char *s, size_t length) |
Runs through the given path (or query) segment and checks if percent-encodings are correct. More... | |
static int | make_decoded_option (const unsigned char *s, size_t length, unsigned char *buf, size_t buflen) |
Writes a coap option from given string s to buf . More... | |
static int | dots (unsigned char *s, size_t len) |
Checks if path segment s consists of one or two dots. More... | |
static size_t | coap_split_path_impl (const unsigned char *s, size_t length, segment_handler_t h, void *data) |
Splits the given string into segments. More... | |
static void | write_option (unsigned char *s, size_t len, void *data) |
int | coap_split_path (const unsigned char *s, size_t length, unsigned char *buf, size_t *buflen) |
Splits the given URI path into segments. More... | |
int | coap_split_query (const unsigned char *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 unsigned char *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... | |
static void | hash_segment (unsigned char *s, size_t len, void *data) |
int | coap_hash_path (const unsigned char *path, size_t len, coap_key_t key) |
Calculates a hash over the given path and stores the result in key . More... | |
#define hexchar_to_dec | ( | c | ) |
#define ISEQUAL_CI | ( | a, | |
b | |||
) | ((a) == (b) || (islower(b) && ((a) == ((b) - 0x20)))) |
#define URI_DATA | ( | uriobj | ) | ((unsigned char *)(uriobj) + sizeof(coap_uri_t)) |
typedef void(* segment_handler_t) (unsigned char *, size_t, void *) |
|
static |
coap_uri_t* coap_clone_uri | ( | const coap_uri_t * | uri | ) |
Clones the specified coap_uri_t object.
Thie function allocates sufficient memory to hold the coap_uri_t structure and its contents. The object must be released with coap_free().
Definition at line 433 of file uri.c.
int coap_hash_path | ( | const unsigned char * | path, |
size_t | len, | ||
coap_key_t | key | ||
) |
Calculates a hash over the given path and stores the result in key
.
This function returns 0
on error or 1
on success.
path | The URI path to generate hash for. |
len | The length of path . |
key | The output buffer. |
1
if key
was set, 0
otherwise. Definition at line 483 of file uri.c.
coap_uri_t* coap_new_uri | ( | const unsigned char * | 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 must be released using coap_free().
uri | The URI path to copy. |
length | The length of uri. |
Definition at line 414 of file uri.c.
|
static |
Splits the given string into segments.
You should call one of the macros coap_split_path() or coap_split_query() instead.
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. |
s
. Definition at line 328 of file uri.c.
|
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 205 of file uri.c.
|
inlinestatic |
|
inlinestatic |
|
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 the option's size, or a value less than zero on error. 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 . |
-1
on error.Definition at line 266 of file uri.c.
|
inlinestatic |
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 37 of file uri.c.