Skip to content

MANGLER module

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

The following modules must be loaded before this module:

  • No dependencies on other OpenSIPS modules.

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

  • None.

First char of this parameter is used as separator for encoding/decoding Contact header.

Default value is "".*

Set db_url parameter
...
modparam("mangler", "contact_flds_separator", "-")
...

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

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.

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

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.

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

encode_contact(encoding_prefix, public_ip)

Section titled “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_prefusernameipportprotocol@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.

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

This function will decode the URI in first line in packets which come with encoded URI in the following manner sip:enc_prefusernameipportprotocol@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.

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

This function will decode URIs inside Contact header in the following manner sip:enc_prefusernameipportprotocol@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.

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

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

#NameDevScoreCommitsLines++Lines—
1.Gabriel Vasile53133191747
2.Bogdan-Andrei Iancu (@bogdan-iancu)2920310313
3.Razvan Crainea (@razvancrainea)15134129
4.Daniel-Constantin Mierla (@miconda)13112549
5.Liviu Chircu (@liviuchircu)137157200
6.Andrei Pelinescu-Onciul1298889
7.Vlad Patrascu (@rvlad-patrascu)96103109
8.Jan Janak (@janakj)9442848
9.Henning Westerholt (@henningw)8513104
10.Stefan Darius8425939

All remaining contributors: Peter Lemenkov (@lemenkov), Maksym Sobolyev (@sobomax), Jiri Kuthan (@jiriatipteldotorg), Walter Doekes (@wdoekes), Konstantin Bokarius, Edson Gellert Schubert, Elena-Ramona Modroiu, Alexandra Titoc.

(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

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

#NameCommit Activity
1.Stefan DariusJun 2026 - Jul 2026
2.Razvan Crainea (@razvancrainea)Jun 2011 - Jun 2026
3.Alexandra TitocSep 2024 - Sep 2024
4.Liviu Chircu (@liviuchircu)Mar 2014 - May 2023
5.Maksym Sobolyev (@sobomax)Feb 2023 - Feb 2023
6.Bogdan-Andrei Iancu (@bogdan-iancu)Jul 2005 - Apr 2020
7.Peter Lemenkov (@lemenkov)Jun 2018 - Feb 2020
8.Vlad Patrascu (@rvlad-patrascu)May 2017 - Apr 2019
9.Walter Doekes (@wdoekes)Jun 2014 - Jun 2014
10.Henning Westerholt (@henningw)May 2007 - Jun 2008

All remaining contributors: Daniel-Constantin Mierla (@miconda), Konstantin Bokarius, Edson Gellert Schubert, Elena-Ramona Modroiu, Jan Janak (@janakj), Andrei Pelinescu-Onciul, Jiri Kuthan (@jiriatipteldotorg), Gabriel Vasile.

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

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

All documentation files (i.e. .md extension) are licensed under the Creative Common License 4.0