diff --git a/src/modules/tm/README b/src/modules/tm/README index 445630cf346..91250b9de7c 100644 --- a/src/modules/tm/README +++ b/src/modules/tm/README @@ -80,6 +80,7 @@ Daniel-Constantin Mierla 3.51. exec_time_check (int) 3.52. reply_relay_mode (int) 3.53. enable_uac_fr (int) + 3.54. failover_reply_codes (string) 4. Functions @@ -233,57 +234,58 @@ Daniel-Constantin Mierla 1.51. Set exec_time_check parameter 1.52. Set reply_relay_mode parameter 1.53. enable_uac_fr example - 1.54. t_relay usage - 1.55. t_relay_to_udp usage - 1.56. t_on_failure usage - 1.57. t_on_branch_failure usage - 1.58. t_on_reply usage - 1.59. t_on_branch usage - 1.60. t_newtran usage - 1.61. t_reply usage - 1.62. t_send_reply usage - 1.63. t_lookup_request usage - 1.64. t_retransmit_reply usage - 1.65. t_release usage - 1.66. t_forward_nonack usage - 1.67. t_set_fr usage - 1.68. t_reset_fr usage - 1.69. t_set_max_lifetime usage - 1.70. t_reset_max_lifetime usage - 1.71. t_set_retr usage - 1.72. t_reset_retr usage - 1.73. t_set_auto_inv_100 usage - 1.74. t_branch_timeout usage - 1.75. t_branch_replied usage - 1.76. t_any_timeout usage - 1.77. t_any_replied usage - 1.78. t_grep_status usage - 1.79. t_is_canceled usage - 1.80. t_is_expired usage - 1.81. t_relay_cancel usage - 1.82. t_lookup_cancel usage - 1.83. t_drop_replies() usage - 1.84. t_save_lumps() usage - 1.85. t_load_contacts usage - 1.86. t_next_contacts usage - 1.87. t_next_contact_flow usage - 1.88. t_check_status usage - 1.89. t_check_trans usage - 1.90. t_set_disable_6xx usage - 1.91. t_set_disable_failover usage - 1.92. t_set_disable_internal_reply usage - 1.93. t_replicate usage - 1.94. t_relay_to usage - 1.95. t_set_no_e2e_cancel_reason usage - 1.96. t_replicate usage - 1.97. t_use_uac_headers usage - 1.98. t_is_retr_async_reply usage - 1.99. t_uac_send usage - 1.100. t_get_status_code usage - 1.101. t_clean usage - 1.102. event_route[tm:branch-failure:id] usage - 1.103. event_route[tm:local-request] usage - 1.104. event_route[tm:local-response] usage + 1.54. Set the “failover_reply_codes” parameter + 1.55. t_relay usage + 1.56. t_relay_to_udp usage + 1.57. t_on_failure usage + 1.58. t_on_branch_failure usage + 1.59. t_on_reply usage + 1.60. t_on_branch usage + 1.61. t_newtran usage + 1.62. t_reply usage + 1.63. t_send_reply usage + 1.64. t_lookup_request usage + 1.65. t_retransmit_reply usage + 1.66. t_release usage + 1.67. t_forward_nonack usage + 1.68. t_set_fr usage + 1.69. t_reset_fr usage + 1.70. t_set_max_lifetime usage + 1.71. t_reset_max_lifetime usage + 1.72. t_set_retr usage + 1.73. t_reset_retr usage + 1.74. t_set_auto_inv_100 usage + 1.75. t_branch_timeout usage + 1.76. t_branch_replied usage + 1.77. t_any_timeout usage + 1.78. t_any_replied usage + 1.79. t_grep_status usage + 1.80. t_is_canceled usage + 1.81. t_is_expired usage + 1.82. t_relay_cancel usage + 1.83. t_lookup_cancel usage + 1.84. t_drop_replies() usage + 1.85. t_save_lumps() usage + 1.86. t_load_contacts usage + 1.87. t_next_contacts usage + 1.88. t_next_contact_flow usage + 1.89. t_check_status usage + 1.90. t_check_trans usage + 1.91. t_set_disable_6xx usage + 1.92. t_set_disable_failover usage + 1.93. t_set_disable_internal_reply usage + 1.94. t_replicate usage + 1.95. t_relay_to usage + 1.96. t_set_no_e2e_cancel_reason usage + 1.97. t_replicate usage + 1.98. t_use_uac_headers usage + 1.99. t_is_retr_async_reply usage + 1.100. t_uac_send usage + 1.101. t_get_status_code usage + 1.102. t_clean usage + 1.103. event_route[tm:branch-failure:id] usage + 1.104. event_route[tm:local-request] usage + 1.105. event_route[tm:local-response] usage Chapter 1. Admin Guide @@ -346,6 +348,7 @@ Chapter 1. Admin Guide 3.51. exec_time_check (int) 3.52. reply_relay_mode (int) 3.53. enable_uac_fr (int) + 3.54. failover_reply_codes (string) 4. Functions @@ -724,6 +727,7 @@ failure_route["serial"] 3.51. exec_time_check (int) 3.52. reply_relay_mode (int) 3.53. enable_uac_fr (int) + 3.54. failover_reply_codes (string) 3.1. fr_timer (integer) @@ -1764,6 +1768,24 @@ modparam("tm", "reply_relay_mode", 0) modparam("tm", "enable_uac_fr", 1) .... +3.54. failover_reply_codes (string) + + This parameter defines the response codes (only codes >= 300 and class + >= 3), which enable dns failover to continue to try next ips when + previous one fail. It is a list separated by colons, where you may + define either a single code (e.g. "code=408" would accept 408 as an + additional response code) or a class of responses, you want to accept + (e.g. "class=3" would accept everything from 300 to 999 as valid + response). (with default behaviour only 503 code or no response from + previous one will try next ip). + + Default value is “” + + Example 1.54. Set the “failover_reply_codes” parameter +... +modparam("tm", "failover_reply_codes", "code=403;code=488;class=5") +... + 4. Functions 4.1. t_relay([host, port]) @@ -1841,7 +1863,7 @@ modparam("tm", "enable_uac_fr", 1) Returns a negative value on failure -- you may still want to send a negative reply upstream statelessly not to leave upstream UAC in lurch. - Example 1.54. t_relay usage + Example 1.55. t_relay usage ... if (!t_relay()) { @@ -1868,7 +1890,7 @@ if (!t_relay()) derived from the message uri (using sip specific DNS lookups), but with the protocol corresponding to the function name. - Example 1.55. t_relay_to_udp usage + Example 1.56. t_relay_to_udp usage ... if (src_ip==10.0.0.0/8) t_relay_to_udp("1.2.3.4", "5060"); # sent to 1.2.3.4:5060 over udp @@ -1908,7 +1930,7 @@ else Meaning of the parameters is as follows: * failure_route - Failure route block to be called. - Example 1.56. t_on_failure usage + Example 1.57. t_on_failure usage ... route { t_on_failure("1"); @@ -1944,7 +1966,7 @@ failure_route[1] { * branch_failure_route - Name of the branch_failure route block to be called (it is prefixed internally with 'tm:branch-failure:'). - Example 1.57. t_on_branch_failure usage + Example 1.58. t_on_branch_failure usage ... route { t_on_branch_failure("myroute"); @@ -1967,7 +1989,7 @@ event_route[tm:branch-failure:myroute] { Meaning of the parameters is as follows: * onreply_route - Onreply route block to be called. - Example 1.58. t_on_reply usage + Example 1.59. t_on_reply usage ... loadmodule "/usr/local/lib/ser/modules/nathelper.so" ... @@ -1999,7 +2021,7 @@ es'); Meaning of the parameters is as follows: * branch_route - branch route block to be called. - Example 1.59. t_on_branch usage + Example 1.60. t_on_branch usage ... route { t_on_branch("1"); @@ -2024,7 +2046,7 @@ branch_route[1] { structure. Use the tmx module function t_flush_flags() to synchronize the modified message flags to the already created transaction. - Example 1.60. t_newtran usage + Example 1.61. t_newtran usage ... if (t_newtran()) { xlog("the transaction has been created\n"); @@ -2056,7 +2078,7 @@ if (t_newtran()) { * code - Reply code number. * reason_phrase - Reason string. - Example 1.61. t_reply usage + Example 1.62. t_reply usage ... t_reply("404", "Not found"); ... @@ -2074,7 +2096,7 @@ t_reply("404", "Not found"); * code - Reply code number. * reason - Reason string. - Example 1.62. t_send_reply usage + Example 1.63. t_send_reply usage ... t_send_reply("404", "Not found"); ... @@ -2087,7 +2109,7 @@ t_send_reply("404", "Not found"); none was found. However this is safely (atomically) done using t_newtran. - Example 1.63. t_lookup_request usage + Example 1.64. t_lookup_request usage ... if (t_lookup_request()) { ... @@ -2098,7 +2120,7 @@ if (t_lookup_request()) { Retransmits a reply sent previously by UAS transaction. - Example 1.64. t_retransmit_reply usage + Example 1.65. t_retransmit_reply usage ... t_retransmit_reply(); ... @@ -2108,7 +2130,7 @@ t_retransmit_reply(); Remove transaction from memory (it will be first put on a wait timer to absorb delayed messages). - Example 1.65. t_release usage + Example 1.66. t_release usage ... t_release(); ... @@ -2122,7 +2144,7 @@ t_release(); * ip - IP address where the message should be sent. * port - Port number. - Example 1.66. t_forward_nonack usage + Example 1.67. t_forward_nonack usage ... t_forward_nonack("1.2.3.4", "5060"); ... @@ -2161,7 +2183,7 @@ t_forward_nonack("1.2.3.4", "5060"); See also: fr_timer, fr_inv_timer, t_reset_fr(). - Example 1.67. t_set_fr usage + Example 1.68. t_set_fr usage ... route { t_set_fr(10000); # set only fr invite timeout to 10s @@ -2188,7 +2210,7 @@ branch_route[1] { See also: fr_timer, fr_inv_timer, t_set_fr. - Example 1.68. t_reset_fr usage + Example 1.69. t_reset_fr usage ... route { ... @@ -2214,7 +2236,7 @@ route { See also: max_inv_lifetime, max_noninv_lifetime, t_reset_max_lifetime. - Example 1.69. t_set_max_lifetime usage + Example 1.70. t_set_max_lifetime usage ... route { if (src_ip=1.2.3.4) @@ -2236,7 +2258,7 @@ route { See also: max_inv_lifetime, max_noninv_lifetime, t_set_max_lifetime. - Example 1.70. t_reset_max_lifetime usage + Example 1.71. t_reset_max_lifetime usage ... route { ... @@ -2271,7 +2293,7 @@ route { See also: retr_timer1, retr_timer2, t_reset_retr(). - Example 1.71. t_set_retr usage + Example 1.72. t_set_retr usage ... route { t_set_retr(250, 0); # set only T1 to 250 ms @@ -2298,7 +2320,7 @@ branch_route[1] { See also: retr_timer1, retr_timer2, t_set_retr. - Example 1.72. t_reset_retr usage + Example 1.73. t_reset_retr usage ... route { ... @@ -2314,7 +2336,7 @@ route { See also: auto_inv_100. - Example 1.73. t_set_auto_inv_100 usage + Example 1.74. t_set_auto_inv_100 usage ... route { ... @@ -2329,7 +2351,7 @@ route { timeout. It can be used from FAILURE_ROUTE and BRANCH_FAILURE_ROUTE event route. - Example 1.74. t_branch_timeout usage + Example 1.75. t_branch_timeout usage ... failure_route[0]{ if (t_branch_timeout()){ @@ -2345,7 +2367,7 @@ failure_route[0]{ taken into account). It can be used from failure_route and branch-failure event route. - Example 1.75. t_branch_replied usage + Example 1.76. t_branch_replied usage ... failure_route[0]{ if (t_branch_timeout()){ @@ -2362,7 +2384,7 @@ failure_route[0]{ Returns true if at least one of the current transactions branches did timeout. - Example 1.76. t_any_timeout usage + Example 1.77. t_any_timeout usage ... failure_route[0]{ if (!t_branch_timeout()){ @@ -2379,7 +2401,7 @@ failure_route[0]{ receive some reply in the past. If called from a failure or onreply route, the "current" reply is not taken into account. - Example 1.77. t_any_replied usage + Example 1.78. t_any_replied usage ... onreply_route[0]{ if (!t_any_replied()){ @@ -2393,7 +2415,7 @@ onreply_route[0]{ Returns true if "code" is the final reply received (or locally generated) in at least one of the current transactions branches. - Example 1.78. t_grep_status usage + Example 1.79. t_grep_status usage ... onreply_route[0]{ if (t_grep_status("486")){ @@ -2406,7 +2428,7 @@ onreply_route[0]{ Returns true if the current transaction was canceled. - Example 1.79. t_is_canceled usage + Example 1.80. t_is_canceled usage ... failure_route[0]{ if (t_is_canceled()){ @@ -2420,7 +2442,7 @@ failure_route[0]{ Returns true if the current transaction has already been expired, i.e. the max_inv_lifetime/max_noninv_lifetime interval has already elapsed. - Example 1.80. t_is_expired usage + Example 1.81. t_is_expired usage ... failure_route[0]{ if (t_is_expired()){ @@ -2441,7 +2463,7 @@ failure_route[0]{ CANCELs were successfully sent to the pending branches, true if the INVITE was not found, and false in case of any error. - Example 1.81. t_relay_cancel usage + Example 1.82. t_relay_cancel usage if (method == CANCEL) { if (!t_relay_cancel()) { # implicit drop if relaying was successful, # nothing to do @@ -2468,7 +2490,7 @@ if (method == CANCEL) { overwritten with the flags of the INVITE. isflagset() can be used to check the flags of the previously forwarded INVITE in this case. - Example 1.82. t_lookup_cancel usage + Example 1.83. t_lookup_cancel usage if (method == CANCEL) { if (t_lookup_cancel()) { log("INVITE transaction exists"); @@ -2498,7 +2520,7 @@ if (method == CANCEL) { Dropping replies works only if a new branch is added to the transaction, or it is explicitly replied in the script! - Example 1.83. t_drop_replies() usage + Example 1.84. t_drop_replies() usage ... failure_route[0]{ if (t_check_status("5[0-9][0-9]")){ @@ -2529,7 +2551,7 @@ failure_route[0]{ The transaction must be created by t_newtran() before calling t_save_lumps(). - Example 1.84. t_save_lumps() usage + Example 1.85. t_save_lumps() usage route { ... t_newtran(); @@ -2603,7 +2625,7 @@ failure_route[1] { This function can be used from REQUEST_ROUTE and FAILURE_ROUTE. - Example 1.85. t_load_contacts usage + Example 1.86. t_load_contacts usage ... if (!t_load_contacts()) { sl_send_reply("500", "Server Internal Error - Cannot load contacts"); @@ -2644,7 +2666,7 @@ if (!t_load_contacts()) { contact_flows_avp are not anymore set. Based on that test, you can then use t_set_fr() function to set timers according to your needs. - Example 1.86. t_next_contacts usage + Example 1.87. t_next_contacts usage ... # First call after t_load_contacts() when transaction does not exist yet # and contacts should be available @@ -2682,7 +2704,7 @@ if (!t_next_contacts()) { syslog). This function can be used from a BRANCH_FAILURE_ROUTE event route. - Example 1.87. t_next_contact_flow usage + Example 1.88. t_next_contact_flow usage ... event_route[tm:branch-failure:outbound] { @@ -2705,7 +2727,7 @@ event_route[tm:branch-failure:outbound] This function can be used from ANY_ROUTE . - Example 1.88. t_check_status usage + Example 1.89. t_check_status usage ... if (t_check_status("(487)|(408)")) { log("487 or 408 negative reply\n"); @@ -2759,7 +2781,7 @@ Note See also: t_lookup_request(), t_lookup_cancel(). - Example 1.89. t_check_trans usage + Example 1.90. t_check_trans usage if ( method == "CANCEL" && !t_check_trans()) sl_reply("403", "cancel out of the blue forbidden"); # note: in this example t_check_trans() can be replaced by t_lookup_cancel() @@ -2774,7 +2796,7 @@ if ( method == "CANCEL" && !t_check_trans()) See also: disable_6xx_block. - Example 1.90. t_set_disable_6xx usage + Example 1.91. t_set_disable_6xx usage ... route { ... @@ -2789,7 +2811,7 @@ route { See also: use_dns_failover. - Example 1.91. t_set_disable_failover usage + Example 1.92. t_set_disable_failover usage ... route { ... @@ -2802,7 +2824,7 @@ route { Turn off/on sending internally a SIP reply in case of relay errors. - Example 1.92. t_set_disable_internal_reply usage + Example 1.93. t_set_disable_internal_reply usage ... t_set_disable_internal_reply(1); # turn off sending internal reply on error if(!t_relay()) { @@ -2835,7 +2857,7 @@ if(!t_relay()) { * hostport - address in "host:port" format. It can be given via an AVP. - Example 1.93. t_replicate usage + Example 1.94. t_replicate usage ... # sent to 1.2.3.4:5060 over tcp t_replicate("sip:1.2.3.4:5060;transport=tcp"); @@ -2869,7 +2891,7 @@ t_replicate_to_udp("1.2.3.4", "5060"); + 0x02 - do not generate reply on internal error. + 0x04 - disable dns failover. - Example 1.94. t_relay_to usage + Example 1.95. t_relay_to usage ... # sent to 1.2.3.4:5060 over tcp t_relay_to("tcp:1.2.3.4:5060"); @@ -2895,7 +2917,7 @@ t_relay_to("0x01"); See also: e2e_cancel_reason. - Example 1.95. t_set_no_e2e_cancel_reason usage + Example 1.96. t_set_no_e2e_cancel_reason usage ... route { ... @@ -2918,7 +2940,7 @@ opying * onreply_route - the function returns true if an onreply route is set to be executed. - Example 1.96. t_replicate usage + Example 1.97. t_replicate usage ... if(!t_is_set("failure_route")) LM_DBG("no failure route will be executed for current transaction\n"); @@ -2932,7 +2954,7 @@ if(!t_is_set("failure_route")) It returns true. - Example 1.97. t_use_uac_headers usage + Example 1.98. t_use_uac_headers usage ... t_use_uac_headers(); ... @@ -2951,7 +2973,7 @@ t_use_uac_headers(); returns true if the transaction is currently reply suspended or false if not. - Example 1.98. t_is_retr_async_reply usage + Example 1.99. t_is_retr_async_reply usage ... if (t_is_retr_async_reply()) { xlog("L_DBG", "Dropping retransmitted reply which is still currently sus @@ -2976,7 +2998,7 @@ pended\n"); Content-Type header must exist. * body - SIP message body (can be empty). - Example 1.99. t_uac_send usage + Example 1.100. t_uac_send usage ... t_uac_send("OPTIONS", "sip:alice@kamailio.org", "", "", "From: bob@kamailio.org;tag=2w3e\r\nTo: bob@kamailio.org", ""); @@ -2987,7 +3009,7 @@ t_uac_send("OPTIONS", "sip:alice@kamailio.org", "", "", Return the status code for transaction - the most relevant SIP reply status code, or -1 in case of error or no status code was set. - Example 1.100. t_get_status_code usage + Example 1.101. t_get_status_code usage ... $var(ts) = t_get_status_code(); if($var(ts) == 500) { ... } @@ -2998,7 +3020,7 @@ if($var(ts) == 500) { ... } Cleans active but very old transactions. Returns true (1). Can be called from any route. - Example 1.101. t_clean usage + Example 1.102. t_clean usage ... t_clean(); ... @@ -3124,7 +3146,7 @@ t_clean(); enabled with the t_on_branch_failure function. This event_route uses the BRANCH_FAILURE_ROUTE route type. - Example 1.102. event_route[tm:branch-failure:id] usage + Example 1.103. event_route[tm:branch-failure:id] usage ... request_route { ... @@ -3150,7 +3172,7 @@ event_route[tm:branch-failure:myroute] { The request can still be updated, i.e., changes are possible to R-URI ($ru), destination URI ($du) or the send socket ($fs). - Example 1.103. event_route[tm:local-request] usage + Example 1.104. event_route[tm:local-request] usage ... event_route [tm:local-request] { xlog("L_INFO", "Routing locally generated $rm to $ru\n"); @@ -3163,7 +3185,7 @@ event_route [tm:local-request] { Executed after the tm module sent a local generated, transaction stateful response. - Example 1.104. event_route[tm:local-response] usage + Example 1.105. event_route[tm:local-response] usage ... event_route[tm:local-response] { xlog("tm:local-response replied locally\n");