]> granicus.if.org Git - ejabberd/commitdiff
Prepare version 0.6.1 of XEP-0313 (MAM) support
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Wed, 8 Nov 2017 12:15:39 +0000 (15:15 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Wed, 8 Nov 2017 12:15:39 +0000 (15:15 +0300)
rebar.config
src/mod_mam.erl
src/mod_muc.erl
src/mod_muc_room.erl
test/mam_tests.erl

index 7b03fc8c483e62c97172c969d5e2b8767f346724..323605f2a7dbdd271c4fa3187992ff9ec238990d 100644 (file)
@@ -25,7 +25,7 @@
         {fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.0.16"}}},
         {stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.10"}}},
         {fast_xml, ".*", {git, "https://github.com/processone/fast_xml", {tag, "1.1.24"}}},
-        {xmpp, ".*", {git, "https://github.com/processone/xmpp", "3289a6b4e3f3d82e5be513524d2293c0c2b3e7fd"}},
+        {xmpp, ".*", {git, "https://github.com/processone/xmpp", "43676e1"}},
         {fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.11"}}},
         {jiffy, ".*", {git, "https://github.com/davisp/jiffy", {tag, "0.14.8"}}},
         {p1_oauth2, ".*", {git, "https://github.com/processone/p1_oauth2", {tag, "0.6.2"}}},
index 2593aaefd4d284fd8e5a4ce4cf27dd5a16af0de3..270cedf47eb1d10c3fa3ebe418c1805e2ba6dfb5 100644 (file)
@@ -24,7 +24,7 @@
 %%%-------------------------------------------------------------------
 -module(mod_mam).
 
--protocol({xep, 313, '0.5.1'}).
+-protocol({xep, 313, '0.6.1'}).
 -protocol({xep, 334, '0.2'}).
 
 -behaviour(gen_mod).
@@ -218,6 +218,10 @@ register_iq_handlers(Host, IQDisc) ->
     gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?NS_MAM_1,
                                  ?MODULE, process_iq_v0_3, IQDisc),
     gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_MAM_1,
+                                 ?MODULE, process_iq_v0_3, IQDisc),
+    gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?NS_MAM_2,
+                                 ?MODULE, process_iq_v0_3, IQDisc),
+    gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_MAM_2,
                                  ?MODULE, process_iq_v0_3, IQDisc).
 
 -spec unregister_iq_handlers(binary()) -> ok.
@@ -227,7 +231,9 @@ unregister_iq_handlers(Host) ->
     gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_MAM_0),
     gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MAM_0),
     gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_MAM_1),
-    gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MAM_1).
+    gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MAM_1),
+    gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_MAM_2),
+    gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MAM_2).
 
 -spec remove_user(binary(), binary()) -> ok.
 remove_user(User, Server) ->
@@ -372,7 +378,7 @@ muc_process_iq(#iq{type = T, lang = Lang,
                   from = From,
                   sub_els = [#mam_query{xmlns = NS}]} = IQ,
               MUCState)
-  when (T == set andalso (NS == ?NS_MAM_0 orelse NS == ?NS_MAM_1)) orelse
+  when (T == set andalso (NS /= ?NS_MAM_TMP)) orelse
        (T == get andalso NS == ?NS_MAM_TMP) ->
     case may_enter_room(From, MUCState) of
        true ->
@@ -385,7 +391,7 @@ muc_process_iq(#iq{type = T, lang = Lang,
     end;
 muc_process_iq(#iq{type = get,
                   sub_els = [#mam_query{xmlns = NS}]} = IQ,
-              MUCState) when NS == ?NS_MAM_0; NS == ?NS_MAM_1 ->
+              MUCState) when NS /= ?NS_MAM_TMP ->
     LServer = MUCState#state.server_host,
     process_iq(LServer, IQ);
 muc_process_iq(IQ, _MUCState) ->
@@ -415,7 +421,7 @@ disco_sm_features(empty, From, To, Node, Lang) ->
 disco_sm_features({result, OtherFeatures},
                  #jid{luser = U, lserver = S},
                  #jid{luser = U, lserver = S}, <<"">>, _Lang) ->
-    {result, [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1 | OtherFeatures]};
+    {result, [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1, ?NS_MAM_2 | OtherFeatures]};
 disco_sm_features(Acc, _From, _To, _Node, _Lang) ->
     Acc.
 
@@ -940,13 +946,13 @@ send(Msgs, Count, IsComplete,
                     #mam_fin{xmlns = NS, id = QID, rsm = RSMOut,
                              complete = IsComplete}
             end,
-    if NS == ?NS_MAM_TMP; NS == ?NS_MAM_1 ->
+    if NS /= ?NS_MAM_0 ->
            lists:foreach(
              fun(El) ->
                      ejabberd_router:route(El)
              end, Els),
            xmpp:make_iq_result(IQ, Result);
-       NS == ?NS_MAM_0 ->
+       true ->
            ejabberd_router:route(xmpp:make_iq_result(IQ)),
            lists:foreach(
              fun(El) ->
index c79cff19b6ef0ce65337fe10cbc8adad4f620744..f7d5303fb7f5512aa6b2d3dcc28919e9b0f19b94 100644 (file)
@@ -516,7 +516,7 @@ process_disco_info(#iq{type = get, to = To, lang = Lang,
     X = ejabberd_hooks:run_fold(disco_info, ServerHost, [],
                                [ServerHost, ?MODULE, <<"">>, Lang]),
     MAMFeatures = case gen_mod:is_loaded(ServerHost, mod_mam) of
-                     true -> [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1];
+                     true -> [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1, ?NS_MAM_2];
                      false -> []
                  end,
     RSMFeatures = case RMod:rsm_supported() of
index 7e71c69043c699834fd99b2575b046051d4a2cf8..be90d72eb90c78d09fd5ba5433592bd6f6b52ff9 100644 (file)
@@ -3643,7 +3643,7 @@ process_iq_disco_info(_From, #iq{type = get, lang = Lang}, StateData) ->
        ++ case {gen_mod:is_loaded(StateData#state.server_host, mod_mam),
                 Config#config.mam} of
               {true, true} ->
-                  [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1];
+                  [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1, ?NS_MAM_2];
               _ ->
                   []
           end,
index fd2b0d04f0808e8db4c308514ed3712444b8db25..f136d31baae7d303d17feec389e8c5293ba79b0b 100644 (file)
@@ -31,7 +31,7 @@
                muc_jid/1, is_feature_advertised/3, get_event/1, put_event/2]).
 
 -include("suite.hrl").
--define(VERSIONS, [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1]).
+-define(VERSIONS, [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1, ?NS_MAM_2]).
 
 %%%===================================================================
 %%% API
@@ -58,6 +58,7 @@ feature_enabled(Config) ->
     true = sets:is_subset(RequiredFeatures, UserFeatures),
     ct:comment("Checking if all MAM conference service features are enabled"),
     true = lists:member(?NS_MAM_1, MUCFeatures),
+    true = lists:member(?NS_MAM_2, MUCFeatures),
     clean(disconnect(Config)).
 
 fake_by(Config) ->
@@ -259,6 +260,7 @@ muc_master(Config) ->
     %% MAM feature should not be advertised at this point,
     %% because MAM is not enabled so far
     false = is_feature_advertised(Config, ?NS_MAM_1, Room),
+    false = is_feature_advertised(Config, ?NS_MAM_2, Room),
     %% Fill in some history
     send_messages_to_room(Config, lists:seq(1, 21)),
     %% We now should be able to retrieve those via MAM, even though
@@ -284,6 +286,7 @@ muc_master(Config) ->
             sub_els = [#muc_user{status_codes = [104]}]} = recv_message(Config),
     %% Check if MAM has been enabled
     true = is_feature_advertised(Config, ?NS_MAM_1, Room),
+    true = is_feature_advertised(Config, ?NS_MAM_2, Room),
     %% We now sending some messages again
     send_messages_to_room(Config, lists:seq(1, 5)),
     %% And retrieve them via MAM again.
@@ -377,7 +380,7 @@ send_query(Config, #mam_query{xmlns = NS} = Query) ->
     maybe_recv_iq_result(Config, NS, I),
     I.
 
-recv_fin(Config, I, QueryID, ?NS_MAM_1 = NS, IsComplete) ->
+recv_fin(Config, I, QueryID, NS, IsComplete) when NS == ?NS_MAM_1; NS == ?NS_MAM_2 ->
     ct:comment("Receiving fin iq for namespace '~s'", [NS]),
     #iq{type = result, id = I,
        sub_els = [#mam_fin{xmlns = NS,
@@ -427,7 +430,7 @@ recv_messages_from_room(Config, Range) ->
     QID = randoms:get_string(),
     Count = length(Range),
     I = send(Config, #iq{type = set, to = Room,
-                        sub_els = [#mam_query{xmlns = ?NS_MAM_1, id = QID}]}),
+                        sub_els = [#mam_query{xmlns = ?NS_MAM_2, id = QID}]}),
     lists:foreach(
       fun(N) ->
              Body = xmpp:mk_text(integer_to_binary(N)),
@@ -435,7 +438,7 @@ recv_messages_from_room(Config, Range) ->
                 to = MyJID, from = Room,
                 sub_els =
                     [#mam_result{
-                        xmlns = ?NS_MAM_1,
+                        xmlns = ?NS_MAM_2,
                         queryid = QID,
                         sub_els =
                             [#forwarded{
@@ -446,7 +449,7 @@ recv_messages_from_room(Config, Range) ->
                       body = Body} = xmpp:decode(El)
       end, Range),
     #iq{from = Room, id = I, type = result,
-       sub_els = [#mam_fin{xmlns = ?NS_MAM_1,
+       sub_els = [#mam_fin{xmlns = ?NS_MAM_2,
                            id = QID,
                            rsm = #rsm_set{count = Count},
                            complete = true}]} = recv_iq(Config).