Diff

util/adminstream.lua @ 10875:09674bbb833f

util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
author Matthew Wild <mwild1@gmail.com>
date Tue, 02 Jun 2020 08:28:39 +0100
parent 10855:70ac7d23673d
child 10876:c01c39a2c7a2
line wrap: on
line diff
--- a/util/adminstream.lua	Tue Jun 02 09:19:07 2020 +0200
+++ b/util/adminstream.lua	Tue Jun 02 08:28:39 2020 +0100
@@ -136,6 +136,44 @@
 
 --- Public methods
 
+local function new_connection(socket_path, listeners)
+	local have_unix, unix = pcall(require, "socket.unix");
+	if type(unix) ~= "table" then
+		have_unix = false;
+	end
+	local conn, sock;
+
+	return {
+		connect = function ()
+			if not have_unix then
+				return nil, "no unix socket support";
+			end
+			if sock or conn then
+				return nil, "already connected";
+			end
+			sock = unix.stream();
+			sock:settimeout(0);
+			local ok, err = sock:connect(socket_path);
+			if not ok then
+				return nil, err;
+			end
+			conn = server.wrapclient(sock, nil, nil, listeners, "*a");
+			return true;
+		end;
+		disconnect = function ()
+			if conn then
+				conn:close();
+				conn = nil;
+			end
+			if sock then
+				sock:close();
+				sock = nil;
+			end
+			return true;
+		end;
+	};
+end
+
 local function new_server(sessions, stanza_handler)
 	local listeners = {};
 
@@ -280,6 +318,7 @@
 end
 
 return {
+	connection = new_connection;
 	server = new_server;
 	client = new_client;
 };