diff options
-rw-r--r-- | core/componentmanager.lua | 1 | ||||
-rw-r--r-- | core/configmanager.lua | 5 | ||||
-rw-r--r-- | core/xmlhandlers.lua | 4 | ||||
-rw-r--r-- | net/adns.lua | 14 | ||||
-rw-r--r-- | net/server.lua | 12 | ||||
-rwxr-xr-x | prosody | 2 |
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
@@ -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"); |