From b0f29b20db5b690c62a6c30a3cf75b7fe6f3e033 Mon Sep 17 00:00:00 2001
From: Badlop If HTTP Polling is enabled, it wil
http://server:port/http-poll/
. Be aware that support for HTTP Polling
is also needed in the Jabber client. Remark also that HTTP Polling can be
interesting to host a web-based Jabber client such as
-JWChat.
-
The maximum period of time to keep a client session active without
+an incoming POST request can be configured with the global option
+http_poll_timeout. The default value is five minutes.
+The option can be defined in ejabberd.cfg, expressing the time
+in seconds: {http_poll_timeout, 300}.
The memory consumed is measured in words: -a word on 32-bit architecture is 4 bytes, and a word on 64-bit architecture 8 bytes. +a word on 32-bit architecture is 4 bytes, +and a word on 64-bit architecture is 8 bytes. The threshold by default is 1000000 words. This value can be configured with the option watchdog_large_heap, or in a conversation with the watchdog alert bot.
Example configuration: diff --git a/doc/guide.tex b/doc/guide.tex index ac054dab6..983e219b2 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -851,6 +851,13 @@ This is a detailed description of each option allowed by the listening modules: is also needed in the \Jabber{} client. Remark also that HTTP Polling can be interesting to host a web-based \Jabber{} client such as \footahref{http://jwchat.sourceforge.net/}{JWChat}. + + The maximum period of time to keep a client session active without + an incoming POST request can be configured with the global option + \term{http\_poll\_timeout}. The default value is five minutes. + The option can be defined in \term{ejabberd.cfg}, expressing the time + in seconds: \verb|{http_poll_timeout, 300}.| + \titem{\{max\_stanza\_size, Size\}} \ind{options!max\_stanza\_size}This option specifies an approximate maximum size in bytes of XML stanzas. Approximate, diff --git a/src/web/ejabberd_http_poll.erl b/src/web/ejabberd_http_poll.erl index 257a6f821..d4ecaf549 100644 --- a/src/web/ejabberd_http_poll.erl +++ b/src/web/ejabberd_http_poll.erl @@ -58,6 +58,7 @@ input = "", waiting_input = false, %% {ReceiverPid, Tag} last_receiver, + http_poll_timeout, timer}). %-define(DBGFSM, true). @@ -187,12 +188,20 @@ init([ID, Key, IP]) -> %% connector. Opts = ejabberd_c2s_config:get_c2s_limits(), + HTTPPollTimeout = case ejabberd_config:get_local_option({http_poll_timeout, + ?MYNAME}) of + %% convert seconds of option into milliseconds + Int when is_integer(Int) -> Int*1000; + undefined -> ?HTTP_POLL_TIMEOUT + end, + Socket = {http_poll, self(), IP}, ejabberd_socket:start(ejabberd_c2s, ?MODULE, Socket, Opts), - Timer = erlang:start_timer(?HTTP_POLL_TIMEOUT, self(), []), + Timer = erlang:start_timer(HTTPPollTimeout, self(), []), {ok, loop, #state{id = ID, key = Key, socket = Socket, + http_poll_timeout = HTTPPollTimeout, timer = Timer}}. %%---------------------------------------------------------------------- @@ -284,7 +293,7 @@ handle_sync_event({http_put, Key, NewKey, Packet}, Receiver ! {tcp, StateData#state.socket, list_to_binary(Packet)}, cancel_timer(StateData#state.timer), - Timer = erlang:start_timer(?HTTP_POLL_TIMEOUT, self(), []), + Timer = erlang:start_timer(StateData#state.http_poll_timeout, self(), []), Reply = ok, {reply, Reply, StateName, StateData#state{waiting_input = false,