]> granicus.if.org Git - ejabberd/commitdiff
* src/mod_offline.erl: Added a config option to define the maximum
authorMickaël Rémond <mickael.remond@process-one.net>
Mon, 13 Aug 2007 17:28:26 +0000 (17:28 +0000)
committerMickaël Rémond <mickael.remond@process-one.net>
Mon, 13 Aug 2007 17:28:26 +0000 (17:28 +0000)
number of offline messages per user (EJAB-314).

SVN Revision: 878

ChangeLog
src/mod_offline.erl

index 5ab5e96663c9736e9237adda9758a53aa82e011d..ef0e76217794f98f0dd53e3399b1a2c113786bdb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2007-08-13  Mickael Remond  <mickael.remond@process-one.net>
 
+       * src/mod_offline.erl: Added a config option to define the maximum
+       number of offline messages per user (EJAB-314).
+
        * doc/guide.tex: Added documentation for the mod_offline quota
        (EJAB-314).
 
index da221aaef406a37d7c6bc75631c0d6e55abb1ebb..2caf621d88d56e3e001e450221b1a7726feb1484 100644 (file)
@@ -12,7 +12,7 @@
 -behaviour(gen_mod).
 
 -export([start/2,
-        init/0,
+        init/1,
         stop/1,
         store_packet/3,
         resend_offline_messages/2,
 -define(PROCNAME, ejabberd_offline).
 -define(OFFLINE_TABLE_LOCK_THRESHOLD, 1000).
 
-%% TODO: Move this part as a module config file parameter:
-%% Can be an integer > 0 or infinity:
-%%-define(MAX_OFFLINE_MSGS, infinity).
--define(MAX_OFFLINE_MSGS, 5).
-
-start(Host, _Opts) ->
+start(Host, Opts) ->
     mnesia:create_table(offline_msg,
                        [{disc_only_copies, [node()]},
                         {type, bag},
@@ -48,20 +43,25 @@ start(Host, _Opts) ->
                       ?MODULE, remove_user, 50),
     ejabberd_hooks:add(anonymous_purge_hook, Host,
                       ?MODULE, remove_user, 50),
+    MAX_OFFLINE_MSGS = gen_mod:get_opt(user_max_messages, Opts, infinity),
     register(gen_mod:get_module_proc(Host, ?PROCNAME),
-            spawn(?MODULE, init, [])).
+            spawn(?MODULE, init, [MAX_OFFLINE_MSGS])).
 
-init() ->
-    loop().
+%% MAX_OFFLINE_MSGS is either infinity of integer > 0
+init(infinity) ->
+    loop(infinity);
+init(MAX_OFFLINE_MSGS) 
+  when integer(MAX_OFFLINE_MSGS), MAX_OFFLINE_MSGS > 0 ->
+    loop(MAX_OFFLINE_MSGS).
 
-loop() ->
+loop(MAX_OFFLINE_MSGS) ->
     receive
        #offline_msg{us=US} = Msg ->
            Msgs = receive_all(US, [Msg]),
            Len = length(Msgs),
            F = fun() ->
                        %% Only count messages if needed:
-                       Count = if ?MAX_OFFLINE_MSGS =/= infinity ->
+                       Count = if MAX_OFFLINE_MSGS =/= infinity ->
                                        Len + p1_mnesia:count_records(
                                                offline_msg, 
                                                #offline_msg{us=US, _='_'});
@@ -69,7 +69,7 @@ loop() ->
                                        0
                                end,
                        if
-                           Count > ?MAX_OFFLINE_MSGS ->
+                           Count > MAX_OFFLINE_MSGS ->
                                discard_warn_sender(Msgs);
                            true ->
                                if
@@ -84,9 +84,9 @@ loop() ->
                        end
                end,
            mnesia:transaction(F),
-           loop();
+           loop(MAX_OFFLINE_MSGS);
        _ ->
-           loop()
+           loop(MAX_OFFLINE_MSGS)
     end.
 
 receive_all(US, Msgs) ->