|
@@ -1,4 +1,3 @@
|
|
-
|
|
|
|
The Mangler Module - SDP mangling
|
|
The Mangler Module - SDP mangling
|
|
|
|
|
|
Gabriel Vasile
|
|
Gabriel Vasile
|
|
@@ -6,7 +5,7 @@ Gabriel Vasile
|
|
FhG FOKUS
|
|
FhG FOKUS
|
|
|
|
|
|
Copyright © 2003 FhG FOKUS
|
|
Copyright © 2003 FhG FOKUS
|
|
- _________________________________________________________________
|
|
|
|
|
|
+ __________________________________________________________________
|
|
|
|
|
|
Table of Contents
|
|
Table of Contents
|
|
|
|
|
|
@@ -19,11 +18,11 @@ Gabriel Vasile
|
|
|
|
|
|
3. Functions
|
|
3. Functions
|
|
|
|
|
|
- 3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
- 3.2. sdp_mangle_port(offset)
|
|
|
|
- 3.3. encode_contact(encoding_prefix)
|
|
|
|
- 3.4. decode_contact()
|
|
|
|
- 3.5. decode_contact_header()
|
|
|
|
|
|
+ 3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
+ 3.2. sdp_mangle_port(offset)
|
|
|
|
+ 3.3. encode_contact(encoding_prefix)
|
|
|
|
+ 3.4. decode_contact()
|
|
|
|
+ 3.5. decode_contact_header()
|
|
|
|
|
|
List of Examples
|
|
List of Examples
|
|
|
|
|
|
@@ -45,11 +44,11 @@ Chapter 1. Admin Guide
|
|
|
|
|
|
3. Functions
|
|
3. Functions
|
|
|
|
|
|
- 3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
- 3.2. sdp_mangle_port(offset)
|
|
|
|
- 3.3. encode_contact(encoding_prefix)
|
|
|
|
- 3.4. decode_contact()
|
|
|
|
- 3.5. decode_contact_header()
|
|
|
|
|
|
+ 3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
+ 3.2. sdp_mangle_port(offset)
|
|
|
|
+ 3.3. encode_contact(encoding_prefix)
|
|
|
|
+ 3.4. decode_contact()
|
|
|
|
+ 3.5. decode_contact_header()
|
|
|
|
|
|
1. Overview
|
|
1. Overview
|
|
|
|
|
|
@@ -61,16 +60,16 @@ Chapter 1. Admin Guide
|
|
|
|
|
|
2.1. contact_flds_separator (string)
|
|
2.1. contact_flds_separator (string)
|
|
|
|
|
|
- First char of this parameter is used as separator for
|
|
|
|
- encoding/decoding Contact header. If you set this parameter to "-",
|
|
|
|
- then an encoded uri might look
|
|
|
|
- sip:user-password-ip-port-protocol@PublicIP
|
|
|
|
|
|
+ First char of this parameter is used as a separator for
|
|
|
|
+ encoding/decoding Contact headers. If you set this parameter to "-",
|
|
|
|
+ then an encoded URI will look like
|
|
|
|
+ "sip:user-password-ip-port-protocol@PublicIP"
|
|
|
|
|
|
Warning
|
|
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.
|
|
|
|
|
|
+ The first character 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 "*".
|
|
Default value is "*".
|
|
|
|
|
|
@@ -81,27 +80,26 @@ modparam("mangler", "contact_flds_separator", "-")
|
|
|
|
|
|
3. Functions
|
|
3. Functions
|
|
|
|
|
|
- 3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
- 3.2. sdp_mangle_port(offset)
|
|
|
|
- 3.3. encode_contact(encoding_prefix)
|
|
|
|
- 3.4. decode_contact()
|
|
|
|
- 3.5. decode_contact_header()
|
|
|
|
|
|
+ 3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
+ 3.2. sdp_mangle_port(offset)
|
|
|
|
+ 3.3. encode_contact(encoding_prefix)
|
|
|
|
+ 3.4. decode_contact()
|
|
|
|
+ 3.5. decode_contact_header()
|
|
|
|
|
|
-3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
|
|
+3.1. sdp_mangle_ip(pattern, newip)
|
|
|
|
|
|
- Changes IP addresses inside SDP package in lines describing
|
|
|
|
- connections like c=IN IP4 . Currently this function only changes IP4
|
|
|
|
|
|
+ Changes IP addresses inside SDP document in lines describing
|
|
|
|
+ connections like c=IN IP4 . Currently this function only changes IP4
|
|
addresses since IP6 probably will not need to traverse NAT :)
|
|
addresses since IP6 probably will not need to traverse NAT :)
|
|
|
|
|
|
The function returns negative on error, or number of replacements + 1.
|
|
The function returns negative on error, or number of replacements + 1.
|
|
|
|
|
|
Meaning of the parameters is as follows:
|
|
Meaning of the parameters is as follows:
|
|
- * pattern - A ip address/mask pair used to match IP's located inside
|
|
|
|
- SDP package in lines c=IN IP4 ip. This line will only be changed
|
|
|
|
- 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
|
|
|
|
|
|
+ * pattern - An IP address/mask pair used to match IP's located inside
|
|
|
|
+ SDP package in lines c=IN IP4 ip. This line will only be changed 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.
|
|
package if old IP address matches pattern.
|
|
|
|
|
|
Example 1.2. sdp_mangle_ip usage
|
|
Example 1.2. sdp_mangle_ip usage
|
|
@@ -109,15 +107,15 @@ modparam("mangler", "contact_flds_separator", "-")
|
|
sdp_mangle_ip("10.0.0.0/8","193.175.135.38");
|
|
sdp_mangle_ip("10.0.0.0/8","193.175.135.38");
|
|
...
|
|
...
|
|
|
|
|
|
-3.2. sdp_mangle_port(offset)
|
|
|
|
|
|
+3.2. sdp_mangle_port(offset)
|
|
|
|
|
|
- Changes ports inside SDP package in lines describing media like
|
|
|
|
- m=audio 13451.
|
|
|
|
|
|
+ Changes ports in SDP document in lines starting a media section like
|
|
|
|
+ "m=audio 13451".
|
|
|
|
|
|
The function returns negative on error, or number of replacements + 1.
|
|
The function returns negative on error, or number of replacements + 1.
|
|
|
|
|
|
Meaning of the parameters is as follows:
|
|
Meaning of the parameters is as follows:
|
|
- * offset - A string representing an integer which will be
|
|
|
|
|
|
+ * offset - A string representing an integer which will be
|
|
added/subtracted from the located port.
|
|
added/subtracted from the located port.
|
|
|
|
|
|
Example 1.3. sdp_mangle_port usage
|
|
Example 1.3. sdp_mangle_port usage
|
|
@@ -125,36 +123,35 @@ sdp_mangle_ip("10.0.0.0/8","193.175.135.38");
|
|
sdp_mangle_port("-12000");
|
|
sdp_mangle_port("-12000");
|
|
...
|
|
...
|
|
|
|
|
|
-3.3. encode_contact(encoding_prefix)
|
|
|
|
|
|
+3.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. "*" (asterisk) is
|
|
|
|
- the default separator.
|
|
|
|
|
|
+ This function will encode URIs inside the "Contact" header in the
|
|
|
|
+ following manner "sip:username:password@ip:port;transport=protocol"
|
|
|
|
+ goes sip:enc_pref*username*ip*port*protocol@public_ip. "*" (asterisk)
|
|
|
|
+ is the default separator.
|
|
|
|
|
|
The function returns negative on error, 1 on success.
|
|
The function returns negative on error, 1 on success.
|
|
|
|
|
|
Meaning of the parameters is as follows:
|
|
Meaning of the parameters is as follows:
|
|
- * encoding_prefix - Something to allow us to determine that a
|
|
|
|
- contact is encoded public ip--a routable IP, most probably you
|
|
|
|
- should put your external IP of your NAT box.
|
|
|
|
|
|
+ * encoding_prefix - Something to allow us to determine that a contact
|
|
|
|
+ is encoded public IP--a routable IP, most probably you should put
|
|
|
|
+ your external IP of your NAT box.
|
|
|
|
|
|
Example 1.4. encode_contact usage
|
|
Example 1.4. encode_contact usage
|
|
...
|
|
...
|
|
if (src_ip == 10.0.0.0/8) encode_contact("enc_prefix","193.175.135.38");
|
|
if (src_ip == 10.0.0.0/8) encode_contact("enc_prefix","193.175.135.38");
|
|
...
|
|
...
|
|
|
|
|
|
-3.4. decode_contact()
|
|
|
|
|
|
+3.4. decode_contact()
|
|
|
|
|
|
- This function will decode the URI in first line in packets which come
|
|
|
|
|
|
+ This function will decode the URI in first line in packets which come
|
|
with encoded URI in the following manner
|
|
with encoded URI in the following manner
|
|
- sip:enc_pref*username*ip*port*protocol*src_ip*src_port*src_proto@publi
|
|
|
|
- c_ip;parameters is converted to
|
|
|
|
- sip:username:password@ip:port;parameters and will set destination URI
|
|
|
|
- to sip:src_ip:src_port;transport=src_proto (so that the next forward()
|
|
|
|
- or t_relay() will send the message back to src_ip:src_port using
|
|
|
|
- src_proto). It uses the default set parameter for contact encoding
|
|
|
|
- separator.
|
|
|
|
|
|
+ sip:enc_pref*username*ip*port*protocol*src_ip*src_port*src_proto@public
|
|
|
|
+ _ip;parameters is converted to sip:username:password@ip:port;parameters
|
|
|
|
+ and will set destination URI to sip:src_ip:src_port;transport=src_proto
|
|
|
|
+ (so that the next forward() or t_relay() will send the message back to
|
|
|
|
+ src_ip:src_port using src_proto). It uses the default set parameter for
|
|
|
|
+ contact encoding separator.
|
|
|
|
|
|
The function returns negative on error, 1 on success.
|
|
The function returns negative on error, 1 on success.
|
|
|
|
|
|
@@ -163,12 +160,12 @@ if (src_ip == 10.0.0.0/8) encode_contact("enc_prefix","193.175.135.38");
|
|
if (uri =~ "^enc*") { decode_contact(); }
|
|
if (uri =~ "^enc*") { decode_contact(); }
|
|
...
|
|
...
|
|
|
|
|
|
-3.5. decode_contact_header()
|
|
|
|
|
|
+3.5. decode_contact_header()
|
|
|
|
|
|
- This function will decode URIs inside Contact header in the same
|
|
|
|
- manner as decode_contact(). The difference is that no dst_uri is set
|
|
|
|
- (src_ip, src_port and src_proto are ignored) and instead of changing
|
|
|
|
- the request uri, the Contact header URI is modified. It uses the
|
|
|
|
|
|
+ This function will decode URIs inside the "Contact" header in the same
|
|
|
|
+ manner as decode_contact(). The difference is that no dst_uri is set
|
|
|
|
+ (src_ip, src_port and src_proto are ignored) and instead of changing
|
|
|
|
+ the request URI, the Contact header URI is modified. It uses the
|
|
default set parameter for contact encoding separator.
|
|
default set parameter for contact encoding separator.
|
|
|
|
|
|
The function returns negative on error, 1 on success.
|
|
The function returns negative on error, 1 on success.
|