aboutsummaryrefslogtreecommitdiff
path: root/src/mod_time.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_time.erl')
-rw-r--r--src/mod_time.erl33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/mod_time.erl b/src/mod_time.erl
index 1311b6957..0b4133692 100644
--- a/src/mod_time.erl
+++ b/src/mod_time.erl
@@ -31,6 +31,7 @@
-export([start/2,
stop/1,
+ process_local_iq90/3, % TODO: Remove once XEP-0090 is Obsolete
process_local_iq/3]).
-include("ejabberd.hrl").
@@ -39,13 +40,19 @@
start(Host, Opts) ->
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
+ %% TODO: Remove the next two lines once XEP-0090 is Obsolete
+ gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?NS_TIME90,
+ ?MODULE, process_local_iq90, IQDisc),
gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?NS_TIME,
?MODULE, process_local_iq, IQDisc).
stop(Host) ->
+ %% TODO: Remove the next line once XEP-0090 is Obsolete
+ gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_TIME90),
gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_TIME).
-process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
+%% TODO: Remove this function once XEP-0090 is Obsolete
+process_local_iq90(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case Type of
set ->
IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
@@ -53,9 +60,31 @@ process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
UTC = jlib:timestamp_to_iso(calendar:universal_time()),
IQ#iq{type = result,
sub_el = [{xmlelement, "query",
- [{"xmlns", ?NS_TIME}],
+ [{"xmlns", ?NS_TIME90}],
[{xmlelement, "utc", [],
[{xmlcdata, UTC}]}]}]}
end.
+process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
+ case Type of
+ set ->
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
+ get ->
+ Now = now(),
+ Now_universal = calendar:now_to_universal_time(Now),
+ Now_local = calendar:now_to_local_time(Now),
+ {UTC, UTC_diff} = jlib:timestamp_to_iso(Now_universal, utc),
+ Seconds_diff = calendar:datetime_to_gregorian_seconds(Now_local)
+ - calendar:datetime_to_gregorian_seconds(Now_universal),
+ {Hd, Md, _} = calendar:seconds_to_time(Seconds_diff),
+ {_, TZO_diff} = jlib:timestamp_to_iso({{0, 0, 0}, {0, 0, 0}}, {Hd, Md}),
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "time",
+ [{"xmlns", ?NS_TIME}],
+ [{xmlelement, "tzo", [],
+ [{xmlcdata, TZO_diff}]},
+ {xmlelement, "utc", [],
+ [{xmlcdata, UTC ++ UTC_diff}]}]}]}
+ end.
+