The evaluation for uri==myself condition is done inside src/core/route.c
starting with line 1817. I see there that it takes default SIP port if
none is set in the r-uri.
Cheers,
Daniel
On 20.07.18 06:48, Karthik Srinivasan wrote:
So, i think i have determined the root cause of my
issue:
Background info:
- I have a request URI of an INVITE that contains no port number.
- My application is not listening on the default port of 5060
The is_myself(...) function handles a 'no port in request uri'
differently than uri==myself.
By that i mean, is_myself(...) does not default the port to 5060 when
looking up aliases/(which ip addresses and ports the process is bound
to); it simply does not take port number into account (if no port
exists in request uri) when searching the alias list. BUT,
uri==myself does default to 5060 and hence tries to find an alias
binding to 5060.
So, is_myself("$ru") passes in my case; uri==myself fails.
Can you point me to the place in the source code where 5060 is being
set as default to the uri variable when request uri has no port number
please?
I don't intend to change this defaulting behavior; I am just curious
where it is set.
Thanks,
Karthik
On Thu, Jul 19, 2018 at 3:37 PM, Karthik Srinivasan
<ksriniva2002(a)gmail.com <mailto:ksriniva2002@gmail.com>> wrote:
standby, i have the debug mode spitting out tons of logs now.
time for me to review.
will let you know if i need help.
thanks,
karthik
On Thu, Jul 19, 2018 at 3:15 PM, Karthik Srinivasan
<ksriniva2002(a)gmail.com <mailto:ksriniva2002@gmail.com>> wrote:
Unfortunately same result as before:
$var(myself) = 0;
if (uri =~ "<regex string to match>" || uri == myself){
$var(myself) = 1;
xlog("L_INFO", "[$ci] in uri == myself check: var myself
= $var(myself)");
}
if (uri =~ "<regex string to match>" ||
is_myself("$ru")){
$var(myself) = 1;
xlog("L_INFO", "[$ci] in is_myself check: var myself =
$var(myself)");
}
The only log that prints out is the one that says 'in
is_myself check ...'(the second if statement.)
I have verified that if there's a regular expression match
then both log writes print. Regular expression match happens
when a SIP REGISTER request comes across the pipe.
Something odd is going on with the computation of uri ==
myself vs is_myself("$ru").
Is there a way i can inspect what myself and uri have in them?
Karthik
On Thu, Jul 19, 2018 at 2:18 PM, Daniel-Constantin Mierla
<miconda(a)gmail.com <mailto:miconda@gmail.com>> wrote:
Hello,
things are different that one may expect from evaluation
of an expression compared with other established
scripting/programming languages. One thing to be sure you
are aware of are the return code evaluation:
-
https://www.kamailio.org/wiki/tutorials/faq/main#how_is_the_function_return…
<https://www.kamailio.org/wiki/tutorials/faq/main#how_is_the_function_return_cod>
To be sure of proper behaviour, you should do:
if(uri =~ "<regex string to match>" || uri == myself) {
$var(myself) =1;
} else {
$var(myself) = 0;
}
Same with is_myself("$ru") instead of uri == myself.
Try and see if you get different values for $var(myself).
Cheers,
Daniel
On 19.07.18 19:09, Karthik Srinivasan wrote:
Yes, they are used at the very same
place. here is a code
snippet of where i added it for testing purposes:
route[INIT_VARS] {
$var(myself) = uri =~ "<regex string to match>" || uri ==
myself;
//if i print $var(myself) it prints 0
$var(myself) = uri =~ "<regex string to match>" ||
is_myself("$ru");
//if i print $var(myself) it prints 1
// in both cases above the regex part isn't supposed to
match and hence correctly returns false.
...
}
route{
route(INIT_VARS);
...
}
Thanks,
Karthik
On Thu, Jul 19, 2018 at 11:46 AM, Daniel-Constantin
Mierla <miconda(a)gmail.com <mailto:miconda@gmail.com>> wrote:
Hello,
On 19.07.18 18:32, Karthik Srinivasan wrote:
Hello,
Can someone explain to me why statement A returns
True and
statement B
returns False.
Statement A:
is_myself("$ru")
Statement B:
uri == myself
Isn't uri and $ru referencing the same data?
With my current config i am expecting the is_myself
to return
True; i
was expecting the same for Statement B but
unfortunately it is
returning False.
they are supposed to be the same in this case.
Are they used at the same place in config? Note that
$ru can be changed
by different functions such as those from registrar,
dispatcher, lcr, ...
Cheers,
Daniel
--
Daniel-Constantin Mierla --
www.asipto.com
<http://www.asipto.com>
www.twitter.com/miconda
<http://www.twitter.com/miconda> --
www.linkedin.com/in/miconda
<http://www.linkedin.com/in/miconda>
Kamailio World Conference --
www.kamailioworld.com
<http://www.kamailioworld.com>
--
Daniel-Constantin Mierla --
www.asipto.com <http://www.asipto.com>
www.twitter.com/miconda <http://www.twitter.com/miconda> --
www.linkedin.com/in/miconda
<http://www.linkedin.com/in/miconda>
Kamailio World Conference --
www.kamailioworld.com
<http://www.kamailioworld.com>