>}],
- children = Text}.
-
--spec timestamp_to_xml(calendar:datetime()) -> xmlel().
-
-timestamp_to_xml({{Year, Month, Day},
- {Hour, Minute, Second}}) ->
- #xmlel{name = <<"x">>,
- attrs =
- [{<<"xmlns">>, ?NS_DELAY91},
- {<<"stamp">>,
- iolist_to_binary(io_lib:format("~4..0w~2..0w~2..0wT~2..0w:~2..0w:~2..0w",
- [Year, Month, Day, Hour, Minute,
- Second]))}],
- children = []}.
-
-spec now_to_utc_string(erlang:timestamp()) -> binary().
now_to_utc_string({MegaSecs, Secs, MicroSecs}) ->
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 0974950b7..95d437bfc 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -2438,24 +2438,21 @@ add_message_to_history(FromNick, FromJID, Packet, StateData) ->
false -> false;
_ -> true
end,
- TimeStamp = calendar:now_to_universal_time(now()),
+ TimeStamp = now(),
SenderJid = case
(StateData#state.config)#config.anonymous
of
true -> StateData#state.jid;
false -> FromJID
end,
- TSPacket = xml:append_subtags(Packet,
- [jlib:timestamp_to_xml(TimeStamp, utc,
- SenderJid, <<"">>),
- jlib:timestamp_to_xml(TimeStamp)]),
+ TSPacket = jlib:add_delay_info(Packet, SenderJid, TimeStamp),
SPacket =
jlib:replace_from_to(jlib:jid_replace_resource(StateData#state.jid,
FromNick),
StateData#state.jid, TSPacket),
Size = element_size(SPacket),
Q1 = lqueue_in({FromNick, TSPacket, HaveSubject,
- TimeStamp, Size},
+ calendar:now_to_universal_time(TimeStamp), Size},
StateData#state.history),
add_to_log(text, {FromNick, Packet}, StateData),
StateData#state{history = Q1}.
diff --git a/src/mod_offline.erl b/src/mod_offline.erl
index 91d31a75d..4ac3f18f8 100644
--- a/src/mod_offline.erl
+++ b/src/mod_offline.erl
@@ -215,26 +215,15 @@ store_offline_msg(Host, {User, _Server}, Msgs, Len, MaxOfflineMsgs, odbc) ->
ejabberd_odbc:escape((M#offline_msg.to)#jid.luser),
From = M#offline_msg.from,
To = M#offline_msg.to,
- #xmlel{name = Name, attrs = Attrs,
- children = Els} =
- M#offline_msg.packet,
- Attrs2 =
- jlib:replace_from_to_attrs(jlib:jid_to_string(From),
- jlib:jid_to_string(To),
- Attrs),
- Packet = #xmlel{name = Name,
- attrs = Attrs2,
- children =
- Els ++
- [jlib:timestamp_to_xml(calendar:now_to_universal_time(M#offline_msg.timestamp),
- utc,
- jlib:make_jid(<<"">>,
- Host,
- <<"">>),
- <<"Offline Storage">>),
- jlib:timestamp_to_xml(calendar:now_to_universal_time(M#offline_msg.timestamp))]},
+ Packet =
+ jlib:replace_from_to(From, To,
+ M#offline_msg.packet),
+ NewPacket =
+ jlib:add_delay_info(Packet, Host,
+ M#offline_msg.timestamp,
+ <<"Offline Storage">>),
XML =
- ejabberd_odbc:escape(xml:element_to_binary(Packet)),
+ ejabberd_odbc:escape(xml:element_to_binary(NewPacket)),
odbc_queries:add_spool_sql(Username, XML)
end,
Msgs),
@@ -432,15 +421,12 @@ resend_offline_messages(User, Server) ->
case mnesia:transaction(F) of
{atomic, Rs} ->
lists:foreach(fun (R) ->
- #xmlel{name = Name, attrs = Attrs,
- children = Els} =
- R#offline_msg.packet,
ejabberd_sm !
{route, R#offline_msg.from, R#offline_msg.to,
- #xmlel{name = Name, attrs = Attrs,
- children =
- Els ++
- [jlib:timestamp_to_xml(calendar:now_to_universal_time(R#offline_msg.timestamp))]}}
+ jlib:add_delay_info(R#offline_msg.packet,
+ LServer,
+ R#offline_msg.timestamp,
+ <<"Offline Storage">>)}
end,
lists:keysort(#offline_msg.timestamp, Rs));
_ -> ok
@@ -686,19 +672,9 @@ get_offline_els(LUser, LServer, odbc) ->
end.
offline_msg_to_route(LServer, #offline_msg{} = R) ->
- El = #xmlel{children = Els} = R#offline_msg.packet,
{route, R#offline_msg.from, R#offline_msg.to,
- El#xmlel{children =
- Els ++
- [jlib:timestamp_to_xml(
- calendar:now_to_universal_time(
- R#offline_msg.timestamp),
- utc,
- jlib:make_jid(<<"">>, LServer, <<"">>),
- <<"Offline Storage">>),
- jlib:timestamp_to_xml(
- calendar:now_to_universal_time(
- R#offline_msg.timestamp))]}};
+ jlib:add_delay_info(R#offline_msg.packet, LServer, R#offline_msg.timestamp,
+ <<"Offline Storage">>)};
offline_msg_to_route(_LServer, #xmlel{} = El) ->
To = jlib:string_to_jid(xml:get_tag_attr_s(<<"to">>, El)),
From = jlib:string_to_jid(xml:get_tag_attr_s(<<"from">>, El)),
@@ -1109,26 +1085,14 @@ export(_Server) ->
packet = Packet})
when LServer == Host ->
Username = ejabberd_odbc:escape(LUser),
- #xmlel{name = Name, attrs = Attrs, children = Els} =
- Packet,
- Attrs2 =
- jlib:replace_from_to_attrs(jlib:jid_to_string(From),
- jlib:jid_to_string(To),
- Attrs),
- NewPacket = #xmlel{name = Name, attrs = Attrs2,
- children =
- Els ++
- [jlib:timestamp_to_xml(
- calendar:now_to_universal_time(TimeStamp),
- utc,
- jlib:make_jid(<<"">>,
- LServer,
- <<"">>),
- <<"Offline Storage">>),
- jlib:timestamp_to_xml(
- calendar:now_to_universal_time(TimeStamp))]},
+ Packet1 =
+ jlib:replace_from_to(jlib:jid_to_string(From),
+ jlib:jid_to_string(To), Packet),
+ Packet2 =
+ jlib:add_delay_info(Packet1, LServer, TimeStamp,
+ <<"Offline Storage">>),
XML =
- ejabberd_odbc:escape(xml:element_to_binary(NewPacket)),
+ ejabberd_odbc:escape(xml:element_to_binary(Packet2)),
[[<<"delete from spool where username='">>, Username, <<"';">>],
[<<"insert into spool(username, xml) values ('">>,
Username, <<"', '">>, XML, <<"');">>]];
diff --git a/src/mod_pubsub.erl b/src/mod_pubsub.erl
index 5f16fed7e..f7d30558e 100644
--- a/src/mod_pubsub.erl
+++ b/src/mod_pubsub.erl
@@ -4275,21 +4275,15 @@ payload_xmlelements([_ | Tail], Count) ->
%% @spec (Els) -> stanza()
%% Els = [xmlelement()]
%% @doc Build pubsub event stanza
-event_stanza(Els) -> event_stanza_withmoreels(Els, []).
-
-event_stanza_with_delay(Els, ModifNow, ModifUSR) ->
- DateTime = calendar:now_to_datetime(ModifNow),
- MoreEls = [jlib:timestamp_to_xml(DateTime, utc,
- ModifUSR, <<"">>)],
- event_stanza_withmoreels(Els, MoreEls).
-
-event_stanza_withmoreels(Els, MoreEls) ->
+event_stanza(Els) ->
#xmlel{name = <<"message">>, attrs = [],
children =
[#xmlel{name = <<"event">>,
attrs = [{<<"xmlns">>, ?NS_PUBSUB_EVENT}],
- children = Els}
- | MoreEls]}.
+ children = Els}]}.
+
+event_stanza_with_delay(Els, ModifNow, ModifUSR) ->
+ jlib:add_delay_info(event_stanza(Els), ModifUSR, ModifNow).
%%%%%% broadcast functions
diff --git a/src/mod_pubsub_odbc.erl b/src/mod_pubsub_odbc.erl
index c953e26a9..b3f2db7c0 100644
--- a/src/mod_pubsub_odbc.erl
+++ b/src/mod_pubsub_odbc.erl
@@ -3925,21 +3925,15 @@ payload_xmlelements([_ | Tail], Count) ->
%% @spec (Els) -> stanza()
%% Els = [xmlelement()]
%% @doc Build pubsub event stanza
-event_stanza(Els) -> event_stanza_withmoreels(Els, []).
-
-event_stanza_with_delay(Els, ModifNow, ModifUSR) ->
- DateTime = calendar:now_to_datetime(ModifNow),
- MoreEls = [jlib:timestamp_to_xml(DateTime, utc,
- ModifUSR, <<"">>)],
- event_stanza_withmoreels(Els, MoreEls).
-
-event_stanza_withmoreels(Els, MoreEls) ->
+event_stanza(Els) ->
#xmlel{name = <<"message">>, attrs = [],
children =
[#xmlel{name = <<"event">>,
attrs = [{<<"xmlns">>, ?NS_PUBSUB_EVENT}],
- children = Els}
- | MoreEls]}.
+ children = Els}]}.
+
+event_stanza_with_delay(Els, ModifNow, ModifUSR) ->
+ jlib:add_delay_info(event_stanza(Els), ModifUSR, ModifNow).
%%%%%% broadcast functions
diff --git a/test/ejabberd_SUITE.erl b/test/ejabberd_SUITE.erl
index 50fa70bd9..380ed606f 100644
--- a/test/ejabberd_SUITE.erl
+++ b/test/ejabberd_SUITE.erl
@@ -801,7 +801,7 @@ pubsub(Config) ->
node = Node,
jid = my_jid(Config)}}]}),
?recv2(
- #message{sub_els = [#pubsub_event{}, #delay{}]},
+ #message{sub_els = [#pubsub_event{}, #delay{}, #legacy_delay{}]},
#iq{type = result, id = I1}),
%% Get subscriptions
true = lists:member(?PUBSUB("retrieve-subscriptions"), Features),
@@ -1588,7 +1588,8 @@ client_state_slave(Config) ->
body = [#text{data = <<"body">>}]} = recv(),
wait_for_master(Config),
send(Config, #csi{type = active}),
- ?recv2(#presence{from = Peer, type = unavailable, sub_els = [#delay{}]},
+ ?recv2(#presence{from = Peer, type = unavailable,
+ sub_els = [#delay{}, #legacy_delay{}]},
#message{from = Peer, thread = <<"1">>,
sub_els = [#chatstate{type = active}]}),
disconnect(Config).