Skip to content

Latest commit

 

History

History

mangler

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(); }
...