|
@@ -1,856 +0,0 @@
|
|
-<?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 RTP proxy. The only RTP proxy currently known to work
|
|
|
|
- with this module is the Sipwise ngcp-rtpproxy-ng
|
|
|
|
- <ulink url="https://github.com/sipwise/mediaproxy-ng"></ulink>.
|
|
|
|
- The rtpproxy-ng module is a modified version of the original
|
|
|
|
- rtpproxy module using a new control protocol. The module is
|
|
|
|
- designed to be a drop-in replacement for the old module from
|
|
|
|
- a configuration file point of view, however due to the
|
|
|
|
- incompatible control protocol, it only works with RTP proxies
|
|
|
|
- which specifically support it.
|
|
|
|
- </para>
|
|
|
|
- </section>
|
|
|
|
-
|
|
|
|
- <section>
|
|
|
|
- <title>Multiple RTPProxy usage</title>
|
|
|
|
- <para>
|
|
|
|
- The rtpproxy-ng module can support multiple RTP proxies 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>
|
|
|
|
- Another way to select the set is to define setid_avp
|
|
|
|
- module parameter and assign setid to the defined avp
|
|
|
|
- before calling rtpproxy_offer() or rtpproxy_manage()
|
|
|
|
- function. If forwarding of the requests fails and
|
|
|
|
- there is another branch to try, remember to unset the
|
|
|
|
- avp after calling rtpproxy_destroy() 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()!!
|
|
|
|
- If the set was selected using setid_avp, the avp needs to be
|
|
|
|
- set only once before rtpproxy_offer() or rtpproxy_manage() call.
|
|
|
|
- </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 id="rtpproxy-ng.p.rtpproxy_sock">
|
|
|
|
- <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-ng", "rtpproxy_sock", "udp:localhost:12221")
|
|
|
|
-# multiple rtproxies for LB
|
|
|
|
-modparam("rtpproxy-ng", "rtpproxy_sock",
|
|
|
|
- "udp:localhost:12221 udp:localhost:12222")
|
|
|
|
-# multiple sets of multiple rtproxies
|
|
|
|
-modparam("rtpproxy-ng", "rtpproxy_sock",
|
|
|
|
- "1 == udp:localhost:12221 udp:localhost:12222")
|
|
|
|
-modparam("rtpproxy-ng", "rtpproxy_sock",
|
|
|
|
- "2 == udp:localhost:12225")
|
|
|
|
-...
|
|
|
|
-</programlisting>
|
|
|
|
- </example>
|
|
|
|
- </section>
|
|
|
|
- <section id="rtpproxy-ng.p.rtpproxy_disable_tout">
|
|
|
|
- <title><varname>rtpproxy_disable_tout</varname> (integer)</title>
|
|
|
|
- <para>
|
|
|
|
- Once an RTP proxy was found unreachable and marked as disabled, the rtpproxy-ng
|
|
|
|
- module will not attempt to establish communication to that RTP proxy 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-ng", "rtpproxy_disable_tout", 20)
|
|
|
|
-...
|
|
|
|
-</programlisting>
|
|
|
|
- </example>
|
|
|
|
- </section>
|
|
|
|
- <section id="rtpproxy-ng.p.rtpproxy_tout">
|
|
|
|
- <title><varname>rtpproxy_tout</varname> (integer)</title>
|
|
|
|
- <para>
|
|
|
|
- Timeout value in waiting for reply from RTP proxy.
|
|
|
|
- </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-ng", "rtpproxy_tout", 2)
|
|
|
|
-...
|
|
|
|
-</programlisting>
|
|
|
|
- </example>
|
|
|
|
- </section>
|
|
|
|
- <section id="rtpproxy-ng.p.rtpproxy_retr">
|
|
|
|
- <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-ng", "rtpproxy_retr", 2)
|
|
|
|
-...
|
|
|
|
-</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 id="rtpproxy-ng.p.extra_id_pv">
|
|
|
|
- <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-ng", "extra_id_pv", "$avp(extra_id)")
|
|
|
|
-...
|
|
|
|
-</programlisting>
|
|
|
|
- </example>
|
|
|
|
- </section>
|
|
|
|
-
|
|
|
|
- <section id="rtpproxy-ng.p.setid_pv">
|
|
|
|
- <title><varname>setid_avp</varname> (string)</title>
|
|
|
|
- <para>
|
|
|
|
- The parameter defines an AVP that, if set,
|
|
|
|
- determines which rtpproxy set
|
|
|
|
- rtpproxy_offer(), rtpproxy_answer(),
|
|
|
|
- rtpproxy_destroy(), and rtpproxy_manage()
|
|
|
|
- functions use.
|
|
|
|
- </para>
|
|
|
|
- <para>
|
|
|
|
- There is no default value.
|
|
|
|
- </para>
|
|
|
|
- <example>
|
|
|
|
- <title>Set <varname>setid_avp</varname> parameter</title>
|
|
|
|
-<programlisting format="linespecific">
|
|
|
|
-...
|
|
|
|
-modparam("rtpproxy-ng", "setid_avp", "$avp(setid)")
|
|
|
|
-...
|
|
|
|
-</programlisting>
|
|
|
|
- </example>
|
|
|
|
- </section>
|
|
|
|
-
|
|
|
|
- </section>
|
|
|
|
-
|
|
|
|
- <section>
|
|
|
|
- <title>Functions</title>
|
|
|
|
- <section id="rtpproxy-ng.f.set_rtp_proxy_set">
|
|
|
|
- <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 id="rtpproxy-ng.f.rtpproxy_offer">
|
|
|
|
- <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>offer</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>answer</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>
|
|
|
|
- For ngcp-mediaproxy-ng, these flags are used to select between IPv4
|
|
|
|
- and IPv6 addresses, corresponding to 'i' and 'e' respectively. For example,
|
|
|
|
- if the request is coming from an IPv4 host and is going to an IPv6 host,
|
|
|
|
- the flags should be specified as 'ie'.
|
|
|
|
- </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 an alternative to the 'ie' or 'ei'-flags
|
|
|
|
- in order to do automatic bridging between IPv4 on the
|
|
|
|
- "internal network" and IPv6 on the "external network". Instead of
|
|
|
|
- explicitly instructing the RTP proxy to select a particular address
|
|
|
|
- family, the distinction is done by the given IP in the SDP body by
|
|
|
|
- the RTP proxy itself. Not supported by ngcp-mediaproxy-ng.
|
|
|
|
- </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>
|
|
|
|
- <listitem><para>
|
|
|
|
- <emphasis>+</emphasis> - instructs the RTP proxy to
|
|
|
|
- discard any ICE attributes already present in the SDP body
|
|
|
|
- and then generate and insert new ICE data, leaving itself
|
|
|
|
- as the <emphasis>only</emphasis> ICE candidates. Without
|
|
|
|
- this flag, new ICE data will only be generated
|
|
|
|
- if no ICE was present in the SDP originally; otherwise
|
|
|
|
- the RTP proxy will only insert itself as an
|
|
|
|
- <emphasis>additional</emphasis> ICE candidate. Other
|
|
|
|
- SDP substitutions (c=, m=, etc) are unaffected by this flag.
|
|
|
|
- </para></listitem>
|
|
|
|
- <listitem><para>
|
|
|
|
- <emphasis>-</emphasis> - instructs the RTP proxy to discard
|
|
|
|
- any ICE attributes and not insert any new ones into the SDP.
|
|
|
|
- Mutually exclusive with the '+' flag.
|
|
|
|
- </para></listitem>
|
|
|
|
- <listitem><para>
|
|
|
|
- <emphasis>s, S, p, P</emphasis> - These flags control the RTP
|
|
|
|
- transport protocol that should be used towards the recipient of
|
|
|
|
- the SDP. If none of them are specified, the protocol given in
|
|
|
|
- the SDP is left untouched. Otherwise, the "S" flag indicates that
|
|
|
|
- SRTP should be used, while "s" indicates that SRTP should not be used.
|
|
|
|
- "P" indicates that the advanced RTCP profile with feedback messages
|
|
|
|
- should be used, and "p" indicates that the regular RTCP profile
|
|
|
|
- should be used. As such, the combinations "sp", "sP", "Sp" and "SP"
|
|
|
|
- select between RTP/AVP, RTP/AVPF, RTP/SAVP and RTP/SAVPF,
|
|
|
|
- respectively.
|
|
|
|
- </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_body("application/sdp")) {
|
|
|
|
- if (rtpproxy_offer())
|
|
|
|
- t_on_reply("1");
|
|
|
|
- } else {
|
|
|
|
- t_on_reply("2");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (is_method("ACK") && has_body("application/sdp"))
|
|
|
|
- rtpproxy_answer();
|
|
|
|
-...
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-onreply_route[1]
|
|
|
|
-{
|
|
|
|
-...
|
|
|
|
- if (has_body("application/sdp"))
|
|
|
|
- rtpproxy_answer();
|
|
|
|
-...
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-onreply_route[2]
|
|
|
|
-{
|
|
|
|
-...
|
|
|
|
- if (has_body("application/sdp"))
|
|
|
|
- rtpproxy_offer();
|
|
|
|
-...
|
|
|
|
-}
|
|
|
|
-</programlisting>
|
|
|
|
- </example>
|
|
|
|
- </section>
|
|
|
|
- <section id="rtpproxy-ng.f.rtpproxy_answer">
|
|
|
|
- <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 id="rtpproxy-ng.f.rtpproxy_destroy">
|
|
|
|
- <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 id="rtpproxy-ng.f.unforce_rtp_proxy">
|
|
|
|
- <title>
|
|
|
|
- <function moreinfo="none">unforce_rtp_proxy()</function>
|
|
|
|
- </title>
|
|
|
|
- <para>
|
|
|
|
- Same as rtpproxy_destroy().
|
|
|
|
- </para>
|
|
|
|
- </section>
|
|
|
|
-
|
|
|
|
- <section id="rtpproxy-ng.f.rtpproxy_manage">
|
|
|
|
- <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 id="rtpproxy-ng.f.start_recording">
|
|
|
|
- <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 not supported by ngcp-mediaproxy-ng 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 id="rtpproxy-ng.m.nh_enable_rtpp">
|
|
|
|
- <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 id="rtpproxy-ng.m.nh_show_rtpp">
|
|
|
|
- <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>
|
|
|
|
-
|
|
|