Module: sip-router
Branch: sr_3.0
Commit: af9cbb358ba104e12bd5f8cec2e5ff117d57f1b2
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=af9cbb358ba104e12bd5f8cec2e5ff117d57f1b2

Author: Andrei Pelinescu-Onciul <[email protected]>
Committer: Andrei Pelinescu-Onciul <[email protected]>
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.

(cherry-picked from commit ba15378ef66a11d3cbd6862aa2bfb060d099ca03)

---

 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 ff89dd4..e13acbb 100644
--- a/modules/tm/t_reply.c
+++ b/modules/tm/t_reply.c
@@ -2020,13 +2020,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);
@@ -2038,6 +2031,16 @@ int reply_received( struct sip_msg  *p_msg )
                set_avp_list( AVP_TRACK_TO | AVP_CLASS_USER, backup_user_to );
                set_avp_list( AVP_TRACK_FROM | AVP_CLASS_DOMAIN, 
backup_domain_from );
                set_avp_list( AVP_TRACK_TO | AVP_CLASS_DOMAIN, backup_domain_to 
);
+               /* 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 */


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to