mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-04 18:27:36 +00:00
5e81b98eba
Mon Sep 17 14:50:04 EDT 2007 Pekka.Pessi@nokia.com * sofia-sip/sip_util.h: updated documentation Mon Sep 17 14:50:18 EDT 2007 Pekka.Pessi@nokia.com * sofia-sip/tport_tag.h: updated documentation Mon Sep 17 14:50:28 EDT 2007 Pekka.Pessi@nokia.com * soa_tag.c: updated documentation Wed Sep 19 12:50:01 EDT 2007 Pekka.Pessi@nokia.com * msg: updated documentation Wed Sep 19 13:29:50 EDT 2007 Pekka.Pessi@nokia.com * url: updated documentation Wed Sep 19 13:32:14 EDT 2007 Pekka.Pessi@nokia.com * nth: updated documentation Wed Sep 19 13:32:27 EDT 2007 Pekka.Pessi@nokia.com * nea: updated documentation Wed Sep 19 13:33:36 EDT 2007 Pekka.Pessi@nokia.com * http: updated documentation Wed Sep 19 13:36:58 EDT 2007 Pekka.Pessi@nokia.com * bnf: updated documentation Wed Sep 19 13:38:58 EDT 2007 Pekka.Pessi@nokia.com * nua: updated nua_stack_init_handle() prototype Wed Sep 19 18:45:56 EDT 2007 Pekka.Pessi@nokia.com * sip: added sip_name_addr_xtra(), sip_name_addr_dup() Wed Sep 19 19:00:19 EDT 2007 Pekka.Pessi@nokia.com * sip_basic.c: cleaned old crud Thu Sep 20 13:34:04 EDT 2007 Pekka.Pessi@nokia.com * iptsec: updated documentation Thu Sep 20 13:36:22 EDT 2007 Pekka.Pessi@nokia.com * tport: updated documentation Thu Sep 20 13:36:56 EDT 2007 Pekka.Pessi@nokia.com * su: updated documentation Removed internal files from doxygen-generated documentation. Thu Sep 20 13:38:29 EDT 2007 Pekka.Pessi@nokia.com * soa: fixed documentation Thu Sep 20 13:39:56 EDT 2007 Pekka.Pessi@nokia.com * sdp: updated documentation Thu Sep 20 13:40:16 EDT 2007 Pekka.Pessi@nokia.com * ipt: updated documentation Thu Sep 20 14:24:20 EDT 2007 Pekka.Pessi@nokia.com * nta: updated documentation Thu Sep 20 14:41:04 EDT 2007 Pekka.Pessi@nokia.com * nua: updated documentation Updated tag documentation. Moved doxygen doc entries from sofia-sip/nua_tag.h to nua_tag.c. Removed internal datatypes and files from the generated documents. Wed Sep 19 13:34:20 EDT 2007 Pekka.Pessi@nokia.com * docs: updated the generation of documentation. Updated links to header files. Thu Sep 20 08:45:32 EDT 2007 Pekka.Pessi@nokia.com * sip/Makefile.am: added tags to <sofia-sip/sip_extra.h> Added check for extra tags in torture_sip.c. Thu Sep 20 14:45:22 EDT 2007 Pekka.Pessi@nokia.com * stun: updated documentation Wed Jul 4 18:55:20 EDT 2007 Pekka.Pessi@nokia.com * torture_heap.c: added tests for ##sort() and su_smoothsort() Wed Jul 4 18:56:59 EDT 2007 Pekka.Pessi@nokia.com * Makefile.am: added smoothsort.c Fri Jul 13 12:38:44 EDT 2007 Pekka.Pessi@nokia.com * sofia-sip/heap.h: heap_remove() now set()s index to 0 on removed item Mon Jul 23 11:14:22 EDT 2007 Pekka.Pessi@nokia.com * sofia-sip/heap.h: fixed bug in heap##remove() If left kid was in heap but right was not, left kid was ignored. Wed Jul 4 18:51:08 EDT 2007 Pekka.Pessi@nokia.com * smoothsort.c: added Wed Jul 4 18:51:34 EDT 2007 Pekka.Pessi@nokia.com * heap.h: using su_smoothsort() Fri Jul 6 10:20:27 EDT 2007 Pekka.Pessi@nokia.com * smoothsort.c: added Wed Sep 19 17:40:30 EDT 2007 Pekka.Pessi@nokia.com * msg_parser.awk: generate two parser tables, default and extended Wed Sep 19 18:39:45 EDT 2007 Pekka.Pessi@nokia.com * msg_parser.awk: just generate list of extra headers Allocate extended parser dynamically. Wed Sep 19 18:59:59 EDT 2007 Pekka.Pessi@nokia.com * sip: added Remote-Party-ID, P-Asserted-Identity, P-Preferred-Identity Added functions sip_update_default_mclass() and sip_extend_mclass() for handling the extended parser. Note that Reply-To and Alert-Info are only available with the extended parser. Wed Sep 19 19:05:44 EDT 2007 Pekka.Pessi@nokia.com * RELEASE: updated Thu Sep 20 13:38:59 EDT 2007 Pekka.Pessi@nokia.com * sip: updated documentation Thu Sep 20 14:17:28 EDT 2007 Pekka.Pessi@nokia.com * docs/conformance.docs: updated Mon Oct 1 10:11:14 EDT 2007 Pekka.Pessi@nokia.com * tport_tag.c: re-enabled tptag_trusted Thu Oct 4 09:21:07 EDT 2007 Pekka.Pessi@nokia.com * su_osx_runloop.c: moved virtual function table after struct definition Preparing for su_port_vtable_t refactoring. Thu Oct 4 10:22:03 EDT 2007 Pekka.Pessi@nokia.com * su_source.c: refactored initialization/deinitialization Fri Oct 5 04:58:18 EDT 2007 Pekka Pessi <Pekka.Pessi@nokia.com> * sip_extra.c: fixed prototypes with isize_t Fri Oct 5 04:58:45 EDT 2007 Pekka Pessi <Pekka.Pessi@nokia.com> * test_nta_api.c: removed warnings about signedness Fri Oct 5 04:59:02 EDT 2007 Pekka Pessi <Pekka.Pessi@nokia.com> * test_nua_params.c: removed warnings about constness Fri Oct 5 07:20:26 EDT 2007 Pekka Pessi <first.lastname@nokia.com> * su_port.h, su_root.c: cleaned argument checking The su_root_*() and su_port_*() functions now check their arguments once and do not assert() with NULL arguments. The sur_task->sut_port should always be valid while su_root_t is alive. Fri Oct 5 07:22:09 EDT 2007 Pekka Pessi <first.lastname@nokia.com> * su: added su_root_obtain(), su_root_release() and su_root_has_thread() When root is created with su_root_create() or cloned with su_clone_start(), the resulting root is obtained by the calling or created thread, respectively. The root can be released with su_root_release() and another thread can obtain it. The function su_root_has_thread() can be used to check if a thread has obtained or released the root. Implementation upgraded the su_port_own_thread() method as su_port_thread(). Fri Oct 5 07:28:10 EDT 2007 Pekka Pessi <first.lastname@nokia.com> * su_port.h: removed su_port_threadsafe() and su_port_yield() methods su_port_wait_events() replaces su_port_yield(). Fri Oct 5 13:26:04 EDT 2007 Pekka Pessi <Pekka.Pessi@nokia.com> * msg_parser.awk: not extending header structure unless needed. Removed gawk-ish /* comments */. Fri Oct 5 14:32:25 EDT 2007 Pekka Pessi <Pekka.Pessi@nokia.com> * run_test_su: removed GNUisms Fri Oct 5 14:32:47 EDT 2007 Pekka Pessi <Pekka.Pessi@nokia.com> * Makefile.am: removed implicit check target test_urlmap Fri Oct 5 14:22:32 EDT 2007 Pekka Pessi <first.lastname@nokia.com> * torture_sresolv.c: use CLOCK_REALTIME if no CLOCK_PROCESS_CPUTIME_ID available Casting timespec tv_sec to unsigned long. Fri Oct * nua_s added handling nua_prack() Thanks to Fabio Margarido for the patch. Mon Oct 8 10:24:35 EDT 2007 Pekka.Pessi@nokia.com * test_nua: added test for sf.net bug #1803686 Mon Oct 8 08:15:23 EDT 2007 Pekka.Pessi@nokia.com * RELEASE: updated. Mon Oct 8 09:30:36 EDT 2007 Pekka.Pessi@nokia.com * nua_stack: added handling nua_prack() Thanks to Fabio Margarido for the patch. Mon Oct 8 10:24:35 EDT 2007 Pekka.Pessi@nokia.com * test_nua: added test for sf.net bug #1803686 Mon Oct 8 10:26:31 EDT 2007 Pekka.Pessi@nokia.com * nua: added test for nua_prack() (sf.net bug #1804248) Avoid sending nua_i_state after nua_prack() if no SDP O/A is happening, too. Mon Oct 8 10:32:04 EDT 2007 Mikhail Zabaluev <mikhail.zabaluev@nokia.com> * su_source.c: don t leak the wait arrays Mon Oct 8 10:37:11 EDT 2007 Pekka.Pessi@nokia.com * RELEASE: updated Wed Oct 10 11:55:21 EDT 2007 Pekka.Pessi@nokia.com * sip_parser.c: silenced warning about extra const in sip_extend_mclass() Wed Oct 10 11:57:08 EDT 2007 Pekka.Pessi@nokia.com * nta_tag.c: updated tag documentation Wed Oct 10 13:16:40 EDT 2007 Pekka.Pessi@nokia.com * nua: fix logging crash if outbound used with application contact Silenced warnings. Wed Oct 10 13:30:45 EDT 2007 Pekka.Pessi@nokia.com * msg_parser.awk: removed extra "const" Wed Oct 10 13:31:45 EDT 2007 Pekka.Pessi@nokia.com * Makefile.am's: fixed distclean of documentation git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5840 d0543943-73ff-0310-b7d9-9358b9ac24b2
188 lines
6.2 KiB
Plaintext
188 lines
6.2 KiB
Plaintext
/**@MODULEPAGE "url" - URL Module
|
|
|
|
@section url_meta Module Meta Information
|
|
|
|
The Sofia @b url module contains macros and functions for using URL
|
|
datatype #url_t, parsing and printing URLs.
|
|
|
|
@CONTACT Pekka Pessi <Pekka.Pessi@nokia.com>
|
|
|
|
@STATUS @SofiaSIP Core library
|
|
|
|
@LICENSE LGPL
|
|
|
|
@section url_syntax Using URL Library
|
|
|
|
The URL library provides URL datatype and helper functions related to it.
|
|
There is URL parser, which separates the URL components to the #url_t
|
|
structure.
|
|
|
|
@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. The
|
|
subset excludes space and characters commonly used as @e delimiters in
|
|
text-based protocols, such as <b> < > # \% </b>and<b> " </b> (double
|
|
quote), and so called @e unwise characters whose positions are reserved for
|
|
national 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 in
|
|
some parts of the URI. These @e reserved characters are used to separate
|
|
syntactical parts of the URLs from each other. The reserved characters are
|
|
as follows: <b> : @ / ; ? & = + </b>and<b> $</b>.
|
|
|
|
The URL library understands two alternative URL syntaxes. First, the
|
|
basic 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
|
|
@code
|
|
http://example.org:7100/cgi-bin/query?key=90786
|
|
ftp://user:pass\@ftp.example.com/pub/
|
|
sip:user:pass\@example.com;user=ip
|
|
tel:+358718008000
|
|
@endcode
|
|
|
|
@subsection url_parsing Converting a String to #url_t
|
|
|
|
The function url_make() converts a string to a freshly allocated #url_t
|
|
structure. The URL components are split into parts as shown above.
|
|
The hex encoding using \% is removed if the encoded character can
|
|
syntactically be part of the field. For instance, "%41" is decoded as
|
|
"A" in the user part, but "%40" (@) is left as is. (This is called
|
|
canonization of the URL fields.)
|
|
|
|
The function url_format() is provided for generating the URL with
|
|
printf()-like formatting.
|
|
|
|
For example, when we make the url from the string below
|
|
@code
|
|
sip:joe%2Euser@example%2Ecom;method=%4D%45%53%53%41%47%45?body=CANNED%20MSG
|
|
@endcode
|
|
the components are NUL-terminated, canonized and assigned to the structure
|
|
as 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
|
|
@endcode
|
|
|
|
You can use the function url_param() and url_have_param() to access
|
|
particular parameters from @ref url_t::url_params "url->url_params" string.
|
|
|
|
@subsection url_parsing Converting a #url_t structure to string
|
|
|
|
The function url_as_string() converts contents of #url_t structure to a
|
|
newly allocated string.
|
|
|
|
@subsection url_reference Functions and Macros in URL Module
|
|
|
|
The include file <sofia-sip/url.h> contains the types, function and macros of URL
|
|
module. The functions and macros are listed here for the reference, too.
|
|
The most important functions and macros for manipulating URLs are here:
|
|
@code
|
|
url_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);
|
|
@endcode
|
|
|
|
There are functions for handling %-encoding used in URLs:
|
|
@code
|
|
int 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);
|
|
@endcode
|
|
|
|
There are a few function and macros helping resolving URLs:
|
|
@code
|
|
char 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)
|
|
@endcode
|
|
|
|
In addition to the basic URL structure, #url_t, the library interface
|
|
provides an union type #url_string_t for passing unparsed strings instead
|
|
of 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)
|
|
@endcode
|
|
|
|
There are a macros for printf()-like formatting of URLs:
|
|
@code
|
|
#define URL_PRINT_FORMAT
|
|
#define URL_PRINT_ARGS(u)
|
|
@endcode
|
|
|
|
These functions calculate MD5 digest of URL or contribute contents of the
|
|
URL to MD5 sum:
|
|
@code
|
|
void url_update(struct su_md5_t *md5, url_t const *url);
|
|
void url_digest(void *hash, int hsize, url_t const *, char const *key);
|
|
@endcode
|
|
|
|
SIP or SIPS URIs have some parameters that control transport of the request.
|
|
In some cases, they should be detected and removed:
|
|
@code
|
|
int url_have_transport(url_t const *u);
|
|
int url_strip_transport(url_t *u);
|
|
@endcode
|
|
|
|
Finally, there are functions used as building blocks for protocol parsers
|
|
using URLs:
|
|
@code
|
|
int 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
|
|
|
|
*/
|