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

Chapter1.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 *.

Example1.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 - 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.

This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE.

Example1.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 - A string representing an integer which will be added/subtracted from the located port.

This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE.

Example1.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 - 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 - 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.

Example1.4.encode_contact usage

...
if (src_ip == 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.

Example1.5.decode_contact usage

...
if (uri =~ "^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.

Example1.6.decode_contact_header usage

...
if (uri =~ "^enc*") { decode_contact_header(); }
...

Chapter2.Contributors

2.1.By Commit Statistics

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

NameDevScoreCommitsLines ++Lines --
1. Gabriel Vasile51133118674
2. Bogdan-Andrei Iancu (@bogdan-iancu)2519193197
3. Daniel-Constantin Mierla (@miconda)13112549
4. Andrei Pelinescu-Onciul1297172
5. Jan Janak (@janakj)9442848
6. Henning Westerholt (@henningw)8513104
7. Razvan Crainea (@razvancrainea)642320
8. Liviu Chircu (@liviuchircu)64649
9. Jiri Kuthan (@jiriatipteldotorg)3250
10. Walter Doekes (@wdoekes)311716

All remaining contributors: 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

Table2.2.Most recently active contributors(1) to this module

NameCommit Activity
1. Bogdan-Andrei Iancu (@bogdan-iancu)Jul 2005 - Jun 2018
2. Liviu Chircu (@liviuchircu)Mar 2014 - Jun 2018
3. Razvan Crainea (@razvancrainea)Jun 2011 - Aug 2016
4. Walter Doekes (@wdoekes)Jun 2014 - Jun 2014
5. Henning Westerholt (@henningw)May 2007 - Jun 2008
6. Daniel-Constantin Mierla (@miconda)Sep 2003 - Mar 2008
7. Konstantin BokariusMar 2008 - Mar 2008
8. Edson Gellert SchubertFeb 2008 - Feb 2008
9. Elena-Ramona ModroiuOct 2005 - Oct 2005
10. Jan Janak (@janakj)Jul 2003 - Aug 2004

All remaining contributors: Andrei Pelinescu-Onciul, Jiri Kuthan (@jiriatipteldotorg), Gabriel Vasile.

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

Chapter3.Documentation

3.1.Contributors

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

doc copyrights:

Copyright 2003 FhG FOKUS