Module: sip-router
Branch: tmp/tm_async_reply_support
Commit: a23a131e5e6b0751c9d18bca3e6fe695c6cdbe30
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a23a131e5e6b0751c9d18bca3e6fe695c6cdbe30

Author: Richard Good <[email protected]>
Committer: Richard Good <[email protected]>
Date:   Mon Jul 15 12:51:23 2013 +0200

modules/tm: removed branch parameter from t_continue_reply
        - With improved suspend functionality now saving the branch the calling 
application does not need to store the reply branch when suspending on a reply

---

 modules/tm/t_suspend.c |   23 ++++++++++++++++++-----
 modules/tm/t_suspend.h |    8 ++++----
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/modules/tm/t_suspend.c b/modules/tm/t_suspend.c
index eb5b1a5..8d5f0aa 100644
--- a/modules/tm/t_suspend.c
+++ b/modules/tm/t_suspend.c
@@ -162,8 +162,13 @@ int t_suspend_reply(struct sip_msg *msg,
                 LOG(L_ERR, "ERROR: t_suspend_reply: can't alloc' clone 
memory\n");
                 return -1;
         }
-            
-        LOG(L_DBG,"DEBUG: t_suspend_reply: Saving transaction hash and 
label\n");
+        
+        LOG(L_DBG,"DEBUG: t_suspend_reply: Saving transaction data\n");
+        t->uac[branch].reply->flags = msg->flags;
+        t->async_backup.backup_route = get_route_type();
+        t->async_backup.backup_branch = get_t_branch();
+        t->async_backup.ruri_new = ruri_get_forking_state();
+        
         *hash_index = t->hash_index;
         *label = t->label;
 
@@ -293,6 +298,7 @@ int t_continue(unsigned int hash_index, unsigned int label,
                }
        }
 
+        t->flags &= ~T_ASYNC_CONTINUE;   //we can now know anywhere in 
kamailio that we are executing post a suspend.
        UNLOCK_ASYNC_CONTINUE(t);
 
        /* unref the transaction */
@@ -332,11 +338,12 @@ kill_trans:
  *     <0 - failure
  */
 int t_continue_reply(unsigned int hash_index, unsigned int label,
-               struct action *route, int branch)
+               struct action *route)
 {
        struct cell     *t;
         struct sip_msg faked_resp;
         struct cancel_info cancel_data;
+        int branch;
         
        if (t_lookup_ident(&t, hash_index, label) < 0) {
                LOG(L_ERR, "ERROR: t_continue_reply: transaction not found\n");
@@ -352,11 +359,14 @@ int t_continue_reply(unsigned int hash_index, unsigned 
int label,
                return 1;
        }
         
+        branch = t->async_backup.backup_branch;
+        
         init_cancel_info(&cancel_data);
 
        /* The transaction has to be locked to protect it
         * form calling t_continue() multiple times simultaneously */
        LOCK_ASYNC_CONTINUE(t);
+        t->flags |= T_ASYNC_CONTINUE;   //we can now know anywhere in kamailio 
that we are executing post a suspend.
 
         LOG(L_DBG,"DEBUG: t_continue_reply: This a continue from a reply 
suspend\n");
         /* this is a continue from a reply suspend */
@@ -457,7 +467,7 @@ int t_continue_reply(unsigned int hash_index, unsigned int 
label,
         
         
 done:
-        
+        t->flags &= ~T_ASYNC_CONTINUE;   //we can now know anywhere in 
kamailio that we are executing post a suspend.
         UNLOCK_ASYNC_CONTINUE(t);
                     
         tm_ctx_set_branch_index(T_BR_UNDEFINED);        
@@ -546,9 +556,10 @@ int t_cancel_suspend(unsigned int hash_index, unsigned int 
label)
  *     0  - success
  *     <0 - failure
  */
-int t_cancel_suspend_reply(unsigned int hash_index, unsigned int label, int 
branch)
+int t_cancel_suspend_reply(unsigned int hash_index, unsigned int label)
 {
        struct cell     *t;
+        int branch;
        
        t = get_t();
        if (!t || t == T_UNDEFINED) {
@@ -564,6 +575,8 @@ int t_cancel_suspend_reply(unsigned int hash_index, 
unsigned int label, int bran
                        "transaction id mismatch\n");
                return -1;
        }
+        
+        branch = t->async_backup.backup_branch;
        
         LOG(L_DBG,"DEBUG: t_cancel_suspend_reply: This is a cancel suspend for 
a response\n");
         
diff --git a/modules/tm/t_suspend.h b/modules/tm/t_suspend.h
index f50fc5d..b898dba 100644
--- a/modules/tm/t_suspend.h
+++ b/modules/tm/t_suspend.h
@@ -46,16 +46,16 @@ typedef int (*t_continue_f)(unsigned int hash_index, 
unsigned int label,
                struct action *route);
 
 int t_continue_reply(unsigned int hash_index, unsigned int label,
-               struct action *route, int branch);
+               struct action *route);
 typedef int (*t_continue_reply_f)(unsigned int hash_index, unsigned int label,
-               struct action *route, int branch);
+               struct action *route);
 
 
 int t_cancel_suspend(unsigned int hash_index, unsigned int label);
 typedef int (*t_cancel_suspend_f)(unsigned int hash_index, unsigned int label);
 
-int t_cancel_suspend_reply(unsigned int hash_index, unsigned int label, int 
branch);
-typedef int (*t_cancel_suspend_reply_f)(unsigned int hash_index, unsigned int 
label, int branch);
+int t_cancel_suspend_reply(unsigned int hash_index, unsigned int label);
+typedef int (*t_cancel_suspend_reply_f)(unsigned int hash_index, unsigned int 
label);
 
 
 #endif /* _T_SUSPEND_H */


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

Reply via email to