Module: sip-router
Branch: 3.1
Commit: e66d50297ca9a4b1eb3f0c7c61095ffb26a44af8
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=e66d502…
Author: Alex Hermann <alex(a)speakup.nl>
Committer: Alex Hermann <alex(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 */