|
@@ -1,898 +1,2 @@
|
|
-siputils
|
|
|
|
|
|
|
|
-Hardy Kahl
|
|
|
|
|
|
|
|
- 1&1 Internet AG
|
|
|
|
-
|
|
|
|
-Henning Westerholt
|
|
|
|
-
|
|
|
|
- 1&1 Internet AG
|
|
|
|
-
|
|
|
|
-Nils Ohlmeier
|
|
|
|
-
|
|
|
|
- FhG Fokus
|
|
|
|
-
|
|
|
|
-Jan Janak
|
|
|
|
-
|
|
|
|
- FhG FOKUS
|
|
|
|
-
|
|
|
|
-Daniel-Constantin Mierla
|
|
|
|
-
|
|
|
|
- asipto.com
|
|
|
|
-
|
|
|
|
-Gabriel Vasile
|
|
|
|
-
|
|
|
|
- FhG FOKUS
|
|
|
|
-
|
|
|
|
-Juha Heinanen
|
|
|
|
-
|
|
|
|
- TutPro Inc.
|
|
|
|
-
|
|
|
|
-Edited by
|
|
|
|
-
|
|
|
|
-Jan Janak
|
|
|
|
-
|
|
|
|
-Edited by
|
|
|
|
-
|
|
|
|
-Bogdan-Andrei Iancu
|
|
|
|
-
|
|
|
|
-Edited by
|
|
|
|
-
|
|
|
|
-Gabriel Vasile
|
|
|
|
-
|
|
|
|
- Copyright © 2008, 2005, 2003 1&1 Internet AG, FhG Fokus, Voice Sistem
|
|
|
|
- SRL
|
|
|
|
- __________________________________________________________________
|
|
|
|
-
|
|
|
|
- Table of Contents
|
|
|
|
-
|
|
|
|
- 1. Admin Guide
|
|
|
|
-
|
|
|
|
- 1. Overview
|
|
|
|
- 2. Dependencies
|
|
|
|
-
|
|
|
|
- 2.1. Kamailio Modules
|
|
|
|
- 2.2. External Libraries or Applications
|
|
|
|
-
|
|
|
|
- 3. Parameters
|
|
|
|
-
|
|
|
|
- 3.1. ring_timeout (int)
|
|
|
|
- 3.2. options_accept (string)
|
|
|
|
- 3.3. options_accept_encoding (string)
|
|
|
|
- 3.4. contact_flds_separator (string)
|
|
|
|
- 3.5. options_accept_language (string)
|
|
|
|
- 3.6. options_support (string)
|
|
|
|
- 3.7. rpid_prefix (string)
|
|
|
|
- 3.8. rpid_suffix (string)
|
|
|
|
- 3.9. rpid_avp (string)
|
|
|
|
-
|
|
|
|
- 4. Functions
|
|
|
|
-
|
|
|
|
- 4.1. ring_insert_callid()
|
|
|
|
- 4.2. options_reply()
|
|
|
|
- 4.3. is_user(username)
|
|
|
|
- 4.4. has_totag()
|
|
|
|
- 4.5. uri_param(param)
|
|
|
|
- 4.6. uri_param(param,value)
|
|
|
|
- 4.7. add_uri_param(param)
|
|
|
|
- 4.8. get_uri_param(name, var)
|
|
|
|
- 4.9. tel2sip(uri, hostpart, result)
|
|
|
|
- 4.10. is_e164(pseudo-variable)
|
|
|
|
- 4.11. is_uri_user_e164(pseudo-variable)
|
|
|
|
- 4.12. is_tel_number(tval)
|
|
|
|
- 4.13. is_numeric(tval)
|
|
|
|
- 4.14. encode_contact(encoding_prefix,hostpart)
|
|
|
|
- 4.15. decode_contact()
|
|
|
|
- 4.16. decode_contact_header()
|
|
|
|
- 4.17. cmp_uri(str1, str2)
|
|
|
|
- 4.18. cmp_aor(str1, str2)
|
|
|
|
- 4.19. append_rpid_hf()
|
|
|
|
- 4.20. append_rpid_hf(prefix, suffix)
|
|
|
|
- 4.21. is_rpid_user_e164()
|
|
|
|
- 4.22. set_uri_user(uri, user)
|
|
|
|
- 4.23. set_uri_host(uri, host)
|
|
|
|
- 4.24. is_request()
|
|
|
|
- 4.25. is_reply()
|
|
|
|
- 4.26. is_gruu([uri])
|
|
|
|
- 4.27. is_supported(option)
|
|
|
|
- 4.28. is_first_hop()
|
|
|
|
- 4.29. sip_p_charging_vector(flags)
|
|
|
|
-
|
|
|
|
- List of Examples
|
|
|
|
-
|
|
|
|
- 1.1. Set ring_timeout parameter
|
|
|
|
- 1.2. Set options_accept parameter
|
|
|
|
- 1.3. Set options_accept_encoding parameter
|
|
|
|
- 1.4. Set contact_flds_separator parameter
|
|
|
|
- 1.5. Set options_accept_language parameter
|
|
|
|
- 1.6. Set options_support parameter
|
|
|
|
- 1.7. rpid_prefix parameter example
|
|
|
|
- 1.8. rpid_suffix parameter example
|
|
|
|
- 1.9. rpid_avp parameter example
|
|
|
|
- 1.10. ring_insert_callid() usage
|
|
|
|
- 1.11. options_reply usage
|
|
|
|
- 1.12. is_user usage
|
|
|
|
- 1.13. has_totag usage
|
|
|
|
- 1.14. uri_param usage
|
|
|
|
- 1.15. uri_param usage
|
|
|
|
- 1.16. add_uri_param usage
|
|
|
|
- 1.17. add_uri_param usage
|
|
|
|
- 1.18. tel2sip usage
|
|
|
|
- 1.19. is_e164 usage
|
|
|
|
- 1.20. is_uri_user_e164 usage
|
|
|
|
- 1.21. is_tel_number usage
|
|
|
|
- 1.22. is_numeric usage
|
|
|
|
- 1.23. encode_contact usage
|
|
|
|
- 1.24. decode_contact usage
|
|
|
|
- 1.25. decode_contact_header usage
|
|
|
|
- 1.26. cmp_uri usage
|
|
|
|
- 1.27. cmp_aor usage
|
|
|
|
- 1.28. append_rpid_hf usage
|
|
|
|
- 1.29. append_rpid_hf(prefix, suffix) usage
|
|
|
|
- 1.30. is_rpid_user_e164 usage
|
|
|
|
- 1.31. set_uri_user usage
|
|
|
|
- 1.32. set_uri_host usage
|
|
|
|
- 1.33. is_request usage
|
|
|
|
- 1.34. is_reply usage
|
|
|
|
- 1.35. is_gruu() usage
|
|
|
|
- 1.36. is_supported() usage
|
|
|
|
- 1.37. is_first_hop() usage
|
|
|
|
- 1.38. sip_p_charging_vector() usage
|
|
|
|
-
|
|
|
|
-Chapter 1. Admin Guide
|
|
|
|
-
|
|
|
|
- Table of Contents
|
|
|
|
-
|
|
|
|
- 1. Overview
|
|
|
|
- 2. Dependencies
|
|
|
|
-
|
|
|
|
- 2.1. Kamailio Modules
|
|
|
|
- 2.2. External Libraries or Applications
|
|
|
|
-
|
|
|
|
- 3. Parameters
|
|
|
|
-
|
|
|
|
- 3.1. ring_timeout (int)
|
|
|
|
- 3.2. options_accept (string)
|
|
|
|
- 3.3. options_accept_encoding (string)
|
|
|
|
- 3.4. contact_flds_separator (string)
|
|
|
|
- 3.5. options_accept_language (string)
|
|
|
|
- 3.6. options_support (string)
|
|
|
|
- 3.7. rpid_prefix (string)
|
|
|
|
- 3.8. rpid_suffix (string)
|
|
|
|
- 3.9. rpid_avp (string)
|
|
|
|
-
|
|
|
|
- 4. Functions
|
|
|
|
-
|
|
|
|
- 4.1. ring_insert_callid()
|
|
|
|
- 4.2. options_reply()
|
|
|
|
- 4.3. is_user(username)
|
|
|
|
- 4.4. has_totag()
|
|
|
|
- 4.5. uri_param(param)
|
|
|
|
- 4.6. uri_param(param,value)
|
|
|
|
- 4.7. add_uri_param(param)
|
|
|
|
- 4.8. get_uri_param(name, var)
|
|
|
|
- 4.9. tel2sip(uri, hostpart, result)
|
|
|
|
- 4.10. is_e164(pseudo-variable)
|
|
|
|
- 4.11. is_uri_user_e164(pseudo-variable)
|
|
|
|
- 4.12. is_tel_number(tval)
|
|
|
|
- 4.13. is_numeric(tval)
|
|
|
|
- 4.14. encode_contact(encoding_prefix,hostpart)
|
|
|
|
- 4.15. decode_contact()
|
|
|
|
- 4.16. decode_contact_header()
|
|
|
|
- 4.17. cmp_uri(str1, str2)
|
|
|
|
- 4.18. cmp_aor(str1, str2)
|
|
|
|
- 4.19. append_rpid_hf()
|
|
|
|
- 4.20. append_rpid_hf(prefix, suffix)
|
|
|
|
- 4.21. is_rpid_user_e164()
|
|
|
|
- 4.22. set_uri_user(uri, user)
|
|
|
|
- 4.23. set_uri_host(uri, host)
|
|
|
|
- 4.24. is_request()
|
|
|
|
- 4.25. is_reply()
|
|
|
|
- 4.26. is_gruu([uri])
|
|
|
|
- 4.27. is_supported(option)
|
|
|
|
- 4.28. is_first_hop()
|
|
|
|
- 4.29. sip_p_charging_vector(flags)
|
|
|
|
-
|
|
|
|
-1. Overview
|
|
|
|
-
|
|
|
|
- This module implement various functions and checks related to SIP
|
|
|
|
- message handling and URI handling.
|
|
|
|
-
|
|
|
|
- It offers some functions related to handle ringing. In a parallel
|
|
|
|
- forking scenario you get several 183s with SDP. You don't want that
|
|
|
|
- your customers hear more than one ringtone or answer machine in
|
|
|
|
- parallel on the phone. So its necessary to drop the 183 in this cases
|
|
|
|
- and send a 180 instead.
|
|
|
|
-
|
|
|
|
- This module also provides a function to answer OPTIONS requests which
|
|
|
|
- are directed to the server itself. This means an OPTIONS request which
|
|
|
|
- has the address of the server in the request URI, and no username in
|
|
|
|
- the URI. The request will be answered with a 200 OK with the
|
|
|
|
- capabilities of the server.
|
|
|
|
-
|
|
|
|
- To answer OPTIONS request directed to your server is the easiest way
|
|
|
|
- for is-alive-tests on the SIP (application) layer from remote (similar
|
|
|
|
- to ICMP echo requests, also known as “ping”, on the network layer).
|
|
|
|
-
|
|
|
|
-2. Dependencies
|
|
|
|
-
|
|
|
|
- 2.1. Kamailio Modules
|
|
|
|
- 2.2. External Libraries or Applications
|
|
|
|
-
|
|
|
|
-2.1. Kamailio Modules
|
|
|
|
-
|
|
|
|
- The following modules must be loaded before this module:
|
|
|
|
- * sl -- Stateless replies.
|
|
|
|
-
|
|
|
|
-2.2. External Libraries or Applications
|
|
|
|
-
|
|
|
|
- The following libraries or applications must be installed before
|
|
|
|
- running Kamailio with this module loaded:
|
|
|
|
- * None.
|
|
|
|
-
|
|
|
|
-3. Parameters
|
|
|
|
-
|
|
|
|
- 3.1. ring_timeout (int)
|
|
|
|
- 3.2. options_accept (string)
|
|
|
|
- 3.3. options_accept_encoding (string)
|
|
|
|
- 3.4. contact_flds_separator (string)
|
|
|
|
- 3.5. options_accept_language (string)
|
|
|
|
- 3.6. options_support (string)
|
|
|
|
- 3.7. rpid_prefix (string)
|
|
|
|
- 3.8. rpid_suffix (string)
|
|
|
|
- 3.9. rpid_avp (string)
|
|
|
|
-
|
|
|
|
-3.1. ring_timeout (int)
|
|
|
|
-
|
|
|
|
- Timeout value in seconds, define how long the call-id is stored in the
|
|
|
|
- internal list kept for replacing 183 messages with 180. A reasonable
|
|
|
|
- value is “30”.
|
|
|
|
-
|
|
|
|
- Default value is “0”. This means functionality is disabled.
|
|
|
|
-
|
|
|
|
- Example 1.1. Set ring_timeout parameter
|
|
|
|
-...
|
|
|
|
-modparam("siputils", "ring_timeout", 30)
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-3.2. options_accept (string)
|
|
|
|
-
|
|
|
|
- This parameter is the content of the Accept header field. Note: it is
|
|
|
|
- not clearly written in RFC3261 if a proxy should accept any content
|
|
|
|
- (the default “*/*”) because it does not care about content. Or if it
|
|
|
|
- does not accept any content, which is “”.
|
|
|
|
-
|
|
|
|
- Default value is “*/*”.
|
|
|
|
-
|
|
|
|
- Example 1.2. Set options_accept parameter
|
|
|
|
-...
|
|
|
|
-modparam("siputils", "options_accept", "application/*")
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-3.3. options_accept_encoding (string)
|
|
|
|
-
|
|
|
|
- This parameter is the content of the Accept-Encoding header field.
|
|
|
|
- Please do not change the default value because Kamailio does not
|
|
|
|
- support any encodings yet.
|
|
|
|
-
|
|
|
|
- Default value is “”.
|
|
|
|
-
|
|
|
|
- Example 1.3. Set options_accept_encoding parameter
|
|
|
|
-...
|
|
|
|
-modparam("siputils", "options_accept_encoding", "gzip")
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-3.4. 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.4. Set contact_flds_separator parameter
|
|
|
|
-...
|
|
|
|
-modparam("siputils", "contact_flds_separator", "-")
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
- then an encoded uri might look
|
|
|
|
- sip:user-password-ip-port-protocol@PublicIP
|
|
|
|
-
|
|
|
|
-3.5. options_accept_language (string)
|
|
|
|
-
|
|
|
|
- This parameter is the content of the Accept-Language header field. You
|
|
|
|
- can set any language code which you prefer for error descriptions from
|
|
|
|
- other devices, but presumably there are not many devices around which
|
|
|
|
- support other languages than the default English.
|
|
|
|
-
|
|
|
|
- Default value is “en”.
|
|
|
|
-
|
|
|
|
- Example 1.5. Set options_accept_language parameter
|
|
|
|
-...
|
|
|
|
-modparam("siputils", "options_accept_language", "de")
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-3.6. options_support (string)
|
|
|
|
-
|
|
|
|
- This parameter is the content of the Support header field, indicating
|
|
|
|
- SIP extensions. Please do not change the default value, because
|
|
|
|
- Kamailio currently does not support any of the SIP extensions
|
|
|
|
- registered at the IANA.
|
|
|
|
-
|
|
|
|
- Default value is “”.
|
|
|
|
-
|
|
|
|
- Example 1.6. Set options_support parameter
|
|
|
|
-...
|
|
|
|
-modparam("siputils", "options_support", "100rel")
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-3.7. rpid_prefix (string)
|
|
|
|
-
|
|
|
|
- Prefix to be added to Remote-Party-ID header field just before the URI
|
|
|
|
- returned from either radius or database.
|
|
|
|
-
|
|
|
|
- Default value is “”.
|
|
|
|
-
|
|
|
|
- Example 1.7. rpid_prefix parameter example
|
|
|
|
-modparam("auth", "rpid_prefix", "Whatever <")
|
|
|
|
-
|
|
|
|
-3.8. rpid_suffix (string)
|
|
|
|
-
|
|
|
|
- Suffix to be added to Remote-Party-ID header field after the URI
|
|
|
|
- returned from either radius or database.
|
|
|
|
-
|
|
|
|
- Default value is “;party=calling;id-type=subscriber;screen=yes”.
|
|
|
|
-
|
|
|
|
- Example 1.8. rpid_suffix parameter example
|
|
|
|
-modparam("auth", "rpid_suffix", "@1.2.3.4>")
|
|
|
|
-
|
|
|
|
-3.9. rpid_avp (string)
|
|
|
|
-
|
|
|
|
- Full AVP specification for the AVP which stores the RPID value. It used
|
|
|
|
- to transport the RPID value from authentication backend modules
|
|
|
|
- (auth_db or auth_radius) or from script to the auth function
|
|
|
|
- append_rpid_hf and is_rpid_user_e164.
|
|
|
|
-
|
|
|
|
- If defined to NULL string, all RPID functions will fail at runtime.
|
|
|
|
-
|
|
|
|
- Default value is “$avp(s:rpid)”.
|
|
|
|
-
|
|
|
|
- Example 1.9. rpid_avp parameter example
|
|
|
|
-modparam("auth", "rpid_avp", "$avp(myrpid)")
|
|
|
|
-
|
|
|
|
-4. Functions
|
|
|
|
-
|
|
|
|
- 4.1. ring_insert_callid()
|
|
|
|
- 4.2. options_reply()
|
|
|
|
- 4.3. is_user(username)
|
|
|
|
- 4.4. has_totag()
|
|
|
|
- 4.5. uri_param(param)
|
|
|
|
- 4.6. uri_param(param,value)
|
|
|
|
- 4.7. add_uri_param(param)
|
|
|
|
- 4.8. get_uri_param(name, var)
|
|
|
|
- 4.9. tel2sip(uri, hostpart, result)
|
|
|
|
- 4.10. is_e164(pseudo-variable)
|
|
|
|
- 4.11. is_uri_user_e164(pseudo-variable)
|
|
|
|
- 4.12. is_tel_number(tval)
|
|
|
|
- 4.13. is_numeric(tval)
|
|
|
|
- 4.14. encode_contact(encoding_prefix,hostpart)
|
|
|
|
- 4.15. decode_contact()
|
|
|
|
- 4.16. decode_contact_header()
|
|
|
|
- 4.17. cmp_uri(str1, str2)
|
|
|
|
- 4.18. cmp_aor(str1, str2)
|
|
|
|
- 4.19. append_rpid_hf()
|
|
|
|
- 4.20. append_rpid_hf(prefix, suffix)
|
|
|
|
- 4.21. is_rpid_user_e164()
|
|
|
|
- 4.22. set_uri_user(uri, user)
|
|
|
|
- 4.23. set_uri_host(uri, host)
|
|
|
|
- 4.24. is_request()
|
|
|
|
- 4.25. is_reply()
|
|
|
|
- 4.26. is_gruu([uri])
|
|
|
|
- 4.27. is_supported(option)
|
|
|
|
- 4.28. is_first_hop()
|
|
|
|
- 4.29. sip_p_charging_vector(flags)
|
|
|
|
-
|
|
|
|
-4.1. ring_insert_callid()
|
|
|
|
-
|
|
|
|
- Inserting the call-id in the internal list, which is checked when
|
|
|
|
- further replies arrive. Any 183 reply that is received during the
|
|
|
|
- timeout value will be converted to a 180 message. Please note that you
|
|
|
|
- need to set a positive timeout value in order to use this function.
|
|
|
|
-
|
|
|
|
- The function returns TRUE on success, and FALSE during processing
|
|
|
|
- failures.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.10. ring_insert_callid() usage
|
|
|
|
-...
|
|
|
|
-ring_insert_callid();
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.2. options_reply()
|
|
|
|
-
|
|
|
|
- This function checks if the request method is OPTIONS and if the
|
|
|
|
- request URI does not contain an username. If both is true the request
|
|
|
|
- will be answered stateless with “200 OK” and the capabilities from the
|
|
|
|
- modules parameters.
|
|
|
|
-
|
|
|
|
- It sends “500 Server Internal Error” for some errors and returns false
|
|
|
|
- if it is called for a wrong request.
|
|
|
|
-
|
|
|
|
- The check for the request method and the missing username is optional
|
|
|
|
- because it is also done by the function itself. But you should not call
|
|
|
|
- this function outside the myself check because in this case the
|
|
|
|
- function could answer OPTIONS requests which are sent to you as
|
|
|
|
- outbound proxy but with an other destination then your proxy (this
|
|
|
|
- check is currently missing in the function).
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.11. options_reply usage
|
|
|
|
-...
|
|
|
|
-if (uri==myself) {
|
|
|
|
- if ((method==OPTIONS) && (! uri=~"sip:.*[@]+.*")) {
|
|
|
|
- options_reply();
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.3. is_user(username)
|
|
|
|
-
|
|
|
|
- Check if the username in credentials matches the given username.
|
|
|
|
-
|
|
|
|
- Meaning of the parameters is as follows:
|
|
|
|
- * username - Username string.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.12. is_user usage
|
|
|
|
-...
|
|
|
|
-if (is_user("john")) {
|
|
|
|
- ...
|
|
|
|
-};
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.4. has_totag()
|
|
|
|
-
|
|
|
|
- Check if To header field uri contains tag parameter.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.13. has_totag usage
|
|
|
|
-...
|
|
|
|
-if (has_totag()) {
|
|
|
|
- ...
|
|
|
|
-};
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.5. uri_param(param)
|
|
|
|
-
|
|
|
|
- Find if Request URI has a given parameter with no value
|
|
|
|
-
|
|
|
|
- Meaning of the parameters is as follows:
|
|
|
|
- * param - parameter name to look for.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.14. uri_param usage
|
|
|
|
-...
|
|
|
|
-if (uri_param("param1")) {
|
|
|
|
- ...
|
|
|
|
-};
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.6. uri_param(param,value)
|
|
|
|
-
|
|
|
|
- Find if Request URI has a given parameter with matching value
|
|
|
|
-
|
|
|
|
- Meaning of the parameters is as follows:
|
|
|
|
- * param - parameter name to look for.
|
|
|
|
- * value - parameter value to match.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.15. uri_param usage
|
|
|
|
-...
|
|
|
|
-if (uri_param("param1","value1")) {
|
|
|
|
- ...
|
|
|
|
-};
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.7. add_uri_param(param)
|
|
|
|
-
|
|
|
|
- Add to RURI a parameter (name=value);
|
|
|
|
-
|
|
|
|
- Meaning of the parameters is as follows:
|
|
|
|
- * param - parameter to be appended in “name=value” format.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.16. add_uri_param usage
|
|
|
|
-...
|
|
|
|
-add_uri_param("nat=yes");
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.8. get_uri_param(name, var)
|
|
|
|
-
|
|
|
|
- Get the value of RURI parameter.
|
|
|
|
-
|
|
|
|
- Meaning of the parameters is as follows:
|
|
|
|
- * name - the name of R-URI parameter
|
|
|
|
- * var - the variable where to store the value of the parameter
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.17. add_uri_param usage
|
|
|
|
-...
|
|
|
|
-get_uri_param("nat", "$var(nat)");
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.9. tel2sip(uri, hostpart, result)
|
|
|
|
-
|
|
|
|
- Converts URI in first param (pseudo variable or string) to SIP URI, if
|
|
|
|
- it is a tel URI. If conversion was done, writes resulting SIP URI to
|
|
|
|
- third param (pseudo variable). Returns 1 if conversion succeeded or if
|
|
|
|
- no conversion was needed.
|
|
|
|
-
|
|
|
|
- The conversion follows the rules in RFC 3261 section 19.1.6:
|
|
|
|
- * Visual separators ( "-", ".", "(", ")" ) are removed from tel URI
|
|
|
|
- number before converting it to SIP URI userinfo.
|
|
|
|
- * tel URI parameters are downcased before appending them to SIP URI
|
|
|
|
- userinfo
|
|
|
|
-
|
|
|
|
- The SIP URI hostpart is taken from second param (pseudo variable or
|
|
|
|
- string).
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
|
|
|
|
- BRANCH_ROUTE, or ONREPLY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.18. tel2sip usage
|
|
|
|
-...
|
|
|
|
-# $ru: tel:+(34)-999-888-777
|
|
|
|
-# $fu: sip:[email protected]
|
|
|
|
-tel2sip("$ru", $fd", "$ru");
|
|
|
|
-# $ru: sip:[email protected];user=phone
|
|
|
|
-
|
|
|
|
-# $ru: tel:+12-(34)-56-78;Ext=200;ISUB=+123-456
|
|
|
|
-# $fu: sip:[email protected]
|
|
|
|
-tel2sip("$ru", $fd", "$ru");
|
|
|
|
-# $ru: sip:+12345678;ext=200;[email protected];user=phone
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.10. is_e164(pseudo-variable)
|
|
|
|
-
|
|
|
|
- Checks if string value of pseudo variable argument is an E164 number.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, and
|
|
|
|
- LOCAL_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.19. is_e164 usage
|
|
|
|
-...
|
|
|
|
-if (is_164("$fU")) { # Check From header URI user part
|
|
|
|
- ...
|
|
|
|
-}
|
|
|
|
-if (is_e164("$avp(i:705)") {
|
|
|
|
- # Check stgring value stored in avp i:705
|
|
|
|
- ...
|
|
|
|
-};
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.11. is_uri_user_e164(pseudo-variable)
|
|
|
|
-
|
|
|
|
- Checks if userpart of URI stored in pseudo variable is E164 number.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.20. is_uri_user_e164 usage
|
|
|
|
-...
|
|
|
|
-if (is_uri_user_e164("$fu")) { # Check From header URI user part
|
|
|
|
- ...
|
|
|
|
-}
|
|
|
|
-if (is_uri_user_e164("$avp(i:705)") {
|
|
|
|
- # Check user part of URI stored in avp i:705
|
|
|
|
- ...
|
|
|
|
-};
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.12. is_tel_number(tval)
|
|
|
|
-
|
|
|
|
- Checks if the parameter value is a telephone number: starting with one
|
|
|
|
- optional +, followed by digits. The parameter can include variables.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.21. is_tel_number usage
|
|
|
|
-...
|
|
|
|
-if (is_tel_number("$rU")) { # Test if R-URI user is telephone number
|
|
|
|
- ...
|
|
|
|
-}
|
|
|
|
-if (is_tel_number("+24242424") {
|
|
|
|
- ...
|
|
|
|
-}
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.13. is_numeric(tval)
|
|
|
|
-
|
|
|
|
- Checks if the parameter value consists solely of decimal digits. The
|
|
|
|
- parameter can include variables.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.22. is_numeric usage
|
|
|
|
-...
|
|
|
|
-if (is_numeric($rU)) { # Test if R-URI user consists of decimal digits
|
|
|
|
- ...
|
|
|
|
-}
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.14. encode_contact(encoding_prefix,hostpart)
|
|
|
|
-
|
|
|
|
- This function will encode uri-s inside Contact header in the following
|
|
|
|
- manner sip:username:password@ip:port;transport=protocol goes
|
|
|
|
- sip:encoding_prefix*username*ip*port*protocol@hostpart.
|
|
|
|
-
|
|
|
|
- * is the default separator and can be changed by setting the
|
|
|
|
- contact_flds_separator module parameter.
|
|
|
|
-
|
|
|
|
- Note: This function discards all of the URI parameters. Thus, none of
|
|
|
|
- the parameters (except the transport parameter which is encoded into
|
|
|
|
- the userpart) can be restored.
|
|
|
|
-
|
|
|
|
- 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.
|
|
|
|
- * hostpart - An IP address or a hostname.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.23. encode_contact usage
|
|
|
|
-...
|
|
|
|
-if (src_ip == 10.0.0.0/8) encode_contact("natted_client","1.2.3.4");
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.15. decode_contact()
|
|
|
|
-
|
|
|
|
- This function will decode the request URI. If the RURI is in the format
|
|
|
|
- sip:encoding_prefix*username*ip*port*protocol@hostpart it will be
|
|
|
|
- decoded 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.24. decode_contact usage
|
|
|
|
-...
|
|
|
|
-if (uri =~ "^sip:natted_client") { decode_contact(); }
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.16. decode_contact_header()
|
|
|
|
-
|
|
|
|
- This function will decode URIs inside Contact header. If the URI in the
|
|
|
|
- format sip:encoding_prefix*username*ip*port*protocol@hostpart it will
|
|
|
|
- be decoded 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.25. decode_contact_header usage
|
|
|
|
-...
|
|
|
|
-reply_route[2] {
|
|
|
|
- ...
|
|
|
|
- decode_contact_header();
|
|
|
|
- ...
|
|
|
|
-}
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.17. cmp_uri(str1, str2)
|
|
|
|
-
|
|
|
|
- The function returns true if the two parameters matches as SIP URI.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.26. cmp_uri usage
|
|
|
|
-...
|
|
|
|
-if(cmp_uri("$ru", "sip:[email protected]"))
|
|
|
|
-{
|
|
|
|
- # do interesting stuff here
|
|
|
|
-}
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.18. cmp_aor(str1, str2)
|
|
|
|
-
|
|
|
|
- The function returns true if the two parameters matches as AoR. The
|
|
|
|
- parameters have to be SIP URIs.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.27. cmp_aor usage
|
|
|
|
-...
|
|
|
|
-if(cmp_aor("[email protected]", "sip:kamailio@$fd"))
|
|
|
|
-{
|
|
|
|
- # do interesting stuff here
|
|
|
|
-}
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.19. append_rpid_hf()
|
|
|
|
-
|
|
|
|
- Appends to the message a Remote-Party-ID header that contains header
|
|
|
|
- 'Remote-Party-ID: ' followed by the saved value of the SIP URI received
|
|
|
|
- from the database or radius server followed by the value of module
|
|
|
|
- parameter radius_rpid_suffix. The function does nothing if no saved SIP
|
|
|
|
- URI exists.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
|
|
|
|
- BRANCH_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.28. append_rpid_hf usage
|
|
|
|
-...
|
|
|
|
-append_rpid_hf(); # Append Remote-Party-ID header field
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.20. append_rpid_hf(prefix, suffix)
|
|
|
|
-
|
|
|
|
- This function is the same as Section 4.19, “ append_rpid_hf()”. The
|
|
|
|
- only difference is that it accepts two parameters--prefix and suffix to
|
|
|
|
- be added to Remote-Party-ID header field. This function ignores
|
|
|
|
- rpid_prefix and rpid_suffix parameters, instead of that allows to set
|
|
|
|
- them in every call.
|
|
|
|
-
|
|
|
|
- Meaning of the parameters is as follows:
|
|
|
|
- * prefix - Prefix of the Remote-Party-ID URI. The string will be
|
|
|
|
- added at the begining of body of the header field, just before the
|
|
|
|
- URI.
|
|
|
|
- * suffix - Suffix of the Remote-Party-ID header field. The string
|
|
|
|
- will be appended at the end of the header field. It can be used to
|
|
|
|
- set various URI parameters, for example.
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
|
|
|
|
- BRANCH_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.29. append_rpid_hf(prefix, suffix) usage
|
|
|
|
-...
|
|
|
|
-# Append Remote-Party-ID header field
|
|
|
|
-append_rpid_hf("", ";party=calling;id-type=subscriber;screen=yes");
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.21. is_rpid_user_e164()
|
|
|
|
-
|
|
|
|
- The function checks if the SIP URI received from the database or radius
|
|
|
|
- server and will potentially be used in Remote-Party-ID header field
|
|
|
|
- contains an E164 number (+followed by up to 15 decimal digits) in its
|
|
|
|
- user part. Check fails, if no such SIP URI exists (i.e. radius server
|
|
|
|
- or database didn't provide this information).
|
|
|
|
-
|
|
|
|
- This function can be used from REQUEST_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.30. is_rpid_user_e164 usage
|
|
|
|
-...
|
|
|
|
-if (is_rpid_user_e164()) {
|
|
|
|
- # do something here
|
|
|
|
-};
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.22. set_uri_user(uri, user)
|
|
|
|
-
|
|
|
|
- Sets userpart of SIP URI stored in writable pseudo variable 'uri' to
|
|
|
|
- value of pseudo variable 'user'.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.31. set_uri_user usage
|
|
|
|
-...
|
|
|
|
-$var(uri) = "sip:user@host";
|
|
|
|
-$var(user) = "new_user";
|
|
|
|
-set_uri_user("$var(uri)", "$var(user)");
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.23. set_uri_host(uri, host)
|
|
|
|
-
|
|
|
|
- Sets hostpart of SIP URI stored in writable pseudo variable 'uri' to
|
|
|
|
- value of pseudo variable 'host'.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.32. set_uri_host usage
|
|
|
|
-...
|
|
|
|
-$var(uri) = "sip:user@host";
|
|
|
|
-$var(host) = "new_host";
|
|
|
|
-set_uri_host("$var(uri)", "$var(host)");
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.24. is_request()
|
|
|
|
-
|
|
|
|
- Return true if the SIP message is a request.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.33. is_request usage
|
|
|
|
-...
|
|
|
|
-if (is_request()) {
|
|
|
|
- ...
|
|
|
|
-}
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.25. is_reply()
|
|
|
|
-
|
|
|
|
- Return true if the SIP message is a reply.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.34. is_reply usage
|
|
|
|
-...
|
|
|
|
-if (is_reply()) {
|
|
|
|
- ...
|
|
|
|
-}
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.26. is_gruu([uri])
|
|
|
|
-
|
|
|
|
- The function returns true if the uri is GRUU ('gr' parameter is
|
|
|
|
- present): 1 - pub-gruu; 2 - temp-gruu.
|
|
|
|
-
|
|
|
|
- Meaning of the parameters is as follows:
|
|
|
|
- * uri - the SIP URI to check for GRUU parameter. It is optional, when
|
|
|
|
- missing, the value of R-URI is used.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.35. is_gruu() usage
|
|
|
|
-...
|
|
|
|
-if(is_gruu()) { ... }
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.27. is_supported(option)
|
|
|
|
-
|
|
|
|
- Function returns true if given option is listed in Supported header(s)
|
|
|
|
- (if any) of the request. Currently the following options are known:
|
|
|
|
- path, 100rel, timer, eventlist, gruu, and outbound.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.36. is_supported() usage
|
|
|
|
-...
|
|
|
|
-if (is_supported("outbound")) { ... }
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.28. is_first_hop()
|
|
|
|
-
|
|
|
|
- The function returns true if the proxy is first hop after the original
|
|
|
|
- sender. For incoming SIP requests, it means there is only one Via
|
|
|
|
- header. For incoming SIP replies, it means that top Record-Route URI is
|
|
|
|
- 'myself' and source address is not matching it (to avoid detecting in
|
|
|
|
- case of local loops). Note that it does not detect spirals, which can
|
|
|
|
- have the condition for replies true also in the case of additional SIP
|
|
|
|
- reply receival.
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.37. is_first_hop() usage
|
|
|
|
-...
|
|
|
|
-if(is_first_hop()) { ... }
|
|
|
|
-...
|
|
|
|
-
|
|
|
|
-4.29. sip_p_charging_vector(flags)
|
|
|
|
-
|
|
|
|
- Manage the P-Charging-Vector header (RFC3455). The flags can be: 'r' -
|
|
|
|
- remove; 'g' - generate; 'f' - force (remove + generate).
|
|
|
|
-
|
|
|
|
- This function can be used from ANY_ROUTE.
|
|
|
|
-
|
|
|
|
- Example 1.38. sip_p_charging_vector() usage
|
|
|
|
-...
|
|
|
|
-sip_p_charging_vector("g");
|
|
|
|
-...
|
|
|