I have several different UAC's that insist on doing strict routing and this is causing me some moderate issues as i can find no way to deal with the situation on SER.
According to the documentation that comes with the "rr" module there is supposed to be a function called "strict_route()" that does exactly what i want (move the value from the "Route:" header into the RURI), however the module does not provide this function. I'm curious if this functionality has been folded into loose_route or if it has simply dissappeared?
There is a section in the source code of rr_mod.c that allows you to enable the function "record_route_strict()" and it also talks about enabling "strict_route()" however i have had no success with it.
tavis
On 27-04-2005 15:59, reticent wrote:
I have several different UAC's that insist on doing strict routing and this is causing me some moderate issues as i can find no way to deal with the situation on SER.
What exactly is the isssue ? loose_routing is backwards compatible in vast majority of cases (it is not backwards compatible when user agents use pre-loaded route sets).
According to the documentation that comes with the "rr" module there is supposed to be a function called "strict_route()" that does exactly what i want (move the value from the "Route:" header into the RURI), however the module does not provide this function. I'm curious if this functionality has been folded into loose_route or if it has simply dissappeared?
It has not dissappeared, it is in loose_route. The function can detect whether the next hop is strict or loose router and behave accordingly.
There is a section in the source code of rr_mod.c that allows you to enable the function "record_route_strict()" and it also talks about enabling "strict_route()" however i have had no success with it.
The function is called record_route_strict and it is a replacement for record_route. If you want SER to be a strict router, then replace the last zero in record_route_strict row of cmds[] in rr_mod.c with REQUEST_ROUTE. That would enable the function and you can use it in the script. In the script you then need to replace record_route with record_route_strict.
The difference is that record_route_strict will not add ;lr parameter to the Record-Route haader fields generated by SER.
Jan.
Jan Janak wrote:
On 27-04-2005 15:59, reticent wrote:
I have several different UAC's that insist on doing strict routing and this is causing me some moderate issues as i can find no way to deal with the situation on SER.
What exactly is the isssue ? loose_routing is backwards compatible in vast majority of cases (it is not backwards compatible when user agents use pre-loaded route sets).
According to the rr module documentation: -- 1.4.2. strict_route() -- deprecated
If there are any Route HFs in the message, the function takes the first one, rewrites Request-URI with it's value and removes the first URI from Route HFs. --
This is all in relation to the message looping problem i reported previously where an ACK comes to ser with an RURI of SER and a route pointing to a nexthop, but instead of routing to the nexthop (loose_route does not match because the UAC does not properly use the Record-Route header, and generates a "Route" header using the information from the contact) SER sends the message to itself over and over again.
With the "strict_route()" function (according to the documentation for it), i should be able to detect this situation and route the message properly, the reason i mentioned the bit inside the source code was because it mentions "if you really need strict routing then you can replace the last zeroes with REQUEST_ROUTE to enable strict_route ...", adding REQUEST_ROUTE properly enables record_route_strict (which i do not need) but cannot (from what i can tell look at the code) enable strict_route because the function is simply gone.
According to the documentation that comes with the "rr" module there is supposed to be a function called "strict_route()" that does exactly what i want (move the value from the "Route:" header into the RURI), however the module does not provide this function. I'm curious if this functionality has been folded into loose_route or if it has simply dissappeared?
It has not dissappeared, it is in loose_route. The function can detect whether the next hop is strict or loose router and behave accordingly.
There is a section in the source code of rr_mod.c that allows you to enable the function "record_route_strict()" and it also talks about enabling "strict_route()" however i have had no success with it.
The function is called record_route_strict and it is a replacement for record_route. If you want SER to be a strict router, then replace the last zero in record_route_strict row of cmds[] in rr_mod.c with REQUEST_ROUTE. That would enable the function and you can use it in the script. In the script you then need to replace record_route with record_route_strict.
The difference is that record_route_strict will not add ;lr parameter to the Record-Route haader fields generated by SER.
Jan.
Hi guys...
I have this piece of code in my record route section...
if (method=="INVITE" && client_nat_test("19")) { record_route_preset("some_internal_ip:5060;nat=yes"); # insert IP a$ } else if (method!="REGISTER") { record_route(); };
And the problem is...
It works perfect for... lan to lan client...
But it doesn't for lan to external side, If I change the "some_internal_ip:5060;nat=yes"
To
"some_externel_ip:5060;nat=yes"
It works for lan to external, but not lan to lan... how to turn around it ?
How is the best aprouch to have my re invites working ok, and how to be shure that my external clients will use my mediaproxy that is behind a nat also? It is a full port forward nat
Clients - SER - - Mediaproxy - router - internet < - >
Regards,
On 29-04-2005 14:15, reticent wrote:
Jan Janak wrote:
On 27-04-2005 15:59, reticent wrote:
I have several different UAC's that insist on doing strict routing and this is causing me some moderate issues as i can find no way to deal with the situation on SER.
What exactly is the isssue ? loose_routing is backwards compatible in vast majority of cases (it is not backwards compatible when user agents use pre-loaded route sets).
According to the rr module documentation:
1.4.2. strict_route() -- deprecated
If there are any Route HFs in the message, the function takes the first one, rewrites Request-URI with it's value and removes the first URI from Route HFs. --
This is all in relation to the message looping problem i reported previously where an ACK comes to ser with an RURI of SER and a route pointing to a nexthop, but instead of routing to the nexthop (loose_route does not match because the UAC does not properly use the Record-Route header, and generates a "Route" header using the information from the contact) SER sends the message to itself over and over again.
Could you send me SIP message dumps, including INVITE, 200 OK and the ACK which does not work properly with SER ? Feel free to send it privately to jan@iptel.org.
With the "strict_route()" function (according to the documentation for it), i should be able to detect this situation and route the message properly, the reason i mentioned the bit inside the source code was because it mentions "if you really need strict routing then you can replace the last zeroes with REQUEST_ROUTE to enable strict_route ...", adding REQUEST_ROUTE properly enables record_route_strict (which i do not need) but cannot (from what i can tell look at the code) enable strict_route because the function is simply gone.
It is not gone, it is included in loose_route. Loose_route performs the same steps as strict_route if needed. I am still not sure I understand the problem, SIP messages dumps would help.
Jan.
According to the documentation that comes with the "ddddddddrr" module there is supposed to be a function called "strict_route()" that does exactly what i want (move the value from the "Route:" header into the RURI), however the module does not provide this function. I'm curious if this functionality has been folded into loose_route or if it has simply dissappeared?
It has not dissappeared, it is in loose_route. The function can detect whether the next hop is strict or loose router and behave accordingly.
There is a section in the source code of rr_mod.c that allows you to enable the function "record_route_strict()" and it also talks about enabling "strict_route()" however i have had no success with it.
The function is called record_route_strict and it is a replacement for record_route. If you want SER to be a strict router, then replace the last zero in record_route_strict row of cmds[] in rr_mod.c with REQUEST_ROUTE. That would enable the function and you can use it in the script. In the script you then need to replace record_route with record_route_strict.
The difference is that record_route_strict will not add ;lr parameter to the Record-Route haader fields generated by SER.
Jan.