|
libUPnP
1.6.17
|
#include <sys/param.h>#include "UpnpGlobal.h"#include "UpnpInet.h"#include <ctype.h>#include <errno.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <time.h>#include <netdb.h>

Go to the source code of this file.
Data Structures | |
| struct | TOKEN |
| Buffer used in parsinghttp messages, urls, etc. generally this simply holds a pointer into a larger array. More... | |
| struct | HOSTPORT |
| Represents a host port: e.g. "127.127.0.1:80" text is a token pointing to the full string representation. More... | |
| struct | URI |
| Represents a URI used in parse_uri and elsewhere. More... | |
| struct | URL_LIST |
| Represents a list of URLs as in the "callback" header of SUBSCRIBE message in GENA. "char *" URLs holds dynamic memory. More... | |
Macros | |
| #define | HTTP_DATE_LENGTH 37 |
| #define | SEPARATORS "()<>@,;:\\\"/[]?={} \t" |
| #define | MARK "-_.!~*'()" |
| #define | RESERVED ";/?:@&=+$,{}" |
| #define | HTTP_SUCCESS 1 |
| #define | FALSE 0 |
| #define | TAB 9 |
| #define | CR 13 |
| #define | LF 10 |
| #define | SOCKET_BUFFER_SIZE 5000 |
Typedefs | |
| typedef struct TOKEN | token |
| Buffer used in parsinghttp messages, urls, etc. generally this simply holds a pointer into a larger array. More... | |
| typedef struct HOSTPORT | hostport_type |
| Represents a host port: e.g. "127.127.0.1:80" text is a token pointing to the full string representation. More... | |
| typedef struct URI | uri_type |
| Represents a URI used in parse_uri and elsewhere. More... | |
| typedef struct URL_LIST | URL_list |
| Represents a list of URLs as in the "callback" header of SUBSCRIBE message in GENA. "char *" URLs holds dynamic memory. More... | |
Enumerations | |
| enum | hostType { HOSTNAME, IPv4address } |
| enum | pathType { ABS_PATH, REL_PATH, OPAQUE_PART } |
| enum | uriType { ABSOLUTE, RELATIVE } |
Functions | |
| 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) More... | |
| int | copy_URL_list (URL_list *in, URL_list *out) |
| Copies one URL_list into another. More... | |
| void | free_URL_list (URL_list *list) |
| Frees the memory associated with a URL_list. More... | |
| void | print_uri (uri_type *in) |
| Function useful in debugging for printing a parsed uri. More... | |
| void | print_token (token *in) |
| Function useful in debugging for printing a token. More... | |
| int | token_string_casecmp (token *in1, const char *in2) |
| Compares buffer in the token object with the buffer in in2. More... | |
| int | token_string_cmp (token *in1, char *in2) |
| Compares a null terminated string to a token (exact). More... | |
| int | token_cmp (token *in1, token *in2) |
| Compares two tokens. More... | |
| int | remove_escaped_chars (char *in, size_t *size) |
| Removes http escaped characters such as: "%20" and replaces them with their character representation. i.e. "hello%20foo" -> "hello foo". More... | |
| int | remove_dots (char *in, size_t size) |
| Removes ".", and ".." from a path. More... | |
| 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. More... | |
| 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). More... | |
| 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). More... | |
| int | parse_token (char *in, token *out, int max_size) |
| #define HTTP_DATE_LENGTH 37 |
length for HTTP DATE: "DATE: Sun, 01 Jul 2000 08:15:23 GMT<cr><lf>"
| #define RESERVED ";/?:@&=+$,{}" |
added {} for compatibility
Referenced by is_reserved().
| typedef struct HOSTPORT hostport_type |
Represents a host port: e.g. "127.127.0.1:80" text is a token pointing to the full string representation.
Buffer used in parsinghttp messages, urls, etc. generally this simply holds a pointer into a larger array.
Represents a list of URLs as in the "callback" header of SUBSCRIBE message in GENA. "char *" URLs holds dynamic memory.
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(), 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::URLs.
Referenced by freeSubscription().
| int parse_token | ( | char * | in, |
| token * | out, | ||
| int | max_size | ||
| ) |
| [in] | in | . |
| [out] | out | . |
| [in] | max_size | . |
| 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).
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().
| void print_token | ( | token * | in | ) |
Function useful in debugging for printing a token.
| [in] | in | Token object to print. |
Referenced by print_uri().
| void print_uri | ( | uri_type * | in | ) |
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 remove_escaped_chars | ( | char * | in, |
| size_t * | size | ||
| ) |
Removes http escaped characters such as: "%20" and replaces them with their character representation. i.e. "hello%20foo" -> "hello foo".
The input IS MODIFIED in place (shortened). Extra characters are replaced with NULL.
| [in,out] | in | String of characters to be modified. |
| [in,out] | size | Size limit for the number of characters. |
Referenced by parse_uri_and_unescape(), and process_request().
| 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. |
1.8.3.1