Module: sip-router Branch: 3.1 Commit: 8268c8e6e6af3acf4dafdbd13bbf3d223662b35d URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=8268c8e6...
Author: Juha Heinanen jh@tutpro.com Committer: Juha Heinanen jh@tutpro.com Date: Mon Aug 8 10:55:24 2011 +0300
modules/tm: t_load_contacts() now ignores ruri if it has already been used - Thanks to Alex Hermann for the patch. (cherry picked from commit 9efc7014638e2c7ead56ac36d880b303f2873b85)
---
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 */