]> granicus.if.org Git - ejabberd/commitdiff
Include original timestamp on delayed presences (thanks to Mickael Remond)(EJAB-234)
authorBadlop <badlop@process-one.net>
Tue, 30 Jun 2009 17:50:47 +0000 (17:50 +0000)
committerBadlop <badlop@process-one.net>
Tue, 30 Jun 2009 17:50:47 +0000 (17:50 +0000)
SVN Revision: 2348

src/ejabberd_c2s.erl
src/mod_muc/mod_muc_room.erl
src/xml.erl

index dc5d4676dfba32c6403b5c49c1f33a8a17d62f10..b0c7b7df77d44186fcc0656a6bd6136063331976 100644 (file)
@@ -1441,7 +1441,13 @@ process_presence_probe(From, To, StateData) ->
                andalso ?SETS:is_element(LFrom, StateData#state.pres_a),
            if
                Cond1 ->
-                   Packet = StateData#state.pres_last,
+                   Timestamp = StateData#state.pres_timestamp,
+                   Packet = xml:append_subtags(
+                              StateData#state.pres_last,
+                              %% To is the one sending the presence (the target of the probe)
+                              [jlib:timestamp_to_xml(Timestamp, utc, To, ""),
+                               %% TODO: Delete the next line once XEP-0091 is Obsolete
+                               jlib:timestamp_to_xml(Timestamp)]),
                    case ejabberd_hooks:run_fold(
                           privacy_check_packet, StateData#state.server,
                           allow,
@@ -1495,6 +1501,7 @@ presence_update(From, Packet, StateData) ->
            presence_broadcast(StateData, From, StateData#state.pres_a, Packet),
            presence_broadcast(StateData, From, StateData#state.pres_i, Packet),
            StateData#state{pres_last = undefined,
+                           pres_timestamp = undefined,
                            pres_a = ?SETS:new(),
                            pres_i = ?SETS:new(),
                            pres_invis = false};
@@ -1511,6 +1518,7 @@ presence_update(From, Packet, StateData) ->
                                           StateData#state.pres_i,
                                           Packet),
                        S1 = StateData#state{pres_last = undefined,
+                                            pres_timestamp = undefined,
                                             pres_a = ?SETS:new(),
                                             pres_i = ?SETS:new(),
                                             pres_invis = true},
@@ -1539,6 +1547,7 @@ presence_update(From, Packet, StateData) ->
                                  get_priority_from_presence(OldPresence)
                          end,
            NewPriority = get_priority_from_presence(Packet),
+           Timestamp = calendar:now_to_universal_time(now()),
            update_priority(NewPriority, Packet, StateData),
            FromUnavail = (StateData#state.pres_last == undefined) or
                StateData#state.pres_invis,
@@ -1557,7 +1566,8 @@ presence_update(From, Packet, StateData) ->
                        end,
                        presence_broadcast_first(
                          From, StateData#state{pres_last = Packet,
-                                               pres_invis = false
+                                               pres_invis = false,
+                                               pres_timestamp = Timestamp
                                               }, Packet);
                    true ->
                        presence_broadcast_to_trusted(StateData,
@@ -1571,7 +1581,8 @@ presence_update(From, Packet, StateData) ->
                                ok
                        end,
                        StateData#state{pres_last = Packet,
-                                       pres_invis = false
+                                       pres_invis = false,
+                                       pres_timestamp = Timestamp
                                       }
                end,
            NewState
index a6ee81d3eb4c4d4a47e1e7ab34bd8ff5b03f3ba8..44b95e7a340148841288fa5bdf592db47fb7055b 100644 (file)
@@ -1827,7 +1827,7 @@ send_new_presence(NJID, Reason, StateData) ->
                           false ->
                               []
                       end,
-             Packet = append_subtags(
+             Packet = xml:append_subtags(
                         Presence,
                         [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
                           [{xmlelement, "item", ItemAttrs, ItemEls} | Status]}]),
@@ -1868,7 +1868,7 @@ send_existing_presences(ToJID, StateData) ->
                                    affiliation_to_list(FromAffiliation)},
                                   {"role", role_to_list(FromRole)}]
                          end,
-                     Packet = append_subtags(
+                     Packet = xml:append_subtags(
                                 Presence,
                                 [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
                                   [{xmlelement, "item", ItemAttrs, []}]}]),
@@ -1881,10 +1881,6 @@ send_existing_presences(ToJID, StateData) ->
       end, ?DICT:to_list(StateData#state.users)).
 
 
-append_subtags({xmlelement, Name, Attrs, SubTags1}, SubTags2) ->
-    {xmlelement, Name, Attrs, SubTags1 ++ SubTags2}.
-
-
 now_to_usec({MSec, Sec, USec}) ->
     (MSec*1000000 + Sec)*1000000 + USec.
 
@@ -1944,7 +1940,7 @@ send_nick_changing(JID, OldNick, StateData) ->
                   [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
                     [{xmlelement, "item", ItemAttrs1, []},
                      {xmlelement, "status", [{"code", "303"}], []}]}]},
-             Packet2 = append_subtags(
+             Packet2 = xml:append_subtags(
                          Presence,
                          [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],
                            [{xmlelement, "item", ItemAttrs2, []}]}]),
@@ -2004,7 +2000,7 @@ add_message_to_history(FromNick, FromJID, Packet, StateData) ->
        true -> StateData#state.jid;
        false -> FromJID
     end,
-    TSPacket = append_subtags(Packet,
+    TSPacket = xml:append_subtags(Packet,
                              [jlib:timestamp_to_xml(TimeStamp, utc, SenderJid, ""),
                               %% TODO: Delete the next line once XEP-0091 is Obsolete
                               jlib:timestamp_to_xml(TimeStamp)]),
index 592ad5b99fdef40a19d6b0cff9e0f287875e7f59..c7f1c0e11969ce518c76106c7bdddbeb3f450c19 100644 (file)
@@ -34,6 +34,7 @@
         get_attr/2, get_attr_s/2,
         get_tag_attr/2, get_tag_attr_s/2,
         get_subtag/2, get_subtag_cdata/2,
+        append_subtags/2,
         get_path_s/2,
         replace_tag_attr/3]).
 
@@ -219,6 +220,9 @@ get_subtag_cdata(Tag, Name) ->
            get_tag_cdata(Subtag)
     end.
 
+append_subtags({xmlelement, Name, Attrs, SubTags1}, SubTags2) ->
+    {xmlelement, Name, Attrs, SubTags1 ++ SubTags2}.
+
 get_path_s(El, []) ->
     El;
 get_path_s(El, [{elem, Name} | Path]) ->