<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.E-MailFormatvorlage17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.E-MailFormatvorlage18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=DE link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>This patch does it
for me:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>---<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>---
modules/rr/record.c.ori 2010-05-25 13:10:48.000000000 +0200<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+++
modules/rr/record.c 2010-05-25 13:37:26.000000000 +0200<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>@@ -41,6 +41,7 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> #include
"../../data_lump.h"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> #include
"record.h"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> #include
"rr_mod.h"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+#include
"loose.h"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> #define RR_PREFIX
"Record-Route: <sip:"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>@@ -291,12 +292,20 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> if
(append_fromtag) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>- if
(parse_from_header(_m) < 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>-
LM_ERR("From parsing failed\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>-
return -2;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+ if
(is_direction(_m, RR_FLOW_UPSTREAM)==0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
/* use to-tag in script! */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
LM_DBG("from-tag not added on upstream request (it’s wrong anyway)! Must
be done manually using record_route(\";ftag=$tt\");");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
tag = 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
if (parse_from_header(_m) < 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
LM_ERR("From parsing failed\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
return -2;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
from = (struct to_body*)_m->from->parsed;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>+
tag = &from->tag_value;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>- from
= (struct to_body*)_m->from->parsed;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>- tag =
&from->tag_value;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> } else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> tag =
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>---<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>Plus in script after
loose_route():<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
if (check_route_param("vsf=")) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
# fix broken UAC not sending initial route-set<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
$(var(vsf)) = $(hdr(Route)[0]{s.select,0,,}{param.value,vsf}{s.select,0,>});<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
xlog("L_INFO", ">> Stored UAC param
vsf=$(var(vsf))");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
if (is_direction("upstream")) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
record_route(";ftag=$tt;vsf=$(var(vsf))");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
} else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
record_route(";vsf=$(var(vsf))");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
} else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'> if
(is_direction("upstream")) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
record_route(";ftag=$tt");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
} else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
record_route();<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>Br<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'>Walter<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>Von:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
sr-dev-bounces@lists.sip-router.org
[mailto:sr-dev-bounces@lists.sip-router.org] <b>Im Auftrag von </b>NeoTel Lists<br>
<b>Gesendet:</b> Dienstag, 25. Mai 2010 13:04<br>
<b>An:</b> sr-dev@lists.sip-router.org<br>
<b>Betreff:</b> [sr-dev] direction check missing in record_route()<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span lang=EN-US>Hi!<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>Can someone of the experts pls help me with
a fix in record.c/record_route() please?<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>IMHO in append_fromtag=1 mode the direction
check is missing, if record_route() is called in loose_route block.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>(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!) <o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>(And I really do need the vsf parameter in
subsequent messages </span><span lang=EN-US style='font-family:Wingdings'>J</span><span
lang=EN-US>)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>So I would do the following:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
if (append_fromtag) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
if (is_direction(_m, RR_FLOW_UPSTREAM)) { /* if not in dialog, would
return 0 anyway, e.g. no Route param ftag present */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
/* use to-tag! */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>Unfortunately there is no
“parse_to_header”, bec. then it would be simple….<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>How to access the to-tag, if any?<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
} else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
if (parse_from_header(_m) < 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
LM_ERR("From parsing failed\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
return -2;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
from = (struct to_body*)_m->from->parsed;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
tag = &from->tag_value;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
} else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
tag = 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>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 </span><span
lang=EN-US style='font-family:Wingdings'>J</span><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>[root@p01-1 rr]# more
../../../rr_mod.c.patch<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>---
modules/rr/rr_mod.c.ori 2010-05-25 11:03:29.000000000
+0200<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ modules/rr/rr_mod.c 2010-05-25
12:08:34.000000000 +0200<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -172,9 +172,10 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
int n;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
if (!append_fromtag) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>-
LM_ERR("usage of \"is_direction\" function requires
parameter"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>-
"\"append_fromtag\" enabled!!");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>-
return E_CFG;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
LM_WARN("usage of \"is_direction\" function requires
parameter"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
"\"append_fromtag\"
enabled!!"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
" - must be done manually to work correctly!");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
/* return E_CFG; */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
if (param_no==1) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
n = 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>[root@p01-1 rr]# more ../../../uac.c.patch<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>---
modules/uac/uac.c.orig 2010-05-25
10:57:59.000000000 +0200<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ modules/uac/uac.c
2010-05-25 11:00:40.000000000 +0200<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -206,9 +206,13 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
if (from_restore_mode==FROM_AUTO_RESTORE) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
/* we need the append_fromtag on in RR */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
if (!uac_rrb.append_fromtag) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>-
LM_ERR("'append_fromtag' RR param is not enabled!"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>-
" - required by AUTO restore mode\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>-
goto error;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
LM_WARN("'append_fromtag' RR param is not enabled!"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
" - required by AUTO restore mode"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
" - make sure it's done manually!\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
/* normally ERR, but just remind script writer, that she has to do ;ftag=$ft/$tt
manually<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
normally this would be OK, but record_route() add $ft in upsteam request<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
should be fixed in rr module!<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
goto error; */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
/*
get all requests doing loose route */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
if (uac_rrb.register_rrcb( rr_checker, 0)!=0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>Many thanks!<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>Walter<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>---------------------------------------<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>NeoTel Telefonservice GmbH & Co KG<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>Esterhazygasse 18a/15<o:p></o:p></span></p>
<p class=MsoNormal>A-1060 Wien<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>T: +43 1 4094181 - 81<o:p></o:p></p>
<p class=MsoNormal>M: +43 660 88866 - 81<o:p></o:p></p>
<p class=MsoNormal>F: +43 1 4094181 - 981<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</body>
</html>