diff --git a/ChangeLog b/ChangeLog index 358cdd937..269271f99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2009-02-14 Badlop + * src/web/ejabberd_http_poll.erl: Allow configuration of session + timeout, using new global option http_poll_timeout (EJAB-135) + * doc/guide.tex: Document new option + * doc/guide.html: Likewise + * src/ejabberd_listener.erl: Report error at startup if a listener module isn't available or is not an ejabberd listener (EJAB-868) diff --git a/doc/guide.html b/doc/guide.html index 55ce1dc69..452131d97 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -712,8 +712,11 @@ do not allow outgoing sockets on port 5222.

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. -

{max_stanza_size, Size}
+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}.

{max_stanza_size, Size}
This option specifies an approximate maximum size in bytes of XML stanzas. Approximate, because it is calculated with the precision of one block of readed @@ -3370,7 +3373,8 @@ If a process in the ejabberd server consumes more memory than the confi a message is sent to the Jabber accounts defined with the option watchdog_admins in the ejabberd configuration file.

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 169dc612e..f5231affa 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -854,6 +854,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 b7829949f..9a41fc362 100644 --- a/src/web/ejabberd_http_poll.erl +++ b/src/web/ejabberd_http_poll.erl @@ -57,6 +57,7 @@ input = "", waiting_input = false, %% {ReceiverPid, Tag} last_receiver, + http_poll_timeout, timer}). %-define(DBGFSM, true). @@ -181,12 +182,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}}. %%---------------------------------------------------------------------- @@ -278,7 +287,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,