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

📄 rr_devel.sgml

📁 性能优秀的SIP Proxy
💻 SGML
字号:
<!-- Module Developer's Guide --><chapter>	<chapterinfo>	<revhistory>		<revision>		<revnumber>$Revision: 1.3 $</revnumber>		<date>$Date: 2006/07/07 09:17:23 $</date>		</revision>	</revhistory>	</chapterinfo>	<title>Developer's Guide</title>	<para>	The RR module provides an internal <acronym>API</acronym> to be used by 	other &ser; modules. The <acronym>API</acronym> offers support for	SIP dialog based functionalities - for more about the dialog support	offered by RR module, see <xref linkend="RR-dialog-id">.	</para>	<para>	For internal(non-script) usage, the RR module offers to other module the	possibility to register callback functions to be executed each time a	local Route header is processed. The callback function will receive as	parameter the register parameter and the Route header parameter string.	</para>	<section>	<title>Available Functions</title>	<section>		<title>		<function moreinfo="none">add_rr_param( msg, param)</function>		</title>		<para>		Adds a parameter to the requests's Record-Route URI (param must be in 		<quote>;name=value</quote> format).		</para>		<para>		The function returns 0 on success. Otherwise, -1 is returned.		</para>		<para>Meaning of the parameters is as follows:</para>		<itemizedlist>			<listitem>				<para><emphasis>struct sip_msg* msg</emphasis> - request that				will has the parameter <quote>param</quote> added to its 				Record-Route header.				</para>			</listitem>			<listitem>				<para><emphasis>str* param</emphasis> - parameter to be added 				to the Record-Route header - it must be in 				<quote>;name=value</quote> format.				</para>			</listitem>		</itemizedlist>	</section>	<section>		<title>		<function moreinfo="none">check_route_param( msg, re)</function>		</title>		<para>		The function checks for the request <quote>msg</quote> if the URI 		parameters of the local Route header (corresponding to the local 		server) matches the given regular expression <quote>re</quote>. 		It must be call after the loose_route was done.		</para>		<para>		The function returns 0 on success. Otherwise, -1 is returned.		</para>		<para>Meaning of the parameters is as follows:</para>		<itemizedlist>			<listitem>				<para><emphasis>struct sip_msg* msg</emphasis> - request that				will has the Route header parameters checked.				</para>			</listitem>			<listitem>				<para><emphasis>regex_t* param</emphasis> - compiled regular				expression to be checked against the Route header parameters.				</para>			</listitem>		</itemizedlist>	</section>	<section>		<title>		<function moreinfo="none">is_direction( msg, dir)</function>		</title>		<para>		The function checks the flow direction of the request 		<quote>msg</quote>. As for checking it's used the <quote>ftag</quote> 		Route header parameter, the append_fromtag (see 		<xref linkend="append-fromtag-id"> module parameter 		must be enables. Also this must be call only after the loose_route is 		done.		</para>		<para>		The function returns 0 if the <quote>dir</quote> is the same with		the request's flow direction. Otherwise, -1 is returned.		</para>		<para>Meaning of the parameters is as follows:</para>		<itemizedlist>			<listitem>				<para><emphasis>struct sip_msg* msg</emphasis> - request that				will have the direction checked.				</para>			</listitem>			<listitem>				<para><emphasis>int dir</emphasis> - direction to be checked				against. It may be <quote>RR_FLOW_UPSTREAM</quote> or 				<quote>RR_FLOW_DOWNSTREAM</quote>.				</para>			</listitem>		</itemizedlist>	</section>	<section>		<title>		<function moreinfo="none">get_route_param( msg, name, val)</function>		</title>		<para>		The function search in to the <quote>msg</quote>'s Route header 		parameters the parameter called <quote>name</quote> and returns its		value into <quote>val</quote>. It must be call only after the 		loose_route is done.		</para>		<para>		The function returns 0 if parameter was found (even if it has no value).		Otherwise, -1 is returned.		</para>		<para>Meaning of the parameters is as follows:</para>		<itemizedlist>			<listitem>				<para><emphasis>struct sip_msg* msg</emphasis> - request that				will have the Route header parameter searched.				</para>			</listitem>			<listitem>				<para><emphasis>str *name</emphasis> - contains the Route header				parameter to be serached.				</para>			</listitem>			<listitem>				<para><emphasis>str *val</emphasis> - returns the value of the 				searched Route header parameter if found. It might be empty 				string if the parameter had no value.				</para>			</listitem>		</itemizedlist>	</section>	<section>		<title>		<function moreinfo="none">register_rrcb( callback, param)</function>		</title>		<para>		The function register a new callback (along with its parameter). The		callback will be called when a loose route will be performed for the		local address.		</para>		<para>		The function returns 0 on success. Otherwise, -1 is returned.		</para>		<para>Meaning of the parameters is as follows:</para>		<itemizedlist>			<listitem>				<para><emphasis>rr_cb_t callback</emphasis> - callback				function to be registered.				</para>			</listitem>			<listitem>				<para><emphasis>void *param</emphasis> - parameter to be passed				to the callback function.				</para>			</listitem>		</itemizedlist>	</section>	<section>		<title>Examples</title>		<example>			<title>Loading RR module's API from another module</title>			<programlisting format="linespecific">...#include "../rr/api.h"...struct rr_binds my_rrb;....../* load the RR API */if (load_rr_api( & my_rrb )!=0) {    LOG(L_ERR, "ERROR: can't load RR API\n");    goto error;}....../* register a RR callback */if (my_rrb.register_rrcb(my_callback,0))!=0) {    LOG(L_ERR, "ERROR: can't register RR callback\n");    goto error;}...</programlisting>		</example>	</section></chapter><!-- Keep this element at the end of the fileLocal Variables:sgml-parent-document: ("rr.sgml" "book" "chapter")End:-->

⌨️ 快捷键说明

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