* 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

SVN Revision: 1876
This commit is contained in:
Badlop 2009-02-14 09:03:26 +00:00
parent 70e431787e
commit d0f1300a84
4 changed files with 30 additions and 5 deletions

View File

@ -1,5 +1,10 @@
2009-02-14 Badlop <badlop@process-one.net>
* 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)

View File

@ -712,8 +712,11 @@ do not allow outgoing sockets on port 5222.<P>If HTTP Polling is enabled, it wil
<CODE>http://server:port/http-poll/</CODE>. 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
<A HREF="http://jwchat.sourceforge.net/">JWChat</A>.
</P></DD><DT CLASS="dt-description"><B><TT>{max_stanza_size, Size}</TT></B></DT><DD CLASS="dd-description">
<A HREF="http://jwchat.sourceforge.net/">JWChat</A>.</P><P>The maximum period of time to keep a client session active without
an incoming POST request can be configured with the global option
<TT>http_poll_timeout</TT>. The default value is five minutes.
The option can be defined in <TT>ejabberd.cfg</TT>, expressing the time
in seconds: <CODE>{http_poll_timeout, 300}.</CODE></P></DD><DT CLASS="dt-description"><B><TT>{max_stanza_size, Size}</TT></B></DT><DD CLASS="dd-description">
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 <TT>ejabberd</TT> server consumes more memory than the confi
a message is sent to the Jabber accounts defined with the option
<TT>watchdog_admins</TT>
in the <TT>ejabberd</TT> configuration file.</P><P>The memory consumed is measured in <TT>words</TT>:
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 <TT>watchdog_large_heap</TT>,
or in a conversation with the watchdog alert bot.</P><P>Example configuration:

View File

@ -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,

View File

@ -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,