THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#21 - Crash at t_reply.c:668
User who did this - Andrey 'Krieger' Utkin (andrey.utkin.2)
----------
I reproduced it one more time, this time both proxies crashed X-(
Sorry that i post not precisely cutted log files this time, .ngrep files have long tail representing that kamailio is down.
In .log files there are cores backtraces also.
----------
One or more files have been attached.
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=21#comment12
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
Module: sip-router
Branch: andrei/blst_send_flags
Commit: d322fc29ab9a5edce1f826de2a5de141aab09e1f
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=d322fc2…
Author: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Date: Wed Dec 23 18:13:35 2009 +0100
blst: docs for blst_{set,clear}_ignore script functions
---
modules_s/blst/README | 47 ++++++++++++++++++++++
modules_s/blst/doc/functions.xml | 80 ++++++++++++++++++++++++++++++++++++++
2 files changed, 127 insertions(+), 0 deletions(-)
diff --git a/modules_s/blst/README b/modules_s/blst/README
index 8387e98..44b966e 100644
--- a/modules_s/blst/README
+++ b/modules_s/blst/README
@@ -16,6 +16,11 @@ Andrei Pelinescu-Onciul
1.2.2. blst_add_retry_after(min, max)
1.2.3. blst_del()
1.2.4. blst_is_blacklisted()
+ 1.2.5. blst_set_ignore() blst_set_ignore(flags)
+ blst_rpl_set_ignore() blst_rpl_set_ignore(flags)
+
+ 1.2.6. blst_clear_ignore() blst_clear_ignore(flags)
+ blst_rpl_clear_ignore() blst_rpl_clear_ignore(flags)
1.1. Overview
@@ -80,3 +85,45 @@ if (msg_status==503){ # blacklist 503 source for Retry-After seconds
drop;
}
...
+
+1.2.5. blst_set_ignore() blst_set_ignore(flags) blst_rpl_set_ignore()
+blst_rpl_set_ignore(flags)
+
+ Set errors that will not be taken into account when deciding whether or
+ not to blacklist a destination for the current message or a local reply
+ to the current message.
+
+ blst_set_ignore(..) works for forwarding the current message and
+ blst_rpl_set_ignore(...) works for local replies to the current
+ message.
+
+ The variants with no parameters will ignore everything (equivalent with
+ passing 0xff).
+
+ The following flags are defined:
+ * 0x02 - generic send error (send denied/ failed).
+ * 0x04 - connect failed (TCP, TLS or SCTP).
+ * 0x08 - ICMP error (not currently used).
+ * 0x10 - SIP transaction timeout.
+ * 0x20 - 503 reply (statefull mode only). For more details see
+ tmblst_503.
+
+Note
+
+ TCP and TLS send and connect errors are handled per connection and not
+ per message. The connection blacklist ignore flags are inherithed from
+ the message that caused the connection establishment.
+
+ Example 5. blst_set_ignore usage
+ blst_set_ignore(6); # ignore send and connect errors
+
+1.2.6. blst_clear_ignore() blst_clear_ignore(flags) blst_rpl_clear_ignore()
+blst_rpl_clear_ignore(flags)
+
+ Clears blacklist ignore flags previously set by the corresponding
+ blst_set_ignore(...) or blst_rpl_set_ignore(...) functions.
+
+ See also blst_set_ignore.
+
+ Example 6. blst_clear_ignore usage
+ blst_clear_ignore(4); # ignore connect errors
diff --git a/modules_s/blst/doc/functions.xml b/modules_s/blst/doc/functions.xml
index a26f8b8..86bd87b 100644
--- a/modules_s/blst/doc/functions.xml
+++ b/modules_s/blst/doc/functions.xml
@@ -108,4 +108,84 @@ if (msg_status==503){ # blacklist 503 source for Retry-After seconds
</example>
</section>
+ <section id="blst_set_ignore">
+ <title>
+ <function>blst_set_ignore()</function>
+ <function>blst_set_ignore(flags)</function>
+ <function>blst_rpl_set_ignore()</function>
+ <function>blst_rpl_set_ignore(flags)</function>
+ </title>
+ <para>
+ Set errors that will not be taken into account when deciding
+ whether or not to blacklist a destination for the current message
+ or a local reply to the current message.
+ </para>
+ <para>
+ <function>blst_set_ignore(..)</function> works for forwarding the
+ current message and <function>blst_rpl_set_ignore(...)</function>
+ works for local replies to the current message.
+ </para>
+ <para>
+ The variants with no parameters will ignore everything (equivalent
+ with passing 0xff).
+ </para>
+ <para>
+ The following flags are defined:
+ <itemizedlist>
+ <listitem>
+ <emphasis>0x02</emphasis> - generic send error (send denied/
+ failed).
+ </listitem>
+ <listitem>
+ <emphasis>0x04</emphasis> - connect failed (TCP, TLS or SCTP).
+ </listitem>
+ <listitem>
+ <emphasis>0x08</emphasis> - ICMP error (not currently used).
+ </listitem>
+ <listitem>
+ <emphasis>0x10</emphasis> - SIP transaction timeout.
+ </listitem>
+ <listitem>
+ <emphasis>0x20</emphasis> - 503 reply (statefull mode only).
+ For more details see <emphasis>tm</emphasis>
+ <varname>blst_503</varname>.
+ </listitem>
+ </itemizedlist>
+ </para>
+ <note>
+ TCP and TLS send and connect errors are handled per connection and
+ not per message. The connection blacklist ignore flags are inherithed
+ from the message that caused the connection establishment.
+ </note>
+ <example>
+ <title><function>blst_set_ignore</function> usage</title>
+ <programlisting>
+ blst_set_ignore(6); # ignore send and connect errors
+ </programlisting>
+ </example>
+ </section>
+
+ <section id="blst_clear_ignore">
+ <title>
+ <function>blst_clear_ignore()</function>
+ <function>blst_clear_ignore(flags)</function>
+ <function>blst_rpl_clear_ignore()</function>
+ <function>blst_rpl_clear_ignore(flags)</function>
+ </title>
+ <para>
+ Clears blacklist ignore flags previously set by the corresponding
+ <function>blst_set_ignore(...)</function> or
+ <function>blst_rpl_set_ignore(...)</function> functions.
+ </para>
+ <para>
+ See also <function>blst_set_ignore</function>.
+ </para>
+ <example>
+ <title><function>blst_clear_ignore</function> usage</title>
+ <programlisting>
+ blst_clear_ignore(4); # ignore connect errors
+ </programlisting>
+ </example>
+ </section>
+
</section>
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
A new Flyspray task has been opened. Details are below.
User who did this - Andrey 'Krieger' Utkin (andrey.utkin.2)
Attached to Project - sip-router
Summary - ldapsearch with empty filter
Task Type - Bug Report
Category - Module
Status - Unconfirmed
Assigned To -
Operating System - Linux
Severity - Low
Priority - Normal
Reported Version - Development
Due in Version - Undecided
Due Date - Undecided
Details - When in routing script ldapsearch() is executed on LDAP query URL without 'filter' section, request forming fails:
ERROR: ldap [ldap_api_fn.c:193]: vsnprintf failed
Workaround for administrators can be filling filter section with '(objectclass=*)', what is anyway substituted by ldap library to request in case filter parameter set to NULL.
Fix of project code can be the attached patch.
Please notice that va_end() call is missing in original code.
One or more files have been attached.
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=23
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
A new Flyspray task has been opened. Details are below.
User who did this - Andrey 'Krieger' Utkin (andrey.utkin.2)
Attached to Project - sip-router
Summary - $shv problems
Task Type - Bug Report
Category - Module
Status - Unconfirmed
Assigned To -
Operating System - Linux
Severity - Low
Priority - Normal
Reported Version - Development
Due in Version - Undecided
Due Date - Undecided
Details - Hi all.
I added shared variable usage to my routing script, and it made kamailio fail to launch, it said "sh_pv_list not null!".
I tried to make as short config as possible, representing the usage of shv in my existing config, but kamailio didn't fail with it. I also tried to investigate it substituting existing route {} block with simple testing one, and loading all my modules, but didn't fail also.
After that i've realized that i can't spend so much time playing with it, and solved it using htable's $sht instead of $shv.
I suggest it is problem of 'pv' module.
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=22
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
A new Flyspray task has been opened. Details are below.
User who did this - Andrey 'Krieger' Utkin (andrey.utkin.2)
Attached to Project - sip-router
Summary - Crash at t_reply.c:668
Task Type - Bug Report
Category - tm
Status - Assigned
Assigned To - Andrei Pelinescu-Onciul
Operating System - Linux
Severity - Low
Priority - Normal
Reported Version - Development
Due in Version - Undecided
Due Date - Undecided
Details - Hello all.
Last days i notice frequent Kamailio crashes in testing environment and cores have mutual last point of gdb backtrace.
in _reply (trans=0xb5ae4198, p_msg=0x0, code=500, text=0xbfe9fad0 "I'm terribly sorry, server error occurred (1/TM)", lock=0) at t_reply.c:668
I attach logs of recent crash.
There is SIP communication between two kamailio installations (let's name them 'a' and 'b') and phones ('A' and 'B').
I'll try to explain the crash in few words as i understood it.
Phone A@a sends SUBSCRIBE on B to kamailio on host a.
Proxy 'a' looks up for B resource location (host 'b') and rewrites request URI substituting 'b' as host part, and calls t_relay().
Proxy 'b' receives "SUBSCRIBE sip:B@b...", processes handle_subscribe(), t_release(), as in sample config from distribtion.
Proxy 'b' replies '202 OK', and NOTIFY within that dialog.
Proxy 'a' receives NOTIFY and routes it to wrong place that does not reply to this request.
Proxy 'b' retransmits NOTIFY 7 times.
After these retransmits, proxy 'a' replies "SIP/2.0 500 I'm terribly sorry, server error occurred (1/TM)" to NOTIFY.
Proxy 'b' crashes.
GDB backtrace:
17:48root@oba ~ # gdb /usr/sbin/kamailio /core
....skipped...
Core was generated by `kamailio'.
Program terminated with signal 11, Segmentation fault.
....skipped...
#0 0xb7c880e5 in _reply (trans=0xb5a442c0, p_msg=0x0, code=500,
text=0xbfe2bd30 "I'm terribly sorry, server error occurred (1/TM)", lock=0) at t_reply.c:668
668 t_reply.c: No such file or directory.
in t_reply.c
(gdb) thread apply 1 bt
Thread 1 (process 8261):
#0 0xb7c880e5 in _reply (trans=0xb5a442c0, p_msg=0x0, code=500,
text=0xbfe2bd30 "I'm terribly sorry, server error occurred (1/TM)", lock=0) at t_reply.c:668
#1 0xb7c8a829 in t_reply_unsafe (t=0xb5a442c0, p_msg=0x0, code=500,
text=0xbfe2bd30 "I'm terribly sorry, server error occurred (1/TM)") at t_reply.c:1362
#2 0xb7c6c0d9 in kill_transaction_unsafe (trans=0xb5a442c0, error=-1) at t_funcs.c:236
#3 0xb7c8a2bb in t_should_relay_response (Trans=0xb5a442c0, new_code=500, branch=0, should_store=0xbfe2be60,
should_relay=0xbfe2be5c, cancel_bitmap=0xbfe2c044, reply=0x82a2024) at t_reply.c:1278
#4 0xb7c8c778 in local_reply (t=0xb5a442c0, p_msg=0x82a2024, branch=0, msg_status=500, cancel_bitmap=0xbfe2c044)
at t_reply.c:1776
#5 0xb7c8db15 in reply_received (p_msg=0x82a2024) at t_reply.c:2102
#6 0x0807af05 in forward_reply (msg=0x82a2024) at forward.c:689
#7 0x080a491f in receive_msg (
buf=0x8218440 "SIP/2.0 500 I'm terribly sorry, server error occurred (1/TM)\r\nVia: SIP/2.0/UDP 192.168.1.113;branch=z9hG4bKd44d.cf568782.0;rport=5060\r\nTo: sip:2020@192.168.1.124;tag=849224948\r\nFrom: sip:1010@192.168."..., len=557, rcv_info=0xbfe2c230) at receive.c:257
#8 0x081008ec in udp_rcv_loop () at udp_server.c:520
#9 0x08083e8e in main_loop () at main.c:1446
#10 0x08085da8 in main (argc=1, argv=0xbfe2c444) at main.c:2243
(gdb)
System details:
I use git branch 'kamailio_3.0' and check for new upstream commits once in several days.
I have kamailio running with experimental module of sqlite database driver.
One or more files have been attached.
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=21
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
A user has added themself to the list of users assigned to this task.
FS#21 - Crash at t_reply.c:668
User who did this - Andrey 'Krieger' Utkin (andrey.utkin.2)
http://sip-router.org/tracker/index.php?do=details&task_id=21
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
Module: sip-router
Branch: kamailio_3.0
Commit: 0f09666aa6d291cc6cba2f5047dd4ac1f4eec254
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=0f09666…
Author: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Wed Dec 23 13:16:01 2009 +0100
tm: new param: local_ack_mode
local_ack_mode controls how local 200 ACKs (ACKs to 2xx replies
for local transactions, created via t_uac*) are sent.
There are 3 possible modes:
- 0 (default) - ACK is sent according to the rfc (the next hop is
found using the contact and the route set and then dns
resolution is used on it).
- 1 - the ACK is sent to the same address as the corresponding
INVITE branch.
- 2 - the ACL is sent to the same address as the source of the 2xx
reply.
Modes 1 and 2 break the rfc, but are useful to deal with
some simple UA behind the NAT cases.
Note that mode 1 is not similar to generating ACKs for negative
replies. Even if the ACK will be sent to the same address as the
INVITE, it will contain the correct route set and uri.
(cherry picked from commit 49218e800df4a349fae240733963ca4b46bdca3a)
---
modules/tm/config.c | 10 +++++++-
modules/tm/config.h | 1 +
modules/tm/t_msgbuilder.c | 56 +++++++++++++++++++++++++++++----------------
modules/tm/tm.c | 1 +
4 files changed, 47 insertions(+), 21 deletions(-)
diff --git a/modules/tm/config.c b/modules/tm/config.c
index 1ecb5ac..654153d 100644
--- a/modules/tm/config.c
+++ b/modules/tm/config.c
@@ -91,7 +91,8 @@ struct cfg_group_tm default_tm_cfg = {
* for every method except BYE by default */
1, /* cancel_b_method used for e2e and 6xx cancels*/
1, /* reparse_on_dns_failover */
- 0 /* disable_6xx, by default off */
+ 0, /* disable_6xx, by default off */
+ 0 /* local_ack_mode, default 0 (rfc3261 conformant) */
};
void *tm_cfg = &default_tm_cfg;
@@ -186,5 +187,12 @@ cfg_def_t tm_cfg_def[] = {
"branch instead of from the received request"},
{"disable_6xx_block", CFG_VAR_INT | CFG_ATOMIC, 0, 1, 0, 0,
"if set to 1, 6xx is treated like a normal reply (breaks rfc)"},
+ {"local_ack_mode", CFG_VAR_INT | CFG_ATOMIC, 0, 2, 0, 0,
+ "if set to 1 or 2, local 200 ACKs are sent to the same address as the"
+ " corresponding INVITE (1) or the source of the 200 reply (2) instead"
+ " of using the contact and the route set (it breaks the rfc, if "
+ " it is not set to 0 but allows dealing with NATed contacts in some "
+ "simple cases)"
+ },
{0, 0, 0, 0, 0, 0}
};
diff --git a/modules/tm/config.h b/modules/tm/config.h
index 91edf42..cfdd41f 100644
--- a/modules/tm/config.h
+++ b/modules/tm/config.h
@@ -134,6 +134,7 @@ struct cfg_group_tm {
unsigned int cancel_b_flags;
int reparse_on_dns_failover;
int disable_6xx;
+ int local_ack_mode;
};
extern struct cfg_group_tm default_tm_cfg;
diff --git a/modules/tm/t_msgbuilder.c b/modules/tm/t_msgbuilder.c
index c0160b9..b76c659 100644
--- a/modules/tm/t_msgbuilder.c
+++ b/modules/tm/t_msgbuilder.c
@@ -982,33 +982,49 @@ char *build_dlg_ack(struct sip_msg* rpl, struct cell *Trans,
*len = SIP_VERSION_LEN + ACK_LEN + 2 /* spaces */ + CRLF_LEN;
*len += ruri.len;
-
- /* via */
+ /* dst */
+ switch(cfg_get(tm, tm_cfg, local_ack_mode)){
+ case 1:
+ /* send the local 200 ack to the same dst as the corresp. invite*/
+ *dst=Trans->uac[branch].request.dst;
+ break;
+ case 2:
+ /* send the local 200 ack to the same dst as the 200 reply source*/
+ init_dst_from_rcv(dst, &rpl->rcv);
+ dst->send_flags=rpl->fwd_send_flags;
+ break;
+ case 0:
+ default:
+ /* rfc conformant behaviour: use the next_hop determined from the
+ contact and the route set */
#ifdef USE_DNS_FAILOVER
- if (cfg_get(core, core_cfg, use_dns_failover)){
- dns_srv_handle_init(&dns_h);
- if ((uri2dst(&dns_h , dst, rpl, &next_hop, PROTO_NONE)==0) ||
- (dst->send_sock==0)){
- dns_srv_handle_put(&dns_h);
- LOG(L_ERR, "build_dlg_ack: no socket found\n");
- goto error;
+ if (cfg_get(core, core_cfg, use_dns_failover)){
+ dns_srv_handle_init(&dns_h);
+ if ((uri2dst(&dns_h , dst, rpl, &next_hop, PROTO_NONE)==0) ||
+ (dst->send_sock==0)){
+ dns_srv_handle_put(&dns_h);
+ LOG(L_ERR, "build_dlg_ack: no socket found\n");
+ goto error;
+ }
+ dns_srv_handle_put(&dns_h); /* not needed any more */
+ }else{
+ if ((uri2dst(0 , dst, rpl, &next_hop, PROTO_NONE)==0) ||
+ (dst->send_sock==0)){
+ LOG(L_ERR, "build_dlg_ack: no socket found\n");
+ goto error;
+ }
}
- dns_srv_handle_put(&dns_h); /* not needed any more */
- }else{
- if ((uri2dst(0 , dst, rpl, &next_hop, PROTO_NONE)==0) ||
+#else /* USE_DNS_FAILOVER */
+ if ( (uri2dst( dst, rpl, &next_hop, PROTO_NONE)==0) ||
(dst->send_sock==0)){
- LOG(L_ERR, "build_dlg_ack: no socket found\n");
+ LOG(L_ERR, "build_dlg_ack: no socket found\n");
goto error;
}
+#endif /* USE_DNS_FAILOVER */
+ break;
}
-#else
- if ( (uri2dst( dst, rpl, &next_hop, PROTO_NONE)==0) ||
- (dst->send_sock==0)){
- LOG(L_ERR, "build_dlg_ack: no socket found\n");
- goto error;
- }
-#endif
+ /* via */
if (!t_calc_branch(Trans, branch, branch_buf, &branch_len)) goto error;
branch_str.s = branch_buf;
branch_str.len = branch_len;
diff --git a/modules/tm/tm.c b/modules/tm/tm.c
index 51a31c0..2774017 100644
--- a/modules/tm/tm.c
+++ b/modules/tm/tm.c
@@ -472,6 +472,7 @@ static param_export_t params[]={
{"on_sl_reply", PARAM_STRING|PARAM_USE_FUNC, fixup_on_sl_reply },
{"contacts_avp", PARAM_STRING, &contacts_avp_param },
{"disable_6xx_block", PARAM_INT, &default_tm_cfg.disable_6xx },
+ {"local_ack_mode", PARAM_INT, &default_tm_cfg.local_ack_mode },
{0,0,0}
};
Module: sip-router
Branch: kamailio_3.0
Commit: a883a0b2501ba2b25ca87994d4c211f75a556ebe
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a883a0b…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Wed Dec 23 17:24:30 2009 +0100
tm: fix drop reply behavior
- Kamailio default behavior after failure route was to drop previous
received replies. However, if the failure_route didn't add a new
branch, resulted in a 500 TM reply error
- thanks to Ricardo Martinez for reporting
- credits to Andrei Pelinescu-Onciul for troubleshooting and prviding
the fix: a new default mode for Kamailio (3) which does not drop
previous replies if no new branch was added
---
modules/tm/t_reply.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/modules/tm/t_reply.c b/modules/tm/t_reply.c
index 24fad6f..4f25059 100644
--- a/modules/tm/t_reply.c
+++ b/modules/tm/t_reply.c
@@ -1128,7 +1128,7 @@ static enum rps t_should_relay_response( struct cell *Trans , int new_code,
allow new branches from the failure route */
if(sr_cfg_compat==SR_COMPAT_KAMAILIO)
- drop_replies = 1;
+ drop_replies = 3;
else
drop_replies = 0;
/* run ON_FAILURE handlers ( route and callbacks) */
@@ -1141,7 +1141,9 @@ static enum rps t_should_relay_response( struct cell *Trans , int new_code,
FL_REPLIED:0);
run_failure_handlers( Trans, Trans->uac[picked_branch].reply,
picked_code, extra_flags);
- if (unlikely(drop_replies)) {
+ if (unlikely((drop_replies==3 && branch_cnt<Trans->nr_of_outgoings) ||
+ (drop_replies!=0 && drop_replies!=3))
+ ) {
/* drop all the replies that we have already saved */
i = 0;
if(drop_replies==2)
Module: sip-router
Branch: kamailio_3.0
Commit: cb1866ee7b23688d12b222d503b1709f16f75a12
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=cb1866e…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Wed Dec 23 17:34:09 2009 +0100
tm: updated doc for t_drop_replies()
---
modules/tm/README | 15 ++++++++++-----
modules/tm/doc/functions.xml | 13 ++++++++++---
2 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/modules/tm/README b/modules/tm/README
index 64ede44..a257952 100644
--- a/modules/tm/README
+++ b/modules/tm/README
@@ -96,7 +96,7 @@ Juha Heinanen
1.5.26. t_is_expired()
1.5.27. t_relay_cancel()
1.5.28. t_lookup_cancel(), t_lookup_cancel(1)
- 1.5.29. t_drop_replies()
+ 1.5.29. t_drop_replies([mode])
1.5.30. t_save_lumps()
1.5.31. t_load_contacts()
1.5.32. t_next_contacts()
@@ -1718,12 +1718,17 @@ if (method == CANCEL) {
# do the same as for INVITEs
}
-1.5.29. t_drop_replies()
+1.5.29. t_drop_replies([mode])
Drops all the previously received replies in failure_route block to
- make sure that none of them is picked up again. Works only if a new
- branch is added to the transaction, or it is explicitly replied in the
- script!
+ make sure that none of them is picked up again.
+
+ The parameter 'mode' controls which replies are dropped: 'a' or missing
+ - all replies are dropped; 'l' - replies received for last set of
+ branches are dropped; 'n' - no reply is dropped.
+
+ Dropping replies works only if a new branch is added to the
+ transaction, or it is explicitly replied in the script!
Example 66. t_drop_replies() usage
...
diff --git a/modules/tm/doc/functions.xml b/modules/tm/doc/functions.xml
index c8f09d7..5aee3bb 100644
--- a/modules/tm/doc/functions.xml
+++ b/modules/tm/doc/functions.xml
@@ -946,13 +946,20 @@ if (method == CANCEL) {
<section id="t_drop_replies">
<title>
- <function>t_drop_replies()</function>
+ <function>t_drop_replies([mode])</function>
</title>
<para>
Drops all the previously received replies in failure_route
block to make sure that none of them is picked up again.
- Works only if a new branch is added to the transaction,
- or it is explicitly replied in the script!
+ </para>
+ <para>
+ The parameter 'mode' controls which replies are dropped: 'a'
+ or missing - all replies are dropped; 'l' - replies received for
+ last set of branches are dropped; 'n' - no reply is dropped.
+ </para>
+ <para>
+ Dropping replies works only if a new branch is added to the
+ transaction, or it is explicitly replied in the script!
</para>
<example>
<title><function>t_drop_replies()</function> usage</title>