]> granicus.if.org Git - ejabberd/commitdiff
Optimize request processing
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Thu, 1 May 2014 19:58:05 +0000 (23:58 +0400)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Fri, 2 May 2014 13:42:51 +0000 (17:42 +0400)
src/mod_sip.erl

index c018924fc1d3cd739960ec2f2111d734522d2ae9..1572975e9d066df9ad6eb52930c8f934220e9175 100644 (file)
@@ -131,6 +131,20 @@ request(Req, SIPSock, TrID, Action) ->
 locate(_SIPMsg) ->
     ok.
 
+find(#uri{user = User, host = Host}) ->
+    LUser = jlib:nodeprep(User),
+    LServer = jlib:nameprep(Host),
+    if LUser == <<"">> ->
+           to_me;
+       true ->
+           case mod_sip_registrar:find_sockets(LUser, LServer) of
+               [] ->
+                   not_found;
+               [_|_] ->
+                   {relay, LServer}
+           end
+    end.
+
 %%%===================================================================
 %%% Internal functions
 %%%===================================================================
@@ -177,13 +191,7 @@ action(#sip{method = Method, hdrs = Hdrs, type = request} = Req, SIPSock) ->
                                 true ->
                                    case at_my_host(ToURI) of
                                        true ->
-                                           case ToURI#uri.user of
-                                               <<"">> ->
-                                                   to_me;
-                                               _ ->
-                                                   LServer = jlib:nameprep(ToURI#uri.host),
-                                                   {relay, LServer}
-                                           end;
+                                           find(ToURI);
                                        false ->
                                            LServer = jlib:nameprep(FromURI#uri.host),
                                            {relay, LServer}
@@ -194,13 +202,7 @@ action(#sip{method = Method, hdrs = Hdrs, type = request} = Req, SIPSock) ->
                        false ->
                            case at_my_host(ToURI) of
                                true ->
-                                   case ToURI#uri.user of
-                                       <<"">> ->
-                                           to_me;
-                                       _ ->
-                                           LServer = jlib:nameprep(ToURI#uri.host),
-                                           {relay, LServer}
-                                   end;
+                                   find(ToURI);
                                false ->
                                    deny
                            end