Mercurial > prosody-hg
comparison util/prosodyctl/shell.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 |
| parents | 98c535531450 |
| children | 2b015ef8cd06 |
comparison
equal
deleted
inserted
replaced
| 10874:98c535531450 | 10875:09674bbb833f |
|---|---|
| 1 local have_unix, unix = pcall(require, "socket.unix"); | |
| 2 | |
| 3 if not have_unix or type(unix) ~= "table" then | |
| 4 print("** LuaSocket unix socket support not available or incompatible, ensure your"); | |
| 5 print("** version is up to date."); | |
| 6 os.exit(1); | |
| 7 end | |
| 8 | |
| 9 local config = require "core.configmanager"; | 1 local config = require "core.configmanager"; |
| 10 local server = require "net.server"; | 2 local server = require "net.server"; |
| 11 local st = require "util.stanza"; | 3 local st = require "util.stanza"; |
| 12 local path = require "util.paths"; | 4 local path = require "util.paths"; |
| 13 local parse_args = require "util.argparse".parse; | 5 local parse_args = require "util.argparse".parse; |
| 40 print(""); | 32 print(""); |
| 41 end | 33 end |
| 42 os.exit(); | 34 os.exit(); |
| 43 end | 35 end |
| 44 send_line(client, line); | 36 send_line(client, line); |
| 45 end | |
| 46 | |
| 47 local function connection(socket_path, listeners) | |
| 48 local conn, sock; | |
| 49 | |
| 50 return { | |
| 51 connect = function () | |
| 52 if sock or conn then | |
| 53 return nil, "already connected"; | |
| 54 end | |
| 55 sock = unix.stream(); | |
| 56 sock:settimeout(0); | |
| 57 local ok, err = sock:connect(socket_path); | |
| 58 if not ok then | |
| 59 return nil, err; | |
| 60 end | |
| 61 conn = server.wrapclient(sock, nil, nil, listeners, "*a"); | |
| 62 return true; | |
| 63 end; | |
| 64 disconnect = function () | |
| 65 if conn then | |
| 66 conn:close(); | |
| 67 conn = nil; | |
| 68 end | |
| 69 if sock then | |
| 70 sock:close(); | |
| 71 sock = nil; | |
| 72 end | |
| 73 return true; | |
| 74 end; | |
| 75 }; | |
| 76 end | 37 end |
| 77 | 38 |
| 78 local function printbanner() | 39 local function printbanner() |
| 79 print([[ | 40 print([[ |
| 80 ____ \ / _ | 41 ____ \ / _ |
| 115 repl(client); | 76 repl(client); |
| 116 end | 77 end |
| 117 end); | 78 end); |
| 118 | 79 |
| 119 local socket_path = path.resolve_relative_path(prosody.paths.data, opts.socket or config.get("*", "admin_socket") or "prosody.sock"); | 80 local socket_path = path.resolve_relative_path(prosody.paths.data, opts.socket or config.get("*", "admin_socket") or "prosody.sock"); |
| 120 local conn = connection(socket_path, client.listeners); | 81 local conn = adminstream.connection(socket_path, client.listeners); |
| 121 local ok, err = conn:connect(); | 82 local ok, err = conn:connect(); |
| 122 if not ok then | 83 if not ok then |
| 123 print("** Unable to connect to server - is it running? Is mod_admin_shell enabled?"); | 84 if err == "no unix socket support" then |
| 124 print("** Connection error: "..err); | 85 print("** LuaSocket unix socket support not available or incompatible, ensure your"); |
| 86 print("** version is up to date."); | |
| 87 else | |
| 88 print("** Unable to connect to server - is it running? Is mod_admin_shell enabled?"); | |
| 89 print("** Connection error: "..err); | |
| 90 end | |
| 125 os.exit(1); | 91 os.exit(1); |
| 126 end | 92 end |
| 127 server.loop(); | 93 server.loop(); |
| 128 end | 94 end |
| 129 | 95 |
