mangler Module Gabriel Vasile FhG FOKUS Edited by Gabriel Vasile Copyright © 2003 Fill in here _________________________________________________________ Table of Contents 1. User's Guide 1.1. Overview 1.2. Dependencies 1.2.1. SER 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() 2. Developer's Guide 3. Frequently Asked Questions 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. User's Guide 1.1. Overview This is a module to help with SDP mangling. Still in testing. _________________________________________________________ 1.2. Dependencies 1.2.1. SER Modules The following modules must be loaded before this module: * No dependencies on other SER modules. _________________________________________________________ 1.2.2. External Libraries or Applications The following libraries or applications must be installed before running SER 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 posible for the decoding step to fail/produce wrong results. Default value is "*". Example 1-1. Set db_url parameter ... modparam("module", "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. 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/substracted from the located port. 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 succes. 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. 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 wich 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 succes. Meaning of the parameters is as follows: 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 succes. Meaning of the parameters is as follows: Example 1-6. decode_contact_header usage ... if (uri =~ "^enc*") { decode_contact_header(); } ... _________________________________________________________ Chapter 2. Developer's Guide The module does not provide any sort of API to use in other SER modules. _________________________________________________________ Chapter 3. Frequently Asked Questions 3.1. Where can I find more about SER? 3.2. Where can I post a question about this module? 3.3. How can I report a bug? 3.1. Where can I find more about SER? Take a look at http://iptel.org/ser. 3.2. Where can I post a question about this module? First at all check if your question was already answered on one of our mailing lists: * http://mail.iptel.org/mailman/listinfo/serusers * http://mail.iptel.org/mailman/listinfo/serdev E-mails regarding any stable version should be sent to and e-mail regarding development versions or CVS snapshots should be send to . If you want to keep the mail private, send it to . 3.3. How can I report a bug? Please follow the guidelines provided at: http://iptel.org/ser/bugs