libUPnP
1.6.17
|
Contains functions for uri, url parsing utility. More...
Functions | |
static int | is_reserved (char in) |
Returns a 1 if a char is a RESERVED char as defined in http://www.ietf.org/rfc/rfc2396.txt RFC explaining URIs). | |
int | is_mark (char in) |
Returns a 1 if a char is a MARK char as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs). | |
int | is_unreserved (char in) |
Returns a 1 if a char is an UNRESERVED char as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs). | |
int | is_escaped (const char *in) |
Returns a 1 if a char[3] sequence is ESCAPED as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs). | |
int | replace_escaped (char *in, size_t index, size_t *max) |
Replaces an escaped sequence with its unescaped version as in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs) | |
static size_t | parse_uric (const char *in, size_t max, token *out) |
Parses a string of uric characters starting at in[0] as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs). | |
static void | copy_token (const token *in, const char *in_base, token *out, char *out_base) |
Tokens are generally pointers into other strings. This copies the offset and size from a token (in) relative to one string (in_base) into a token (out) relative to another string (out_base). | |
int | copy_URL_list (URL_list *in, URL_list *out) |
Copies one URL_list into another. | |
void | free_URL_list (URL_list *list) |
Frees the memory associated with a URL_list. | |
void | print_uri (uri_type *in) |
Function useful in debugging for printing a parsed uri. | |
void | print_token (token *in) |
Function useful in debugging for printing a token. | |
int | token_string_casecmp (token *in1, const char *in2) |
Compares buffer in the token object with the buffer in in2. | |
int | token_string_cmp (token *in1, char *in2) |
Compares a null terminated string to a token (exact). | |
int | token_cmp (token *in1, token *in2) |
Compares two tokens. | |
static int | parse_hostport (const char *in, hostport_type *out) |
Parses a string representing a host and port (e.g. "127.127.0.1:80" or "localhost") and fills out a hostport_type struct with internet address and a token representing the full host and port. | |
static size_t | parse_scheme (const char *in, size_t max, token *out) |
parses a uri scheme starting at in[0] as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs). | |
int | remove_escaped_chars (INOUT char *in, INOUT size_t *size) |
int | remove_dots (char *in, size_t size) |
Removes ".", and ".." from a path. | |
char * | resolve_rel_url (char *base_url, char *rel_url) |
resolves a relative url with a base url returning a NEW (dynamically allocated with malloc) full url. | |
int | parse_uri (const char *in, size_t max, uri_type *out) |
Parses a uri as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs). | |
int | parse_uri_and_unescape (char *in, size_t max, uri_type *out) |
Same as parse_uri(), except that all strings are unescaped (XX replaced by chars). |
Contains functions for uri, url parsing utility.
static void copy_token | ( | const token * | in, |
const char * | in_base, | ||
token * | out, | ||
char * | out_base | ||
) | [static] |
Tokens are generally pointers into other strings. This copies the offset and size from a token (in) relative to one string (in_base) into a token (out) relative to another string (out_base).
[in] | in | Source token. |
[in] | in_base | . |
[out] | out | Destination token. |
[in] | out_base | . |
Referenced by copy_URL_list().
int copy_URL_list | ( | URL_list * | in, |
URL_list * | out | ||
) |
Copies one URL_list into another.
This includes dynamically allocating the out->URLs field (the full string), and the structures used to hold the parsedURLs. This memory MUST be freed by the caller through: free_URL_list(&out).
[in] | in | Source URL list. |
[out] | out | Destination URL list. |
References copy_token(), URL_LIST::parsedURLs, URL_LIST::size, HOSTPORT::text, UPNP_E_OUTOF_MEMORY, and URL_LIST::URLs.
Referenced by copy_subscription().
void free_URL_list | ( | URL_list * | list | ) |
Frees the memory associated with a URL_list.
Frees the dynamically allocated members of of list. Does NOT free the pointer to the list itself ( i.e. does NOT free(list)).
[in] | list | URL list object. |
References URL_LIST::parsedURLs, URL_LIST::size, and URL_LIST::URLs.
Referenced by freeSubscription().
int is_escaped | ( | const char * | in | ) |
Returns a 1 if a char[3] sequence is ESCAPED as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs).
Size of array is NOT checked (MUST be checked by caller).
[in] | in | Char sequence to be matched for ESCAPED characters. |
Referenced by parse_uric().
int is_mark | ( | char | in | ) |
Returns a 1 if a char is a MARK char as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs).
[in] | in | Char to be matched for MARKED characters. |
Referenced by is_unreserved().
static int is_reserved | ( | char | in | ) | [static] |
Returns a 1 if a char is a RESERVED char as defined in http://www.ietf.org/rfc/rfc2396.txt RFC explaining URIs).
[in] | in | Char to be matched for RESERVED characters. |
References RESERVED.
Referenced by parse_uric().
int is_unreserved | ( | char | in | ) |
Returns a 1 if a char is an UNRESERVED char as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs).
[in] | in | Char to be matched for UNRESERVED characters. |
References is_mark().
Referenced by parse_uric().
static int parse_hostport | ( | const char * | in, |
hostport_type * | out | ||
) | [static] |
Parses a string representing a host and port (e.g. "127.127.0.1:80" or "localhost") and fills out a hostport_type struct with internet address and a token representing the full host and port.
Uses gethostbyname.
[in] | in | String of characters representing host and port. |
[out] | out | Output parameter where the host and port are represented as an internet address. |
References gIF_INDEX, HOSTPORT::text, and UPNP_E_INVALID_URL.
Referenced by parse_uri().
static size_t parse_scheme | ( | const char * | in, |
size_t | max, | ||
token * | out | ||
) | [static] |
parses a uri scheme starting at in[0] as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs).
(e.g. "http:" -> scheme= "http").
[in] | in | String of characters representing a scheme. |
[in] | max | Maximum number of characters. |
[out] | out | Output parameter whose buffer is filled in with the scheme. |
Referenced by parse_uri().
Parses a uri as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs).
Handles absolute, relative, and opaque uris. Parses into the following pieces: scheme, hostport, pathquery, fragment (path and query are treated as one token)
Caller should check for the pieces they require.
[in] | in | Character string containing uri information to be parsed. |
[in] | max | Maximum limit on the number of characters. |
[out] | out | Output parameter which will have the parsed uri information. |
References parse_hostport(), parse_scheme(), and parse_uric().
Referenced by Check_Connect_And_Wait_Connection(), create_url_list(), FindServiceControlURLPath(), FindServiceEventURLPath(), parse_uri_and_unescape(), and resolve_rel_url().
int parse_uri_and_unescape | ( | char * | in, |
size_t | max, | ||
uri_type * | out | ||
) |
Same as parse_uri(), except that all strings are unescaped (XX replaced by chars).
[in] | in | Character string containing uri information to be parsed. |
[in] | max | Maximum limit on the number of characters. |
[out] | out | Output parameter which will have the parsed uri information. |
References parse_uri(), and remove_escaped_chars().
static size_t parse_uric | ( | const char * | in, |
size_t | max, | ||
token * | out | ||
) | [static] |
Parses a string of uric characters starting at in[0] as defined in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs).
[in] | in | String of characters. |
[in] | max | Maximum limit. |
[out] | out | Token object where the string of characters is copied. |
References is_escaped(), is_reserved(), and is_unreserved().
Referenced by parse_uri().
void print_token | ( | token * | in | ) |
Function useful in debugging for printing a token.
[in] | in | Token object to print. |
Referenced by print_uri().
Function useful in debugging for printing a parsed uri.
[in] | in | URI object to print. |
References print_token(), and HOSTPORT::text.
int remove_dots | ( | char * | in, |
size_t | size | ||
) |
Removes ".", and ".." from a path.
If a ".." can not be resolved (i.e. the .. would go past the root of the path) an error is returned.
The input IS modified in place.)
[in] | in | String of characters from which "dots" have to be removed. |
[in] | size | Size limit for the number of characters. |
References UPNP_E_INVALID_URL, UPNP_E_OUTOF_MEMORY, UPNP_E_SUCCESS, and UpnpPrintf().
Referenced by process_request(), and resolve_rel_url().
int replace_escaped | ( | char * | in, |
size_t | index, | ||
size_t * | max | ||
) |
Replaces an escaped sequence with its unescaped version as in http://www.ietf.org/rfc/rfc2396.txt (RFC explaining URIs)
Size of array is NOT checked (MUST be checked by caller)
[in,out] | in | String of characters. |
[in] | index | Index at which to start checking the characters. |
[out] | max | . |
char* resolve_rel_url | ( | char * | base_url, |
char * | rel_url | ||
) |
resolves a relative url with a base url returning a NEW (dynamically allocated with malloc) full url.
If the base_url is NULL, then a copy of the rel_url is passed back if the rel_url is absolute then a copy of the rel_url is passed back if neither the base nor the rel_url are Absolute then NULL is returned. Otherwise it tries and resolves the relative url with the base as described in http://www.ietf.org/rfc/rfc2396.txt (RFCs explaining URIs).
The resolution of '..' is NOT implemented, but '.' is resolved.
[in] | base_url | Base URL. |
[in] | rel_url | Relative URL. |
References parse_uri(), remove_dots(), HOSTPORT::text, and UPNP_E_SUCCESS.
Referenced by UpnpResolveURL(), and UpnpResolveURL2().
Compares two tokens.
[in] | in1 | First token object whose buffer is to be compared. |
[in] | in2 | Second token object used for the comparison. |
Referenced by FindServiceControlURLPath(), and FindServiceEventURLPath().
int token_string_casecmp | ( | token * | in1, |
const char * | in2 | ||
) |
Compares buffer in the token object with the buffer in in2.
[in] | in1 | Token object whose buffer is to be compared. |
[in] | in2 | String of characters to compare with. |
Referenced by Check_Connect_And_Wait_Connection().
int token_string_cmp | ( | token * | in1, |
char * | in2 | ||
) |
Compares a null terminated string to a token (exact).
[in] | in1 | Token object whose buffer is to be compared. |
[in] | in2 | String of characters to compare with. |