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 (src_ip == 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 (uri =~ "^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 (uri =~ "^enc*") { decode_contact_header(); }...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) | 25 | 16 | 305 | 306 |
| 3. | Daniel-Constantin Mierla (@miconda) | 13 | 11 | 25 | 49 |
| 4. | Andrei Pelinescu-Onciul | 12 | 9 | 88 | 89 |
| 5. | Jan Janak (@janakj) | 9 | 4 | 428 | 48 |
| 6. | Henning Westerholt (@henningw) | 8 | 5 | 13 | 104 |
| 7. | Stefan Darius (@dariusstefan) | 8 | 4 | 261 | 40 |
| 8. | Razvan Crainea (@razvancrainea) | 4 | 2 | 6 | 3 |
| 9. | Jiri Kuthan (@jiriatipteldotorg) | 3 | 2 | 5 | 0 |
| 10. | Konstantin Bokarius | 3 | 1 | 2 | 5 |
All remaining contributors: 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. | Bogdan-Andrei Iancu (@bogdan-iancu) | Jul 2005 - Jan 2013 |
| 4. | Henning Westerholt (@henningw) | May 2007 - Jun 2008 |
| 5. | Daniel-Constantin Mierla (@miconda) | Sep 2003 - Mar 2008 |
| 6. | Konstantin Bokarius | Mar 2008 - Mar 2008 |
| 7. | Edson Gellert Schubert | Feb 2008 - Feb 2008 |
| 8. | Elena-Ramona Modroiu | Oct 2005 - Oct 2005 |
| 9. | Jan Janak (@janakj) | Jul 2003 - Aug 2004 |
| 10. | Andrei Pelinescu-Onciul | May 2003 - Jul 2004 |
All remaining contributors: 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), 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