This patch does it
for me:
---
---
modules/rr/record.c.ori 2010-05-25 13:10:48.000000000 +0200
+++
modules/rr/record.c 2010-05-25 13:37:26.000000000 +0200
@@ -41,6 +41,7 @@
#include
"../../data_lump.h"
#include
"record.h"
#include
"rr_mod.h"
+#include
"loose.h"
#define RR_PREFIX
"Record-Route: <sip:"
@@ -291,12 +292,20 @@
}
if
(append_fromtag) {
- if
(parse_from_header(_m) < 0) {
-
LM_ERR("From parsing failed\n");
-
return -2;
+ if
(is_direction(_m, RR_FLOW_UPSTREAM)==0) {
+
/* use to-tag in script! */
+
+
LM_DBG("from-tag not added on upstream request (it’s wrong anyway)! Must
be done manually using record_route(\";ftag=$tt\");");
+
+
tag = 0;
+ }
else {
+
if (parse_from_header(_m) < 0) {
+
LM_ERR("From parsing failed\n");
+
return -2;
+
}
+
from = (struct to_body*)_m->from->parsed;
+
tag = &from->tag_value;
}
- from
= (struct to_body*)_m->from->parsed;
- tag =
&from->tag_value;
} else {
tag =
0;
}
---
Plus in script after
loose_route():
if (check_route_param("vsf=")) {
# fix broken UAC not sending initial route-set
$(var(vsf)) = $(hdr(Route)[0]{s.select,0,,}{param.value,vsf}{s.select,0,>});
xlog("L_INFO", ">> Stored UAC param
vsf=$(var(vsf))");
if (is_direction("upstream")) {
record_route(";ftag=$tt;vsf=$(var(vsf))");
} else {
record_route(";vsf=$(var(vsf))");
}
} else {
if
(is_direction("upstream")) {
record_route(";ftag=$tt");
} else {
record_route();
}
}
Br
Walter
Von:
sr-dev-bounces@lists.sip-router.org
[mailto:sr-dev-bounces@lists.sip-router.org] Im Auftrag von NeoTel Lists
Gesendet: Dienstag, 25. Mai 2010 13:04
An: sr-dev@lists.sip-router.org
Betreff: [sr-dev] direction check missing in record_route()
Hi!
Can someone of the experts pls help me with
a fix in record.c/record_route() please?
IMHO in append_fromtag=1 mode the direction
check is missing, if record_route() is called in loose_route block.
(Sure, I know, there is no need to call
record_route() there, but since nearly all of the UA out there don’t use first
record set on reInvites, I must do record routing on reInvites, too!)
(And I really do need the vsf parameter in
subsequent messages J)
So I would do the following:
if (append_fromtag) {
if (is_direction(_m, RR_FLOW_UPSTREAM)) { /* if not in dialog, would
return 0 anyway, e.g. no Route param ftag present */
/* use to-tag! */
Unfortunately there is no
“parse_to_header”, bec. then it would be simple….
How to access the to-tag, if any?
} else {
if (parse_from_header(_m) < 0) {
LM_ERR("From parsing failed\n");
return -2;
}
from = (struct to_body*)_m->from->parsed;
tag = &from->tag_value;
}
} else {
tag = 0;
}
--
What I do now is not nice: I set
modparam("rr", "append_fromtag", 0) and patched rr_mod.c
and uac.c not to return an Error, if append_fromtag is 0 J
[root@p01-1 rr]# more
../../../rr_mod.c.patch
---
modules/rr/rr_mod.c.ori 2010-05-25 11:03:29.000000000
+0200
+++ modules/rr/rr_mod.c 2010-05-25
12:08:34.000000000 +0200
@@ -172,9 +172,10 @@
int n;
if (!append_fromtag) {
-
LM_ERR("usage of \"is_direction\" function requires
parameter"
-
"\"append_fromtag\" enabled!!");
-
return E_CFG;
+
LM_WARN("usage of \"is_direction\" function requires
parameter"
+
"\"append_fromtag\"
enabled!!"
+
" - must be done manually to work correctly!");
+
/* return E_CFG; */
}
if (param_no==1) {
n = 0;
[root@p01-1 rr]# more ../../../uac.c.patch
---
modules/uac/uac.c.orig 2010-05-25
10:57:59.000000000 +0200
+++ modules/uac/uac.c
2010-05-25 11:00:40.000000000 +0200
@@ -206,9 +206,13 @@
if (from_restore_mode==FROM_AUTO_RESTORE) {
/* we need the append_fromtag on in RR */
if (!uac_rrb.append_fromtag) {
-
LM_ERR("'append_fromtag' RR param is not enabled!"
-
" - required by AUTO restore mode\n");
-
goto error;
+
LM_WARN("'append_fromtag' RR param is not enabled!"
+
" - required by AUTO restore mode"
+
" - make sure it's done manually!\n");
+
/* normally ERR, but just remind script writer, that she has to do ;ftag=$ft/$tt
manually
+
normally this would be OK, but record_route() add $ft in upsteam request
+
should be fixed in rr module!
+
goto error; */
}
/*
get all requests doing loose route */
if (uac_rrb.register_rrcb( rr_checker, 0)!=0) {
--
Many thanks!
Walter
---------------------------------------
NeoTel Telefonservice GmbH & Co KG
Esterhazygasse 18a/15
A-1060 Wien
T: +43 1 4094181 - 81
M: +43 660 88866 - 81
F: +43 1 4094181 - 981