Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2015-09-22 21:15:34 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2015-09-22 21:15:34 +0300
commit89b3471742615cec6dd04745c6551f99a93bdcdf (patch)
treecd0732f4a027473fc4147170012571570b20a39f /src/mod_mam.erl
parent3300c8d9941fb1809c8fbeb683fad1f5034c0cd3 (diff)
Add <stanza-id/> (XEP-0359) to archived messages
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r--src/mod_mam.erl26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl
index cd9dd7e40..3e3e0873d 100644
--- a/src/mod_mam.erl
+++ b/src/mod_mam.erl
@@ -169,7 +169,11 @@ user_receive_packet(Pkt, C2SState, JID, Peer, _To) ->
attrs = [{<<"by">>, LServer},
{<<"xmlns">>, ?NS_MAM_TMP},
{<<"id">>, ID}]},
- NewEls = [Archived|NewPkt#xmlel.children],
+ StanzaID = #xmlel{name = <<"stanza-id">>,
+ attrs = [{<<"by">>, LServer},
+ {<<"xmlns">>, ?NS_SID_0},
+ {<<"id">>, ID}]},
+ NewEls = [Archived, StanzaID|NewPkt#xmlel.children],
NewPkt#xmlel{children = NewEls};
_ ->
NewPkt
@@ -194,9 +198,19 @@ user_send_packet(Pkt, C2SState, JID, Peer) ->
muc_filter_message(Pkt, #state{config = Config} = MUCState,
RoomJID, From, FromNick) ->
if Config#config.mam ->
- NewPkt = strip_my_archived_tag(Pkt, MUCState#state.server_host),
- store_muc(MUCState, NewPkt, RoomJID, From, FromNick),
- NewPkt;
+ By = jlib:jid_to_string(RoomJID),
+ NewPkt = strip_my_archived_tag(Pkt, By),
+ case store_muc(MUCState, NewPkt, RoomJID, From, FromNick) of
+ {ok, ID} ->
+ StanzaID = #xmlel{name = <<"stanza-id">>,
+ attrs = [{<<"by">>, By},
+ {<<"xmlns">>, ?NS_SID_0},
+ {<<"id">>, ID}]},
+ NewEls = [StanzaID|NewPkt#xmlel.children],
+ NewPkt#xmlel{children = NewEls};
+ _ ->
+ NewPkt
+ end;
true ->
Pkt
end.
@@ -345,8 +359,8 @@ should_archive(#xmlel{}) ->
strip_my_archived_tag(Pkt, LServer) ->
NewEls = lists:filter(
- fun(#xmlel{name = <<"archived">>,
- attrs = Attrs}) ->
+ fun(#xmlel{name = Tag, attrs = Attrs})
+ when Tag == <<"archived">>; Tag == <<"stanza-id">> ->
case catch jlib:nameprep(
xml:get_attr_s(
<<"by">>, Attrs)) of