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