[SR-Users] route return value confusion
Daniel-Constantin Mierla
miconda at gmail.com
Tue Dec 13 12:56:20 CET 2011
Hello,
I checked the code and this behaviour is practically due to special
meaning of return codes from functions exported to config file, ie,:
- <0 is false
- >0 is true
route(x) call is returning the code from route block itself, but then
the interpreter converts the codes < 0 to 0 (so the condition is false
in C) and the codes > 0 to 1 (so the condition is C is true).
Thus, no matter what code you return from a subroute, you have to
compare against 0 (for negative return code) or 1 (for positive return
code).
Solutions/alternatives:
1)
$var(r) = route(x);
.. and then compare $var(r)
2)
route(x);
$var(r) = $rc;
.. and then compare $var(r)
3)
doing it in the if:
if(($var(r) = route(x)) && ($var(r) == -1)) {
...
}
The assignment which is done first in the IF expression will return true
if the assignment operation is successful.
Cheers,
Daniel
just replace -1 with the return code you want to test against
On 12/12/11 11:29 AM, Daniel-Constantin Mierla wrote:
> Hello,
>
> On 12/12/11 10:45 AM, Juha Heinanen wrote:
>> Daniel-Constantin Mierla writes:
>>
>>> cannot test it for now personally, but what you get if you do:
>>>
>>> route(TEST_ROUTE_MINUS_ONE);
>>>
>>> $var(r) = $rc;
>>>
>>> xlog("returned code by route minus one is: $var(r)\n");
>>>
>>> Maybe this will give some leads I can follow in the code...
>> daniel,
>>
>> i correctly get:
>>
>> Dec 12 11:42:37 sip /usr/sbin/sip-proxy[1308]: ERROR: returned code
>> by route minus one is: -1
>>
>> so it is only the test
>>
>> if (route(TEST_ROUTE_MINUS_ONE) == -1) ...
>>
>> that fails.
> ok, so looks like IF with a mod function returning negative needs
> investigation. I will look over it soon.
>
> Cheers,
> Daniel
>
>
>
--
Daniel-Constantin Mierla -- http://www.asipto.com
http://linkedin.com/in/miconda -- http://twitter.com/miconda
More information about the sr-users
mailing list