|
@@ -15,94 +15,6 @@ Juha Heinanen
|
|
Revision $Revision$ $Date$
|
|
Revision $Revision$ $Date$
|
|
__________________________________________________________________
|
|
__________________________________________________________________
|
|
|
|
|
|
- 1.1. Overview
|
|
|
|
- 1.2. Known Issues
|
|
|
|
- 1.3. Parameters
|
|
|
|
-
|
|
|
|
- 1.3.1. fr_timer (integer)
|
|
|
|
- 1.3.2. fr_inv_timer (integer)
|
|
|
|
- 1.3.3. max_inv_lifetime (integer)
|
|
|
|
- 1.3.4. max_noninv_lifetime (integer)
|
|
|
|
- 1.3.5. wt_timer (integer)
|
|
|
|
- 1.3.6. delete_timer (integer)
|
|
|
|
- 1.3.7. retr_timer1 (integer)
|
|
|
|
- 1.3.8. retr_timer2 (integer)
|
|
|
|
- 1.3.9. noisy_ctimer (integer)
|
|
|
|
- 1.3.10. restart_fr_on_each_reply (integer)
|
|
|
|
- 1.3.11. auto_inv_100 (integer)
|
|
|
|
- 1.3.12. auto_inv_100_reason (string)
|
|
|
|
- 1.3.13. unix_tx_timeout (integer)
|
|
|
|
- 1.3.14. aggregate_challenges (integer)
|
|
|
|
- 1.3.15. reparse_invite (integer)
|
|
|
|
- 1.3.16. ac_extra_hdrs (string)
|
|
|
|
- 1.3.17. blst_503 (integer)
|
|
|
|
- 1.3.18. blst_503_def_timeout (integer)
|
|
|
|
- 1.3.19. blst_503_min_timeout (integer)
|
|
|
|
- 1.3.20. blst_503_max_timeout (integer)
|
|
|
|
- 1.3.21. blst_methods_add (unsigned integer)
|
|
|
|
- 1.3.22. blst_methods_lookup (unsigned integer)
|
|
|
|
- 1.3.23. cancel_b_method (integer)
|
|
|
|
- 1.3.24. reparse_on_dns_failover (integer)
|
|
|
|
- 1.3.25. on_sl_reply (string)
|
|
|
|
- 1.3.26. fr_inv_timer_next (integer)
|
|
|
|
- 1.3.27. contacts_avp (string)
|
|
|
|
-
|
|
|
|
- 1.4. Functions
|
|
|
|
-
|
|
|
|
- 1.4.1. t_relay_to_udp(ip, port), t_relay_to_udp(),
|
|
|
|
- t_relay_to_tcp(ip, port) t_relay_to_tcp()
|
|
|
|
- t_relay_to_tls(ip, port) t_relay_to_tls()
|
|
|
|
- t_relay_to_sctp(ip, port) t_relay_to_sctp()
|
|
|
|
-
|
|
|
|
- 1.4.2. t_relay() t_relay(host, port)
|
|
|
|
- 1.4.3. t_on_failure(failure_route)
|
|
|
|
- 1.4.4. t_on_reply(onreply_route)
|
|
|
|
- 1.4.5. t_on_branch(branch_route)
|
|
|
|
- 1.4.6. append_branch()
|
|
|
|
- 1.4.7. t_newtran()
|
|
|
|
- 1.4.8. t_reply(code, reason_phrase)
|
|
|
|
- 1.4.9. t_lookup_request()
|
|
|
|
- 1.4.10. t_retransmit_reply()
|
|
|
|
- 1.4.11. t_release()
|
|
|
|
- 1.4.12. t_forward_nonack() t_forward_nonack(ip, port)
|
|
|
|
- t_forward_nonack_udp(ip, port) t_forward_nonack_tcp(ip,
|
|
|
|
- port) t_forward_nonack_tls(ip, port)
|
|
|
|
- t_forward_nonack_sctp(ip, port)
|
|
|
|
-
|
|
|
|
- 1.4.13. t_set_fr(fr_inv_timeout [, fr_timeout])
|
|
|
|
- 1.4.14. t_reset_fr()
|
|
|
|
- 1.4.15. t_set_max_lifetime(inv_lifetime, noninv_lifetime)
|
|
|
|
- 1.4.16. t_reset_max_lifetime()
|
|
|
|
- 1.4.17. t_set_retr(retr_t1_interval, retr_t2_interval)
|
|
|
|
- 1.4.18. t_reset_retr()
|
|
|
|
- 1.4.19. t_set_auto_inv_100(0|1)
|
|
|
|
- 1.4.20. t_branch_timeout()
|
|
|
|
- 1.4.21. t_branch_replied()
|
|
|
|
- 1.4.22. t_any_timeout()
|
|
|
|
- 1.4.23. t_any_replied()
|
|
|
|
- 1.4.24. t_grep_status("code")
|
|
|
|
- 1.4.25. t_is_canceled()
|
|
|
|
- 1.4.26. t_is_expired()
|
|
|
|
- 1.4.27. t_relay_cancel()
|
|
|
|
- 1.4.28. t_lookup_cancel(), t_lookup_cancel(1)
|
|
|
|
- 1.4.29. t_drop_replies()
|
|
|
|
- 1.4.30. t_save_lumps()
|
|
|
|
- 1.4.31. t_load_contacts()
|
|
|
|
- 1.4.32. t_next_contacts()
|
|
|
|
-
|
|
|
|
- 1.5. TM Module API
|
|
|
|
-
|
|
|
|
- 1.5.1. Defines
|
|
|
|
- 1.5.2. Functions
|
|
|
|
-
|
|
|
|
- 1.5.2.1. register_tmcb(cb_type, cb_func)
|
|
|
|
- 1.5.2.2. load_tm(*import_structure)
|
|
|
|
- 1.5.2.3. int t_suspend(struct sip_msg *msg, unsigned int
|
|
|
|
- *hash_index, unsigned int *label)
|
|
|
|
-
|
|
|
|
- 1.5.2.4. int t_continue(unsigned int hash_index, unsigned
|
|
|
|
- int label, struct action *route)
|
|
|
|
-
|
|
|
|
1.1. Overview
|
|
1.1. Overview
|
|
|
|
|
|
TM module enables stateful processing of SIP transactions. The main use
|
|
TM module enables stateful processing of SIP transactions. The main use
|
|
@@ -693,6 +605,44 @@ modparam("tm", "fr_inv_timer_next", 10)
|
|
modparam("tm", "contacts_avp", "$avp(i:25)")
|
|
modparam("tm", "contacts_avp", "$avp(i:25)")
|
|
...
|
|
...
|
|
|
|
|
|
|
|
+1.3.28. fr_timer_avp (string)
|
|
|
|
+
|
|
|
|
+ The value of fr_timer timer can be overriden on per-transaction basis.
|
|
|
|
+ The administrator can provide a value to be used for a particular
|
|
|
|
+ transaction in an AVP. This parameter contains the name of the AVP that
|
|
|
|
+ will be checked. If the AVP exists then its value will be used for the
|
|
|
|
+ fr_timer timer, effectively overriding the value configured in fr_timer
|
|
|
|
+ parameter for the current transaction.
|
|
|
|
+
|
|
|
|
+ The value of this parameter is the the name of the AVP to be checked,
|
|
|
|
+ without the $ character or "$avp" prefix.
|
|
|
|
+
|
|
|
|
+ See also: t_set_fr(), fr_timer.
|
|
|
|
+
|
|
|
|
+ Example 28. Set fr_timer_avp parameter
|
|
|
|
+...
|
|
|
|
+modparam("tm", "fr_timer_avp", "i:708")
|
|
|
|
+...
|
|
|
|
+
|
|
|
|
+1.3.29. fr_inv_timer_avp (string)
|
|
|
|
+
|
|
|
|
+ The value of fr_inv_timer timer can be overriden on per-transaction
|
|
|
|
+ basis. The administrator can provide a value to be used for a
|
|
|
|
+ particular transaction in an AVP. This parameter contains the name of
|
|
|
|
+ the AVP that will be checked. If the AVP exists then its value will be
|
|
|
|
+ used for the fr_inv_timer timer, effectively overriding the value
|
|
|
|
+ configured in fr_inv_timer parameter for the current transaction.
|
|
|
|
+
|
|
|
|
+ The value of this parameter is the the name of the AVP to be checked,
|
|
|
|
+ without the $ character or "$avp" prefix.
|
|
|
|
+
|
|
|
|
+ See also: t_set_fr(), fr_inv_timer.
|
|
|
|
+
|
|
|
|
+ Example 29. Set fr_inv_timer_avp parameter
|
|
|
|
+...
|
|
|
|
+modparam("tm", "fr_inv_timer_avp", "my_fr_inv_timer")
|
|
|
|
+...
|
|
|
|
+
|
|
1.4. Functions
|
|
1.4. Functions
|
|
|
|
|
|
Revision History
|
|
Revision History
|
|
@@ -718,7 +668,7 @@ t_relay_to_sctp(ip, port) t_relay_to_sctp()
|
|
derived from the message uri (using sip sepcific DNS lookups), but with
|
|
derived from the message uri (using sip sepcific DNS lookups), but with
|
|
the protocol corresponding to the function name.
|
|
the protocol corresponding to the function name.
|
|
|
|
|
|
- Example 28. t_relay_to_udp usage
|
|
|
|
|
|
+ Example 30. t_relay_to_udp usage
|
|
...
|
|
...
|
|
if (src_ip==10.0.0.0/8)
|
|
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
|
|
t_relay_to_udp("1.2.3.4", "5060"); # sent to 1.2.3.4:5060 over udp
|
|
@@ -745,7 +695,7 @@ else
|
|
Returns a negative value on failure--you may still want to send a
|
|
Returns a negative value on failure--you may still want to send a
|
|
negative reply upstream statelessly not to leave upstream UAC in lurch.
|
|
negative reply upstream statelessly not to leave upstream UAC in lurch.
|
|
|
|
|
|
- Example 29. t_relay usage
|
|
|
|
|
|
+ Example 31. t_relay usage
|
|
...
|
|
...
|
|
if (!t_relay())
|
|
if (!t_relay())
|
|
{
|
|
{
|
|
@@ -774,7 +724,7 @@ if (!t_relay())
|
|
Meaning of the parameters is as follows:
|
|
Meaning of the parameters is as follows:
|
|
* failure_route - Failure route block to be called.
|
|
* failure_route - Failure route block to be called.
|
|
|
|
|
|
- Example 30. t_on_failure usage
|
|
|
|
|
|
+ Example 32. t_on_failure usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
t_on_failure("1");
|
|
t_on_failure("1");
|
|
@@ -800,7 +750,7 @@ failure_route[1] {
|
|
Meaning of the parameters is as follows:
|
|
Meaning of the parameters is as follows:
|
|
* onreply_route - Onreply route block to be called.
|
|
* onreply_route - Onreply route block to be called.
|
|
|
|
|
|
- Example 31. t_on_reply usage
|
|
|
|
|
|
+ Example 33. t_on_reply usage
|
|
...
|
|
...
|
|
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
|
|
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
|
|
...
|
|
...
|
|
@@ -832,7 +782,7 @@ es');
|
|
Meaning of the parameters is as follows:
|
|
Meaning of the parameters is as follows:
|
|
* branch_route - branch route block to be called.
|
|
* branch_route - branch route block to be called.
|
|
|
|
|
|
- Example 32. t_on_branch usage
|
|
|
|
|
|
+ Example 34. t_on_branch usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
t_on_branch("1");
|
|
t_on_branch("1");
|
|
@@ -850,7 +800,7 @@ branch_route[1] {
|
|
Similarly to t_fork_to, it extends destination set by a new entry. The
|
|
Similarly to t_fork_to, it extends destination set by a new entry. The
|
|
difference is that current URI is taken as new entry.
|
|
difference is that current URI is taken as new entry.
|
|
|
|
|
|
- Example 33. append_branch usage
|
|
|
|
|
|
+ Example 35. append_branch usage
|
|
...
|
|
...
|
|
set_user("john");
|
|
set_user("john");
|
|
t_fork();
|
|
t_fork();
|
|
@@ -865,7 +815,7 @@ t_relay();
|
|
the only way a script can add a new transaction in an atomic way.
|
|
the only way a script can add a new transaction in an atomic way.
|
|
Typically, it is used to deploy a UAS.
|
|
Typically, it is used to deploy a UAS.
|
|
|
|
|
|
- Example 34. t_newtran usage
|
|
|
|
|
|
+ Example 36. t_newtran usage
|
|
...
|
|
...
|
|
if (t_newtran()) {
|
|
if (t_newtran()) {
|
|
log("UAS logic");
|
|
log("UAS logic");
|
|
@@ -884,7 +834,7 @@ if (t_newtran()) {
|
|
* code - Reply code number.
|
|
* code - Reply code number.
|
|
* reason_phrase - Reason string.
|
|
* reason_phrase - Reason string.
|
|
|
|
|
|
- Example 35. t_reply usage
|
|
|
|
|
|
+ Example 37. t_reply usage
|
|
...
|
|
...
|
|
t_reply("404", "Not found");
|
|
t_reply("404", "Not found");
|
|
...
|
|
...
|
|
@@ -897,7 +847,7 @@ t_reply("404", "Not found");
|
|
none was found. However this is safely (atomically) done using
|
|
none was found. However this is safely (atomically) done using
|
|
t_newtran.
|
|
t_newtran.
|
|
|
|
|
|
- Example 36. t_lookup_request usage
|
|
|
|
|
|
+ Example 38. t_lookup_request usage
|
|
...
|
|
...
|
|
if (t_lookup_request()) {
|
|
if (t_lookup_request()) {
|
|
...
|
|
...
|
|
@@ -908,7 +858,7 @@ if (t_lookup_request()) {
|
|
|
|
|
|
Retransmits a reply sent previously by UAS transaction.
|
|
Retransmits a reply sent previously by UAS transaction.
|
|
|
|
|
|
- Example 37. t_retransmit_reply usage
|
|
|
|
|
|
+ Example 39. t_retransmit_reply usage
|
|
...
|
|
...
|
|
t_retransmit_reply();
|
|
t_retransmit_reply();
|
|
...
|
|
...
|
|
@@ -918,7 +868,7 @@ t_retransmit_reply();
|
|
Remove transaction from memory (it will be first put on a wait timer to
|
|
Remove transaction from memory (it will be first put on a wait timer to
|
|
absorb delayed messages).
|
|
absorb delayed messages).
|
|
|
|
|
|
- Example 38. t_release usage
|
|
|
|
|
|
+ Example 40. t_release usage
|
|
...
|
|
...
|
|
t_release();
|
|
t_release();
|
|
...
|
|
...
|
|
@@ -933,7 +883,7 @@ t_forward_nonack_tls(ip, port) t_forward_nonack_sctp(ip, port)
|
|
* ip - IP address where the message should be sent.
|
|
* ip - IP address where the message should be sent.
|
|
* port - Port number.
|
|
* port - Port number.
|
|
|
|
|
|
- Example 39. t_forward_nonack usage
|
|
|
|
|
|
+ Example 41. t_forward_nonack usage
|
|
...
|
|
...
|
|
t_forward_nonack("1.2.3.4", "5060");
|
|
t_forward_nonack("1.2.3.4", "5060");
|
|
...
|
|
...
|
|
@@ -956,7 +906,7 @@ t_forward_nonack("1.2.3.4", "5060");
|
|
|
|
|
|
See also: fr_timer, fr_inv_timer, t_reset_fr().
|
|
See also: fr_timer, fr_inv_timer, t_reset_fr().
|
|
|
|
|
|
- Example 40. t_set_fr usage
|
|
|
|
|
|
+ Example 42. t_set_fr usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
t_set_fr(10000); # set only fr invite timeout to 10s
|
|
t_set_fr(10000); # set only fr invite timeout to 10s
|
|
@@ -983,7 +933,7 @@ branch_route[1] {
|
|
|
|
|
|
See also: fr_timer, fr_inv_timer, t_set_fr.
|
|
See also: fr_timer, fr_inv_timer, t_set_fr.
|
|
|
|
|
|
- Example 41. t_reset_fr usage
|
|
|
|
|
|
+ Example 43. t_reset_fr usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
...
|
|
...
|
|
@@ -1009,7 +959,7 @@ route {
|
|
|
|
|
|
See also: max_inv_lifetime, max_noninv_lifetime, t_reset_max_lifetime.
|
|
See also: max_inv_lifetime, max_noninv_lifetime, t_reset_max_lifetime.
|
|
|
|
|
|
- Example 42. t_set_max_lifetime usage
|
|
|
|
|
|
+ Example 44. t_set_max_lifetime usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
if (src_ip=1.2.3.4)
|
|
if (src_ip=1.2.3.4)
|
|
@@ -1031,7 +981,7 @@ route {
|
|
|
|
|
|
See also: max_inv_lifetime, max_noninv_lifetime, t_set_max_lifetime.
|
|
See also: max_inv_lifetime, max_noninv_lifetime, t_set_max_lifetime.
|
|
|
|
|
|
- Example 43. t_reset_max_lifetime usage
|
|
|
|
|
|
+ Example 45. t_reset_max_lifetime usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
...
|
|
...
|
|
@@ -1069,7 +1019,7 @@ route {
|
|
|
|
|
|
See also: retr_timer1, retr_timer2, t_reset_retr().
|
|
See also: retr_timer1, retr_timer2, t_reset_retr().
|
|
|
|
|
|
- Example 44. t_set_retr usage
|
|
|
|
|
|
+ Example 46. t_set_retr usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
t_set_retr(250, 0); # set only T1 to 250 ms
|
|
t_set_retr(250, 0); # set only T1 to 250 ms
|
|
@@ -1096,7 +1046,7 @@ branch_route[1] {
|
|
|
|
|
|
See also: retr_timer1, retr_timer2, t_set_retr.
|
|
See also: retr_timer1, retr_timer2, t_set_retr.
|
|
|
|
|
|
- Example 45. t_reset_retr usage
|
|
|
|
|
|
+ Example 47. t_reset_retr usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
...
|
|
...
|
|
@@ -1112,7 +1062,7 @@ route {
|
|
|
|
|
|
See also: auto_inv_100.
|
|
See also: auto_inv_100.
|
|
|
|
|
|
- Example 46. t_set_auto_inv_100 usage
|
|
|
|
|
|
+ Example 48. t_set_auto_inv_100 usage
|
|
...
|
|
...
|
|
route {
|
|
route {
|
|
...
|
|
...
|
|
@@ -1126,7 +1076,7 @@ route {
|
|
Returns true if the failure route is executed for a branch that did
|
|
Returns true if the failure route is executed for a branch that did
|
|
timeout. It can be used only from the failure_route.
|
|
timeout. It can be used only from the failure_route.
|
|
|
|
|
|
- Example 47. t_branch_timeout usage
|
|
|
|
|
|
+ Example 49. t_branch_timeout usage
|
|
...
|
|
...
|
|
failure_route[0]{
|
|
failure_route[0]{
|
|
if (t_branch_timeout()){
|
|
if (t_branch_timeout()){
|
|
@@ -1141,7 +1091,7 @@ failure_route[0]{
|
|
receive at least one reply in the past (the "current" reply is not
|
|
receive at least one reply in the past (the "current" reply is not
|
|
taken into account). It can be used only from the failure_route.
|
|
taken into account). It can be used only from the failure_route.
|
|
|
|
|
|
- Example 48. t_branch_replied usage
|
|
|
|
|
|
+ Example 50. t_branch_replied usage
|
|
...
|
|
...
|
|
failure_route[0]{
|
|
failure_route[0]{
|
|
if (t_branch_timeout()){
|
|
if (t_branch_timeout()){
|
|
@@ -1158,7 +1108,7 @@ failure_route[0]{
|
|
Returns true if at least one of the current transactions branches did
|
|
Returns true if at least one of the current transactions branches did
|
|
timeout.
|
|
timeout.
|
|
|
|
|
|
- Example 49. t_any_timeout usage
|
|
|
|
|
|
+ Example 51. t_any_timeout usage
|
|
...
|
|
...
|
|
failure_route[0]{
|
|
failure_route[0]{
|
|
if (!t_branch_timeout()){
|
|
if (!t_branch_timeout()){
|
|
@@ -1175,7 +1125,7 @@ failure_route[0]{
|
|
receive some reply in the past. If called from a failure or onreply
|
|
receive some reply in the past. If called from a failure or onreply
|
|
route, the "current" reply is not taken into account.
|
|
route, the "current" reply is not taken into account.
|
|
|
|
|
|
- Example 50. t_any_replied usage
|
|
|
|
|
|
+ Example 52. t_any_replied usage
|
|
...
|
|
...
|
|
onreply_route[0]{
|
|
onreply_route[0]{
|
|
if (!t_any_replied()){
|
|
if (!t_any_replied()){
|
|
@@ -1189,7 +1139,7 @@ onreply_route[0]{
|
|
Returns true if "code" is the final reply received (or locally
|
|
Returns true if "code" is the final reply received (or locally
|
|
generated) in at least one of the current transactions branches.
|
|
generated) in at least one of the current transactions branches.
|
|
|
|
|
|
- Example 51. t_grep_status usage
|
|
|
|
|
|
+ Example 53. t_grep_status usage
|
|
...
|
|
...
|
|
onreply_route[0]{
|
|
onreply_route[0]{
|
|
if (t_grep_status("486")){
|
|
if (t_grep_status("486")){
|
|
@@ -1202,7 +1152,7 @@ onreply_route[0]{
|
|
|
|
|
|
Returns true if the current transaction was canceled.
|
|
Returns true if the current transaction was canceled.
|
|
|
|
|
|
- Example 52. t_is_canceled usage
|
|
|
|
|
|
+ Example 54. t_is_canceled usage
|
|
...
|
|
...
|
|
failure_route[0]{
|
|
failure_route[0]{
|
|
if (t_is_canceled()){
|
|
if (t_is_canceled()){
|
|
@@ -1216,7 +1166,7 @@ failure_route[0]{
|
|
Returns true if the current transaction has already been expired, i.e.
|
|
Returns true if the current transaction has already been expired, i.e.
|
|
the max_inv_lifetime/max_noninv_lifetime interval has already elapsed.
|
|
the max_inv_lifetime/max_noninv_lifetime interval has already elapsed.
|
|
|
|
|
|
- Example 53. t_is_expired usage
|
|
|
|
|
|
+ Example 55. t_is_expired usage
|
|
...
|
|
...
|
|
failure_route[0]{
|
|
failure_route[0]{
|
|
if (t_is_expired()){
|
|
if (t_is_expired()){
|
|
@@ -1237,7 +1187,7 @@ failure_route[0]{
|
|
CANCELs were successfully sent to the pending branches, true if the
|
|
CANCELs were successfully sent to the pending branches, true if the
|
|
INVITE was not found, and false in case of any error.
|
|
INVITE was not found, and false in case of any error.
|
|
|
|
|
|
- Example 54. t_relay_cancel usage
|
|
|
|
|
|
+ Example 56. t_relay_cancel usage
|
|
if (method == CANCEL) {
|
|
if (method == CANCEL) {
|
|
if (!t_relay_cancel()) { # implicit drop if relaying was successful,
|
|
if (!t_relay_cancel()) { # implicit drop if relaying was successful,
|
|
# nothing to do
|
|
# nothing to do
|
|
@@ -1264,7 +1214,7 @@ if (method == CANCEL) {
|
|
overwritten with the flags of the INVITE. isflagset() can be used to
|
|
overwritten with the flags of the INVITE. isflagset() can be used to
|
|
check the flags of the previously forwarded INVITE in this case.
|
|
check the flags of the previously forwarded INVITE in this case.
|
|
|
|
|
|
- Example 55. t_lookup_cancel usage
|
|
|
|
|
|
+ Example 57. t_lookup_cancel usage
|
|
if (method == CANCEL) {
|
|
if (method == CANCEL) {
|
|
if (t_lookup_cancel()) {
|
|
if (t_lookup_cancel()) {
|
|
log("INVITE transaction exists");
|
|
log("INVITE transaction exists");
|
|
@@ -1289,7 +1239,7 @@ if (method == CANCEL) {
|
|
branch is added to the transaction, or it is explicitly replied in the
|
|
branch is added to the transaction, or it is explicitly replied in the
|
|
script!
|
|
script!
|
|
|
|
|
|
- Example 56. t_drop_replies() usage
|
|
|
|
|
|
+ Example 58. t_drop_replies() usage
|
|
...
|
|
...
|
|
failure_route[0]{
|
|
failure_route[0]{
|
|
if (t_check_status("5[0-9][0-9]")){
|
|
if (t_check_status("5[0-9][0-9]")){
|
|
@@ -1320,7 +1270,7 @@ failure_route[0]{
|
|
The transaction must be created by t_newtran() before calling
|
|
The transaction must be created by t_newtran() before calling
|
|
t_save_lumps().
|
|
t_save_lumps().
|
|
|
|
|
|
- Example 57. t_save_lumps() usage
|
|
|
|
|
|
+ Example 59. t_save_lumps() usage
|
|
route {
|
|
route {
|
|
...
|
|
...
|
|
t_newtran();
|
|
t_newtran();
|
|
@@ -1356,7 +1306,7 @@ failure_route[1] {
|
|
|
|
|
|
This function can be used from REQUEST_ROUTE.
|
|
This function can be used from REQUEST_ROUTE.
|
|
|
|
|
|
- Example 58. t_load_contacts usage
|
|
|
|
|
|
+ Example 60. t_load_contacts usage
|
|
...
|
|
...
|
|
if (!t_load_contacts()) {
|
|
if (!t_load_contacts()) {
|
|
sl_send_reply("500", "Server Internal Error - Cannot load contacts");
|
|
sl_send_reply("500", "Server Internal Error - Cannot load contacts");
|
|
@@ -1381,7 +1331,7 @@ if (!t_load_contacts()) {
|
|
|
|
|
|
This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.
|
|
This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.
|
|
|
|
|
|
- Example 59. t_next_contacts usage
|
|
|
|
|
|
+ Example 61. t_next_contacts usage
|
|
...
|
|
...
|
|
# First call after t_load_contacts() when transaction does not exist yet
|
|
# First call after t_load_contacts() when transaction does not exist yet
|
|
# and contacts should be available
|
|
# and contacts should be available
|