Commit 4fa60292 authored by Pekka Pessi's avatar Pekka Pessi

Added Doxygen alias @VERSION_1_12_2. Using it to document additions.

darcs-hash:20060920204501-65a35-e3290c8ef57908a93aa7ee4de190912c08e62fee.gz
parent 70f65382
......@@ -169,7 +169,7 @@ int span_ip4_address(char const *host)
return span_canonic_ip4_address(host, NULL);
}
/** Scan valid IP4 address */
/** Scan and canonize a valid IP4 address. */
int scan_ip4_address(char **inout_host)
{
char *src = *inout_host, *dst = src;
......@@ -419,7 +419,7 @@ int span_ip6_address(char const *host)
*
* @retval Length of valid IP6 address or -1 upon an error.
*
* @note Scanned IP6 is not NUL-terminated.
* @note Scanned IP6 is not always NUL-terminated.
*/
int scan_ip6_address(char **inout_host)
{
......
......@@ -32,4 +32,5 @@ ALIASES = \
"GPL2=\par GNU Public License Version 2:\n \ref gpl2\n \if 0\n" \
"ENDGPL2=\endif \n" \
"ERRORS=\par Errors: " \
"ERROR=\par \n \b "
"ERROR=\par \n \b " \
"VERSION_1_12_2=<a href=\"http://sofia-sip.sf.net/relnotes/relnotes-sofia-sip-1.12.2.txt\">1.12.2</a>" \
......@@ -5,7 +5,7 @@
@section msg_meta Module Meta Information
This module contains parser and functions for manipulating messages and
headers for text-based protocols like SIP, HTTP and RTSP. It also
headers for text-based protocols like SIP, HTTP or RTSP. It also
provides parsing of MIME headers and MIME multipart messages common to
these protocols.
......@@ -271,8 +271,8 @@ elements and headers.
@section msg_parsing_example Result of Parsing Process
Let us now show how a simple message is parsed and presented to the
applications. As an exampe, we choose a BYE message with only the
mandatory fields included:
applications. As an exampe, we choose a SIP request message with method BYE,
including only the mandatory fields:
@code
BYE sip:joe@example.com SIP/2.0
Via: SIP/2.0/UDP sip.example.edu;branch=d7f2e89c.74a72681
......
......@@ -3592,7 +3592,10 @@ int nta_leg_get_route(nta_leg_t *leg,
return 0;
}
/** Generate @Replaces header. */
/** Generate @Replaces header.
*
* @since New in @VERSION_1_12_2.
*/
SOFIAPUBFUN
sip_replaces_t *nta_leg_make_replaces(nta_leg_t *leg,
su_home_t *home,
......@@ -3613,7 +3616,10 @@ sip_replaces_t *nta_leg_make_replaces(nta_leg_t *leg,
early_only ? ";early-only" : "");
}
/** Get dialog leg by @Replaces header. */
/** Get dialog leg by @Replaces header.
*
* @since New in @VERSION_1_12_2.
*/
SOFIAPUBFUN
nta_leg_t *nta_leg_by_replaces(nta_agent_t *sa, sip_replaces_t const *rp)
{
......@@ -10001,6 +10007,7 @@ int nta_tport_keepalive(nta_outgoing_t *orq)
TAG_END());
}
/** Close all transports. @since Experimental in @VERSION_1_12_2. */
int nta_agent_close_tports(nta_agent_t *agent)
{
int i;
......
......@@ -2143,6 +2143,7 @@ NUTAG_AUTOANSWER(0) on B side, NUTAG_AUTOACK(0) on A side.
* @param sip NULL
* @param tags empty
*
* @since New in @VERSION_1_12_2.
*/
/** @var nua_event_e::nua_i_notify
......
......@@ -132,8 +132,8 @@ sip_response_terminates_dialog().
| |
| Init |
| |
@endcode +----------+
+----------+
@endcode
*/
/* ---------------------------------------------------------------------- */
......
......@@ -68,13 +68,18 @@ typedef NUA_MAGIC_T nua_magic_t;
/** Application context for NUA handle. */
typedef NUA_HMAGIC_T nua_hmagic_t;
typedef enum nua_nw_detector_e{
/**Network change event levels given to NUTAG_DETECT_NETWORK_UPDATES().
*
* @sa NUTAG_DETECT_NETWORK_UPDATES(), #nua_i_network_changed
*
* @since New in @VERSION_1_12_2.
*/
typedef enum nua_nw_detector_e {
NUA_NW_DETECT_NOTHING = 0,
NUA_NW_DETECT_ONLY_INFO,
NUA_NW_DETECT_TRY_FULL,
} nua_nw_detector_t;
/** Events */
typedef enum nua_event_e {
/* Indications */
......
......@@ -306,7 +306,9 @@ SOFIAPUBVAR tag_typedef_t nutag_only183_100rel_ref;
*
* @sa NUTAG_EARLY_MEDIA_REF()
*
* Corresponding tag taking reference parameter is NUTAG_EARLY_ANSWER_REF()
* Corresponding tag taking reference parameter is NUTAG_EARLY_ANSWER_REF().
*
* @since New in @VERSION_1_12_2.
*/
#define NUTAG_EARLY_ANSWER(x) nutag_early_answer, tag_bool_v(x)
SOFIAPUBVAR tag_typedef_t nutag_early_answer;
......@@ -497,11 +499,11 @@ SOFIAPUBVAR tag_typedef_t nutag_autoack_ref;
* @c 0 No automatic sending of "200 Ok" \n
* @c !=0 "200 Ok" sent automatically
*
* @par Auto-Answer to Re-INVITE requests By default, NUA tries to auto
* answer the re-INVITEs used to refresh the session when the media is
* enabled. Set NUTAG_AUTOANSWER(0) on the call handle (e.g., include the
* tag with nua_invite(), nua_respond()) in order to disable the auto answer
* on re-INVITEs.
* @par Auto-Answer to Re-INVITE requests
* By default, NUA tries to auto answer the re-INVITEs used to refresh the
* session when the media is enabled. Set NUTAG_AUTOANSWER(0) on the call
* handle (e.g., include the tag with nua_invite(), nua_respond()) in order
* to disable the auto answer on re-INVITEs.
*
* @sa NUTAG_MEDIA_ENABLE(), NUTAG_AUTOALERT(), NUTAG_AUTOACK().
*
......@@ -1117,7 +1119,9 @@ SOFIAPUBVAR tag_typedef_t nutag_authtime_ref;
* @sa NUTAG_M_USERNAME(), NUTAG_M_PARAMS(), NUTAG_M_FEATURES(),
* NUTAG_CALLEE_CAPS().
*
* Corresponding tag taking reference parameter is NUTAG_M_DISPLAY_REF()
* Corresponding tag taking reference parameter is NUTAG_M_DISPLAY_REF().
*
* @since New in @VERSION_1_12_2.
*/
#define NUTAG_M_DISPLAY(x) nutag_m_display, tag_str_v(x)
SOFIAPUBVAR tag_typedef_t nutag_m_display;
......@@ -1146,7 +1150,9 @@ SOFIAPUBVAR tag_typedef_t nutag_m_display_ref;
* @sa NUTAG_M_DISPLAY(), NUTAG_M_PARAMS(), NUTAG_M_FEATURES(),
* NUTAG_CALLEE_CAPS().
*
* Corresponding tag taking reference parameter is NUTAG_M_USERNAME_REF()
* Corresponding tag taking reference parameter is NUTAG_M_USERNAME_REF().
*
* @since New in @VERSION_1_12_2.
*/
#define NUTAG_M_USERNAME(x) nutag_m_username, tag_str_v(x)
SOFIAPUBVAR tag_typedef_t nutag_m_username;
......@@ -1175,7 +1181,9 @@ SOFIAPUBVAR tag_typedef_t nutag_m_username_ref;
* @sa NUTAG_M_DISPLAY(), NUTAG_M_USERNAME(), NUTAG_M_FEATURES(),
* NUTAG_CALLEE_CAPS().
*
* Corresponding tag taking reference parameter is NUTAG_M_PARAMS_REF()
* Corresponding tag taking reference parameter is NUTAG_M_PARAMS_REF().
*
* @since New in @VERSION_1_12_2.
*/
#define NUTAG_M_PARAMS(x) nutag_m_params, tag_str_v(x)
SOFIAPUBVAR tag_typedef_t nutag_m_params;
......@@ -1209,7 +1217,9 @@ SOFIAPUBVAR tag_typedef_t nutag_m_params_ref;
* @sa NUTAG_M_DISPLAY(), NUTAG_M_USERNAME(), NUTAG_M_PARAMS(),
* NUTAG_CALLEE_CAPS(), NUTAG_IDENTITY().
*
* Corresponding tag taking reference parameter is NUTAG_M_FEATURES_REF()
* Corresponding tag taking reference parameter is NUTAG_M_FEATURES_REF().
*
* @since New in @VERSION_1_12_2.
*/
#define NUTAG_M_FEATURES(x) nutag_m_features, tag_str_v(x)
SOFIAPUBVAR tag_typedef_t nutag_m_features;
......@@ -1563,10 +1573,11 @@ SOFIAPUBVAR tag_typedef_t nutag_refer_expires_ref;
/**Always use id parameter with refer event.
*
* When REFER creates an implicit subscription, the event header identifying
* the subscription may have an id parameter. The id parameter can be either
* always included (default behavior), or the parameter can be used only for
* the second and subsequent REFER requests received in a given dialog.
* When an incoming REFER creates an implicit subscription, the event header
* in the NOTIFY request may have an id parameter. The id parameter can be
* either always included (default behavior), or the parameter can be used
* only for the second and subsequent REFER requests received in a given
* dialog.
*
* Note that once the subscription is created, the event header should not
* be modified. Therefore this tag has no effect on already established
......@@ -1583,7 +1594,9 @@ SOFIAPUBVAR tag_typedef_t nutag_refer_expires_ref;
* 0 (false, do not use id with subscription created with first REFER request) \n
* 1 (true, use id with all subscriptions created with REFER request) \n
*
* Corresponding tag taking reference parameter is NUTAG_REFER_WITH_ID_REF()
* Corresponding tag taking reference parameter is NUTAG_REFER_WITH_ID_REF().
*
* @since New in @VERSION_1_12_2.
*/
#define NUTAG_REFER_WITH_ID(x) nutag_refer_with_id, tag_bool_v(x)
SOFIAPUBVAR tag_typedef_t nutag_refer_with_id;
......@@ -1746,7 +1759,10 @@ SOFIAPUBVAR tag_typedef_t nutag_answer_sent_ref;
* @par Parameter type
* int
*
* Corresponding tag taking reference parameter is NUTAG_DETECT_NETWORK_UPDATES_REF()
* Corresponding tag taking reference parameter is
* NUTAG_DETECT_NETWORK_UPDATES_REF().
*
* @since New in @VERSION_1_12_2.
*/
#define NUTAG_DETECT_NETWORK_UPDATES(x) \
nutag_detect_network_updates, tag_uint_v(x)
......
......@@ -296,7 +296,9 @@ tag_typedef_t soatag_rtp_select = UINTTAG_TYPEDEF(rtp_select);
* By default, there are no auxiliary audio codecs.
*
* Corresponding tag taking a reference parameter is
* SOATAG_AUDIO_AUX_REF()
* SOATAG_AUDIO_AUX_REF().
*
* @since New in @VERSION_1_12_2.
*/
tag_typedef_t soatag_audio_aux = STRTAG_TYPEDEF(audio_aux);
......
......@@ -59,6 +59,7 @@
#if defined(_WIN32)
typedef SOCKET sres_socket_t;
#else
/** Socket descriptor. @since New in @VERSION_1_12_2. */
typedef int sres_socket_t;
#endif
......
......@@ -5,6 +5,9 @@ INPUT = su.docs sofia-sip .
@INCLUDE = ../docs/Doxyfile.conf
TAGFILES += ../docs/msg.doxytags=../msg
TAGFILES += ../docs/sip.doxytags=../sip
GENERATE_TAGFILE = ../docs/su.doxytags
ALIASES += "SU_TAG=@ingroup su_tag\n"
......
......@@ -207,30 +207,59 @@ union su_sockaddr_u {
typedef union su_sockaddr_u su_sockaddr_t;
#if SU_HAVE_BSDSOCK || DOCUMENTATION_ONLY
/** IO vector for su_vsend() and su_vrecv().
* @note Ordering of the fields is reversed on Windows.
/** I/O vector for scatter-gather I/O.
*
* This is the I/O vector element used with su_vsend() and su_vrecv(). It is
* defined like struct iovec with POSIX sockets, and as
* <a href="http://msdn.microsoft.com/library/en-us/winsock/winsock/wsabuf_2.asp">
* WSABUF</a> with WINSOCK sockets. For historical reasons, it is known as #msg_iovec_t
* in @msg module.
*
* @note Ordering of the fields is reversed on Windows. Do not initialize this
* structure with static initializer, but assign both fields separately.
*
* @sa #su_iovec_t, #su_ioveclen_t, SU_IOVECLEN_MAX, su_vsend(), su_vrecv(),
* #msg_iovec_t, msg_iovec(), msg_recv_iovec(),
* @c struct @c iovec defined in <sys/uio.h>, writev(2), readv(2),
* <a href="http://msdn.microsoft.com/library/en-us/winsock/winsock/wsabuf_2.asp">
* WSABUF of WinSock2</a>
*/
struct su_iovec_s {
typedef struct su_iovec_s {
void *siv_base; /**< Pointer to buffer. */
size_t siv_len; /**< Size of buffer. */
};
} su_iovec_t;
/**Type of @a siv_len field in #su_iovec_t.
*
* The @a siv_len field in #su_iovec_t has different types in with POSIX and
* WINSOCK2. Please truncate the iovec element size to #SU_IOVECLEN_MAX, if
* needed, and cast using #su_ioveclen_t.
*
* @sa #su_iovec_t, #SU_IOVECLEN_MAX
*
* @since New in @VERSION_1_12_2.
*/
typedef size_t su_ioveclen_t;
/** Maximum size of buffer in a single su_iovec_t element.
* @sa #su_ioveclen_t, #su_iovec_t
*
* @since New in @VERSION_1_12_2.
* @HIDE
*/
#define SU_IOVECLEN_MAX SIZE_MAX
#endif
#if SU_HAVE_WINSOCK
/* This is same as WSABUF */
struct su_iovec_s {
typedef struct su_iovec_s {
u_long siv_len;
void *siv_base;
};
} su_iovec_s;
typedef u_long su_ioveclen_t;
#define SU_IOVECLEN_MAX ULONG_MAX
#endif
/** I/O vector for scatter-gather I/O. */
typedef struct su_iovec_s su_iovec_t;
/* ---------------------------------------------------------------------- */
/* Socket compatibility functions */
......@@ -247,7 +276,9 @@ SOFIAPUBFUN int su_ioctl(su_socket_t s, int request, ...);
/** Checks if the @a errcode indicates that the socket call failed because
* it would have blocked.
*
* New in @VERSION_1_12_2. Defined as macro with POSIX sockets.
* Defined as macro with POSIX sockets.
*
* @since New in @VERSION_1_12_2.
*/
SOFIAPUBFUN int su_is_blocking(int errcode);
......
......@@ -45,7 +45,9 @@ typedef struct su_localinfo_s su_localinfo_t;
/** Local address info structure. */
struct su_localinfo_s {
/** Flags: LI_V4MAPPED, LI_CANONNAME, LI_NAMEREQD, LI_NUMERIC, LI_IFNAME */
/**Bitwise or of flags:
* #LI_V4MAPPED, #LI_CANONNAME, #LI_NAMEREQD,
* #LI_NUMERIC, #LI_DOWN, #LI_IFNAME */
int li_flags;
int li_family; /**< Address family. */
int li_index; /**< Network interface index. */
......@@ -57,7 +59,7 @@ struct su_localinfo_s {
char *li_ifname; /**< Network interface name. */
};
/** Localinfo flags - li_flags */
/** Flags for su_getlocalinfo() - li_flags */
enum {
/** IPv4 addresses will be mapped as IPv6 */
LI_V4MAPPED = 1,
......@@ -67,7 +69,7 @@ enum {
LI_NAMEREQD = 6,
/** Instead of domain name, use numeric form */
LI_NUMERIC = 8,
/** Interfaces are down. New in 1.12.2. */
/** Include interfaces even if they are down (new in @VERSION_1_12_2). */
LI_DOWN = 16,
/** Get interface name */
LI_IFNAME = 256
......@@ -81,7 +83,7 @@ enum {
LI_SCOPE_GLOBAL = 0x80 /**< Global address. */
};
/** Localinfo error codes */
/** Localinfo error codes. */
enum {
ELI_NOADDRESS = -1, /**< No matching address. */
ELI_MEMORY = -2, /**< Memory allocation error. */
......
......@@ -119,6 +119,8 @@ typedef SOFIA_SSIZE_T ssize_t;
* When configured for compatibility with sofia-sip 1.12.0, this is defined
* as int, otherwise as size_t. Note that int is signed and size_t is
* unsigned.
*
* @since New in @VERSION_1_12_2.
*/
typedef SOFIA_ISIZE_T isize_t;
#else
......@@ -131,6 +133,8 @@ typedef size_t isize_t;
* sofia-sip <= 1.12.1 used int for count of bytes.
* When configured for compatibility with sofia-sip 1.12.0, this is defined
* as int, otherwise as ssize_t. (-1 is used for error indication).
*
* @since New in @VERSION_1_12_2.
*/
typedef SOFIA_ISSIZE_T issize_t;
#else
......@@ -143,6 +147,8 @@ typedef ssize_t issize_t;
* sofia-sip <= 1.12.1 sometimes used unsigned int for count of bytes.
* When configured for compatibility with sofia-sip 1.12.0, this is defined
* as unsigned int, otherwise as size_t.
*
* @since New in @VERSION_1_12_2.
*/
typedef SOFIA_USIZE_T usize_t;
#else
......
......@@ -19,6 +19,7 @@
*
* - su_types.h - integral types
* - su.h - @ref su_socket
* - su_localinfo.h - get list of local IP addresses
* - su_wait.h - @ref su_wait
* - su_time.h - @ref su_time
* - su_alloc.h - @ref su_alloc
......
......@@ -94,15 +94,15 @@ static int li_scope4(uint32_t ip4);
/** @brief Request local address information.
*
* The function su_getlocalinfo() gathers the network interfaces and the
* addresses corresponding to them, checks if they match to the search
* criteria specifed by @a hints and returns a list of matching local
* address information in the @a res. The local address information may
* include IPv4/IPv6 addresses, interface name, interface index, address
* scope, and domain names corresponding to the local addresses.
* Gather the network interfaces and the addresses corresponding to them,
* check if they match to the search criteria specifed by @a hints and
* return a list of matching local address information in the @a
* return_localinfo. The local address information may include IPv4/IPv6
* addresses, interface name, interface index, address scope, and domain
* names corresponding to the local addresses.
*
* @param hints specifies selection criteria
* @param return_localinfo return list of local addresses
* @param[in] hints specifies selection criteria
* @param[out] return_localinfo return list of local addresses
*
* @par Selection criteria - hints
*
......@@ -114,15 +114,17 @@ static int li_scope4(uint32_t ip4);
* The @a hints->li_flags contain flags, which can be combined with bit-wise
* or. The currently defined flags are as follows:
*
* - @c LI_V4MAPPED: when returning IPv4 addresses, map them as IPv6
* - #LI_V4MAPPED: when returning IPv4 addresses, map them as IPv6
* addresses. If this flag is specified, IPv4 addresses are returned even
* if @a hints->li_family is set to @c AF_INET6.
* - @c LI_CANONNAME: return the domain name (DNS PTR) corresponding to the
* - #LI_CANONNAME: return the domain name (DNS PTR) corresponding to the
* local address in @a li_canonname.
* - @c LI_NAMEREQD: Do not return addresses not in DNS.
* - @c LI_NUMERIC: instead of domain name, return the text presentation of
* - #LI_NAMEREQD: Do not return addresses not in DNS.
* - #LI_NUMERIC: instead of domain name, return the text presentation of
* the addresss in @a li_canonname.
* - @c LI_IFNAME: return the interface name in @a li_ifname.
* - #LI_DOWN: include interfaces and their addresses even if the interfaces
* are down. New in @VERSION_1_12_2.
* - #LI_IFNAME: return the interface name in @a li_ifname.
*
* @par Selection by address family - hints->li_family
*
......@@ -145,27 +147,35 @@ static int li_scope4(uint32_t ip4);
* @par Selection by address scope - hints->li_scope
*
* If the field @a hints->li_scope is nonzero, only the addresses with
* matching scope are returned. The address scopes can be combined with
* bitwise or. For instance, setting @a hints->li_scope to @c
* LI_SCOPE_GLOBAL | @c LI_SCOPE_SITE, both the @e global and @e site-local
* addresses are returned.
* matching scope are returned. The different address scopes can be combined
* with bitwise or. They are defined as follows
* - #LI_SCOPE_HOST: host-local address, valid within host (::1, 127.0.0.1/8)
* - #LI_SCOPE_LINK: link-local address, valid within link
* (IP6 addresses with prefix fe80::/10,
* IP4 addresses in net 169.254.0.0/16).
* - #LI_SCOPE_SITE: site-local address, addresses valid within organization
* (IPv6 addresses with prefix fec::/10,
* private IPv4 addresses in nets 10.0.0.0/8, 172.16.0.0/12,
* and 192.168.0.0/16 as defined in @RFC1918)
* - #LI_SCOPE_GLOBAL: global address.
*
* @par
* For IPv4, the loopback addresses (addresses in the net 127) are currently
* considered @e host-local, other addresses are @e global.
* For instance, setting @a hints->li_scope to @c LI_SCOPE_GLOBAL | @c
* LI_SCOPE_SITE, both the @e global and @e site-local addresses are
* returned.
*
* @sa @RFC1918, @RFC4291, su_sockaddr_scope()
*
* @par Selection by domain name - hints->li_canonname
*
* If this field is non-null, the domain name (DNS PTR) corresponding to
* local IP addresses should match to the name given in this field.
*
* @return
* The function su_getlocalinfo() returns zero when successful, or
* negative error code when failed.
* @return Zero (#ELI_NOERROR) when successful, or negative error code when
* failed.
*
* @par diagnostics
* The function su_gli_strerror() returns a string describing the error code
* returned by su_getlocalinfo().
* @par Diagnostics
* Use su_gli_strerror() in order to obtain a string describing the error
* code returned by su_getlocalinfo().
*
*/
int su_getlocalinfo(su_localinfo_t const *hints,
......@@ -243,7 +253,14 @@ int su_getlocalinfo(su_localinfo_t const *hints,
return error;
}
/** Free local address information. */
/** Free local address information.
*
* Free a list of su_localinfo_t structures obtained with su_getlocalinfo()
* or su_copylocalinfo() along with socket addresses and strings associated
* with them.
*
* @sa su_getlocalinfo(), su_copylocalinfo(), #su_localinfo_t
*/
void su_freelocalinfo(su_localinfo_t *tbf)
{
su_localinfo_t *li;
......@@ -1502,7 +1519,7 @@ void li_sort(su_localinfo_t *i, su_localinfo_t **rresult)
/**Get local IP address.
*
* @deprecated
* Use su_localinfo() instead.
* Use su_getlocalinfo() instead.
*/
int su_getlocalip(su_sockaddr_t *sa)
{
......
......@@ -152,9 +152,10 @@ TPORT_DLL extern tag_typedef_t tptag_idle_ref;
#define TPTAG_IDLE_REF(x) tptag_idle_ref, tag_uint_vr(&(x))
TPORT_DLL extern tag_typedef_t tptag_timeout;
/**Keeps incoming message on idle connection (value in milliseconds).
/**Timeout for incomplete incoming message (value in milliseconds).
*
* if UINT_MAX, leave them there (default value for now).
* If UINT_MAX, leave the incomplete messages there for ever.
* Default value for now is UINT_MAX.
*/
#define TPTAG_TIMEOUT(x) tptag_timeout, tag_uint_v((x))
......
......@@ -55,7 +55,7 @@ enum url_type_e {
url_pres, /**< @c "pres:" (simple presence) */
url_cid, /**< @c "cid:" (Content-ID) */
url_msrp, /**< @c "msrp:" (message session relay) */
url_msrps, /**< @c "msrps:" */
url_msrps, /**< @c "msrps:" (new in @VERSION_1_12_2) */
url_wv, /**< @c "wv:" (Wireless village) */
_url_none
};
......
......@@ -106,6 +106,18 @@ tagi_t *urltag_dup(tagi_t *dst, tagi_t const *src, void **bb)
: (u < 96 ? (0x0000001e & (1 << (95 - u))) \
: /*u < 128*/ (0x8000001d & (1 << (127 - u))))))
/** Tag function used to convert a string to a URL tag value.
*
* @param tt tag type
* @param home memory home used to allocate new #url_t structure
* @param str string to convert
* @param return_value return-value parameter for converted url
*
* @retval 0 when successful
* @retval -1 upon an error
*
* @since New in @VERSION_1_12_2.
*/
int urltag_scan(tag_type_t tt, su_home_t *home,
char const *str,
tag_value_t *return_value)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment