From a94c596c02852294020e5d1b86a70e04ec4b9e5d Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sun, 9 Nov 2008 20:14:58 +0000 Subject: Prevent slow connects for s2s from blocking for so long --- core/s2smanager.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/core/s2smanager.lua b/core/s2smanager.lua index 2f2f1d92..76edc8af 100644 --- a/core/s2smanager.lua +++ b/core/s2smanager.lua @@ -78,6 +78,7 @@ function new_outgoing(from_host, to_host) local conn, handler = socket.tcp() --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; -- cgit v1.2.3 From bc83d650a03de76cad050fda72b1108924cb282b Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sun, 9 Nov 2008 20:15:31 +0000 Subject: Actually show error and position when we show a traceback :) --- net/xmppclient_listener.lua | 2 +- net/xmppserver_listener.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 -- cgit v1.2.3 From 439b80fc6ee666302ecd7d7d50bdb9c5fa4e12cc Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Mon, 10 Nov 2008 01:30:52 +0500 Subject: Hack to allow s2s stanzas to work until we do proper namespace handling --- core/stanza_router.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 0a5ff0be..61c2dede 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 -- cgit v1.2.3 From b2a1a80faf383663f9e67f9cc64403bf09d43df3 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Mon, 10 Nov 2008 01:33:37 +0500 Subject: Added mod_uptime: [XEP-0012: Last Activity] queries now work when directed at the server. --- lxmppd.cfg.dist | 1 + plugins/mod_uptime.lua | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 plugins/mod_uptime.lua 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/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); + + -- cgit v1.2.3 From 074f86605d713a42d55d3d9eb68536d0ee41c123 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sun, 9 Nov 2008 21:46:42 +0000 Subject: Move some code about so that we don't leave connections hanging if they hit the connection timeout --- core/s2smanager.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/s2smanager.lua b/core/s2smanager.lua index 76edc8af..aed10753 100644 --- a/core/s2smanager.lua +++ b/core/s2smanager.lua @@ -76,6 +76,12 @@ 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); @@ -83,10 +89,6 @@ function new_outgoing(from_host, to_host) 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); -- cgit v1.2.3 From b2b866b63d4cdc390498ea43ca54c8590de8ece7 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Mon, 10 Nov 2008 04:53:42 +0500 Subject: Fixed typo --- core/stanza_router.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 61c2dede..9ae98f1c 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -328,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 -- cgit v1.2.3 From dfe7f483e474b7f37a577904c318b4389bd1fd90 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sun, 9 Nov 2008 23:58:19 +0000 Subject: Fix jid.split test function --- tests/test_util_jid.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_util_jid.lua b/tests/test_util_jid.lua index 3be0bfa1..58fadbb7 100644 --- a/tests/test_util_jid.lua +++ b/tests/test_util_jid.lua @@ -2,12 +2,13 @@ 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"); + assert_equal(node, rnode, "split("..tostring(jid)..") failed"); + assert_equal(server, rserver, "split("..tostring(jid)..") failed"); + assert_equal(resource, rresource, "split("..tostring(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 -- cgit v1.2.3 From eea12d2279cd8f1e41c9234430e961754be6ce76 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Mon, 10 Nov 2008 00:00:46 +0000 Subject: Renamed some of the variables in jid.split test to make it clearer --- tests/test_util_jid.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_util_jid.lua b/tests/test_util_jid.lua index 58fadbb7..1dbd72b7 100644 --- a/tests/test_util_jid.lua +++ b/tests/test_util_jid.lua @@ -1,10 +1,10 @@ function split(split) - function test(jid, node, server, resource) - local rnode, rserver, rresource = split(jid); - assert_equal(node, rnode, "split("..tostring(jid)..") failed"); - assert_equal(server, rserver, "split("..tostring(jid)..") failed"); - assert_equal(resource, rresource, "split("..tostring(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" ); -- cgit v1.2.3