]> granicus.if.org Git - ejabberd/commitdiff
New route_iq/5 accepting Timeout (thanks to Edwin Fine)(EJAB-1398)
authorBadlop <badlop@process-one.net>
Mon, 21 Feb 2011 12:37:55 +0000 (13:37 +0100)
committerBadlop <badlop@process-one.net>
Mon, 21 Feb 2011 12:46:59 +0000 (13:46 +0100)
Also new register_iq_response_handler/5

src/ejabberd_local.erl

index 30d0b2c7743e4aa6c2db7485531ba9bf961e8720..b3f8703a1f8d7fe26ef4d043d088070fc07834d7 100644 (file)
 
 -export([route/3,
         route_iq/4,
+        route_iq/5,
         process_iq_reply/3,
         register_iq_handler/4,
         register_iq_handler/5,
         register_iq_response_handler/4,
+        register_iq_response_handler/5,
         unregister_iq_handler/2,
         unregister_iq_response_handler/2,
         refresh_iq_handlers/0,
@@ -146,19 +148,31 @@ route(From, To, Packet) ->
            ok
     end.
 
-route_iq(From, To, #iq{type = Type} = IQ, F) when is_function(F) ->
+route_iq(From, To, IQ, F) ->
+    route_iq(From, To, IQ, F, undefined).
+
+route_iq(From, To, #iq{type = Type} = IQ, F, Timeout) when is_function(F) ->
     Packet = if Type == set; Type == get ->
                     ID = list_to_binary(ejabberd_router:make_id()),
                     Host = exmpp_jid:prep_domain(From),
-                    register_iq_response_handler(Host, ID, undefined, F),
+                    register_iq_response_handler(Host, ID, undefined, F, Timeout),
                     exmpp_iq:iq_to_xmlel(IQ#iq{id = ID});
                true ->
                     exmpp_iq:iq_to_xmlel(IQ)
             end,
     ejabberd_router:route(From, To, Packet).
 
-register_iq_response_handler(_Host, ID, Module, Function) ->
-    TRef = erlang:start_timer(?IQ_TIMEOUT, ejabberd_local, ID),
+register_iq_response_handler(Host, ID, Module, Function) ->
+    register_iq_response_handler(Host, ID, Module, Function, undefined).
+
+register_iq_response_handler(_Host, ID, Module, Function, Timeout0) ->
+    Timeout = case Timeout0 of
+                 undefined ->
+                     ?IQ_TIMEOUT;
+                 N when is_integer(N), N > 0 ->
+                     N
+             end,
+    TRef = erlang:start_timer(Timeout, ejabberd_local, ID),
     ets:insert(iq_response, #iq_response{id = ID,
                                         module = Module,
                                         function = Function,