diff --git a/src/modules/siputils/README b/src/modules/siputils/README index 2700a647aad..7c888199788 100644 --- a/src/modules/siputils/README +++ b/src/modules/siputils/README @@ -74,35 +74,36 @@ Gabriel Vasile 4.8. get_uri_param(name, var) 4.9. uri_param_rm(param) 4.10. tel2sip(uri, hostpart, result) - 4.11. is_e164(pseudo-variable) - 4.12. is_uri_user_e164(pseudo-variable) - 4.13. is_uri(pseudo-variable) - 4.14. is_tel_number(tval) - 4.15. is_numeric(tval) - 4.16. is_alphanum(tval) - 4.17. is_alphanumex(tval, eset) - 4.18. encode_contact(encoding_prefix, hostpart) - 4.19. decode_contact() - 4.20. decode_contact_header() - 4.21. cmp_uri(str1, str2) - 4.22. cmp_aor(str1, str2) - 4.23. cmp_hdr_name(str1, str2) - 4.24. append_rpid_hf() - 4.25. append_rpid_hf(prefix, suffix) - 4.26. is_rpid_user_e164() - 4.27. set_uri_user(uri, user) - 4.28. set_uri_host(uri, host) - 4.29. is_request() - 4.30. is_reply() - 4.31. is_gruu([uri]) - 4.32. is_supported(option) - 4.33. is_first_hop([mode]) - 4.34. sip_p_charging_vector(flags) - 4.35. contact_param_encode(pname, saddr) - 4.36. contact_param_decode(pname) - 4.37. contact_param_decode_uri(pname) - 4.38. contact_param_rm(pname) - 4.39. hdr_date_check(tdiff) + 4.11. tel2sip2(uri, hostpart, result) + 4.12. is_e164(pseudo-variable) + 4.13. is_uri_user_e164(pseudo-variable) + 4.14. is_uri(pseudo-variable) + 4.15. is_tel_number(tval) + 4.16. is_numeric(tval) + 4.17. is_alphanum(tval) + 4.18. is_alphanumex(tval, eset) + 4.19. encode_contact(encoding_prefix, hostpart) + 4.20. decode_contact() + 4.21. decode_contact_header() + 4.22. cmp_uri(str1, str2) + 4.23. cmp_aor(str1, str2) + 4.24. cmp_hdr_name(str1, str2) + 4.25. append_rpid_hf() + 4.26. append_rpid_hf(prefix, suffix) + 4.27. is_rpid_user_e164() + 4.28. set_uri_user(uri, user) + 4.29. set_uri_host(uri, host) + 4.30. is_request() + 4.31. is_reply() + 4.32. is_gruu([uri]) + 4.33. is_supported(option) + 4.34. is_first_hop([mode]) + 4.35. sip_p_charging_vector(flags) + 4.36. contact_param_encode(pname, saddr) + 4.37. contact_param_decode(pname) + 4.38. contact_param_decode_uri(pname) + 4.39. contact_param_rm(pname) + 4.40. hdr_date_check(tdiff) 5. Exported pseudo-variables @@ -133,35 +134,36 @@ Gabriel Vasile 1.17. add_uri_param usage 1.18. uri_param_rm usage 1.19. tel2sip usage - 1.20. is_e164 usage - 1.21. is_uri_user_e164 usage - 1.22. is_uri usage - 1.23. is_tel_number usage - 1.24. is_numeric usage - 1.25. is_alphanum usage - 1.26. is_alphanumex usage - 1.27. encode_contact usage - 1.28. decode_contact usage - 1.29. decode_contact_header usage - 1.30. cmp_uri usage - 1.31. cmp_aor usage - 1.32. cmp_hdr_name usage - 1.33. append_rpid_hf usage - 1.34. append_rpid_hf(prefix, suffix) usage - 1.35. is_rpid_user_e164 usage - 1.36. set_uri_user usage - 1.37. set_uri_host usage - 1.38. is_request usage - 1.39. is_reply usage - 1.40. is_gruu() usage - 1.41. is_supported() usage - 1.42. is_first_hop() usage - 1.43. sip_p_charging_vector() usage - 1.44. contact_param_encode usage - 1.45. contact_param_decode usage - 1.46. contact_param_decode_ruri usage - 1.47. contact_param_rm usage - 1.48. hdr_date_check usage + 1.20. tel2sip2 usage + 1.21. is_e164 usage + 1.22. is_uri_user_e164 usage + 1.23. is_uri usage + 1.24. is_tel_number usage + 1.25. is_numeric usage + 1.26. is_alphanum usage + 1.27. is_alphanumex usage + 1.28. encode_contact usage + 1.29. decode_contact usage + 1.30. decode_contact_header usage + 1.31. cmp_uri usage + 1.32. cmp_aor usage + 1.33. cmp_hdr_name usage + 1.34. append_rpid_hf usage + 1.35. append_rpid_hf(prefix, suffix) usage + 1.36. is_rpid_user_e164 usage + 1.37. set_uri_user usage + 1.38. set_uri_host usage + 1.39. is_request usage + 1.40. is_reply usage + 1.41. is_gruu() usage + 1.42. is_supported() usage + 1.43. is_first_hop() usage + 1.44. sip_p_charging_vector() usage + 1.45. contact_param_encode usage + 1.46. contact_param_decode usage + 1.47. contact_param_decode_ruri usage + 1.48. contact_param_rm usage + 1.49. hdr_date_check usage Chapter 1. Admin Guide @@ -197,35 +199,36 @@ Chapter 1. Admin Guide 4.8. get_uri_param(name, var) 4.9. uri_param_rm(param) 4.10. tel2sip(uri, hostpart, result) - 4.11. is_e164(pseudo-variable) - 4.12. is_uri_user_e164(pseudo-variable) - 4.13. is_uri(pseudo-variable) - 4.14. is_tel_number(tval) - 4.15. is_numeric(tval) - 4.16. is_alphanum(tval) - 4.17. is_alphanumex(tval, eset) - 4.18. encode_contact(encoding_prefix, hostpart) - 4.19. decode_contact() - 4.20. decode_contact_header() - 4.21. cmp_uri(str1, str2) - 4.22. cmp_aor(str1, str2) - 4.23. cmp_hdr_name(str1, str2) - 4.24. append_rpid_hf() - 4.25. append_rpid_hf(prefix, suffix) - 4.26. is_rpid_user_e164() - 4.27. set_uri_user(uri, user) - 4.28. set_uri_host(uri, host) - 4.29. is_request() - 4.30. is_reply() - 4.31. is_gruu([uri]) - 4.32. is_supported(option) - 4.33. is_first_hop([mode]) - 4.34. sip_p_charging_vector(flags) - 4.35. contact_param_encode(pname, saddr) - 4.36. contact_param_decode(pname) - 4.37. contact_param_decode_uri(pname) - 4.38. contact_param_rm(pname) - 4.39. hdr_date_check(tdiff) + 4.11. tel2sip2(uri, hostpart, result) + 4.12. is_e164(pseudo-variable) + 4.13. is_uri_user_e164(pseudo-variable) + 4.14. is_uri(pseudo-variable) + 4.15. is_tel_number(tval) + 4.16. is_numeric(tval) + 4.17. is_alphanum(tval) + 4.18. is_alphanumex(tval, eset) + 4.19. encode_contact(encoding_prefix, hostpart) + 4.20. decode_contact() + 4.21. decode_contact_header() + 4.22. cmp_uri(str1, str2) + 4.23. cmp_aor(str1, str2) + 4.24. cmp_hdr_name(str1, str2) + 4.25. append_rpid_hf() + 4.26. append_rpid_hf(prefix, suffix) + 4.27. is_rpid_user_e164() + 4.28. set_uri_user(uri, user) + 4.29. set_uri_host(uri, host) + 4.30. is_request() + 4.31. is_reply() + 4.32. is_gruu([uri]) + 4.33. is_supported(option) + 4.34. is_first_hop([mode]) + 4.35. sip_p_charging_vector(flags) + 4.36. contact_param_encode(pname, saddr) + 4.37. contact_param_decode(pname) + 4.38. contact_param_decode_uri(pname) + 4.39. contact_param_rm(pname) + 4.40. hdr_date_check(tdiff) 5. Exported pseudo-variables @@ -410,35 +413,36 @@ modparam("siputils", "e164_max_len", 20) 4.8. get_uri_param(name, var) 4.9. uri_param_rm(param) 4.10. tel2sip(uri, hostpart, result) - 4.11. is_e164(pseudo-variable) - 4.12. is_uri_user_e164(pseudo-variable) - 4.13. is_uri(pseudo-variable) - 4.14. is_tel_number(tval) - 4.15. is_numeric(tval) - 4.16. is_alphanum(tval) - 4.17. is_alphanumex(tval, eset) - 4.18. encode_contact(encoding_prefix, hostpart) - 4.19. decode_contact() - 4.20. decode_contact_header() - 4.21. cmp_uri(str1, str2) - 4.22. cmp_aor(str1, str2) - 4.23. cmp_hdr_name(str1, str2) - 4.24. append_rpid_hf() - 4.25. append_rpid_hf(prefix, suffix) - 4.26. is_rpid_user_e164() - 4.27. set_uri_user(uri, user) - 4.28. set_uri_host(uri, host) - 4.29. is_request() - 4.30. is_reply() - 4.31. is_gruu([uri]) - 4.32. is_supported(option) - 4.33. is_first_hop([mode]) - 4.34. sip_p_charging_vector(flags) - 4.35. contact_param_encode(pname, saddr) - 4.36. contact_param_decode(pname) - 4.37. contact_param_decode_uri(pname) - 4.38. contact_param_rm(pname) - 4.39. hdr_date_check(tdiff) + 4.11. tel2sip2(uri, hostpart, result) + 4.12. is_e164(pseudo-variable) + 4.13. is_uri_user_e164(pseudo-variable) + 4.14. is_uri(pseudo-variable) + 4.15. is_tel_number(tval) + 4.16. is_numeric(tval) + 4.17. is_alphanum(tval) + 4.18. is_alphanumex(tval, eset) + 4.19. encode_contact(encoding_prefix, hostpart) + 4.20. decode_contact() + 4.21. decode_contact_header() + 4.22. cmp_uri(str1, str2) + 4.23. cmp_aor(str1, str2) + 4.24. cmp_hdr_name(str1, str2) + 4.25. append_rpid_hf() + 4.26. append_rpid_hf(prefix, suffix) + 4.27. is_rpid_user_e164() + 4.28. set_uri_user(uri, user) + 4.29. set_uri_host(uri, host) + 4.30. is_request() + 4.31. is_reply() + 4.32. is_gruu([uri]) + 4.33. is_supported(option) + 4.34. is_first_hop([mode]) + 4.35. sip_p_charging_vector(flags) + 4.36. contact_param_encode(pname, saddr) + 4.37. contact_param_decode(pname) + 4.38. contact_param_decode_uri(pname) + 4.39. contact_param_rm(pname) + 4.40. hdr_date_check(tdiff) 4.1. options_reply() @@ -623,14 +627,35 @@ tel2sip("$ru", $fd", "$ru"); # $ru: sip:+12345678;ext=200;isub=+123-456@foo.com;user=phone ... -4.11. is_e164(pseudo-variable) +4.11. tel2sip2(uri, hostpart, result) + + Alternative to sip2tel() function that tries to follow closer the RFC + requrements (e.g., sort tel: uri parameters copied to the sip: uri in + the manner defined in the standard; deletes the phone-context parameter + if it is a domain, and, takes visual separators from the phone-context + parameter if it is a telephone number). + + Its parameters have the same meaning as for tel2sip(). + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, + BRANCH_ROUTE, or ONREPLY_ROUTE. + + Example 1.20. tel2sip2 usage +... +# $ru: tel:+(34)-999-888-777 +# $fu: sip:test@foo.com +tel2sip2("$ru", $fd", "$ru"); +# $ru: sip:+34999888777@foo.com;user=phone +... + +4.12. 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.20. is_e164 usage + Example 1.21. is_e164 usage ... if (is_e164("$fU")) { # Check From header URI user part ... @@ -641,13 +666,13 @@ if (is_e164("$avp(i:705)") { }; ... -4.12. is_uri_user_e164(pseudo-variable) +4.13. 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.21. is_uri_user_e164 usage + Example 1.22. is_uri_user_e164 usage ... if (is_uri_user_e164("$fu")) { # Check From header URI user part ... @@ -658,13 +683,13 @@ if (is_uri_user_e164("$avp(i:705)") { }; ... -4.13. is_uri(pseudo-variable) +4.14. is_uri(pseudo-variable) Checks if string value of pseudo variable argument is a valid uri. This function can be used from ANY_ROUTE. - Example 1.22. is_uri usage + Example 1.23. is_uri usage ... if (is_uri("$var(x)")) { # Check if variable contains a uri ... @@ -675,14 +700,14 @@ if (is_uri("$avp(i:705)") { }; ... -4.14. is_tel_number(tval) +4.15. 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.23. is_tel_number usage + Example 1.24. is_tel_number usage ... if (is_tel_number("$rU")) { # Test if R-URI user is telephone number ... @@ -692,35 +717,35 @@ if (is_tel_number("+24242424")) { } ... -4.15. is_numeric(tval) +4.16. 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.24. is_numeric usage + Example 1.25. is_numeric usage ... if (is_numeric("$rU")) { # Test if R-URI user consists of decimal digits ... } ... -4.16. is_alphanum(tval) +4.17. is_alphanum(tval) Checks if the parameter value consists solely of decimal digits or alphabetic ASCII characters. The parameter can include variables. This function can be used from ANY_ROUTE. - Example 1.25. is_alphanum usage + Example 1.26. is_alphanum usage ... if (is_alphanum("$rU")) { ... } ... -4.17. is_alphanumex(tval, eset) +4.18. is_alphanumex(tval, eset) Checks if the value of parameter 'tval' consists solely of decimal digits, alphabetic ASCII characters and the characters in the second @@ -728,14 +753,14 @@ if (is_alphanum("$rU")) { This function can be used from ANY_ROUTE. - Example 1.26. is_alphanumex usage + Example 1.27. is_alphanumex usage ... if (is_alphanumex("$rU", "+.-_")) { ... } ... -4.18. encode_contact(encoding_prefix, hostpart) +4.19. 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 @@ -757,12 +782,12 @@ if (is_alphanumex("$rU", "+.-_")) { This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE. - Example 1.27. encode_contact usage + Example 1.28. encode_contact usage ... if (src_ip == 10.0.0.0/8) encode_contact("natted_client","1.2.3.4"); ... -4.19. decode_contact() +4.20. decode_contact() This function will decode the request URI. If the RURI is in the format sip:encoding_prefix*username*password*ip*port*protocol@hostpart it will @@ -775,12 +800,12 @@ if (src_ip == 10.0.0.0/8) encode_contact("natted_client","1.2.3.4"); This function can be used from REQUEST_ROUTE. - Example 1.28. decode_contact usage + Example 1.29. decode_contact usage ... if (uri =~ "^sip:natted_client") { decode_contact(); } ... -4.20. decode_contact_header() +4.21. 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 @@ -793,7 +818,7 @@ if (uri =~ "^sip:natted_client") { decode_contact(); } This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE. - Example 1.29. decode_contact_header usage + Example 1.30. decode_contact_header usage ... reply_route[2] { ... @@ -802,13 +827,13 @@ reply_route[2] { } ... -4.21. cmp_uri(str1, str2) +4.22. 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.30. cmp_uri usage + Example 1.31. cmp_uri usage ... if(cmp_uri("$ru", "sip:kamailio@kamailio.org")) { @@ -816,14 +841,14 @@ if(cmp_uri("$ru", "sip:kamailio@kamailio.org")) } ... -4.22. cmp_aor(str1, str2) +4.23. 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.31. cmp_aor usage + Example 1.32. cmp_aor usage ... if(cmp_aor("$rU@KaMaIlIo.org", "sip:kamailio@$fd")) { @@ -831,14 +856,14 @@ if(cmp_aor("$rU@KaMaIlIo.org", "sip:kamailio@$fd")) } ... -4.23. cmp_hdr_name(str1, str2) +4.24. cmp_hdr_name(str1, str2) The function returns true (return code 1) if the two parameters matches as header names. This function can be used from ANY_ROUTE. - Example 1.32. cmp_hdr_name usage + Example 1.33. cmp_hdr_name usage ... if(cmp_hdr_name("$var(hname)", "From")) { @@ -846,7 +871,7 @@ if(cmp_hdr_name("$var(hname)", "From")) } ... -4.24. append_rpid_hf() +4.25. 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 @@ -857,14 +882,14 @@ if(cmp_hdr_name("$var(hname)", "From")) This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE. - Example 1.33. append_rpid_hf usage + Example 1.34. append_rpid_hf usage ... append_rpid_hf(); # Append Remote-Party-ID header field ... -4.25. append_rpid_hf(prefix, suffix) +4.26. append_rpid_hf(prefix, suffix) - This function is the same as Section 4.24, “ append_rpid_hf()”. The + This function is the same as Section 4.25, “ 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 @@ -881,13 +906,13 @@ append_rpid_hf(); # Append Remote-Party-ID header field This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE. - Example 1.34. append_rpid_hf(prefix, suffix) usage + Example 1.35. append_rpid_hf(prefix, suffix) usage ... # Append Remote-Party-ID header field append_rpid_hf("", ";party=calling;id-type=subscriber;screen=yes"); ... -4.26. is_rpid_user_e164() +4.27. 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 @@ -897,68 +922,68 @@ append_rpid_hf("", ";party=calling;id-type=subscriber;screen=yes"); This function can be used from REQUEST_ROUTE. - Example 1.35. is_rpid_user_e164 usage + Example 1.36. is_rpid_user_e164 usage ... if (is_rpid_user_e164()) { # do something here }; ... -4.27. set_uri_user(uri, user) +4.28. 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.36. set_uri_user usage + Example 1.37. set_uri_user usage ... $var(uri) = "sip:user@host"; $var(user) = "new_user"; set_uri_user("$var(uri)", "$var(user)"); ... -4.28. set_uri_host(uri, host) +4.29. 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.37. set_uri_host usage + Example 1.38. set_uri_host usage ... $var(uri) = "sip:user@host"; $var(host) = "new_host"; set_uri_host("$var(uri)", "$var(host)"); ... -4.29. is_request() +4.30. is_request() Return true if the SIP message is a request. This function can be used from ANY_ROUTE. - Example 1.38. is_request usage + Example 1.39. is_request usage ... if (is_request()) { ... } ... -4.30. is_reply() +4.31. is_reply() Return true if the SIP message is a reply. This function can be used from ANY_ROUTE. - Example 1.39. is_reply usage + Example 1.40. is_reply usage ... if (is_reply()) { ... } ... -4.31. is_gruu([uri]) +4.32. is_gruu([uri]) The function returns true if the uri is GRUU ('gr' parameter is present): 1 - pub-gruu; 2 - temp-gruu. @@ -969,12 +994,12 @@ if (is_reply()) { This function can be used from ANY_ROUTE. - Example 1.40. is_gruu() usage + Example 1.41. is_gruu() usage ... if(is_gruu()) { ... } ... -4.32. is_supported(option) +4.33. 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: @@ -982,12 +1007,12 @@ if(is_gruu()) { ... } This function can be used from ANY_ROUTE. - Example 1.41. is_supported() usage + Example 1.42. is_supported() usage ... if (is_supported("outbound")) { ... } ... -4.33. is_first_hop([mode]) +4.34. is_first_hop([mode]) The function returns true if the proxy is first hop after the original sender based on a best effort estimation by checking Via and @@ -1012,26 +1037,26 @@ if (is_supported("outbound")) { ... } This function can be used from ANY_ROUTE. - Example 1.42. is_first_hop() usage + Example 1.43. is_first_hop() usage ... if(is_first_hop()) { ... } ... if(is_first_hop("1")) { ... } ... -4.34. sip_p_charging_vector(flags) +4.35. sip_p_charging_vector(flags) Manage the P-Charging-Vector header (RFC7315). The flags can be: 'r' - remove; 'g' - generate; 'f' - force (remove + generate). This function can be used from ANY_ROUTE. - Example 1.43. sip_p_charging_vector() usage + Example 1.44. sip_p_charging_vector() usage ... sip_p_charging_vector("g"); ... -4.35. contact_param_encode(pname, saddr) +4.36. contact_param_encode(pname, saddr) This function encodes URI inside Contact headers by building a new URI from 'saddr' parameter and adding a parameter with the name 'pname' @@ -1044,14 +1069,14 @@ sip_p_charging_vector("g"); This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE. - Example 1.44. contact_param_encode usage + Example 1.45. contact_param_encode usage ... if (is_method("REGISTER") and src_ip == 10.0.0.0/8) { contact_param_encode("ksu", "sip:1.2.3.4:5060;transport=tcp"); } ... -4.36. contact_param_decode(pname) +4.37. contact_param_decode(pname) This function decodes URI inside Contact headers by building a new URI from 'pname' parameter, decoding its value from Base64URL. @@ -1062,14 +1087,14 @@ if (is_method("REGISTER") and src_ip == 10.0.0.0/8) { This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE. - Example 1.45. contact_param_decode usage + Example 1.46. contact_param_decode usage ... if (is_method("REGISTER") and src_ip == 1.2.3.4) { contact_param_decode("ksu"); } ... -4.37. contact_param_decode_uri(pname) +4.38. contact_param_decode_uri(pname) This function decodes R-URI (request URI) by building a new R-URI from 'pname' parameter, decoding its value from Base64URL. @@ -1080,14 +1105,14 @@ if (is_method("REGISTER") and src_ip == 1.2.3.4) { This function can be used from REQUEST_ROUTE. - Example 1.46. contact_param_decode_ruri usage + Example 1.47. contact_param_decode_ruri usage ... if (is_method("INVITE") and src_ip == 1.2.3.4) { contact_param_decode_ruri("ksu"); } ... -4.38. contact_param_rm(pname) +4.39. contact_param_rm(pname) This function removes the parameter from the URIs inside the Contact headers. @@ -1097,14 +1122,14 @@ if (is_method("INVITE") and src_ip == 1.2.3.4) { This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE. - Example 1.47. contact_param_rm usage + Example 1.48. contact_param_rm usage ... if (is_method("REGISTER") and src_ip == 1.2.3.4) { contact_param_rm("myparam"); } ... -4.39. hdr_date_check(tdiff) +4.40. hdr_date_check(tdiff) Returns true if sip message has Date header and its value is lower than 'NOW() - tdiff'. @@ -1115,7 +1140,7 @@ if (is_method("REGISTER") and src_ip == 1.2.3.4) { This function can be used from ANY_ROUTE. - Example 1.48. hdr_date_check usage + Example 1.49. hdr_date_check usage ... if (!hdr_date_check("10")) { sl_send_reply("403", "Outdated date");