mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
5.0 KiB
171 lines
5.0 KiB
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
|
|
|
<section id="mangler.functions" xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
<sectioninfo>
|
|
</sectioninfo>
|
|
|
|
<title>Functions</title>
|
|
|
|
<section id="sdp_mangle_ip">
|
|
<title>
|
|
<function>sdp_mangle_ip(pattern, newip)</function>
|
|
</title>
|
|
<para>
|
|
Changes IP addresses inside SDP package in lines describing
|
|
connections like c=IN IP4 Currently in only changes IP4 addresses
|
|
since IP6 probably will not need to traverse NAT :)
|
|
</para>
|
|
<para>
|
|
The function returns negative on error, or number of replacements + 1.
|
|
</para>
|
|
<para>Meaning of the parameters is as follows:</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>pattern</emphasis> - A pair ip/mask used to match
|
|
IP's located inside SDP package in lines c=IN IP4 ip. This
|
|
lines will only be mangled if located IP is in the network
|
|
described by this pattern. Examples of valid patterns are
|
|
"10.0.0.0/255.0.0.0" or "10.0.0.0/8" etc.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>newip</emphasis> - A string representing the new
|
|
IP to be put inside SDP package if old IP address
|
|
matches pattern.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<example>
|
|
<title><function>sdp_mangle_ip</function> usage</title>
|
|
<programlisting>
|
|
...
|
|
sdp_mangle_ip("10.0.0.0/8","193.175.135.38");
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="sdp_mangle_port">
|
|
<title>
|
|
<function>sdp_mangle_port(offset)</function>
|
|
</title>
|
|
<para>
|
|
Changes ports inside SDP package in lines describing media like
|
|
m=audio 13451.
|
|
</para>
|
|
<para>
|
|
The function returns negative on error, or number of replacements + 1.
|
|
</para>
|
|
<para>Meaning of the parameters is as follows:</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>offset</emphasis> - A string representing an
|
|
integer which will be added/subtracted from the located
|
|
port.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<example>
|
|
<title><function>sdp_mangle_port</function> usage</title>
|
|
<programlisting>
|
|
...
|
|
sdp_mangle_port("-12000");
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="encode_contact">
|
|
<title>
|
|
<function>encode_contact(encoding_prefix)</function>
|
|
</title>
|
|
<para>
|
|
This function will encode uri-s inside Contact header in the
|
|
following manner sip:username:password@ip:port;transport=protocol
|
|
goes sip:enc_pref*username*ip*port*protocol@public_ip * is the
|
|
default separator.
|
|
</para>
|
|
<para>
|
|
The function returns negative on error, 1 on success.
|
|
</para>
|
|
<para>Meaning of the parameters is as follows:</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>encoding_prefix</emphasis> - Something to allow
|
|
us to determine that a contact is encoded publicip--a
|
|
routable IP,most probably you should put your external IP
|
|
of your NAT box.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<example>
|
|
<title><function>encode_contact</function> usage</title>
|
|
<programlisting>
|
|
...
|
|
if (src_ip == 10.0.0.0/8) encode_contact("enc_prefix","193.175.135.38");
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="decode_contact">
|
|
<title>
|
|
<function>decode_contact()</function>
|
|
</title>
|
|
<para>
|
|
This function will decode the URI in first line in packets which
|
|
come with encoded URI in the following manner
|
|
sip:enc_pref*username*ip*port*protocol*src_ip*src_port*src_proto@public_ip;parameters
|
|
goes to
|
|
sip:username:password@ip:port;parameters and will set dst_uri to
|
|
sip:src_ip:src_port;transport=src_proto (so that the next forward() or
|
|
t_relay() will send the message back to src_ip:src_port using
|
|
src_proto). It uses the default set parameter for contact encoding
|
|
separator.
|
|
</para>
|
|
<para>
|
|
The function returns negative on error, 1 on success.
|
|
</para>
|
|
<para>Meaning of the parameters is as follows:</para>
|
|
<example>
|
|
<title><function>decode_contact</function> usage</title>
|
|
<programlisting>
|
|
...
|
|
if (uri =~ "^enc*") { decode_contact(); }
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="decode_contact_header">
|
|
<title>
|
|
<function>decode_contact_header()</function>
|
|
</title>
|
|
<para>
|
|
This function will decode URIs inside Contact header in the
|
|
same manner as decode_contact. The difference is no dst_uri is set
|
|
(src_ip, src_port and src_proto are ignored) and instead of changing
|
|
the request uri, the Contact header uris are modified.
|
|
It uses the default set parameter for contact encoding separator.
|
|
</para>
|
|
<para>
|
|
The function returns negative on error, 1 on success.
|
|
</para>
|
|
<para>Meaning of the parameters is as follows:</para>
|
|
<example>
|
|
<title><function>decode_contact_header</function> usage</title>
|
|
<programlisting>
|
|
...
|
|
if (uri =~ "^enc*") { decode_contact_header(); }
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
</section>
|