MANGLER module
Admin Guide
Section titled “Admin Guide”Overview
Section titled “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.
Dependencies
Section titled “Dependencies”OpenSIPS Modules
Section titled “OpenSIPS Modules”The following modules must be loaded before this module:
- No dependencies on other OpenSIPS modules.
External Libraries or Applications
Section titled “External Libraries or Applications”The following libraries or applications must be installed before running OpenSIPS with this module loaded:
- None.
Exported Parameters
Section titled “Exported Parameters”contact_flds_separator (string)
Section titled “contact_flds_separator (string)”First char of this parameter is used as separator for encoding/decoding Contact header.
Default value is "".*
...modparam("mangler", "contact_flds_separator", "-")...then an encoded uri might look sip:user-password-ip-port-protocol@PublicIP
Exported Functions
Section titled “Exported Functions”sdp_mangle_ip(pattern, newip)
Section titled “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.
...sdp_mangle_ip("10.0.0.0/8","193.175.135.38");...sdp_mangle_port(offset)
Section titled “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.
...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 - 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.
...if ($si == 10.0.0.0/8) encode_contact("enc_prefix","193.175.135.38");...decode_contact()
Section titled “decode_contact()”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.
...if ($ru =~ "^enc*") { decode_contact(); }...decode_contact_header()
Section titled “decode_contact_header()”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.
...if ($ru =~ "^enc*") { decode_contact_header(); }...doc copyrights:
Contributors
Section titled “Contributors”By Commit Statistics
Section titled “By Commit Statistics”Top contributors by DevScore(1), authored commits(2) and lines added/removed(3)
| # | Name | DevScore | Commits | Lines++ | Lines— |
|---|---|---|---|---|---|
| 1. | Gabriel Vasile | 53 | 13 | 3191 | 747 |
| 2. | Bogdan-Andrei Iancu (@bogdan-iancu) | 28 | 19 | 308 | 312 |
| 3. | Razvan Crainea (@razvancrainea) | 15 | 13 | 41 | 29 |
| 4. | Daniel-Constantin Mierla (@miconda) | 13 | 11 | 25 | 49 |
| 5. | Andrei Pelinescu-Onciul | 12 | 9 | 88 | 89 |
| 6. | Liviu Chircu (@liviuchircu) | 12 | 6 | 156 | 199 |
| 7. | Jan Janak (@janakj) | 9 | 4 | 428 | 48 |
| 8. | Henning Westerholt (@henningw) | 8 | 5 | 13 | 104 |
| 9. | Stefan Darius (@dariusstefan) | 8 | 4 | 264 | 40 |
| 10. | Vlad Patrascu (@rvlad-patrascu) | 6 | 4 | 40 | 22 |
All remaining contributors: Jiri Kuthan (@jiriatipteldotorg), Walter Doekes (@wdoekes), Peter Lemenkov (@lemenkov), 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
(3) ignoring whitespace edits, renamed files and auto-generated files
By Commit Activity
Section titled “By Commit Activity”| # | Name | Commit Activity |
|---|---|---|
| 1. | Stefan Darius (@dariusstefan) | Jun 2026 - Jul 2026 |
| 2. | Razvan Crainea (@razvancrainea) | Jun 2011 - Jun 2026 |
| 3. | Peter Lemenkov (@lemenkov) | Feb 2020 - Feb 2020 |
| 4. | Bogdan-Andrei Iancu (@bogdan-iancu) | Jul 2005 - Jun 2018 |
| 5. | Liviu Chircu (@liviuchircu) | Mar 2014 - Jun 2018 |
| 6. | Vlad Patrascu (@rvlad-patrascu) | May 2017 - Jan 2018 |
| 7. | Walter Doekes (@wdoekes) | Jun 2014 - Jun 2014 |
| 8. | Henning Westerholt (@henningw) | May 2007 - Jun 2008 |
| 9. | Daniel-Constantin Mierla (@miconda) | Sep 2003 - Mar 2008 |
| 10. | Konstantin Bokarius | Mar 2008 - Mar 2008 |
All remaining contributors: 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
Documentation
Section titled “Documentation”Contributors
Section titled “Contributors”Last edited by: Razvan Crainea (@razvancrainea), Bogdan-Andrei Iancu (@bogdan-iancu), Liviu Chircu (@liviuchircu), Vlad Patrascu (@rvlad-patrascu), Henning Westerholt (@henningw), Daniel-Constantin Mierla (@miconda), Konstantin Bokarius, Edson Gellert Schubert, Elena-Ramona Modroiu, Jan Janak (@janakj).
License
Section titled “License”All documentation files (i.e. .md extension) are licensed under the Creative Common License 4.0