]> granicus.if.org Git - ejabberd/commitdiff
* src/web/ejabberd_http_poll.erl: Allow configuration of session
authorBadlop <badlop@process-one.net>
Sat, 14 Feb 2009 09:03:26 +0000 (09:03 +0000)
committerBadlop <badlop@process-one.net>
Sat, 14 Feb 2009 09:03:26 +0000 (09:03 +0000)
timeout, using new global option http_poll_timeout (EJAB-135)
* doc/guide.tex: Document new option
* doc/guide.html: Likewise

SVN Revision: 1876

ChangeLog
doc/guide.html
doc/guide.tex
src/web/ejabberd_http_poll.erl

index 358cdd93766d88e6a8fd1c7de317d9d1f6f57956..269271f9992491e873a3f1be832a2b7cb79f9933 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
 
index 55ce1dc696889b7337f52212ffa81e514af5fbde..452131d97abf998721d3644fbdb976140672caaa 100644 (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:
index 169dc612ed973421bcc660a1ee7acfbb6b159b5c..f5231affa4d9a25ff6ee1aec88c5ddacdda6a2dd 100644 (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,
index b7829949fe56c8ffedb5d25dc58bb17af614587f..9a41fc3628b458c2602d26efb535f3b651a9fe3c 100644 (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,