aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/componentmanager.lua1
-rw-r--r--core/configmanager.lua5
-rw-r--r--core/xmlhandlers.lua4
-rw-r--r--net/adns.lua14
-rw-r--r--net/server.lua12
-rwxr-xr-xprosody2
6 files changed, 26 insertions, 12 deletions
diff --git a/core/componentmanager.lua b/core/componentmanager.lua
index 308dea57..96b78bf2 100644
--- a/core/componentmanager.lua
+++ b/core/componentmanager.lua
@@ -104,6 +104,7 @@ end
function deregister_component(host)
if components[host] then
modulemanager.unload(host, "dialback");
+ host.connected = nil;
local host_config = configmanager.getconfig()[host];
if host_config and ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then
-- Set default handler
diff --git a/core/configmanager.lua b/core/configmanager.lua
index 299374ec..37646017 100644
--- a/core/configmanager.lua
+++ b/core/configmanager.lua
@@ -12,6 +12,8 @@ local _G = _G;
local setmetatable, loadfile, pcall, rawget, rawset, io, error, dofile, type =
setmetatable, loadfile, pcall, rawget, rawset, io, error, dofile, type;
+local eventmanager = require "core.eventmanager";
+
module "configmanager"
local parsers = {};
@@ -68,6 +70,9 @@ function load(filename, format)
if f then
local ok, err = parsers[format].load(f:read("*a"));
f:close();
+ if ok then
+ eventmanager.fire_event("config-reloaded", { filename = filename, format = format });
+ end
return ok, "parser", err;
end
return f, "file", err;
diff --git a/core/xmlhandlers.lua b/core/xmlhandlers.lua
index 1409a1ec..67a0829d 100644
--- a/core/xmlhandlers.lua
+++ b/core/xmlhandlers.lua
@@ -57,7 +57,7 @@ function init_xmlhandlers(session, stream_callbacks)
stanza:text(t_concat(chardata));
chardata = {};
end
- local curr_ns,name = tagname:match("^(.+)|([%w%-]+)$");
+ local curr_ns,name = tagname:match("^(.+)|([^%|]+)$");
if curr_ns ~= stream_default_ns then
attr.xmlns = curr_ns;
end
@@ -109,7 +109,7 @@ function init_xmlhandlers(session, stream_callbacks)
end
end
function xml_handlers:EndElement(tagname)
- curr_ns,name = tagname:match("^(.+)|([%w%-]+)$");
+ curr_ns,name = tagname:match("^(.+)|([^%|]+)$");
if (not stanza) or (#stanza.last_add > 0 and name ~= stanza.last_add[#stanza.last_add].name) then
if tagname == stream_tag then
if cb_streamclosed then
diff --git a/net/adns.lua b/net/adns.lua
index 4c0e5c38..07d4fe54 100644
--- a/net/adns.lua
+++ b/net/adns.lua
@@ -8,17 +8,21 @@ local coroutine, tostring, pcall = coroutine, tostring, pcall;
module "adns"
function lookup(handler, qname, qtype, qclass)
- return dns.peek(qname, qtype, qclass) or
- coroutine.wrap(function ()
- log("debug", "Records for "..qname.." not in cache, sending query (%s)...", tostring(coroutine.running()));
+ return coroutine.wrap(function (peek)
+ if peek then
+ log("debug", "Records for %s already cached, using those...", qname);
+ handler(peek);
+ return;
+ end
+ log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running()));
dns.query(qname, qtype, qclass);
coroutine.yield(nil); -- Wait for reply
- log("debug", "Reply for "..qname.." (%s)", tostring(coroutine.running()));
+ log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running()));
local ok, err = pcall(handler, dns.peek(qname, qtype, qclass));
if not ok then
log("debug", "Error in DNS response handler: %s", tostring(err));
end
- end)();
+ end)(dns.peek(qname, qtype, qclass));
end
function new_async_socket(sock)
diff --git a/net/server.lua b/net/server.lua
index 0097be3c..77bc2f5c 100644
--- a/net/server.lua
+++ b/net/server.lua
@@ -325,7 +325,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
if not ( forced or fatalerror ) then
handler.sendbuffer( )
if bufferqueuelen ~= 0 then -- try again...
- handler.write = nil -- ... but no further writing allowed
+ if handler then
+ handler.write = nil -- ... but no further writing allowed
+ end
toclose = true
return false
end
@@ -337,9 +339,11 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
socket:close( )
_sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
_socketlist[ socket ] = nil
- _writetimes[ handler ] = nil
- _closelist[ handler ] = nil
- handler = nil
+ if handler then
+ _writetimes[ handler ] = nil
+ _closelist[ handler ] = nil
+ handler = nil
+ end
socket = nil
mem_free( )
if server then
diff --git a/prosody b/prosody
index b270881c..78171ef7 100755
--- a/prosody
+++ b/prosody
@@ -38,7 +38,7 @@ do
-- Use lfs? Make a new conf/ dir?
local ok, level, err = config.load((CFG_CONFIGDIR or ".").."/prosody.cfg.lua");
if not ok then
- print("");
+ print("\n");
print("**************************");
if level == "parser" then
print("A problem occured while reading the config file "..(CFG_CONFIGDIR or ".").."/prosody.cfg.lua");