24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-14 22:00:16 +02:00

New optional BOSH connection attribute process-delay (EJAB-1257)

This commit is contained in:
Badlop 2010-06-07 13:44:55 +02:00
parent e0fab19345
commit d4ec7a2f01
2 changed files with 22 additions and 3 deletions

View File

@ -45,7 +45,7 @@
-include("ejabberd_http.hrl"). -include("ejabberd_http.hrl").
-include("http_bind.hrl"). -include("http_bind.hrl").
-record(http_bind, {id, pid, to, hold, wait, version}). -record(http_bind, {id, pid, to, hold, wait, process_delay, version}).
-define(NULL_PEER, {{0, 0, 0, 0}, 0}). -define(NULL_PEER, {{0, 0, 0, 0}, 0}).
@ -107,6 +107,11 @@
-define(MAX_PAUSE, 120). % may num of sec a client is allowed to pause -define(MAX_PAUSE, 120). % may num of sec a client is allowed to pause
% the session % the session
%% Wait 100ms before continue processing, to allow the client provide more related stanzas.
-define(PROCESS_DELAY_DEFAULT, 100).
-define(PROCESS_DELAY_MIN, 0).
-define(PROCESS_DELAY_MAX, 1000).
%%%---------------------------------------------------------------------- %%%----------------------------------------------------------------------
%%% API %%% API
@ -257,6 +262,18 @@ handle_session_start(Pid, XmppDomain, Sid, Rid, Attrs,
CHold CHold
end end
end, end,
Pdelay = case string:to_integer(xml:get_attr_s("process-delay",Attrs)) of
{error, _} ->
?PROCESS_DELAY_DEFAULT;
{CPdelay, _} when
(?PROCESS_DELAY_MIN =< CPdelay) and
(CPdelay =< ?PROCESS_DELAY_MAX) ->
CPdelay;
{CPdelay, _} ->
erlang:max(
erlang:min(CPdelay,?PROCESS_DELAY_MAX),
?PROCESS_DELAY_MIN)
end,
Version = Version =
case catch list_to_float( case catch list_to_float(
xml:get_attr_s("ver", Attrs)) of xml:get_attr_s("ver", Attrs)) of
@ -274,6 +291,7 @@ handle_session_start(Pid, XmppDomain, Sid, Rid, Attrs,
XmppVersion}, XmppVersion},
hold = Hold, hold = Hold,
wait = Wait, wait = Wait,
process_delay = Pdelay,
version = Version version = Version
}) })
end), end),
@ -884,6 +902,7 @@ update_shaper(ShaperState, PayloadSize) ->
end. end.
prepare_response(Sess, Rid, OutputEls, StreamStart) -> prepare_response(Sess, Rid, OutputEls, StreamStart) ->
receive after Sess#http_bind.process_delay -> ok end,
case catch http_get(Sess, Rid) of case catch http_get(Sess, Rid) of
{ok, cancel} -> {ok, cancel} ->
%% actually it would be better if we could completely %% actually it would be better if we could completely

View File

@ -52,7 +52,7 @@
%% Duplicated from ejabberd_http_bind. %% Duplicated from ejabberd_http_bind.
%% TODO: move to hrl file. %% TODO: move to hrl file.
-record(http_bind, {id, pid, to, hold, wait, version}). -record(http_bind, {id, pid, to, hold, wait, process_delay, version}).
%%%---------------------------------------------------------------------- %%%----------------------------------------------------------------------
%%% API %%% API
@ -138,7 +138,7 @@ setup_database() ->
migrate_database() -> migrate_database() ->
case catch mnesia:table_info(http_bind, attributes) of case catch mnesia:table_info(http_bind, attributes) of
[id, pid, to, hold, wait, version] -> [id, pid, to, hold, wait, process_delay, version] ->
ok; ok;
_ -> _ ->
%% Since the stored information is not important, instead %% Since the stored information is not important, instead