[SR-Users] uri==myself

Karthik Srinivasan ksriniva2002 at gmail.com
Fri Jul 20 17:26:03 CEST 2018


Yes, i see it defaulting there.  Thanks again for the help.

Karthik

On Fri, Jul 20, 2018 at 7:57 AM, Daniel-Constantin Mierla <miconda at gmail.com
> wrote:

> 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> 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> 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> 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
>>>>
>>>> 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> 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
>>>>> www.twitter.com/miconda -- www.linkedin.com/in/miconda
>>>>> Kamailio World Conference -- www.kamailioworld.com
>>>>>
>>>>>
>>>>
>>>> --
>>>> Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda
>>>> Kamailio World Conference -- www.kamailioworld.com
>>>>
>>>>
>>>
>>
>
> --
> Daniel-Constantin Mierla -- www.asipto.comwww.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/5a1a3b90/attachment.html>


More information about the sr-users mailing list