Module: sip-router
Branch: master
Commit: ba15378ef66a11d3cbd6862aa2bfb060d099ca03
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=ba15378…
Author: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Date: Mon Feb 22 18:01:26 2010 +0100
tm: onreply_route: fix cleanup after DROP
After a DROP in the onreply_route the avp lists where not restored
to their original values and the possible msg flags changes in the
script were dropped.
---
modules/tm/t_reply.c | 17 ++++++++++-------
1 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/modules/tm/t_reply.c b/modules/tm/t_reply.c
index f37903a..9fbe6c3 100644
--- a/modules/tm/t_reply.c
+++ b/modules/tm/t_reply.c
@@ -2053,13 +2053,6 @@ int reply_received( struct sip_msg *p_msg )
LOCK_REPLIES( t );
replies_locked=1;
run_top_route(onreply_rt.rlist[t->on_reply], p_msg, &ctx);
- if ((ctx.run_flags&DROP_R_F) && (msg_status<200)) {
- if (unlikely(replies_locked)) {
- replies_locked = 0;
- UNLOCK_REPLIES( t );
- }
- goto done;
- }
/* transfer current message context back to t */
if (t->uas.request) t->uas.request->flags=p_msg->flags;
getbflagsval(0, &uac->branch_flags);
@@ -2074,6 +2067,16 @@ int reply_received( struct sip_msg *p_msg )
#ifdef WITH_XAVP
xavp_set_list(backup_xavps);
#endif
+ /* handle a possible DROP in the script, but only if this
+ is not a final reply (final replies already stop the timers
+ and droping them might leave a transaction living forever) */
+ if ((ctx.run_flags&DROP_R_F) && (msg_status<200)) {
+ if (unlikely(replies_locked)) {
+ replies_locked = 0;
+ UNLOCK_REPLIES( t );
+ }
+ goto done;
+ }
}
#ifdef USE_DST_BLACKLIST
/* add temporary to the blacklist the source of a 503 reply */