[Spce-user] Error on ROUTE_OUTBOUND, REPLY_ROUTE_STD and REPLY_ROUTE_NAT
Andrew Pogrebennyk
apogrebennyk at sipwise.com
Wed Nov 5 06:04:40 EST 2014
Summarizing for the list: the problem happens if the request contains
pre-loaded Route header with a domain name. If there is an IP address in
Route it works fine.
Apparently kamailio's loose_route function returns TRUE if the request
contains pre-loaded Route header with a domain name while in
documentation it says:
http://kamailio.org/docs/modules/4.2.x/modules/rr.html#loose-route-id
5.1. loose_route()
...
of RFC 3261. There is only one exception: If the request is
out-of-dialog (no to-tag) and there is only one Route: header indicating
the local proxy, then the Route: header is removed and the function
returns FALSE.
"indicating the local proxy" apparently means - if the Route has the IP
of our proxy, but it's not able to detect if the Route has the FQDN
which is in the domains table.
Currently we call record_route() if loose_route() returns TRUE,
somewhere later we call msg_apply_changes() which produces lump errors
and then we call record_route() again. There is no problem in calling
msg_apply_changes() before record_route().
The solution would be to move the record_route lower:
--- a/kamailio/proxy/proxy.cfg
+++ b/kamailio/proxy/proxy.cfg
@@ -101,7 +101,6 @@ route[ROUTE_PRX_REQUEST]
if(loose_route())
{
- record_route();
if(check_route_param("rtpprx=yes"))
{
# force rtpproxy
@@ -135,6 +134,7 @@ route[ROUTE_PRX_REQUEST]
}
else
{
+ record_route();
# Work around sems-sbc sending a Route header
# also for non-200 ACK.
if(is_method("ACK") && $oU == "proxylu_callee")
I will test and push this fix to mr3.4.2 and mr3.5.1 soon.
Thanks for the bugreport.
Andrew
More information about the Spce-user
mailing list