configmanager: Update Include and RunScript directives to support paths relative...
[prosody.git] / core / xmlhandlers.lua
index 85ce1040e1c441e59869e936237f4077b000b2a8..182da8940284e1e2f0f804fa7fa9fb08bc62f96a 100644 (file)
@@ -1,6 +1,6 @@
 -- Prosody IM
--- Copyright (C) 2008-2009 Matthew Wild
--- Copyright (C) 2008-2009 Waqas Hussain
+-- Copyright (C) 2008-2010 Matthew Wild
+-- Copyright (C) 2008-2010 Waqas Hussain
 -- 
 -- This project is MIT/X11 licensed. Please see the
 -- COPYING file in the source package for more information.
@@ -12,8 +12,6 @@ require "util.stanza"
 
 local st = stanza;
 local tostring = tostring;
-local pairs = pairs;
-local ipairs = ipairs;
 local t_insert = table.insert;
 local t_concat = table.concat;
 
@@ -33,8 +31,6 @@ local ns_separator = "\1";
 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$";
 
 function init_xmlhandlers(session, stream_callbacks)
-       local ns_stack = { "" };
-       local curr_tag;
        local chardata = {};
        local xml_handlers = {};
        local log = session.log or default_log;
@@ -72,8 +68,8 @@ function init_xmlhandlers(session, stream_callbacks)
                        attr[i] = nil;
                        local ns, nm = k:match(ns_pattern);
                        if nm ~= "" then
-                               ns = ns_prefixes[ns]; 
-                               if ns then 
+                               ns = ns_prefixes[ns];
+                               if ns then
                                        attr[ns..":"..nm] = attr[k];
                                        attr[k] = nil;
                                end
@@ -97,7 +93,6 @@ function init_xmlhandlers(session, stream_callbacks)
                        end
                        
                        stanza = st.stanza(name, attr);
-                       curr_tag = stanza;
                else -- we are inside a stanza, so add a tag
                        attr.xmlns = nil;
                        if curr_ns ~= stream_default_ns then
@@ -112,36 +107,36 @@ function init_xmlhandlers(session, stream_callbacks)
                end
        end
        function xml_handlers:EndElement(tagname)
-               local curr_ns,name = tagname:match(ns_pattern);
-               if name == "" then
-                       curr_ns, name = "", curr_ns;
-               end
-               if not stanza then
+               if stanza then
+                       if #chardata > 0 then
+                               -- We have some character data in the buffer
+                               stanza:text(t_concat(chardata));
+                               chardata = {};
+                       end
+                       -- Complete stanza
+                       if #stanza.last_add == 0 then
+                               if tagname ~= stream_error_tag then
+                                       cb_handlestanza(session, stanza);
+                               else
+                                       cb_error(session, "stream-error", stanza);
+                               end
+                               stanza = nil;
+                       else
+                               stanza:up();
+                       end
+               else
                        if tagname == stream_tag then
                                if cb_streamclosed then
                                        cb_streamclosed(session);
                                end
                        else
+                               local curr_ns,name = tagname:match(ns_pattern);
+                               if name == "" then
+                                       curr_ns, name = "", curr_ns;
+                               end
                                cb_error(session, "parse-error", "unexpected-element-close", name);
                        end
                        stanza, chardata = nil, {};
-                       return;
-               end
-               if #chardata > 0 then
-                       -- We have some character data in the buffer
-                       stanza:text(t_concat(chardata));
-                       chardata = {};
-               end
-               -- Complete stanza
-               if #stanza.last_add == 0 then
-                       if tagname ~= stream_error_tag then
-                               cb_handlestanza(session, stanza);
-                       else
-                               cb_error(session, "stream-error", stanza);
-                       end
-                       stanza = nil;
-               else
-                       stanza:up();
                end
        end
        return xml_handlers;