aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/s2smanager.lua11
-rw-r--r--core/stanza_router.lua3
-rw-r--r--lxmppd.cfg.dist1
-rw-r--r--net/xmppclient_listener.lua2
-rw-r--r--net/xmppserver_listener.lua2
-rw-r--r--plugins/mod_uptime.lua25
-rw-r--r--tests/test_util_jid.lua11
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