⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 url.docs

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 DOCS
字号:
/**@MODULEPAGE "url" - URL Module@section url_meta Module Meta InformationThe Sofia @b url module contains macros and functions for using URLdatatype #url_t, parsing and printing URLs. @CONTACT Pekka Pessi <Pekka.Pessi@nokia.com>@STATUS @SofiaSIP Core library@LICENSE LGPL@section url_syntax Using URL LibraryThe URL library provides URL datatype and helper functions related to it. There is URL parser, which separates the URL components to the #url_tstructure.@note Please note that we use terms URL and URI interchangeable.The formal URI syntax is defined in the @RFC3986.The URLs consist of a subset of printable ASCII (ECMA-5) characters. Thesubset excludes space and characters commonly used as @e delimiters intext-based protocols, such as <b> < > # \% </b>and<b> " </b> (doublequote), and so called @e unwise characters whose positions are reserved fornational extensions in ECMA-5. In US-ASCII, those characters are:<code><b>{ } | \ ^ [ ] `</b></code>There are also nine characters that can have special syntactic meaning insome parts of the URI. These @e reserved characters are used to separatesyntactical parts of the URLs from each other. The reserved characters areas follows: <b> : @ / ; ? & = + </b>and<b> $</b>.The URL library understands two alternative URL syntaxes. First, thebasic syntax used by, e.g., @b ftp:, @b http: and @b rtsp: URLs:<i>scheme</i> ":" ["//" [ <i>user</i> [":" <i>password</i> ] "@"] <i>host</i> [":" <i>port</i> ] ]       ["/" <i>path</i> ] ["?" <i>query</i> ] ["#" <i>fragment</i> ]Alternatively, the syntax used by @b mailto:, @b sip:, @b im:, @b tel,and @b pres: URLs:<i>scheme</i> ":" [ [ <i>user</i> [":" <i>password</i> ] "@"] <i>host</i> [":" <i>port</i> ] ] [";" <i>params</i> ] ["?" <i>query</i> ]["#" <i>fragment</i> ]Note that url parser also considers "*" to be a valid URL (with type #url_any).For example: \n@codehttp://example.org:7100/cgi-bin/query?key=90786ftp://user:pass\@ftp.example.com/pub/sip:user:pass\@example.com;user=iptel:+358718008000@endcode@subsection url_parsing Converting a String to #url_tThe function url_make() converts a string to a freshly allocated #url_tstructure. The URL components are split into parts as shown above.The hex encoding using \% is removed if the encoded character cansyntactically be part of the field. For instance, "%41" is decoded as"A" in the user part, but "%40" (@) is left as is. (This is calledcanonization of the URL fields.)The function url_format() is provided for generating the URL withprintf()-like formatting.For example, when we make the url from the string below@codesip:joe%2Euser@example%2Ecom;method=%4D%45%53%53%41%47%45?body=CANNED%20MSG@endcodethe components are NUL-terminated, canonized and assigned to the structureas follows:@code url_type = url_sip url_root = 0  url_scheme = "sip" url_user = "joe.user" url_password = NULL url_host = "example.com" url_port = NULL url_path = NULL url_params = "method=MESSAGE" url_headers = "body=CANNED%20MSG" url_fragment = NULL@endcodeYou can use the function url_param() and url_have_param() to accessparticular parameters from @ref url_t::url_params "url->url_params" string.@subsection url_parsing Converting a #url_t structure to stringThe function url_as_string() converts contents of #url_t structure to anewly allocated string.@subsection url_reference Functions and Macros in URL ModuleThe include file <sofia-sip/url.h> contains the types, function and macros of URLmodule. The functions and macros are listed here for the reference, too.The most important functions and macros for manipulating URLs are here:@codeurl_t *url_make(su_home_t *h, char const *str);url_t *url_format(su_home_t *h, char const *fmt, ...);char *url_as_string(su_home_t *home, url_t const *url);url_t *url_hdup(su_home_t *h, url_t const *src);int url_sanitize(url_t *u);char const *url_scheme(enum url_type_e type);#define URL_INIT_AS(type) void url_init(url_t *url, enum url_type_e type);int url_cmp(url_t const *a, url_t const *b);int url_cmp_all(url_t const *a, url_t const *b);isize_t url_param(char const *params, char const *tag,		  char value[], isize_t vlen);int url_has_param(url_t const *url, char const *name);int url_param_add(su_home_t *h, url_t *url, char const *param);@endcodeThere are functions for handling %-encoding used in URLs:@codeint url_reserved_p(char const *s);char *url_escape(char *d, char const *s, char const reserved[]);int url_esclen(char const *s, char const reserved[]);char *url_unescape(char *d, char const *s);@endcodeThere are a few function and macros helping resolving URLs:@codechar const *url_port_default(enum url_type_e url_type);char const *url_tport_default(enum url_type_e url_type);char const *url_port(url_t const *u);#define URL_PORT(u) @endcodeIn addition to the basic URL structure, #url_t, the library interfaceprovides an union type #url_string_t for passing unparsed strings insteadof parsed URLs as function arguments:@code#define URL_STRING_P(u) ((u) && *((url_string_t*)(u))->us_str != 0)#define URL_IS_STRING(u) ((u) && *((url_string_t*)(u))->us_str != 0)int url_string_p(url_string_t const * url);int url_is_string(url_string_t const * url);#define URL_STRING_MAKE(s) @endcodeThere are a macros for printf()-like formatting of URLs:@code#define URL_PRINT_FORMAT#define URL_PRINT_ARGS(u) @endcodeThese functions calculate MD5 digest of URL or contribute contents of theURL to MD5 sum:@codevoid url_update(struct su_md5_t *md5, url_t const *url);void url_digest(void *hash, int hsize, url_t const *, char const *key);@endcodeSIP or SIPS URIs have some parameters that control transport of the request. In some cases, they should be detected and removed:@codeint url_have_transport(url_t const *u);int url_strip_transport(url_t *u);@endcodeFinally, there are functions used as building blocks for protocol parsersusing URLs:@codeint url_d(url_t *url, char *s);isize_t url_len(url_t const * url);issize_t url_e(char buffer[], isize_t n, url_t const *url);#define URL_E(buf, end, url)isize_t url_xtra(url_t const * url);issize_t url_dup(char *, isize_t , url_t *dst, url_t const *src);#define URL_DUP(buf, end, dst, src) @endcode*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -