diff --git a/src/mod_sip_proxy.erl b/src/mod_sip_proxy.erl index b08a8d929..bf26c9944 100644 --- a/src/mod_sip_proxy.erl +++ b/src/mod_sip_proxy.erl @@ -277,13 +277,19 @@ add_via(#sip_socket{type = Transport}, LServer, #sip{hdrs = Hdrs} = Req) -> add_record_route_and_set_uri(URI, LServer, #sip{hdrs = Hdrs} = Req) -> case is_request_within_dialog(Req) of false -> - RR_URI = get_configured_record_route(LServer), - {MSecs, Secs, _} = now(), - TS = list_to_binary(integer_to_list(MSecs*1000000 + Secs)), - Sign = make_sign(TS, Hdrs), - NewRR_URI = RR_URI#uri{user = <>}, - Hdrs1 = [{'record-route', [{<<>>, NewRR_URI, []}]}|Hdrs], - Req#sip{uri = URI, hdrs = Hdrs1}; + case need_record_route(LServer) of + true -> + RR_URI = get_configured_record_route(LServer), + {MSecs, Secs, _} = now(), + TS = list_to_binary(integer_to_list(MSecs*1000000 + Secs)), + Sign = make_sign(TS, Hdrs), + User = <>, + NewRR_URI = RR_URI#uri{user = User}, + Hdrs1 = [{'record-route', [{<<>>, NewRR_URI, []}]}|Hdrs], + Req#sip{uri = URI, hdrs = Hdrs1}; + false -> + Req + end; true -> Req end. @@ -292,6 +298,13 @@ is_request_within_dialog(#sip{hdrs = Hdrs}) -> {_, _, Params} = esip:get_hdr('to', Hdrs), esip:has_param(<<"tag">>, Params). +need_record_route(LServer) -> + gen_mod:get_module_opt( + LServer, mod_sip, always_record_route, + fun(true) -> true; + (false) -> false + end, true). + make_sign(TS, Hdrs) -> {_, #uri{user = FUser, host = FServer}, FParams} = esip:get_hdr('from', Hdrs), {_, #uri{user = TUser, host = TServer}, _} = esip:get_hdr('to', Hdrs),