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.
144 lines
4.2 KiB
144 lines
4.2 KiB
1. Mangler Module
|
|
|
|
Gabriel Vasile
|
|
|
|
FhG FOKUS
|
|
|
|
Copyright © 2003 FhG FOKUS
|
|
__________________________________________________________________
|
|
|
|
1.1. Overview
|
|
1.2. Parameters
|
|
|
|
1.2.1. contact_flds_separator (string)
|
|
|
|
1.3. Functions
|
|
|
|
1.3.1. sdp_mangle_ip(pattern, newip)
|
|
1.3.2. sdp_mangle_port(offset)
|
|
1.3.3. encode_contact(encoding_prefix)
|
|
1.3.4. decode_contact()
|
|
1.3.5. decode_contact_header()
|
|
|
|
1.1. Overview
|
|
|
|
This is a module to help with SDP mangling. Still in testing.
|
|
|
|
1.2. Parameters
|
|
|
|
1.2.1. contact_flds_separator (string)
|
|
|
|
First char of this parameter is used as separator for encoding/decoding
|
|
Contact header.
|
|
|
|
Warning
|
|
|
|
First char of this field must be set to a value which is not used
|
|
inside username,password or other fields of contact.Otherwise it is
|
|
possible for the decoding step to fail/produce wrong results.
|
|
|
|
Default value is "*".
|
|
|
|
Example 1. Set db_url parameter
|
|
...
|
|
modparam("module", "contact_flds_separator", "-")
|
|
...
|
|
|
|
then an encoded uri might look
|
|
sip:user-password-ip-port-protocol@PublicIP
|
|
|
|
1.3. Functions
|
|
|
|
1.3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
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 :)
|
|
|
|
The function returns negative on error, or number of replacements + 1.
|
|
|
|
Meaning of the parameters is as follows:
|
|
* pattern - 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.
|
|
* newip - A string representing the new IP to be put inside SDP
|
|
package if old IP address matches pattern.
|
|
|
|
Example 2. sdp_mangle_ip usage
|
|
...
|
|
sdp_mangle_ip("10.0.0.0/8","193.175.135.38");
|
|
...
|
|
|
|
1.3.2. sdp_mangle_port(offset)
|
|
|
|
Changes ports inside SDP package in lines describing media like m=audio
|
|
13451.
|
|
|
|
The function returns negative on error, or number of replacements + 1.
|
|
|
|
Meaning of the parameters is as follows:
|
|
* offset - A string representing an integer which will be
|
|
added/subtracted from the located port.
|
|
|
|
Example 3. sdp_mangle_port usage
|
|
...
|
|
sdp_mangle_port("-12000");
|
|
...
|
|
|
|
1.3.3. encode_contact(encoding_prefix)
|
|
|
|
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.
|
|
|
|
The function returns negative on error, 1 on success.
|
|
|
|
Meaning of the parameters is as follows:
|
|
* encoding_prefix - 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.
|
|
|
|
Example 4. encode_contact usage
|
|
...
|
|
if (src_ip == 10.0.0.0/8) encode_contact("enc_prefix","193.175.135.38");
|
|
...
|
|
|
|
1.3.4. decode_contact()
|
|
|
|
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.
|
|
|
|
The function returns negative on error, 1 on success.
|
|
|
|
Meaning of the parameters is as follows:
|
|
|
|
Example 5. decode_contact usage
|
|
...
|
|
if (uri =~ "^enc*") { decode_contact(); }
|
|
...
|
|
|
|
1.3.5. decode_contact_header()
|
|
|
|
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.
|
|
|
|
The function returns negative on error, 1 on success.
|
|
|
|
Meaning of the parameters is as follows:
|
|
|
|
Example 6. decode_contact_header usage
|
|
...
|
|
if (uri =~ "^enc*") { decode_contact_header(); }
|
|
...
|