Add time query plugin

Fri, 17 Mar 2023 12:30:49 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Fri, 17 Mar 2023 12:30:49 +0000
changeset 480
a48a4723aa2a
parent 479
2bb12fb6fcbd
child 481
6fc84e9bd03e

Add time query plugin

plugins/time.lua file | annotate | diff | comparison | revisions
squishy file | annotate | diff | comparison | revisions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/time.lua	Fri Mar 17 12:30:49 2023 +0000
@@ -0,0 +1,34 @@
+local verse = require "verse";
+local dt = require "util.datetime";
+
+local xmlns_time = "urn:xmpp:time";
+
+function verse.plugins.time(stream)
+	function stream:query_time(target_jid, callback)
+		callback = callback or function (time) return self:event("time/response", time); end
+		self:send_iq(verse.iq({ type = "get", to = target_jid })
+			:tag("time", { xmlns = xmlns_time }),
+			function (reply)
+				if reply.attr.type == "result" then
+					local query = reply:get_child("time", xmlns_time);
+					local resp = {
+						tzo = query:get_child_text("tzo");
+						utc = query:get_child_text("utc");
+					};
+					if resp.utc then
+						resp.timestamp = dt.parse(resp.utc);
+					end
+					callback(resp);
+				else
+					local type, condition, text = reply:get_error();
+					callback({
+						error = true;
+						condition = condition;
+						text = text;
+						type = type;
+					});
+				end
+			end);
+	end
+	return true;
+end
--- a/squishy	Fri Mar 17 12:30:25 2023 +0000
+++ b/squishy	Fri Mar 17 12:30:49 2023 +0000
@@ -63,7 +63,7 @@
 	-- Reliability
 	"smacks", "keepalive";
 	-- Queries
-	"disco", "version", "ping", "uptime";
+	"disco", "version", "ping", "uptime", "time";
 	-- Privacy control
 	"blocking";
 	-- Jingle / file transfer

mercurial