---
title: "mangler Module"
description: "This is a module to help with SDP mangling."
---

## Admin Guide


### 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


#### OpenSIPS Modules


The following modules must be loaded before this module:


- *No dependencies on other OpenSIPS modules*.


#### External Libraries or Applications


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


- *None*.


### Exported Parameters


#### 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 "*".*


```opensips title="Set db_url parameter"
...
modparam("mangler", "contact_flds_separator", "-")
...
```


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


### Exported Functions


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


```opensips title="sdp_mangle_ip usage"
...
sdp_mangle_ip("10.0.0.0/8","193.175.135.38");
...
```


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


```opensips title="sdp_mangle_port usage"
...
sdp_mangle_port(-12000);
...
```


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


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


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


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


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


```opensips title="decode_contact_header usage"
...
if ($ru =~ "^enc*") { decode_contact_header(); }
...
```
<!-- CONTRIBUTORS -->

### License

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