71 char url_pad[
sizeof(
void *) - 2];
148 char value[], isize_t vlen);
193 #define URL_RESERVED_CHARS ";/?:@&=+$," 206 #define URL_INIT_AS(type) \ 207 { "\0", url_##type, 0, url_##type != url_any ? #type : "*" } 225 #define URL_PORT(u) \ 226 ((u) && (u)->url_port ? (u)->url_port : \ 227 url_port_default((u) ? (enum url_type_e)(u)->url_type : url_any)) 234 #define URL_STRING_P(u) ((u) && *((url_string_t*)(u))->us_str != 0) 238 #define URL_IS_STRING(u) ((u) && *((url_string_t*)(u))->us_str != 0) 249 #define URL_STRING_MAKE(s) \ 250 ((url_string_t *)((s) && *((char *)(s)) ? (s) : NULL)) 256 #define URL_PRINT_FORMAT "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" 257 #define URL_FORMAT_STRING URL_PRINT_FORMAT 260 #define URL_PRINT_ARGS(u) \ 261 (u)->url_scheme ? (u)->url_scheme : "", \ 262 (u)->url_type != url_any && (u)->url_scheme && (u)->url_scheme[0] \ 264 (u)->url_root && ((u)->url_host || (u)->url_user) ? "//" : "", \ 265 (u)->url_user ? (u)->url_user : "", \ 266 (u)->url_user && (u)->url_password ? ":" : "", \ 267 (u)->url_user && (u)->url_password ? (u)->url_password : "", \ 268 (u)->url_user && (u)->url_host ? "@" : "", \ 269 (u)->url_host ? (u)->url_host : "", \ 270 (u)->url_host && (u)->url_port ? ":" : "", \ 271 (u)->url_host && (u)->url_port ? (u)->url_port : "", \ 272 (u)->url_root && (u)->url_path ? "/" : "", \ 273 (u)->url_path ? (u)->url_path : "", \ 274 (u)->url_params ? ";" : "", (u)->url_params ? (u)->url_params : "", \ 275 (u)->url_headers ? "?" : "", (u)->url_headers ? (u)->url_headers : "", \ 276 (u)->url_fragment ? "#" : "", (u)->url_fragment ? (u)->url_fragment : "" 288 url_t const *,
char const *key);
303 #define URL_E(buf, end, url) \ 304 (buf) += url_e((buf), (buf) < (end) ? (end) - (buf) : 0, (url)) 313 #define URL_DUP(buf, end, dst, src) \ 314 (buf) += url_dup((buf), (isize_t)((buf) < (end) ? (end) - (buf) : 0), (dst), (src)) "rtsp:"
Definition: url.h:54
int url_cmp_all(url_t const *a, url_t const *b)
Compare two URLs conservatively.
Definition: url.c:1685
issize_t url_e(char buffer[], isize_t n, url_t const *url)
Encode a URL.
Definition: url.c:867
char * url_unescape(char *d, char const *s)
Unescape a string.
Definition: url.c:320
void url_digest(void *hash, int hsize, url_t const *, char const *key)
Calculate a digest from URL contents.
Definition: url.c:2073
char const * url_params
Parameters (separated by ;)
Definition: url.h:81
Unknown scheme.
Definition: url.h:43
"tel:"
Definition: url.h:47
isize_t url_xtra(url_t const *url)
Calculate the size of srings attached to the url.
Definition: url.c:1037
"ftp:".
Definition: url.h:52
size_t url_unescape_to(char *d, char const *s, size_t n)
Unescape characters from string.
Definition: url.c:275
isize_t url_have_param(char const *params, char const *tag)
Check for a presence of a parameter in string.
Definition: url.c:1353
char const * url_scheme
URL type as string.
Definition: url.h:75
url_type_e
Recognized URL schemes (value of url_t.url_type).
Definition: url.h:41
char * url_as_string(su_home_t *home, url_t const *url)
Convert url_t to a string allocated from home.
Definition: url.c:1270
char const * url_tport_default(enum url_type_e url_type)
Return default transport name corresponding to the url type.
Definition: url.c:1823
isize_t url_esclen(char const *s, char const reserved[])
Calculate length of string when escaped.
Definition: url.c:198
isize_t url_len(url_t const *url)
Calculate the encoding length of URL.
Definition: url.c:1005
url_t * url_make(su_home_t *h, char const *str)
Convert a string to a url struct.
Definition: url.c:1232
int url_d(url_t *url, char *s)
Decode a URL.
Definition: url.c:778
"modem:".
Definition: url.h:49
int url_string_p(url_string_t const *url)
Test if a pointer to url_string_t is a string (not a pointer to a url_t structure).
Definition: url.c:1428
signed char url_type
URL type (url_type_e).
Definition: url.h:73
"rtspu:"
Definition: url.h:55
"pres:" (simple presence).
Definition: url.h:58
int url_is_string(url_string_t const *url)
Test if a pointer to url_string_t is a string (not a pointer to a url_t structure).
Definition: url.c:1433
char const * url_fragment
Fragment (separated by #)
Definition: url.h:83
Invalid url.
Definition: url.h:42
"cid:" (Content-ID).
Definition: url.h:59
"msrp:" (message session relay)
Definition: url.h:60
int url_reserved_p(char const *s)
Test if string contains url-reserved characters.
Definition: url.c:163
url_t * url_format(su_home_t *h, char const *fmt,...)
Convert a string formatting result to a url struct.
Definition: url.c:1238
URL structure.
Definition: url.h:70
char * url_escape(char *d, char const *s, char const reserved[])
Escape a string.
Definition: url.c:229
url_t * url_hdup(su_home_t *h, url_t const *src)
Duplicate the url to memory allocated via home.
Definition: url.c:1211
char url_root
Nonzero if root "//".
Definition: url.h:74
char * url_query_as_header_string(su_home_t *home, char const *query)
Convert a URL query to a header string.
Definition: url.c:2113
isize_t url_param(char const *params, char const *tag, char value[], isize_t vlen)
Search for a parameter.
Definition: url.c:1307
"sips:".
Definition: url.h:46
char const * url_scheme(enum url_type_e type)
Get URL scheme by type.
Definition: url.c:459
int url_have_transport(url_t const *u)
Test if url has any transport-specific stuff.
Definition: url.c:1539
char const * url_user
User part.
Definition: url.h:76
char const * url_host
Host part.
Definition: url.h:78
int url_param_add(su_home_t *h, url_t *url, char const *param)
Add a parameter.
Definition: url.c:1365
char const * url_port_default(enum url_type_e url_type)
Return default port number corresponding to the url type.
Definition: url.c:1782
"mailto:"
Definition: url.h:56
"sip:".
Definition: url.h:45
char const * url_path
Path part, starts with "/".
Definition: url.h:80
char const * url_port(url_t const *u)
Return the URL port string, using default port if not present.
Definition: url.c:1864
char const * url_port
Port.
Definition: url.h:79
Maximum size of a URL.
Definition: url.h:88
"wv:" (Wireless village)
Definition: url.h:62
"fax:".
Definition: url.h:48
char * url_strip_param_string(char *params, char const *name)
Strip parameter away from URI.
Definition: url.c:1390
int url_sanitize(url_t *u)
Sanitize a URL.
Definition: url.c:1895
char const * url_password
Password.
Definition: url.h:77
int url_cmp(url_t const *a, url_t const *b)
Compare two URLs lazily.
Definition: url.c:1559
Type to present either a parsed URL or string.
Definition: url.h:99
"file:"
Definition: url.h:53
char const * url_headers
Headers (separated by ? and &)
Definition: url.h:82
"https:".
Definition: url.h:51
"http:".
Definition: url.h:50
"msrps:" (new in 1.12.2)
Definition: url.h:61
int url_strip_transport(url_t *u)
Strip transport-specific stuff away from URI.
Definition: url.c:1520
void url_init(url_t *url, enum url_type_e type)
Init a url structure as given type.
Definition: url.c:499
"im:" (simple instant messaging).
Definition: url.h:57
void url_update(struct su_md5_t *md5, url_t const *url)
Update MD5 sum with URL contents.
Definition: url.c:2057
issize_t url_dup(char *, isize_t, url_t *dst, url_t const *src)
Duplicate the url in the provided memory area.
Definition: url.c:1109
int url_has_param(url_t const *url, char const *name)
Check for a parameter.
Definition: url.c:1359