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(a)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(a)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