]> granicus.if.org Git - ejabberd/commitdiff
mod_offline: Add 'store_offline_message' hook
authorHolger Weiss <holger@zedat.fu-berlin.de>
Mon, 15 Aug 2016 20:30:08 +0000 (22:30 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Mon, 15 Aug 2016 20:30:08 +0000 (22:30 +0200)
The new 'store_offline_message' hook is invoked whenever an offline
message is stored.

src/mod_offline.erl

index 87a13685315f2e8726e0f62c89db760045f275fb..1d9417117df6715baecea700ea585894176f025d 100644 (file)
@@ -476,14 +476,22 @@ store_packet(From, To, Packet) ->
            case check_event(From, To, Packet) of
                true ->
                    #jid{luser = LUser, lserver = LServer} = To,
-                   TimeStamp = p1_time_compat:timestamp(),
-                   #xmlel{children = Els} = Packet,
-                   Expire = find_x_expire(TimeStamp, Els),
-                   gen_mod:get_module_proc(To#jid.lserver, ?PROCNAME) !
-                     #offline_msg{us = {LUser, LServer},
-                                  timestamp = TimeStamp, expire = Expire,
-                                  from = From, to = To, packet = Packet},
-                   stop;
+                   case ejabberd_hooks:run_fold(store_offline_message, LServer,
+                                                Packet, [From, To]) of
+                       drop ->
+                           ok;
+                       NewPacket ->
+                           TimeStamp = p1_time_compat:timestamp(),
+                           #xmlel{children = Els} = NewPacket,
+                           Expire = find_x_expire(TimeStamp, Els),
+                           gen_mod:get_module_proc(To#jid.lserver, ?PROCNAME) !
+                             #offline_msg{us = {LUser, LServer},
+                                          timestamp = TimeStamp,
+                                          expire = Expire,
+                                          from = From, to = To,
+                                          packet = NewPacket},
+                           stop
+                   end;
                _ -> ok
            end;
        false -> ok