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

Author: Alex Hermann <a...@speakup.nl>
Committer: Alex Hermann <a...@speakup.nl>
Date:   Mon Aug  1 16:09:38 2011 +0200

modules/tm: fix t_load_contacts for failure_route. Ignore ruri if it has 
already been used.

Commit e973bbe5e7310861f77b17ce0afaf1cca35fe48a removed the logic for handling
failure_route. The result was that when t_load_contacts is called from
failure_route, the current request-uri is added as branch _again_.

This commit restores the original functionality by ignoring the request uri
if it is marked as consumed.

---

 modules/tm/t_serial.c |   49 ++++++++++++++++++++++++++++++++-----------------
 1 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/modules/tm/t_serial.c b/modules/tm/t_serial.c
index 899cb5b..bd5ae27 100644
--- a/modules/tm/t_serial.c
+++ b/modules/tm/t_serial.c
@@ -242,15 +242,21 @@ int t_load_contacts(struct sip_msg* msg, char* key, char* 
value)
     }
 
     ruri = (str *)0;
-
-    /* Take first q from Request-URI */
-    ruri = GET_RURI(msg);
-    if (!ruri) {
-       LM_ERR("no Request-URI found\n");
-       return -1;
+       if (ruri_is_new) {
+               /* Take first q from Request-URI */
+               ruri = GET_RURI(msg);
+               if (!ruri) {
+                       LM_ERR("no Request-URI found\n");
+                       return -1;
+               }
+               first_q = get_ruri_q();
+               first_idx = 0;
+       } else {
+               /* Take first q from first branch */
+               uri.s = get_branch(0, &uri.len, &first_q, &dst_uri, &path, 
&flags,
+                                      &sock);
+               first_idx = 1;
     }
-    first_q = get_ruri_q();
-    first_idx = 0;
 
     /* Check if all q values are equal */
     for(idx = first_idx; (tmp.s = get_branch(idx, &tmp.len, &q, 0, 0, 0, 0))
@@ -272,15 +278,24 @@ rest:
                return -1;
     }
 
-    /* Insert Request-URI branch to first contact */
-    contacts->uri.s = ruri->s;
-    contacts->uri.len = ruri->len;
-    contacts->dst_uri = msg->dst_uri;
-    contacts->sock = msg->force_send_socket;
-    getbflagsval(0, &contacts->flags);
-    contacts->path = msg->path_vec;
-    contacts->q = first_q;
-    contacts->next = (struct contact *)0;
+       if (ruri_is_new) {
+               /* Insert Request-URI branch to first contact */
+               contacts->uri.s = ruri->s;
+               contacts->uri.len = ruri->len;
+               contacts->dst_uri = msg->dst_uri;
+               contacts->sock = msg->force_send_socket;
+               getbflagsval(0, &contacts->flags);
+               contacts->path = msg->path_vec;
+       } else {
+               /* Insert first branch to first contact */
+               contacts->uri = uri;
+               contacts->dst_uri = dst_uri;
+               contacts->sock = sock;
+               contacts->flags = flags;
+               contacts->path = path;
+    }
+       contacts->q = first_q;
+       contacts->next = (struct contact *)0;
 
     /* Insert (remaining) branches to contact list in increasing q order */
 


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to