]> granicus.if.org Git - ejabberd/commitdiff
Add new option support: always_record_route
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Mon, 7 Jul 2014 05:23:11 +0000 (09:23 +0400)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Mon, 7 Jul 2014 05:40:01 +0000 (09:40 +0400)
src/mod_sip_proxy.erl

index b08a8d929e1ab74b3bb139204138e2da0f867406..bf26c9944380300f00715936ae1194066aba9a95 100644 (file)
@@ -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 = <<TS/binary, $-, Sign/binary>>},
-           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 = <<TS/binary, $-, Sign/binary>>,
+                   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),