mangler Module Gabriel Vasile FhG FOKUS Edited by Gabriel Vasile Copyright © 2003 Fill in here Revision History Revision $Revision: 5906 $ $Date: 2009-07-21 10:45:05 +0300 (Tue, 21 Jul 2009) $ __________________________________________________________ Table of Contents 1. Admin Guide 1.1. Overview 1.2. Dependencies 1.2.1. OpenSIPS Modules 1.2.2. External Libraries or Applications 1.3. Exported Parameters 1.3.1. contact_flds_separator (string) 1.4. Exported Functions 1.4.1. sdp_mangle_ip(pattern, newip) 1.4.2. sdp_mangle_port(offset) 1.4.3. encode_contact(encoding_prefix) 1.4.4. decode_contact() 1.4.5. decode_contact_header() List of Examples 1.1. Set db_url parameter 1.2. sdp_mangle_ip usage 1.3. sdp_mangle_port usage 1.4. encode_contact usage 1.5. decode_contact usage 1.6. decode_contact_header usage Chapter 1. Admin Guide 1.1. 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. 1.2. Dependencies 1.2.1. OpenSIPS Modules The following modules must be loaded before this module: * No dependencies on other OpenSIPS modules. 1.2.2. External Libraries or Applications The following libraries or applications must be installed before running OpenSIPS with this module loaded: * None. 1.3. Exported Parameters 1.3.1. 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 "*". Example 1.1. Set db_url parameter ... modparam("mangler", "contact_flds_separator", "-") ... then an encoded uri might look sip:user-password-ip-port-protocol@PublicIP 1.4. Exported Functions 1.4.1. 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. Example 1.2. sdp_mangle_ip usage ... sdp_mangle_ip("10.0.0.0/8","193.175.135.38"); ... 1.4.2. 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. Example 1.3. sdp_mangle_port usage ... sdp_mangle_port("-12000"); ... 1.4.3. encode_contact(encoding_prefix) 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. This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE. Example 1.4. encode_contact usage ... if (src_ip == 10.0.0.0/8) encode_contact("enc_prefix","193.175.135.38"); ... 1.4.4. 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. Example 1.5. decode_contact usage ... if (uri =~ "^enc*") { decode_contact(); } ... 1.4.5. 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. Example 1.6. decode_contact_header usage ... if (uri =~ "^enc*") { decode_contact_header(); } ...