Adaptive Framework
0.9.0
|
Files | |
file | afw_uri.h |
Header for Uniform Resource Identifier (URI) helpers. | |
Data Structures | |
struct | afw_uri_parsed_s |
Typedef for parsed URI returned from afw_uri_parse(). More... | |
struct | afw_uri_parser_s |
URI parser typedef. More... | |
Macros | |
#define | AFW_URI_OCTET_INVALID (afw_uri_octet_type_t)0x00000000 |
#define | AFW_URI_OCTET_GEN_DELIM (afw_uri_octet_type_t)0x00000001 |
#define | AFW_URI_OCTET_SUB_DELIM (afw_uri_octet_type_t)0x00000002 |
#define | AFW_URI_OCTET_UNRESERVED (afw_uri_octet_type_t)0x00000004 |
#define | AFW_URI_OCTET_PCT_ENCODED (afw_uri_octet_type_t)0x00000008 |
#define | AFW_URI_OCTET_ALPHA_UPPER (afw_uri_octet_type_t)0x00000010 |
#define | AFW_URI_OCTET_ALPHA_LOWER (afw_uri_octet_type_t)0x00000020 |
#define | AFW_URI_OCTET_DIGIT (afw_uri_octet_type_t)0x00000040 |
#define | AFW_URI_OCTET_HEXDIGIT (afw_uri_octet_type_t)0x00000080 |
#define | AFW_URI_OCTET_ENCODE_URI (afw_uri_octet_type_t)0x00000100 |
encode except A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # | |
#define | AFW_URI_OCTET_ENCODE_COMPONENT (afw_uri_octet_type_t)0x00000200 |
encode except A-Z a-z 0-9 - _ . ! ~ * ' ( ) | |
#define | AFW_URI_OCTET_ENCODE_COMPONENT_VALUE (afw_uri_octet_type_t)0x00000400 |
encode except A-Z a-z 0-9 - _ . ! ~ * ' | |
#define | AFW_URI_OCTET_AT (afw_uri_octet_type_t)0x00010000 |
#define | AFW_URI_OCTET_COLON (afw_uri_octet_type_t)0x00020000 |
#define | AFW_URI_OCTET_MINUS (afw_uri_octet_type_t)0x00040000 |
#define | AFW_URI_OCTET_PERCENT (afw_uri_octet_type_t)0x00080000 |
#define | AFW_URI_OCTET_PERIOD (afw_uri_octet_type_t)0x00100000 |
#define | AFW_URI_OCTET_PLUS (afw_uri_octet_type_t)0x00200000 |
#define | AFW_URI_OCTET_QUESTION (afw_uri_octet_type_t)0x00400000 |
#define | AFW_URI_OCTET_SLASH (afw_uri_octet_type_t)0x00800000 |
#define | AFW_URI_OCTET_MASK_IS_BITWISE_NOT (afw_uri_octet_type_t)0x80000000 |
#define | AFW_URI_OCTET_ALPHA |
Upper or lower ascii alpha uri octet type mask. More... | |
#define | AFW_URI_OCTET_PCHAR |
pchar uri octet type mask. More... | |
#define | AFW_URI_OCTET_SCHEME_START ( AFW_URI_OCTET_ALPHA ) |
Start char of scheme uri octet type mask. | |
#define | AFW_URI_OCTET_SCHEME_CONTINUE |
Continue char of scheme uri octet type mask. More... | |
#define | AFW_URI_OCTET_USERINFO |
Userinfo uri octet type mask. More... | |
#define | AFW_URI_OCTET_QUERY |
Query uri octet type mask. More... | |
#define | AFW_URI_OCTET_FRAGMENT |
Fragment uri octet type mask. More... | |
#define | AFW_URI_OCTET_RESERVED |
Reserved uri octet type mask. More... | |
#define | AFW_URI_OCTET_IS(type, mask) ((type) & (AFW_URI_OCTET_ ## mask)) |
Test uri octet type using mask. More... | |
Typedefs | |
typedef afw_uint32_t | afw_uri_octet_type_t |
Token type typedef. | |
typedef struct afw_uri_parsed_s | afw_uri_parsed_t |
Typedef for parsed URI returned from afw_uri_parse(). | |
typedef struct afw_uri_parser_s | afw_uri_parser_t |
URI parser typedef. | |
Functions | |
void | afw_uri_parser_initialize (afw_uri_parser_t *parser, const afw_utf8_t *uri, const afw_pool_t *p, afw_xctx_t *xctx) |
Initialize a parser in specific pool. More... | |
const afw_uri_parser_t * | afw_uri_parser_create (const afw_utf8_t *uri, const afw_pool_t *p, afw_xctx_t *xctx) |
Create and initialize a parser in specific pool. More... | |
void | afw_uri_parse_next_token (const afw_uri_parser_t *parser, afw_xctx_t *xctx) |
Parse next token. More... | |
void | afw_uri_parse_reuse_token (const afw_uri_parser_t *parser, afw_xctx_t *xctx) |
Cause next call afw_uri_parse_get_next_token() to return current token. More... | |
void | afw_uri_parse_set_consider_period_a_token (const afw_uri_parser_t *parser, afw_boolean_t consider_period_a_token, afw_xctx_t *xctx) |
Set consider_period_a_token flag. More... | |
afw_size_t | afw_uri_encode_len (const afw_utf8_t *string, afw_uri_octet_type_t mask, afw_xctx_t *xctx) |
The length needed to URI encode a string. More... | |
afw_size_t | afw_uri_encode_raw_len (const afw_memory_t *raw, afw_uri_octet_type_t mask, afw_xctx_t *xctx) |
The length needed to URI encode raw. More... | |
const afw_utf8_t * | afw_uri_encode (const afw_utf8_t *string, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx) |
URI encode a string. More... | |
const afw_utf8_t * | afw_uri_encode_create (const afw_utf8_octet_t *s, afw_size_t len, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx) |
Create a URI encode a string. More... | |
const afw_utf8_t * | afw_uri_encode_raw (const afw_memory_t *raw, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx) |
URI encode raw. More... | |
afw_size_t | afw_uri_encode_to_preallocated (afw_utf8_octet_t *s, afw_size_t s_len, const afw_utf8_t *string, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx) |
URI encode a string using supplied afw_utf8_t. More... | |
afw_size_t | afw_uri_encode_raw_to_preallocated (afw_utf8_octet_t *s, afw_size_t s_len, const afw_memory_t *raw, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx) |
URI encode from raw using supplied afw_utf8_t. More... | |
const afw_utf8_t * | afw_uri_decode (const afw_utf8_t *encoded, const afw_pool_t *p, afw_xctx_t *xctx) |
Decode a URI encoded string. More... | |
const afw_utf8_t * | afw_uri_decode_create (const afw_utf8_octet_t *s, afw_size_t len, const afw_pool_t *p, afw_xctx_t *xctx) |
Create a URI decoded string. More... | |
const afw_memory_t * | afw_uri_decode_to_raw_create (const afw_utf8_octet_t *s, afw_size_t len, const afw_pool_t *p, afw_xctx_t *xctx) |
Decode URI encoded string to raw. More... | |
const afw_memory_t * | afw_uri_decode_to_raw (const afw_utf8_t *encoded, const afw_pool_t *p, afw_xctx_t *xctx) |
Decode a URI encoded string to raw. More... | |
const afw_uri_parsed_t * | afw_uri_parse (const afw_utf8_t *uri, afw_boolean_t is_value_path, const afw_utf8_t *current_path, const afw_pool_t *p, afw_xctx_t *xctx) |
Parse a URI in specific pool. More... | |
const afw_object_t * | afw_uri_parsed_to_object (const afw_uri_parsed_t *parsed, const afw_pool_t *p, afw_xctx_t *xctx) |
Turn a parsed URI into an object representation. More... | |
const afw_object_t * | afw_uri_to_object (const afw_utf8_t *uri, afw_boolean_t is_value_path, const afw_utf8_t *current_path, const afw_pool_t *p, afw_xctx_t *xctx) |
Turn a URI into an object representation. More... | |
afw_boolean_t | afw_uri_octet_test (afw_octet_t octet, afw_uri_octet_type_t mask) |
Test uri octet type mask. More... | |
afw_boolean_t | afw_uri_parsed_are_equivalent (const afw_uri_parsed_t *parsed1, const afw_uri_parsed_t *parsed2, afw_xctx_t *xctx) |
Determine if two parsed URIs are equivalent. More... | |
afw_boolean_t | afw_uri_are_equivalent (const afw_utf8_t *uri1, const afw_utf8_t *uri2, afw_boolean_t is_value_path, const afw_utf8_t *current_path2, const afw_pool_t *p, afw_xctx_t *xctx) |
Determine if two URIs are equivalent. More... | |
Variables | |
afw_uri_octet_type [256] | |
Token type table indexed by afw_octet_t ( 0 - 255 ). | |
Uniform Resource Identifier (URI) support.
#define AFW_URI_OCTET_ALPHA |
#define AFW_URI_OCTET_FRAGMENT |
Fragment uri octet type mask.
#define AFW_URI_OCTET_IS | ( | type, | |
mask | |||
) | ((type) & (AFW_URI_OCTET_ ## mask)) |
#define AFW_URI_OCTET_PCHAR |
#define AFW_URI_OCTET_QUERY |
Query uri octet type mask.
#define AFW_URI_OCTET_RESERVED |
#define AFW_URI_OCTET_SCHEME_CONTINUE |
Continue char of scheme uri octet type mask.
#define AFW_URI_OCTET_USERINFO |
afw_boolean_t afw_uri_are_equivalent | ( | const afw_utf8_t * | uri1, |
const afw_utf8_t * | uri2, | ||
afw_boolean_t | is_value_path, | ||
const afw_utf8_t * | current_path2, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
Determine if two URIs are equivalent.
uri1 | parsed uri. |
uri2 | parsed uri. |
is_value_path | indicates URIs are of adaptive values. |
current_path2 | used for resolving asterisks in uri2 path or NULL. |
p | to use while determining equivalence. |
xctx | of caller |
const afw_utf8_t* afw_uri_decode | ( | const afw_utf8_t * | encoded, |
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
const afw_utf8_t* afw_uri_decode_create | ( | const afw_utf8_octet_t * | s, |
afw_size_t | len, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
const afw_memory_t* afw_uri_decode_to_raw | ( | const afw_utf8_t * | encoded, |
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
Decode a URI encoded string to raw.
encoded | string. |
p | to use for result. |
xctx | of caller. |
Use this instead of afw_uri_decode() is decoded value might not be valid Unicode NFC.
const afw_memory_t* afw_uri_decode_to_raw_create | ( | const afw_utf8_octet_t * | s, |
afw_size_t | len, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
Decode URI encoded string to raw.
s | points to first octet. |
len | is length in octets to decode. |
p | to use for result. |
xctx | of caller. |
Use this instead of afw_uri_decode() is decoded value might not be valid Unicode NFC.
const afw_utf8_t* afw_uri_encode | ( | const afw_utf8_t * | string, |
afw_uri_octet_type_t | mask, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
URI encode a string.
string | to encode. |
mask | identifying octets to remain asis. See afw_uri_octet_test(). |
p | to use for result. |
xctx | of caller. |
If string does not contain octets that need to be encoded, the original string parameter will be returned as result.
const afw_utf8_t* afw_uri_encode_create | ( | const afw_utf8_octet_t * | s, |
afw_size_t | len, | ||
afw_uri_octet_type_t | mask, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
Create a URI encode a string.
s | points to first octet. |
len | is length in octets of string. |
mask | identifying octets to remain asis. See afw_uri_octet_test(). |
p | to use for result. |
xctx | of caller. |
If string does not contain octets that need to be encoded, the original string parameter will be returned as result.
afw_size_t afw_uri_encode_len | ( | const afw_utf8_t * | string, |
afw_uri_octet_type_t | mask, | ||
afw_xctx_t * | xctx | ||
) |
The length needed to URI encode a string.
string | to encode. |
mask | identifying octets to remain asis. See afw_uri_octet_test(). |
xctx | of caller. |
const afw_utf8_t* afw_uri_encode_raw | ( | const afw_memory_t * | raw, |
afw_uri_octet_type_t | mask, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
URI encode raw.
raw | to encode. |
mask | identifying octets to remain asis. See afw_uri_octet_test(). |
p | to use for result. |
xctx | of caller. |
afw_size_t afw_uri_encode_raw_len | ( | const afw_memory_t * | raw, |
afw_uri_octet_type_t | mask, | ||
afw_xctx_t * | xctx | ||
) |
The length needed to URI encode raw.
raw | to encode. |
mask | identifying octets to remain asis. See afw_uri_octet_test(). |
xctx | of caller. |
The string should be a component or subcomponent since all reserved and invalid characters will be percent encoded.
afw_size_t afw_uri_encode_raw_to_preallocated | ( | afw_utf8_octet_t * | s, |
afw_size_t | s_len, | ||
const afw_memory_t * | raw, | ||
afw_uri_octet_type_t | mask, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
URI encode from raw using supplied afw_utf8_t.
s | is preallocated place for result. |
s_len | is size of preallocated place. |
raw | to encode. |
mask | identifying octets to remain asis. See afw_uri_octet_test(). |
p | to use for result. |
xctx | of caller. |
This form is useful if you do not want a afw_memory_t stuct to be allocated.
afw_size_t afw_uri_encode_to_preallocated | ( | afw_utf8_octet_t * | s, |
afw_size_t | s_len, | ||
const afw_utf8_t * | string, | ||
afw_uri_octet_type_t | mask, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
URI encode a string using supplied afw_utf8_t.
s | is preallocated place for result. |
s_len | is size of preallocated place. |
string | to encode. |
mask | identifying octets to remain asis. See afw_uri_octet_test(). |
p | to use for result. |
xctx | of caller. |
This form is useful if you do not want a afw_utf8_t stuct to be allocated.
afw_boolean_t afw_uri_octet_test | ( | afw_octet_t | octet, |
afw_uri_octet_type_t | mask | ||
) |
Test uri octet type mask.
octet | to test |
mask | (see details in description) |
See #define AFW_URI_OCTET_* for values.
If (afw_uri_octet_type_t)0x80000000) & mask is not 0, ie high bit on, the mask parameter is the ~ of the bits to test.
afw_uri_octet_test(octet, mask) returns true if any bit in mask are 1.
afw_uri_octet_test(octet, ~mask) returns true if all bits in ~mask are 0.
Examples:
// Test to see if octet is to be left asis when encoding URI components afw_uri_octet_test(octet, AFW_URI_OCTET_ENCODE_COMPONENT)
// Test to see if octet should be % encoded when encoding URI components afw_uri_octet_test(octet, ~AFW_URI_OCTET_ENCODE_COMPONENT)
const afw_uri_parsed_t* afw_uri_parse | ( | const afw_utf8_t * | uri, |
afw_boolean_t | is_value_path, | ||
const afw_utf8_t * | current_path, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
Parse a URI in specific pool.
uri | to parse. |
is_value_path | indicates path is an adaptive value path. |
current_path | to use to resolve relative value paths. |
p | to use for result. |
xctx | of caller |
If is_value_path is true, afw_object_path_parse() will be called to further parse uri if it begins with a single slash.
void afw_uri_parse_next_token | ( | const afw_uri_parser_t * | parser, |
afw_xctx_t * | xctx | ||
) |
void afw_uri_parse_reuse_token | ( | const afw_uri_parser_t * | parser, |
afw_xctx_t * | xctx | ||
) |
void afw_uri_parse_set_consider_period_a_token | ( | const afw_uri_parser_t * | parser, |
afw_boolean_t | consider_period_a_token, | ||
afw_xctx_t * | xctx | ||
) |
afw_boolean_t afw_uri_parsed_are_equivalent | ( | const afw_uri_parsed_t * | parsed1, |
const afw_uri_parsed_t * | parsed2, | ||
afw_xctx_t * | xctx | ||
) |
const afw_object_t* afw_uri_parsed_to_object | ( | const afw_uri_parsed_t * | parsed, |
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
const afw_uri_parser_t* afw_uri_parser_create | ( | const afw_utf8_t * | uri, |
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
Create and initialize a parser in specific pool.
uri | to parse. |
p | to use for anything allocated while parsing. |
xctx | of caller. |
The URI parser can be used to parse a full URI or a URI component or subcomponent. In the case of a full URI you may want to consider using afw_uri_parse() instead.
void afw_uri_parser_initialize | ( | afw_uri_parser_t * | parser, |
const afw_utf8_t * | uri, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
Initialize a parser in specific pool.
parser | is preallocated afw_uri_parser_t struct to initialize. |
uri | to parse. |
p | to use for anything allocated while parsing. |
xctx | of caller. |
The URI parser can be used to parse a full URI or a URI component or subcomponent. In the case of a full URI you may want to consider using afw_uri_parse() instead.
const afw_object_t* afw_uri_to_object | ( | const afw_utf8_t * | uri, |
afw_boolean_t | is_value_path, | ||
const afw_utf8_t * | current_path, | ||
const afw_pool_t * | p, | ||
afw_xctx_t * | xctx | ||
) |
Turn a URI into an object representation.
uri | to parse. |
is_value_path | indicates path is an adaptive value path. |
current_path | to use to resolve relative value paths. |
p | to use for result. |
xctx | of caller |
If is_value_path is true, afw_object_path_parse() will be called to further parse uri if it begins with a single slash.