mangler Module
     __________________________________________________________

   Table of Contents

   1. Admin Guide

        1.1. Overview
        1.2. Dependencies

              1.2.1. OpenSIPS Modules
              1.2.2. External Libraries or Applications

        1.3. Exported Parameters

              1.3.1. contact_flds_separator (string)

        1.4. Exported Functions

              1.4.1. sdp_mangle_ip(pattern, newip)
              1.4.2. sdp_mangle_port(offset)
              1.4.3. encode_contact(encoding_prefix, public_ip)
              1.4.4. decode_contact()
              1.4.5. decode_contact_header()

   2. Contributors

        2.1. By Commit Statistics
        2.2. By Commit Activity

   3. Documentation

        3.1. Contributors

   List of Tables

   2.1. Top contributors by DevScore^(1), authored commits^(2) and
          lines added/removed^(3)

   2.2. Most recently active contributors^(1) to this module

   List of Examples

   1.1. Set db_url parameter
   1.2. sdp_mangle_ip usage
   1.3. sdp_mangle_port usage
   1.4. encode_contact usage
   1.5. decode_contact usage
   1.6. decode_contact_header usage

Chapter 1. Admin Guide

1.1. Overview

   This is a module to help with SDP mangling. Note: This module
   is obselete and will be removed for the 1.5.0 release.

1.2. Dependencies

1.2.1. OpenSIPS Modules

   The following modules must be loaded before this module:
     * No dependencies on other OpenSIPS modules.

1.2.2. External Libraries or Applications

   The following libraries or applications must be installed
   before running OpenSIPS with this module loaded:
     * None.

1.3. Exported Parameters

1.3.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.1. Set db_url parameter
...
modparam("mangler", "contact_flds_separator", "-")
...

   then an encoded uri might look
   sip:user-password-ip-port-protocol@PublicIP

1.4. Exported Functions

1.4.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 (string) - 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 (string) - the new IP to be put inside SDP package if
       old IP address matches pattern.

   This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE.

   Example 1.2. sdp_mangle_ip usage
...
sdp_mangle_ip("10.0.0.0/8","193.175.135.38");
...

1.4.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 (int) - an integer which will be added/subtracted
       from the located port.

   This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE.

   Example 1.3. sdp_mangle_port usage
...
sdp_mangle_port(-12000);
...

1.4.3.  encode_contact(encoding_prefix, public_ip)

   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 (string) - 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.
       public_ip (string) - The public IP which will be used in
       the encoded contact, as described by the example above.

   This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE.

   Example 1.4. encode_contact usage
...
if ($si == 10.0.0.0/8) encode_contact("enc_prefix","193.175.135.38");
...

1.4.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@public_ip goes to
   sip:username:password@ip:port;transport=protocol 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:

   This function can be used from REQUEST_ROUTE.

   Example 1.5. decode_contact usage
...
if ($ru =~ "^enc*") { decode_contact(); }
...

1.4.5.  decode_contact_header()

   This function will decode URIs inside Contact header in the
   following manner
   sip:enc_pref*username*ip*port*protocol@public_ip goes to
   sip:username:password@ip:port;transport=protocol. 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:

   This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE.

   Example 1.6. decode_contact_header usage
...
if ($ru =~ "^enc*") { decode_contact_header(); }
...

Chapter 2. Contributors

2.1. By Commit Statistics

   Table 2.1. Top contributors by DevScore^(1), authored
   commits^(2) and lines added/removed^(3)
     Name DevScore Commits Lines ++ Lines --
   1. Gabriel Vasile 50 13 3118 674
   2. Bogdan-Andrei Iancu (@bogdan-iancu) 26 20 195 198
   3. Razvan Crainea (@razvancrainea) 14 12 39 27
   4. Daniel-Constantin Mierla (@miconda) 13 11 25 49
   5. Andrei Pelinescu-Onciul 12 9 71 72
   6. Vlad Patrascu (@rvlad-patrascu) 9 6 102 108
   7. Jan Janak (@janakj) 9 4 428 48
   8. Liviu Chircu (@liviuchircu) 8 6 16 59
   9. Henning Westerholt (@henningw) 8 5 13 104
   10. Peter Lemenkov (@lemenkov) 4 2 5 6

   All remaining contributors: Jiri Kuthan (@jiriatipteldotorg),
   Walter Doekes (@wdoekes), Konstantin Bokarius, Edson Gellert
   Schubert, Elena-Ramona Modroiu.

   (1) DevScore = author_commits + author_lines_added /
   (project_lines_added / project_commits) + author_lines_deleted
   / (project_lines_deleted / project_commits)

   (2) including any documentation-related commits, excluding
   merge commits. Regarding imported patches/code, we do our best
   to count the work on behalf of the proper owner, as per the
   "fix_authors" and "mod_renames" arrays in
   opensips/doc/build-contrib.sh. If you identify any
   patches/commits which do not get properly attributed to you,
   please submit a pull request which extends "fix_authors" and/or
   "mod_renames".

   (3) ignoring whitespace edits, renamed files and auto-generated
   files

2.2. By Commit Activity

   Table 2.2. Most recently active contributors^(1) to this module
                      Name                   Commit Activity
   1.  Bogdan-Andrei Iancu (@bogdan-iancu) Jul 2005 - Apr 2020
   2.  Peter Lemenkov (@lemenkov)          Jun 2018 - Feb 2020
   3.  Razvan Crainea (@razvancrainea)     Jun 2011 - Sep 2019
   4.  Vlad Patrascu (@rvlad-patrascu)     May 2017 - Apr 2019
   5.  Liviu Chircu (@liviuchircu)         Mar 2014 - Jun 2018
   6.  Walter Doekes (@wdoekes)            Jun 2014 - Jun 2014
   7.  Henning Westerholt (@henningw)      May 2007 - Jun 2008
   8.  Daniel-Constantin Mierla (@miconda) Sep 2003 - Mar 2008
   9.  Konstantin Bokarius                 Mar 2008 - Mar 2008
   10. Edson Gellert Schubert              Feb 2008 - Feb 2008

   All remaining contributors: Elena-Ramona Modroiu, Jan Janak
   (@janakj), Andrei Pelinescu-Onciul, Jiri Kuthan
   (@jiriatipteldotorg), Gabriel Vasile.

   (1) including any documentation-related commits, excluding
   merge commits

Chapter 3. Documentation

3.1. Contributors

   Last edited by: Vlad Patrascu (@rvlad-patrascu), Peter Lemenkov
   (@lemenkov), Liviu Chircu (@liviuchircu), Bogdan-Andrei Iancu
   (@bogdan-iancu), Razvan Crainea (@razvancrainea), Henning
   Westerholt (@henningw), Daniel-Constantin Mierla (@miconda),
   Konstantin Bokarius, Edson Gellert Schubert, Elena-Ramona
   Modroiu, Jan Janak (@janakj).

   Documentation Copyrights:

   Copyright © 2003 FhG FOKUS
