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

* 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> 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 * src/ejabberd_listener.erl: Report error at startup if a listener
module isn't available or is not an ejabberd listener (EJAB-868) 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 <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 is also needed in the Jabber client. Remark also that HTTP Polling can be
interesting to host a web-based Jabber client such as interesting to host a web-based Jabber client such as
<A HREF="http://jwchat.sourceforge.net/">JWChat</A>. <A HREF="http://jwchat.sourceforge.net/">JWChat</A>.</P><P>The maximum period of time to keep a client session active without
</P></DD><DT CLASS="dt-description"><B><TT>{max_stanza_size, Size}</TT></B></DT><DD CLASS="dd-description"> 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 This option specifies an
approximate maximum size in bytes of XML stanzas. Approximate, approximate maximum size in bytes of XML stanzas. Approximate,
because it is calculated with the precision of one block of readed 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 a message is sent to the Jabber accounts defined with the option
<TT>watchdog_admins</TT> <TT>watchdog_admins</TT>
in the <TT>ejabberd</TT> configuration file.</P><P>The memory consumed is measured in <TT>words</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. The threshold by default is 1000000 words.
This value can be configured with the option <TT>watchdog_large_heap</TT>, 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: 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 is also needed in the \Jabber{} client. Remark also that HTTP Polling can be
interesting to host a web-based \Jabber{} client such as interesting to host a web-based \Jabber{} client such as
\footahref{http://jwchat.sourceforge.net/}{JWChat}. \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\}} \titem{\{max\_stanza\_size, Size\}}
\ind{options!max\_stanza\_size}This option specifies an \ind{options!max\_stanza\_size}This option specifies an
approximate maximum size in bytes of XML stanzas. Approximate, approximate maximum size in bytes of XML stanzas. Approximate,

View File

@ -57,6 +57,7 @@
input = "", input = "",
waiting_input = false, %% {ReceiverPid, Tag} waiting_input = false, %% {ReceiverPid, Tag}
last_receiver, last_receiver,
http_poll_timeout,
timer}). timer}).
%-define(DBGFSM, true). %-define(DBGFSM, true).
@ -181,12 +182,20 @@ init([ID, Key, IP]) ->
%% connector. %% connector.
Opts = ejabberd_c2s_config:get_c2s_limits(), 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}, Socket = {http_poll, self(), IP},
ejabberd_socket:start(ejabberd_c2s, ?MODULE, Socket, Opts), 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, {ok, loop, #state{id = ID,
key = Key, key = Key,
socket = Socket, socket = Socket,
http_poll_timeout = HTTPPollTimeout,
timer = Timer}}. timer = Timer}}.
%%---------------------------------------------------------------------- %%----------------------------------------------------------------------
@ -278,7 +287,7 @@ handle_sync_event({http_put, Key, NewKey, Packet},
Receiver ! {tcp, StateData#state.socket, Receiver ! {tcp, StateData#state.socket,
list_to_binary(Packet)}, list_to_binary(Packet)},
cancel_timer(StateData#state.timer), 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 = ok,
{reply, Reply, StateName, {reply, Reply, StateName,
StateData#state{waiting_input = false, StateData#state{waiting_input = false,