[SR-Users] uri==myself

Karthik Srinivasan ksriniva2002 at gmail.com
Fri Jul 20 18:47:53 CEST 2018


Please disregard the follow up question i posted.

I misled myself in thinking the variables themselves were being populated
by defaulted ports.  rather it's the check to ==myself that's doing it.

thanks again.

Karthik

On Fri, Jul 20, 2018 at 11:36 AM, Karthik Srinivasan <ksriniva2002 at gmail.com
> wrote:

> One follow up question here:
>
> Can you point me to the location of the source code that unpacks the
> request uri/from uri and sticks them into the $ru/$fu pseudo vars please.
>
> I already have confirmed (via testing) that $ru won't have a defaulted
> port set to it if no port exists in the request uri.
>
> I want to confirm within the code that $fu behaves the same.   That is, no
> default port is going to get set if no port exists in the from uri.
> Confirming via code will help me put this issue; provide confidence that i
> am using the right variables here.
>
> I did confirm via code (thank to your help) that the variable "from_uri"
> will have a default port set just like the "uri" variable.
>
> Thanks,
>
> Karthik
>
>
> On Fri, Jul 20, 2018 at 10:26 AM, Karthik Srinivasan <
> ksriniva2002 at gmail.com> wrote:
>
>> 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/c7e418b9/attachment.html>


More information about the sr-users mailing list