[SR-Users] uri==myself
Daniel-Constantin Mierla
miconda at gmail.com
Fri Jul 20 14:57:10 CEST 2018
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 at gmail.com <mailto:ksriniva2002 at 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 at gmail.com <mailto:ksriniva2002 at 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 at gmail.com <mailto:miconda at 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_cod
> <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 at gmail.com <mailto:miconda at 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>
>
>
>
>
--
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio World Conference -- www.kamailioworld.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20180720/2fd481cd/attachment.html>
More information about the sr-users
mailing list