GSK Reference Manual | ||||
---|---|---|---|---|
GskUrl; enum GskUrlScheme; #define GSK_URL_RESERVED_CHARSET #define GSK_URL_UNRESERVED_CHARSET GskUrl* gsk_url_new (const char *spec, GError **error); GskUrl* gsk_url_new_in_context (const char *spec, GskUrlScheme context, GError **error); GskUrl* gsk_url_new_from_parts (GskUrlScheme scheme, const char *host, int port, const char *user_name, const char *password, const char *path, const char *query, const char *fragment); GskUrl* gsk_url_new_relative (GskUrl *base_url, const char *location, GError **error); char* gsk_url_get_relative_path (GskUrl *url); guint gsk_url_get_port (const GskUrl *url); char* gsk_url_decode (const char *encoded); char* gsk_url_decode_http (const char *encoded); char* gsk_url_encode (const char *decoded); char* gsk_url_encode_http (const char *decoded); #define gsk_url_is_valid_fragment (str, bad_char_out) gboolean gsk_url_is_valid_generic_component (const char *str, char *bad_char_out); gboolean gsk_url_is_valid_hostname (const char *str, char *bad_char_out); #define gsk_url_is_valid_path (str, bad_char_out) #define gsk_url_is_valid_query (str, bad_char_out) char** gsk_url_split_form_urlencoded (const char *encoded_query); char* gsk_url_to_string (const GskUrl *url); void (*GskUrlSuccess) (GskStream *stream, gpointer user_data); void (*GskUrlFailure) (GError *error, gpointer user_data); void gsk_url_download (GskUrl *url, GskUrlSuccess success_func, GskUrlFailure failure_func, gpointer user_data); GskUrl* (*GskUrlParser) (GskUrlScheme scheme, const char *url, gpointer data); char* (*GskUrlToString) (GskUrl *url, gpointer data); GskUrlScheme gsk_url_scheme_get_unique (const char *url_scheme, guint default_port, GskUrlParser parse_func, GskUrlToString print_func, gpointer data); guint gsk_url_hash (const GskUrl *url); gboolean gsk_url_equal (const GskUrl *a, const GskUrl *b); GskUrlDownload; void (*GskUrlDownloadMethod) (GskUrlDownload *download, gpointer download_data); void gsk_url_scheme_add_dl_method (GskUrlScheme scheme, GskUrlDownloadMethod download_method, gpointer download_data); void gsk_url_download_success (GskUrlDownload *download, GskStream *stream); void gsk_url_download_fail (GskUrlDownload *download, GError *error); GskUrl* gsk_url_download_peek_url (GskUrlDownload *download); void gsk_url_download_redirect (GskUrlDownload *download, GskUrl *new_url);
"fragment" gchararray : Read / Write "host" gchararray : Read / Write "password" gchararray : Read / Write "path" gchararray : Read / Write "port" guint : Read / Write "query" gchararray : Read / Write "user-name" gchararray : Read / Write
A URL is a pointer to content on the internet. (Well, not all types of URLs apply across the internet; especially file URLs are really quite local.)
This class provides convenient parsing and printing methods, as well as support for downloading the content of various URL types.
Also, we provide interfaces for URL encoding and decoding strings. This may be used to provide GET data from the HTTP client, amongst other things. TODO: find a reference RFC for URL encoding.
typedef struct _GskUrl GskUrl;
A URL (Universal Resource Locator). This structure contains a number of read-only, pre-parsed fields, which make it easy to use the URL from C.
It also derived from GObject, so you get the usual g_object_ref/unref and other usual benefits.
typedef enum { GSK_URL_SCHEME_FILE, GSK_URL_SCHEME_HTTP, GSK_URL_SCHEME_HTTPS, GSK_URL_SCHEME_FTP, GSK_URL_SCHEME_OTHER = 0x10000, } GskUrlScheme;
Types of URLs that are known.
(This is an extensible enum-- you can allocate new enum values
using gsk_url_scheme_get_unique()
).
#define GSK_URL_RESERVED_CHARSET
[From RFC 2396, section 2.2.] Characters having specific meaning within a url; these should be escaped to be passed on to the underlying scheme.
#define GSK_URL_UNRESERVED_CHARSET
[From RFC 2396, section 2.3.] Characters which do not normally need escaping within a URL.
GskUrl* gsk_url_new (const char *spec, GError **error);
Parse a URL object from a string.
spec : |
standard string representation of the URL. |
error : |
place to store a GError if an error occurs. |
Returns : | a reference to a new URL object, or NULL if an error occurred. |
GskUrl* gsk_url_new_in_context (const char *spec, GskUrlScheme context, GError **error);
For places where you expect a certain type of URL, soemtimes people get lazy and drop the scheme. We support this here, by allowing a "backup scheme" to be specified.
To be fully paranoid in such a situation, you may wish to
if there appears to be a scheme, use gsk_url_new()
;
otherwise call gsk_url_new_from_scheme_specific()
directly.
Alternately, it may be easier just to call
gsk_url_new_in_context()
directly all the time.
See also gsk_url_new_relative()
.
spec : |
rough URL specification. This may be a complete URL, or it may have an implied scheme. |
context : |
default scheme for URL's in your context. |
error : |
place to store a GError if something goes wrong. |
Returns : | a newly allocated URL object. |
GskUrl* gsk_url_new_from_parts (GskUrlScheme scheme, const char *host, int port, const char *user_name, const char *password, const char *path, const char *query, const char *fragment);
Allocate a new URL from a bunch of pieces.
scheme : |
the type of URL being created. |
host : |
the name (or numeric address as ASCII digits and dots) of the host. This is called the Authority by RFC 2396, Section 3.2. |
port : |
the port number to use for the service, or 0 to use the default port for this type of URL scheme. For FTP, this is the control port and the data port will default to the next integer. |
user_name : |
optional username identifier from the client. |
password : |
optional password to authenticate. |
path : |
the host-relative path for the URL |
query : |
optional query string for URL. |
fragment : |
optional information about a sublocation in the resource. |
Returns : | a reference to a new URL object. |
GskUrl* gsk_url_new_relative (GskUrl *base_url, const char *location, GError **error);
Allocate a new URL, which will be taken
to be relative to base_url
if the location
is not obviously an absolute URL.
Note that there is some ambiguity in how relative urls are interpreted. Note especially that /foo + /bar = /bar. /foo + bar = /bar. /foo/ + bar = /foo/bar. That is, a symbol with a trailing slash is a directory, otherwise the last piece of the url is assumed to be a file.
base_url : |
context of the spec found. This tells where spec
may be relative to.
|
location : |
the possibly relative spec. |
error : |
place to store a GError if something goes wrong. |
Returns : | a newly allocated URL object. |
char* gsk_url_get_relative_path (GskUrl *url);
Obtain the path portion of a URL without the initial slash (/) character.
The query component and fragment are also returned.
url : |
the URL to get the host-relative path from. |
Returns : | the URL as a string. This must be freed by the caller. |
guint gsk_url_get_port (const GskUrl *url);
Returns the port. If the port is 0, the default port for the type of scheme is returned (80 for HTTP, 21 for FTP and 443 for HTTP/SSL). If no default exists, 0 is returned.
url : |
the URL whose port is desired. |
Returns : | the port as an integer, or 0 if no port could be computed. |
char* gsk_url_decode (const char *encoded);
Decode characters to be passed in a URL.
Basically, any xx
string is changed to the
character whose ASCII code is xx, treating xx as
a hexidecimal 2-digit number.
See RFC ??, Section ??.
encoded : |
encoded URL to convert to plaintext. |
Returns : | a newly allocated string. |
char* gsk_url_decode_http (const char *encoded);
Do what is typically thought of
as "url decoding" in http-land... namely '+' maps to SPACE
and xx
, where 'x' denotes a single hex-digit, maps to the character
given as hexidecimal. (warning: the resulting string is not UTF-8)
encoded : |
the encoded url text. |
Returns : | a newly allocated encoded string that the caller must free (the empty string "" when unable to decode hex). |
char* gsk_url_encode (const char *decoded);
Encode characters to be passed in a URL.
Basically, "unsafe" characters are converted
to xx
where 'x' is a hexidecimal digit.
See RFC 2396 Section 2.
decoded : |
decoded data to escape. |
Returns : | a newly allocated string. |
char* gsk_url_encode_http (const char *decoded);
Do what is typically thought of
as "url encoding" in http-land... namely SPACE maps to '+'
and funny characters are encoded
as xx
where 'x' denotes a single hex-digit.
decoded : |
the raw url text; this is treated as raw 8-bit data, not UTF-8. |
Returns : | a newly allocated encoded string that the caller must free. |
#define gsk_url_is_valid_fragment(str, bad_char_out)
str : |
|
bad_char_out : |
gboolean gsk_url_is_valid_generic_component (const char *str, char *bad_char_out);
str : |
|
bad_char_out : |
|
Returns : |
gboolean gsk_url_is_valid_hostname (const char *str, char *bad_char_out);
str : |
|
bad_char_out : |
|
Returns : |
char** gsk_url_split_form_urlencoded (const char *encoded_query);
encoded_query : |
|
Returns : |
char* gsk_url_to_string (const GskUrl *url);
Convert the URL to a string.
url : |
the URL to stringify. returns: the newly allocated string. |
Returns : |
void (*GskUrlSuccess) (GskStream *stream, gpointer user_data);
Function to call with an input stream if the URL download request seems to be succeeding.
stream : |
content stream of the data referenced
by the URL which was passed to gsk_url_download() .
|
user_data : |
data passed to gsk_url_download() .
|
void (*GskUrlFailure) (GError *error, gpointer user_data);
Function to call if the URL download seems to be failing.
error : |
the error that preventing the URL download from starting. |
user_data : |
data passed to gsk_url_download() .
|
void gsk_url_download (GskUrl *url, GskUrlSuccess success_func, GskUrlFailure failure_func, gpointer user_data);
Initiate a URL download.
A caller-supplied function will be invoked when the first content is available or a different function will be called if there is a problem. Only exactly one of these functions will be called.
Either callback may be invoked before this function returns: the caller must deal with it.
url : |
the URL to attempt to retrieve. |
success_func : |
a function to call with a stream corresponding to the content of the page. |
failure_func : |
a function to call with an error message if the url cannot be retrieved. |
user_data : |
data to pass to success_func or failure_func .
|
GskUrl* (*GskUrlParser) (GskUrlScheme scheme, const char *url, gpointer data);
Function to parse a string (of a given scheme)
into a GskUrl. This is used to register new types
of URL. See gsk_url_scheme_get_unique()
.
scheme : |
the type of URL, as determined by the first characters of the URL. |
url : |
the whole URL. |
data : |
data passed to gsk_url_scheme_get_unique() .
|
Returns : | a newly allocated URL, or NULL on a parse error. |
char* (*GskUrlToString) (GskUrl *url, gpointer data);
Function to convert a GskUrl into a NUL-terminated string.
This is used to register new types
of URL. See gsk_url_scheme_get_unique()
.
url : |
the URL to print. |
data : |
data passed to gsk_url_scheme_get_unique() .
|
Returns : | a newly allocated C string, or NULL on error. |
GskUrlScheme gsk_url_scheme_get_unique (const char *url_scheme, guint default_port, GskUrlParser parse_func, GskUrlToString print_func, gpointer data);
url_scheme : |
|
default_port : |
|
parse_func : |
|
print_func : |
|
data : |
|
Returns : |
guint gsk_url_hash (const GskUrl *url);
Compute a randomish hash code based on the URL.
You can create a GHashTable that's keyed off of URLs with: g_hash_table_new((GHashFunc)gsk_url_hash, (GEqualFunc)gsk_url_equal);
url : |
a url. |
Returns : | the hash code. |
gboolean gsk_url_equal (const GskUrl *a, const GskUrl *b);
Test to see if two URLs are the same.
a : |
a url. |
b : |
another url. |
Returns : | whether the URLs are the same. |
void (*GskUrlDownloadMethod) (GskUrlDownload *download, gpointer download_data);
Function to begin downloading a given URL.
A function which must eventually call gsk_url_download_fail()
or gsk_url_download_success()
. (Note: it may happen long after this
function returns, but it is allowed to call these functions
before returning as well).
This function type is only used to register new methods for downloading URLs.
download : |
the object representing the download. |
download_data : |
data passed in to gsk_url_scheme_add_dl_method() .
|
void gsk_url_scheme_add_dl_method (GskUrlScheme scheme, GskUrlDownloadMethod download_method, gpointer download_data);
Register a new method for downloading a URL of a particular scheme.
The callback download_method
will be run with each new requested URL.
Each call to download_method
must cause it to
eventually call gsk_url_download_success()
or gsk_url_download_fail()
; furthermore, it may
call those functions before returning.
scheme : |
the URL scheme which this download method can handle. |
download_method : |
function to call to initiate the URL download. |
download_data : |
data to be passed to download_method. |
void gsk_url_download_success (GskUrlDownload *download, GskStream *stream);
Give a stream to the user which requested it
via gsk_url_download()
.
This function should only be used for implementing handlers for new URL schemes.
download : |
the download object. |
stream : |
the content stream to return to the caller who requested the download. |
void gsk_url_download_fail (GskUrlDownload *download, GError *error);
Give a failure notice to the user which requested a url download
via gsk_url_download()
.
This function should only be used for implementing handlers for new URL schemes.
download : |
the download object. |
error : |
an error to return. |
GskUrl* gsk_url_download_peek_url (GskUrlDownload *download);
Get the URL that you are supposed to download.
download : |
the download object to query. |
Returns : | the URL for downloading. |
void gsk_url_download_redirect (GskUrlDownload *download, GskUrl *new_url);
Indicate that retrieving one URL lead to a message saying that the content is at a different URL. The new URL should be retrieved, just like if it has been the original requestor.
This function should only be used for implementing handlers for new URL schemes.
download : |
the download whose URL has been redirected. |
new_url : |
the new URL to download. |
fragment
" property"fragment" gchararray : Read / Write
Fragment (for HTTP resources).
Default value: NULL
host
" property"host" gchararray : Read / Write
name of host having resource.
Default value: NULL
password
" property"password" gchararray : Read / Write
password protecting resource.
Default value: NULL
path
" property"path" gchararray : Read / Write
Path on the server to the resource.
Default value: NULL
port
" property"port" guint : Read / Write
port for resource (or 0 for default).
Allowed values: <= 65536
Default value: 0
query
" property"query" gchararray : Read / Write
Query (for HTTP resources).
Default value: NULL