2 * UCW Library -- URL Functions
4 * (c) 1997--2004 Martin Mares <mj@ucw.cz>
5 * (c) 2001 Robert Spalek <robert@ucw.cz>
7 * This software may be freely distributed and used according to the terms
8 * of the GNU Lesser General Public License.
14 #define MAX_URL_SIZE 1024
16 /* Non-control meanings of control characters */
18 #define NCC_SEMICOLON 1
28 #define NCC_CHARS " ;/?:@=&#"
30 /* Remove/Introduce '%' escapes */
32 int url_deescape(const byte *s, byte *d);
33 int url_enescape(const byte *s, byte *d);
34 int url_enescape_friendly(const byte *src, byte *dest); // for cards.c only
36 /* URL splitting and normalization */
44 uns port; /* ~0 if unspec */
49 int url_split(byte *s, struct url *u, byte *d);
50 int url_normalize(struct url *u, struct url *b);
51 int url_canonicalize(struct url *u);
52 int url_pack(struct url *u, byte *d);
53 int url_canon_split_rel(const byte *url, byte *buf1, byte *buf2, struct url *u, struct url *base);
54 int url_auto_canonicalize_rel(const byte *src, byte *dst, struct url *base);
55 uns identify_protocol(const byte *p);
56 int url_has_repeated_component(const byte *url);
58 static inline int url_canon_split(const byte *url, byte *buf1, byte *buf2, struct url *u)
59 { return url_canon_split_rel(url, buf1, buf2, u, NULL); }
61 static inline int url_auto_canonicalize(const byte *src, byte *dst)
62 { return url_auto_canonicalize_rel(src, dst, NULL); }
68 #define URL_ERR_TOO_LONG 1
69 #define URL_ERR_INVALID_CHAR 2
70 #define URL_ERR_INVALID_ESCAPE 3
71 #define URL_ERR_INVALID_ESCAPED_CHAR 4
72 #define URL_ERR_INVALID_PORT 5
73 #define URL_ERR_REL_NOTHING 6
74 #define URL_ERR_UNKNOWN_PROTOCOL 7
75 #define URL_SYNTAX_ERROR 8
76 #define URL_PATH_UNDERFLOW 9
78 #define URL_PROTO_UNKNOWN 0
79 #define URL_PROTO_HTTP 1
80 #define URL_PROTO_FTP 2
81 #define URL_PROTO_FILE 3
82 #define URL_PROTO_MAX 4
84 #define URL_PNAMES { "unknown", "http", "ftp", "file" }
85 #define URL_DEFPORTS { ~0, 80, 21, 0 }
86 #define URL_PATH_FLAGS { 0, 1, 1, 1 }
88 extern byte *url_proto_names[];