[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