diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2017-11-14 22:02:48 +0100 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2017-11-14 22:02:48 +0100 |
commit | 8376370ae1035ff49e4bbc06f01fd993f1865ad4 (patch) | |
tree | fd14af693203a165b9d1327d8809d132abffeed4 /src/mod_mam_mnesia.erl | |
parent | Halt ejabberd if the top supervisor fails to start (diff) |
mod_mam: Don't store from 'sm_receive_packet' hook
Let mod_mam use the 'sm_receive_packet' hook to generate stanza IDs for
incoming messages, but not to actually store them. The latter would
require additional changes to make sure modules such as mod_privacy and
mod_block_strangers continue to affect MAM.
Diffstat (limited to 'src/mod_mam_mnesia.erl')
-rw-r--r-- | src/mod_mam_mnesia.erl | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/src/mod_mam_mnesia.erl b/src/mod_mam_mnesia.erl index b672b4107..71f1f701b 100644 --- a/src/mod_mam_mnesia.erl +++ b/src/mod_mam_mnesia.erl @@ -28,7 +28,7 @@ %% API -export([init/2, remove_user/2, remove_room/3, delete_old_messages/3, - extended_fields/0, store/7, write_prefs/4, get_prefs/2, select/6]). + extended_fields/0, store/8, write_prefs/4, get_prefs/2, select/6]). -include_lib("stdlib/include/ms_transform.hrl"). -include("xmpp.hrl"). @@ -103,7 +103,7 @@ delete_old_user_messages(User, TimeStamp, Type) -> extended_fields() -> []. -store(Pkt, _, {LUser, LServer}, Type, Peer, Nick, _Dir) -> +store(Pkt, _, {LUser, LServer}, Type, Peer, Nick, _Dir, TS) -> case {mnesia:table_info(archive_msg, disc_only_copies), mnesia:table_info(archive_msg, memory)} of {[_|_], TableSize} when TableSize > ?TABLE_SIZE_LIMIT -> @@ -112,13 +112,11 @@ store(Pkt, _, {LUser, LServer}, Type, Peer, Nick, _Dir) -> {error, overflow}; _ -> LPeer = {PUser, PServer, _} = jid:tolower(Peer), - TS = p1_time_compat:timestamp(), - ID = integer_to_binary(now_to_usec(TS)), F = fun() -> mnesia:write( #archive_msg{us = {LUser, LServer}, - id = ID, - timestamp = TS, + id = integer_to_binary(TS), + timestamp = misc:usec_to_now(TS), peer = LPeer, bare_peer = {PUser, PServer, <<>>}, type = Type, @@ -127,7 +125,7 @@ store(Pkt, _, {LUser, LServer}, Type, Peer, Nick, _Dir) -> end, case mnesia:transaction(F) of {atomic, ok} -> - {ok, ID}; + ok; {aborted, Err} -> ?ERROR_MSG("Cannot add message to MAM archive of ~s@~s: ~s", [LUser, LServer, Err]), @@ -178,9 +176,6 @@ select(_LServer, JidRequestor, %%%=================================================================== %%% Internal functions %%%=================================================================== -now_to_usec({MSec, Sec, USec}) -> - (MSec*1000000 + Sec)*1000000 + USec. - make_matchspec(LUser, LServer, Start, undefined, With) -> %% List is always greater than a tuple make_matchspec(LUser, LServer, Start, [], With); |