diff options
-rw-r--r-- | core/s2smanager.lua | 11 | ||||
-rw-r--r-- | core/stanza_router.lua | 3 | ||||
-rw-r--r-- | lxmppd.cfg.dist | 1 | ||||
-rw-r--r-- | net/xmppclient_listener.lua | 2 | ||||
-rw-r--r-- | net/xmppserver_listener.lua | 2 | ||||
-rw-r--r-- | plugins/mod_uptime.lua | 25 | ||||
-rw-r--r-- | tests/test_util_jid.lua | 11 |
7 files changed, 43 insertions, 12 deletions
diff --git a/core/s2smanager.lua b/core/s2smanager.lua index 2f2f1d92..aed10753 100644 --- a/core/s2smanager.lua +++ b/core/s2smanager.lua @@ -76,16 +76,19 @@ function new_outgoing(from_host, to_host) local cl = connlisteners_get("xmppserver"); local conn, handler = socket.tcp() + + + -- Register this outgoing connection so that xmppserver_listener knows about it + -- otherwise it will assume it is a new incoming connection + cl.register_outgoing(conn, host_session); + --FIXME: Below parameters (ports/ip) are incorrect (use SRV) to_host = srvmap[to_host] or to_host; + conn:settimeout(0.1); conn:connect(to_host, 5269); conn = wraptlsclient(cl, conn, to_host, 5269, 0, 1, hosts[from_host].ssl_ctx ); host_session.conn = conn; - -- Register this outgoing connection so that xmppserver_listener knows about it - -- otherwise it will assume it is a new incoming connection - cl.register_outgoing(conn, host_session); - do local conn_name = "s2sout"..tostring(conn):match("[a-f0-9]*$"); host_session.log = logger_init(conn_name); diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 0a5ff0be..9ae98f1c 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -33,6 +33,7 @@ local print = print; function core_process_stanza(origin, stanza) log("debug", "Received["..origin.type.."]: "..tostring(st.reply(st.reply(stanza)))) + if not stanza.attr.xmlns then stanza.attr.xmlns = "jabber:client"; end -- FIXME Hack. This should be removed when we fix namespace handling. -- TODO verify validity of stanza (as well as JID validity) if stanza.name == "iq" and not(#stanza.tags == 1 and stanza.tags[1].attr.xmlns) then if stanza.attr.type == "set" or stanza.attr.type == "get" then @@ -327,7 +328,7 @@ function core_route_stanza(origin, stanza) t_insert(recipients, session); end end - for _, session in pairs(recipient) do + for _, session in pairs(recipients) do session.send(stanza); end else diff --git a/lxmppd.cfg.dist b/lxmppd.cfg.dist index b523c697..59b85b97 100644 --- a/lxmppd.cfg.dist +++ b/lxmppd.cfg.dist @@ -26,5 +26,6 @@ config = { "private"; "version"; "dialback"; + "uptime"; }; } diff --git a/net/xmppclient_listener.lua b/net/xmppclient_listener.lua index 64747bc5..ca4cbbb0 100644 --- a/net/xmppclient_listener.lua +++ b/net/xmppclient_listener.lua @@ -62,7 +62,7 @@ function xmppclient.listener(conn, data) -- (I'm on a mission, no time to fix now) -- Debug version -- - local function handleerr() print("Traceback:", debug.traceback()); end + local function handleerr(err) print("Traceback:", err, debug.traceback()); end session.stanza_dispatch = function (stanza) return select(2, xpcall(function () return core_process_stanza(session, stanza); end, handleerr)); end -- session.stanza_dispatch = function (stanza) return core_process_stanza(session, stanza); end diff --git a/net/xmppserver_listener.lua b/net/xmppserver_listener.lua index f8b5d1c8..ee3faa8f 100644 --- a/net/xmppserver_listener.lua +++ b/net/xmppserver_listener.lua @@ -64,7 +64,7 @@ function xmppserver.listener(conn, data) -- (I'm on a mission, no time to fix now) -- Debug version -- - local function handleerr() print("Traceback:", debug.traceback()); end + local function handleerr(err) print("Traceback:", err, debug.traceback()); end session.stanza_dispatch = function (stanza) return select(2, xpcall(function () return core_process_stanza(session, stanza); end, handleerr)); end -- session.stanza_dispatch = function (stanza) return core_process_stanza(session, stanza); end diff --git a/plugins/mod_uptime.lua b/plugins/mod_uptime.lua new file mode 100644 index 00000000..55e5f168 --- /dev/null +++ b/plugins/mod_uptime.lua @@ -0,0 +1,25 @@ +
+local st = require "util.stanza"
+local send = require "core.sessionmanager".send_to_session
+
+local jid_split = require "util.jid".split;
+local t_concat = table.concat;
+
+local start_time = os.time();
+
+add_iq_handler({"c2s", "s2sin"}, "jabber:iq:last",
+ function (origin, stanza)
+ if stanza.tags[1].name == "query" then
+ if stanza.attr.type == "get" then
+ local node, host, resource = jid_split(stanza.attr.to);
+ if node or resource then
+ -- TODO
+ else
+ origin.send(st.reply(stanza):tag("query", {xmlns = "jabber:iq:last", seconds = tostring(os.difftime(os.time(), start_time))}));
+ return true;
+ end
+ end
+ end
+ end);
+
+
diff --git a/tests/test_util_jid.lua b/tests/test_util_jid.lua index 3be0bfa1..1dbd72b7 100644 --- a/tests/test_util_jid.lua +++ b/tests/test_util_jid.lua @@ -1,13 +1,14 @@ function split(split) - function test(jid, node, server, resource) - local rnode, rserver, rresource = split(jid); - assert_equal(node, rnode, "split("..jid..") failed"); - assert_equal(server, rserver, "split("..jid..") failed"); - assert_equal(resource, rresource, "split("..jid..") failed"); + function test(input_jid, expected_node, expected_server, expected_resource) + local rnode, rserver, rresource = split(input_jid); + assert_equal(expected_node, rnode, "split("..tostring(input_jid)..") failed"); + assert_equal(expected_server, rserver, "split("..tostring(input_jid)..") failed"); + assert_equal(expected_resource, rresource, "split("..tostring(input_jid)..") failed"); end test("node@server", "node", "server", nil ); test("node@server/resource", "node", "server", "resource" ); test("server", nil, "server", nil ); test("server/resource", nil, "server", "resource" ); + test(nil, nil, nil , nil ); end |