Module: sip-router Branch: master Commit: 30ff67af2030f8ff83c479c8c754ff734b35a71e URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=30ff67af...
Author: Alex Hermann alex@speakup.nl Committer: Alex Hermann alex@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 */