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... | |
Defines | |
#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. | |
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. | |
typedef struct URI | uri_type |
Represents a URI used in parse_uri and elsewhere. | |
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. | |
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) | |
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. | |
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". | |
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). | |
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.
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 parse_token | ( | char * | in, |
token * | out, | ||
int | max_size | ||
) |
[in] | in | . |
[out] | out | . |
[in] | max_size | . |
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().
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. |