# &adminguide;

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

### &osips; Modules

The following modules must be loaded before this module:

- No dependencies on other &osips; modules.

### External Libraries or Applications

The following libraries or applications must be installed before running &osips; 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.

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

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

#### `encode_contact` usage

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

#### `decode_contact` usage

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

### `decode_contact_header()`

This function will decode &uri;s 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.

#### `decode_contact_header` usage

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