diff options
Diffstat (limited to 'src/url.h')
-rw-r--r-- | src/url.h | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/url.h b/src/url.h new file mode 100644 index 00000000..5f331881 --- /dev/null +++ b/src/url.h @@ -0,0 +1,144 @@ +/* + * File : url.h - Dillo + * + * Copyright (C) 2001 Jorge Arellano Cid <jcid@dillo.org> + * 2001 Livio Baldini Soares <livio@linux.ime.usp.br> + * + * Parse and normalize all URL's inside Dillo. + */ + +#ifndef __URL_H__ +#define __URL_H__ + +#include <string.h> /* for strcmp */ +#include "d_size.h" +#include "../dlib/dlib.h" + + +#define DILLO_URL_HTTP_PORT 80 +#define DILLO_URL_HTTPS_PORT 443 +#define DILLO_URL_FTP_PORT 21 +#define DILLO_URL_MAILTO_PORT 25 +#define DILLO_URL_NEWS_PORT 119 +#define DILLO_URL_TELNET_PORT 23 +#define DILLO_URL_GOPHER_PORT 70 + + +/* + * Values for DilloUrl->flags. + * Specifies which which action to perform with an URL. + */ +#define URL_Get (1 << 0) +#define URL_Post (1 << 1) +#define URL_ISindex (1 << 2) +#define URL_Ismap (1 << 3) +#define URL_RealmAccess (1 << 4) + +#define URL_E2EReload (1 << 5) +#define URL_ReloadImages (1 << 6) +#define URL_ReloadPage (1 << 7) +#define URL_ReloadFromCache (1 << 8) + +#define URL_ReloadIncomplete (1 << 9) +#define URL_SpamSafe (1 << 10) + +/* + * Access methods to fields inside DilloURL. + * (non '_'-ended macros MUST use these for initialization sake) + */ +/* these MAY return NULL: */ +#define URL_SCHEME_(u) u->scheme +#define URL_AUTHORITY_(u) u->authority +#define URL_PATH_(u) u->path +#define URL_QUERY_(u) u->query +#define URL_FRAGMENT_(u) u->fragment +#define URL_HOST_(u) a_Url_hostname(u) +#define URL_DATA_(u) u->data +#define URL_ALT_(u) u->alt +#define URL_STR_(u) a_Url_str(u) +/* these return an integer */ +#define URL_PORT_(u) (URL_HOST(u) ? u->port : u->port) +#define URL_FLAGS_(u) u->flags +#define URL_POSX_(u) u->scrolling_position_x +#define URL_POSY_(u) u->scrolling_position_y +#define URL_ILLEGAL_CHARS_(u) url->illegal_chars +#define URL_ILLEGAL_CHARS_SPC_(u) url->illegal_chars_spc + +/* + * Access methods that always return a string: + * When the "empty" and "undefined" concepts of RFC-2396 are irrelevant to + * the caller, and a string is required, use these methods instead: + */ +#define NPTR2STR(p) ((p) ? (p) : "") +#define URL_SCHEME(u) NPTR2STR(URL_SCHEME_(u)) +#define URL_AUTHORITY(u) NPTR2STR(URL_AUTHORITY_(u)) +#define URL_PATH(u) NPTR2STR(URL_PATH_(u)) +#define URL_QUERY(u) NPTR2STR(URL_QUERY_(u)) +#define URL_FRAGMENT(u) NPTR2STR(URL_FRAGMENT_(u)) +#define URL_HOST(u) NPTR2STR(URL_HOST_(u)) +#define URL_DATA(u) NPTR2STR(URL_DATA_(u)) +#define URL_ALT(u) NPTR2STR(URL_ALT_(u)) +#define URL_STR(u) NPTR2STR(URL_STR_(u)) +#define URL_PORT(u) URL_PORT_(u) +#define URL_FLAGS(u) URL_FLAGS_(u) +#define URL_POSX(u) URL_POSX_(u) +#define URL_POSY(u) URL_POSY_(u) +#define URL_ILLEGAL_CHARS(u) URL_ILLEGAL_CHARS_(u) +#define URL_ILLEGAL_CHARS_SPC(u) URL_ILLEGAL_CHARS_SPC_(u) + + +/* URL-camp compare methods */ +#define URL_STRCAMP_CMP(s1,s2) \ + (s1) && (s2) ? strcmp(s1,s2) : !(s1) && !(s2) ? 0 : (s1) ? 1 : -1 +#define URL_STRCAMP_I_CMP(s1,s2) \ + (s1) && (s2) ? dStrcasecmp(s1,s2) : !(s1) && !(s2) ? 0 : (s1) ? 1 : -1 + + +typedef struct _DilloUrl DilloUrl; + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +struct _DilloUrl { + Dstr *url_string; + const char *buffer; + const char *scheme; // + const char *authority; // + const char *path; // These are references only + const char *query; // (no need to free them) + const char *fragment; // + const char *hostname; // + int port; + int flags; + const char *data; /* POST */ + const char *alt; /* "alt" text (used by image maps) */ + int ismap_url_len; /* Used by server side image maps */ + int32_t scrolling_position_x, /* remember position of visited urls */ + scrolling_position_y; + int illegal_chars; /* number of illegal chars */ + int illegal_chars_spc; /* number of illegal space chars */ +}; + + +DilloUrl* a_Url_new(const char *url_str, const char *base_url, + int flags, int32_t posx, int32_t posy); +void a_Url_free(DilloUrl *u); +char *a_Url_str(const DilloUrl *url); +const char *a_Url_hostname(const DilloUrl *u); +DilloUrl* a_Url_dup(const DilloUrl *u); +int a_Url_cmp(const DilloUrl *A, const DilloUrl *B); +void a_Url_set_flags(DilloUrl *u, int flags); +void a_Url_set_data(DilloUrl *u, char *data); +void a_Url_set_alt(DilloUrl *u, const char *alt); +void a_Url_set_pos(DilloUrl *u, int32_t posx, int32_t posy); +void a_Url_set_ismap_coords(DilloUrl *u, char *coord_str); +char *a_Url_decode_hex_str(const char *str); +char *a_Url_encode_hex_str(const char *str); +char *a_Url_string_strip_delimiters(const char *str); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __URL_H__ */ |