123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835 |
- <?xml version="1.0" encoding='ISO-8859-1'?>
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
- <!-- Include general documentation entities -->
- <!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
- %docentities;
- ]>
- <!-- Module User's Guide -->
- <chapter>
-
- <title>&adminguide;</title>
-
- <section>
- <title>Overview</title>
- <para>
- This is a module that enables media streams to be proxied
- via an rtpproxy. Rtpproxies know to work with this module
- are Sippy RTPproxy <ulink url="http://www.rtpproxy.org"></ulink>
- and ngcp-rtpproxy-ng
- <ulink url="http://deb.sipwise.com/spce/2.6/pool/main/n/ngcp-mediaproxy-ng"></ulink>.
- Some features of the rtpproxy module apply only to one of the two rtpproxies.
- </para>
- </section>
- <section>
- <title>Multiple RTPProxy usage</title>
- <para>
- The rtpproxy module can support multiple rtpproxies for
- balancing/distribution and control/selection purposes.
- </para>
- <para>
- The module allows definition of several sets of rtpproxies.
- Load-balancing will be performed over a set and the admin has the
- ability to choose what set should be used. The set is selected via
- its id - the id being defined with the set. Refer to the
- <quote>rtpproxy_sock</quote> module parameter definition for syntax
- description.
- </para>
- <para>
- The balancing inside a set is done automatically by the module based on
- the weight of each rtpproxy from the set.
- </para>
- <para>
- The selection of the set is done from script prior using
- unforce_rtp_proxy(), rtpproxy_offer() or rtpproxy_answer()
- functions - see the set_rtp_proxy_set() function.
- </para>
- <para>
- For backward compatibility reasons, a set with no id take by default
- the id 0. Also if no set is explicitly set before
- unforce_rtp_proxy(), rtpproxy_offer() or rtpproxy_answer()
- the 0 id set will be used.
- </para>
- <para>
- IMPORTANT: if you use multiple sets, take care and use the same set for
- both rtpproxy_offer()/rtpproxy_answer() and unforce_rtpproxy()!!
- </para>
- </section>
- <section>
- <title>Dependencies</title>
- <section>
- <title>&kamailio; Modules</title>
- <para>
- The following modules must be loaded before this module:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>tm module</emphasis> - (optional) if you want to
- have rtpproxy_manage() fully functional
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- <section>
- <title>External Libraries or Applications</title>
- <para>
- The following libraries or applications must be installed before
- running &kamailio; with this module loaded:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>None</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- </section>
- <section>
- <title>Parameters</title>
- <section>
- <title><varname>rtpproxy_sock</varname> (string)</title>
- <para>
- Definition of socket(s) used to connect to (a set) RTPProxy. It may
- specify a UNIX socket or an IPv4/IPv6 UDP socket.
- </para>
- <para>
- <emphasis>
- Default value is <quote>NONE</quote> (disabled).
- </emphasis>
- </para>
- <example>
- <title>Set <varname>rtpproxy_sock</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- # single rtproxy
- modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:12221")
- # multiple rtproxies for LB
- modparam("rtpproxy", "rtpproxy_sock",
- "udp:localhost:12221 udp:localhost:12222")
- # multiple sets of multiple rtproxies
- modparam("rtpproxy", "rtpproxy_sock",
- "1 == udp:localhost:12221 udp:localhost:12222")
- modparam("rtpproxy", "rtpproxy_sock",
- "2 == udp:localhost:12225")
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>rtpproxy_disable_tout</varname> (integer)</title>
- <para>
- Once RTPProxy was found unreachable and marked as disabled, the rtpproxy
- module will not attempt to establish communication to RTPProxy for
- rtpproxy_disable_tout seconds.
- </para>
- <para>
- <emphasis>
- Default value is <quote>60</quote>.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>rtpproxy_disable_tout</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("rtpproxy", "rtpproxy_disable_tout", 20)
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>rtpproxy_tout</varname> (integer)</title>
- <para>
- Timeout value in waiting for reply from RTPProxy.
- </para>
- <para>
- <emphasis>
- Default value is <quote>1</quote>.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>rtpproxy_tout</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("rtpproxy", "rtpproxy_tout", 2)
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>rtpproxy_retr</varname> (integer)</title>
- <para>
- How many times the module should retry to send and receive after
- timeout was generated.
- </para>
- <para>
- <emphasis>
- Default value is <quote>5</quote>.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>rtpproxy_retr</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("rtpproxy", "rtpproxy_retr", 2)
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>nortpproxy_str</varname> (string)</title>
- <para>
- This parameter sets the SDP attribute used by rtpproxy to mark
- the message's SDP attachemnt with information that it have
- already been changed.
- </para>
- <para>
- If empty string, no marker will be added or checked.
- </para>
- <note><para>
- The string must be a complete SDP line, including the EOH (\r\n).
- </para></note>
- <para>
- <emphasis>
- Default value is <quote>a=nortpproxy:yes\r\n</quote>.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>nortpproxy_str</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("rtpproxy", "nortpproxy_str", "a=sdpmangled:yes\r\n")
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>timeout_socket</varname> (string)</title>
- <para>
- The parameter sets the RTP timeout socket, which is transmitted to the RTP-Proxy.
- It will be used by the RTP proxy to signal back that a media stream timed
- out.
- </para>
- <para>
- If it is an empty string, no timeout socket will be transmitted to the RTP-Proxy.
- </para>
- <para>
- <emphasis>
- Default value is <quote></quote> (nothing).
- </emphasis>
- </para>
- <example>
- <title>Set <varname>timeout_socket</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("nathelper", "timeout_socket", "xmlrpc:http://127.0.0.1:8000/RPC2")
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>ice_candidate_priority_avp</varname> (string)</title>
- <para>
- If specified and if value of the avp value is not 0,
- <function>rtpproxy_manage</function> function adds
- ICE relay candidate attributes
- to sdp stream(s) containing ICE candidate attributes.
- </para>
- <para>
- If value of the avp is 1, added candidates
- have high priority. If value of the avp is 2 (default),
- added candidates have low priority.
- </para>
- <para>
- <emphasis>
- There is no default value meaning that no ICE relay
- candidates are added in any circumstance.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>ice_candidate_priority_avp</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("rtpproxy", "ice_candidate_priority_avp", "$avp(ice_priority)")
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>extra_id_pv</varname> (string)</title>
- <para>
- The parameter sets the PV defination to use when the <quote>b</quote>
- parameter is used on unforce_rtp_proxy(), rtpproxy_offer(),
- rtpproxy_answer() or rtpproxy_manage() command.
- </para><para>
- Default is empty, the <quote>b</quote> parameter may not be used then.
- </para>
- <example>
- <title>Set <varname>extra_id_pv</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("rtpproxy", "extra_id_pv", "$avp(extra_id)")
- ...
- </programlisting>
- </example>
- </section>
- </section>
- <section>
- <title>Functions</title>
- <section>
- <title>
- <function moreinfo="none">set_rtp_proxy_set(setid)</function>
- </title>
- <para>
- Sets the Id of the rtpproxy set to be used for the next
- unforce_rtp_proxy(), rtpproxy_offer(), rtpproxy_answer()
- or rtpproxy_manage() command. The parameter can be an integer or
- a config variable holding an integer.
- </para>
- <para>
- This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE,
- BRANCH_ROUTE.
- </para>
- <example>
- <title><function>set_rtp_proxy_set</function> usage</title>
- <programlisting format="linespecific">
- ...
- set_rtp_proxy_set("2");
- rtpproxy_offer();
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title>
- <function moreinfo="none">rtpproxy_offer([flags [, ip_address]])</function>
- </title>
- <para>
- Rewrites &sdp; body to ensure that media is passed through
- an &rtp; proxy. To be invoked
- on INVITE for the cases the SDPs are in INVITE and 200 OK and on 200 OK
- when SDPs are in 200 OK and ACK.
- </para>
- <para>Meaning of the parameters is as follows:</para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>flags</emphasis> - flags to turn on some features.
- </para>
- <itemizedlist>
- <listitem><para>
- <emphasis>1</emphasis> - append first Via branch to Call-ID when sending
- command to rtpproxy. This can be used to create one media session per branch
- on the rtpproxy. When sending a subsequent <quote>delete</quote> command to
- the rtpproxy, you can then stop just the session for a specific branch when
- passing the flag '1' or '2' in the <quote>unforce_rtpproxy</quote>, or stop
- all sessions for a call when not passing one of those two flags there. This is
- especially useful if you have serially forked call scenarios where rtpproxy
- gets an <quote>update</quote> command for a new branch, and then a
- <quote>delete</quote> command for the previous branch, which would otherwise
- delete the full call, breaking the subsequent <quote>lookup</quote> for the
- new branch. <emphasis>This flag is only supported by the ngcp-mediaproxy-ng
- rtpproxy at the moment!</emphasis>
- </para></listitem>
- <listitem><para>
- <emphasis>2</emphasis> - append second Via branch to Call-ID when sending
- command to rtpproxy. See flag '1' for its meaning.
- </para></listitem>
- <listitem><para>
- <emphasis>3</emphasis> - behave like flag 1 is set for a request and
- like flag 2 is set for a reply.
- </para></listitem>
- <listitem><para>
- <emphasis>a</emphasis> - flags that UA from which message is
- received doesn't support symmetric RTP. (automatically sets the 'r' flag)
- </para></listitem>
- <listitem><para>
- <emphasis>b</emphasis> - append branch specific variable to Call-ID when sending
- command to rtpproxy. This creates one rtpproxy session per unique variable.
- Works similar to the 1, 2 and 3 parameter, but is usefull when forking to multiple
- destinations on different address families or network segments, requiring different
- rtpproxy parameters.
- The variable value is taken from the <quote>extra_id_pv</quote>.
- When used, it must be used in every call to rtpproxy_manage(), rtpproxy_offer(),
- rtpproxy_answer() and rtpproxy_destroy() with the same contents of the PV.
- The b parameter may not be used in conjunction with the 1, 2 or 3 parameter
- to use the Via branch in the Call-ID.
- </para></listitem>
- <listitem><para>
- <emphasis>l</emphasis> - force <quote>lookup</quote>, that is,
- only rewrite SDP when corresponding session already exists
- in the RTP proxy. By default is on when the session is to be
- completed.
- </para></listitem>
- <listitem><para>
- <emphasis>i, e</emphasis> - these flags specify the direction of the SIP
- message. These flags only make sense when rtpproxy is running in bridge mode.
- 'i' means internal network (LAN), 'e' means external network (WAN). 'i'
- corresponds to rtpproxy's first interface, 'e' corresponds to rtpproxy's
- second interface. You always have to specify two flags to define
- the incoming network and the outgoing network. For example, 'ie' should be
- used for SIP message received from the local interface and sent out on the
- external interface, and 'ei' vice versa. Other options are 'ii' and 'ee'.
- So, for example if a SIP requests is processed with 'ie' flags, the corresponding
- response must be processed with 'ie' flags.
- </para><para>
- Note: As rtpproxy in bridge mode s per default asymmetric, you have to specify
- the 'w' flag for clients behind NAT! See also above notes!
- </para></listitem>
- <listitem><para>
- <emphasis>x</emphasis> - this flag a shortcut for using the "ie" or "ei"-flags of RTP-Proxy,
- in order to do automatic bridging between IPv4 on the
- "internal network" and IPv6 on the "external network". The distinction is done by
- the given IP in the SDP, e.g. a IPv4 Address will always call "ie" to the RTPProxy
- (IPv4(i) to IPv6(e)) and an IPv6Address will always call "ei" to the RTPProxy (IPv6(e)
- to IPv4(i)).
- </para><para>
- Note: Please note, that this will only work properly with non-dual-stack user-agents or with
- dual-stack clients according to RFC6157 (which suggest ICE for Dual-Stack implementations).
- This short-cut will not work properly with RFC4091 (ANAT) compatible clients, which suggests
- having different m-lines with different IP-protocols grouped together.
- </para></listitem>
- <listitem><para>
- <emphasis>f</emphasis> - instructs rtpproxy to ignore marks
- inserted by another rtpproxy in transit to indicate that the
- session is already goes through another proxy. Allows creating
- a chain of proxies.
- </para></listitem>
- <listitem><para>
- <emphasis>r</emphasis> - flags that IP address in SDP should
- be trusted. Without this flag, rtpproxy ignores address in
- the SDP and uses source address of the SIP message as media
- address which is passed to the RTP proxy.
- </para></listitem>
- <listitem><para>
- <emphasis>o</emphasis> - flags that IP from the origin
- description (o=) should be also changed.
- </para></listitem>
- <listitem><para>
- <emphasis>c</emphasis> - flags to change the session-level
- SDP connection (c=) IP if media-description also includes
- connection information.
- </para></listitem>
- <listitem><para>
- <emphasis>w</emphasis> - flags that for the UA from which
- message is received, support symmetric RTP must be forced.
- </para></listitem>
- <listitem><para>
- <emphasis>zNN</emphasis> - requests the RTPproxy to perform
- re-packetization of RTP traffic coming from the UA which
- has sent the current message to increase or decrease payload
- size per each RTP packet forwarded if possible. The NN is the
- target payload size in ms, for the most codecs its value should
- be in 10ms increments, however for some codecs the increment
- could differ (e.g. 30ms for GSM or 20ms for G.723). The
- RTPproxy would select the closest value supported by the codec.
- This feature could be used for significantly reducing bandwith
- overhead for low bitrate codecs, for example with G.729 going
- from 10ms to 100ms saves two thirds of the network bandwith.
- </para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>
- <emphasis>ip_address</emphasis> - new SDP IP address.
- </para></listitem>
- </itemizedlist>
- <para>
- This function can be used from ANY_ROUTE.
- </para>
- <example>
- <title><function>rtpproxy_offer</function> usage</title>
- <programlisting format="linespecific">
- route {
- ...
- if (is_method("INVITE")) {
- if (has_sdp()) {
- if (rtpproxy_offer())
- t_on_reply("1");
- } else {
- t_on_reply("2");
- }
- }
- if (is_method("ACK") && has_sdp())
- rtpproxy_answer();
- ...
- }
- onreply_route[1]
- {
- ...
- if (has_sdp())
- rtpproxy_answer();
- ...
- }
- onreply_route[2]
- {
- ...
- if (has_sdp())
- rtpproxy_offer();
- ...
- }
- </programlisting>
- </example>
- </section>
- <section>
- <title>
- <function moreinfo="none">rtpproxy_answer([flags [, ip_address]])</function>
- </title>
- <para>
- Rewrites &sdp; body to ensure that media is passed through
- an &rtp; proxy. To be invoked
- on 200 OK for the cases the SDPs are in INVITE and 200 OK and on ACK
- when SDPs are in 200 OK and ACK.
- </para>
- <para>
- See rtpproxy_answer() function description above for the meaning of the
- parameters.
- </para>
- <para>
- This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE,
- FAILURE_ROUTE, BRANCH_ROUTE.
- </para>
- <example>
- <title><function>rtpproxy_answer</function> usage</title>
- <para>
- See rtpproxy_offer() function example above for example.
- </para>
- </example>
- </section>
- <section>
- <title>
- <function moreinfo="none">rtpproxy_destroy([flags])</function>
- </title>
- <para>
- Tears down the RTPProxy session for the current call.
- </para>
- <para>
- This function can be used from ANY_ROUTE.
- </para>
- <para>Meaning of the parameters is as follows:</para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>flags</emphasis> - flags to turn on some features.
- </para>
- <itemizedlist>
- <listitem><para>
- <emphasis>1</emphasis> - append first Via branch to Call-ID when sending
- command to rtpproxy. This can be used to create one media session per branch
- on the rtpproxy. When sending a subsequent <quote>delete</quote> command to
- the rtpproxy, you can then stop just the session for a specific branch when
- passing the flag '1' or '2' in the <quote>unforce_rtpproxy</quote>, or stop
- all sessions for a call when not passing one of those two flags there. This is
- especially useful if you have serially forked call scenarios where rtpproxy
- gets an <quote>update</quote> command for a new branch, and then a
- <quote>delete</quote> command for the previous branch, which would otherwise
- delete the full call, breaking the subsequent <quote>lookup</quote> for the
- new branch. <emphasis>This flag is only supported by the ngcp-mediaproxy-ng
- rtpproxy at the moment!</emphasis>
- </para></listitem>
- <listitem><para>
- <emphasis>2</emphasis> - append second Via branch to Call-ID when sending
- command to rtpproxy. See flag '1' for its meaning.
- </para></listitem>
- <listitem><para>
- <emphasis>b</emphasis> - append branch specific variable to Call-ID when sending
- command to rtpproxy. See rtpproxy_offer() for details.
- <listitem><para>
- </para></listitem>
- <emphasis>t</emphasis> - do not include To tag to <quote>delete</quote> command to rtpproxy thus causing full call to be deleted. Useful for deleting unused rtpproxy call when 200 OK is received on a branch, where rtpproxy is not needed.
- </para></listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
- <example>
- <title><function>rtpproxy_destroy</function> usage</title>
- <programlisting format="linespecific">
- ...
- rtpproxy_destroy();
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title>
- <function moreinfo="none">unforce_rtp_proxy()</function>
- </title>
- <para>
- Same as rtpproxy_destroy().
- </para>
- </section>
- <section>
- <title>
- <function moreinfo="none">rtpproxy_manage([flags [, ip_address]])</function>
- </title>
- <para>
- Manage the RTPProxy session - it combines the functionality of
- rtpproxy_offer(), rtpproxy_answer() and unforce_rtpproxy(), detecting
- internally based on message type and method which one to execute.
- </para>
- <para>
- It can take the same parameters as <function>rtpproxy_offer().</function>
- The flags parameter to rtpproxy_manage() can be a configuration variable
- containing the flags as a string.
- </para>
- <para>
- Functionality:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- If INVITE with SDP, then do <function>rtpproxy_offer()</function>
- </para>
- </listitem>
- <listitem>
- <para>
- If INVITE with SDP, when the tm module is loaded, mark transaction with
- internal flag FL_SDP_BODY to know that the 1xx and 2xx are for
- <function>rtpproxy_answer()</function>
- </para>
- </listitem>
- <listitem>
- <para>
- If ACK with SDP, then do <function>rtpproxy_answer()</function>
- </para>
- </listitem>
- <listitem>
- <para>
- If BYE or CANCEL, or called within a FAILURE_ROUTE[], then do <function>unforce_rtpproxy()</function>
- </para>
- </listitem>
- <listitem>
- <para>
- If reply to INVITE with code >= 300 do <function>unforce_rtpproxy()</function>
- </para>
- </listitem>
- <listitem>
- <para>
- If reply with SDP to INVITE having code 1xx and 2xx, then
- do <function>rtpproxy_answer()</function> if the request had SDP or tm is not loaded,
- otherwise do <function>rtpproxy_offer()</function>
- </para>
- </listitem>
- </itemizedlist>
- <para>
- This function can be used from ANY_ROUTE.
- </para>
- <example>
- <title><function>rtpproxy_manage</function> usage</title>
- <programlisting format="linespecific">
- ...
- rtpproxy_manage();
- ...
- </programlisting>
- </example>
- </section>
- <section id="rtpproxy_stream2uac">
- <title>
- <function>rtpproxy_stream2uac(prompt_name, count)</function>,
- </title>
- <para>
- Instruct the RTPproxy to stream prompt/announcement pre-encoded with
- the makeann command from the RTPproxy distribution. The uac/uas
- suffix selects who will hear the announcement relatively to the current
- transaction - UAC or UAS. For example invoking the
- <function>rtpproxy_stream2uac</function> in the request processing
- block on ACK transaction will play the prompt to the UA that has
- generated original INVITE and ACK while
- <function>rtpproxy_stop_stream2uas</function> on 183 in reply
- processing block will play the prompt to the UA that has generated 183.
- </para>
- <para>
- Apart from generating announcements, another possible application
- of this function is implementing music on hold (MOH) functionality.
- When count is -1, the streaming will be in loop indefinitely until
- the appropriate <function>rtpproxy_stop_stream2xxx</function> is issued.
- </para>
- <para>
- In order to work correctly, these functions require that a session in the
- RTPproxy already exists. Also those functions don't alter the SDP, so that
- they are not a substitute for calling <function>rtpproxy_offer</function>
- or <function>rtpproxy_answer</function>.
- </para>
- <para>
- This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE.
- </para>
- <para>Meaning of the parameters is as follows:</para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>prompt_name</emphasis> - name of the prompt to
- stream. Should be either absolute pathname or pathname
- relative to the directory where RTPproxy runs.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>count</emphasis> - number of times the prompt
- should be repeated. A value of -1 means that it will
- be streaming in a loop indefinitely, until the appropriate
- <function>rtpproxy_stop_stream2xxx</function> is issued.
- </para>
- </listitem>
- </itemizedlist>
- <example>
- <title><function>rtpproxy_stream2xxx</function> usage</title>
- <programlisting>
- ...
- if (is_method("INVITE")) {
- rtpproxy_offer();
- if (detect_hold()) {
- rtpproxy_stream2uas("/var/rtpproxy/prompts/music_on_hold", "-1");
- } else {
- rtpproxy_stop_stream2uas();
- };
- };
- ...
- </programlisting>
- </example>
- </section>
- <section id="rtpproxy_stream2uas">
- <title>
- <function>rtpproxy_stream2uas(prompt_name, count)</function>
- </title>
- <para>
- See function <function>rtpproxy_stream2uac(prompt_name, count)</function>.
- </para>
- </section>
- <section id="rtpproxy_stop_stream2uac">
- <title>
- <function>rtpproxy_stop_stream2uac()</function>,
- </title>
- <para>
- Stop streaming of announcement/prompt/MOH started previously by the
- respective <function>rtpproxy_stream2xxx</function>. The uac/uas
- suffix selects whose announcement relatively to tha current
- transaction should be stopped - UAC or UAS.
- </para>
- <para>
- These functions can be used from REQUEST_ROUTE, ONREPLY_ROUTE.
- </para>
- </section>
- <section>
- <title>
- <function moreinfo="none">start_recording()</function>
- </title>
- <para>
- This function will send a signal to the RTP-Proxy to record
- the RTP stream on the RTP-Proxy.
- <emphasis>This function is only supported by Sippy RTPproxy at the moment!</emphasis>
- </para>
- <para>
- This function can be used from REQUEST_ROUTE and ONREPLY_ROUTE.
- </para>
- <example>
- <title><function>start_recording</function> usage</title>
- <programlisting format="linespecific">
- ...
- start_recording();
- ...
- </programlisting>
- </example>
- </section>
- <section id="rtpproxy_stop_stream2uas">
- <title>
- <function>rtpproxy_stop_stream2uas(prompt_name, count)</function>
- </title>
- <para>
- See function <function>rtpproxy_stop_stream2uac(prompt_name, count)</function>.
- </para>
- </section>
- </section>
- <section>
- <title>Exported Pseudo Variables</title>
- <section>
- <title><function moreinfo="none">$rtpstat</function></title>
- <para>
- Returns the RTP-Statistics from the RTP-Proxy. The RTP-Statistics from the RTP-Proxy
- are provided as a string and it does contain several packet-counters. The statistics
- must be retrieved before the session is deleted (before <function>unforce_rtpproxy()</function>).
- </para>
- <example>
- <title>$rtpstat-Usage</title>
- <programlisting format="linespecific">
- ...
- append_hf("X-RTP-Statistics: $rtpstat\r\n");
- ...
- </programlisting>
- </example>
- </section>
- </section>
- <section>
- <title><acronym>MI</acronym> Commands</title>
- <section>
- <title><function moreinfo="none">nh_enable_rtpp</function></title>
- <para>
- Enables a rtp proxy if parameter value is greater than 0.
- Disables it if a zero value is given.
- </para>
- <para>
- The first parameter is the rtp proxy url (exactly as defined in
- the config file).
- </para>
- <para>
- The second parameter value must be a number in decimal.
- </para>
- <para>
- NOTE: if a rtpproxy is defined multiple times (in the same or
- diferente sete), all of its instances will be enables/disabled.
- </para>
- <example>
- <title>
- <function moreinfo="none">nh_enable_rtpp</function> usage</title>
- <programlisting format="linespecific">
- ...
- $ &ctltool; fifo nh_enable_rtpp udp:192.168.2.133:8081 0
- ...
- </programlisting>
- </example>
- </section>
-
- <section>
- <title><function moreinfo="none">nh_show_rtpp</function></title>
- <para>
- Displays all the rtp proxies and their information: set and
- status (disabled or not, weight and recheck_ticks).
- </para>
- <para>
- No parameter.
- </para>
- <example>
- <title>
- <function moreinfo="none">nh_show_rtpp</function> usage</title>
- <programlisting format="linespecific">
- ...
- $ &ctltool; fifo nh_show_rtpp
- ...
- </programlisting>
- </example>
- </section>
- </section>
- </chapter>
|