storagemanager: Capitalize log message
[prosody.git] / util / xmppstream.lua
index 586ad5f94a4cdaede7ae18b3fcbea3f99a700e69..7be63285dfdb48c8d219cab5190e930ffdaa6b9d 100644 (file)
@@ -24,7 +24,7 @@ local lxp_supports_bytecount = not not lxp.new({}).getcurrentbytecount;
 
 local default_stanza_size_limit = 1024*1024*10; -- 10MB
 
-module "xmppstream"
+local _ENV = nil;
 
 local new_parser = lxp.new;
 
@@ -40,12 +40,9 @@ local xmlns_streams = "http://etherx.jabber.org/streams";
 local ns_separator = "\1";
 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$";
 
-_M.ns_separator = ns_separator;
-_M.ns_pattern = ns_pattern;
-
 local function dummy_cb() end
 
-function new_sax_handlers(session, stream_callbacks, cb_handleprogress)
+local function new_sax_handlers(session, stream_callbacks, cb_handleprogress)
        local xml_handlers = {};
 
        local cb_streamopened = stream_callbacks.streamopened;
@@ -109,7 +106,7 @@ function new_sax_handlers(session, stream_callbacks, cb_handleprogress)
                                        end
                                else
                                        -- Garbage before stream?
-                                       cb_error(session, "no-stream");
+                                       cb_error(session, "no-stream", tagname);
                                end
                                return;
                        end
@@ -224,7 +221,7 @@ function new_sax_handlers(session, stream_callbacks, cb_handleprogress)
        return xml_handlers, { reset = reset, set_session = set_session };
 end
 
-function new(session, stream_callbacks, stanza_size_limit)
+local function new(session, stream_callbacks, stanza_size_limit)
        -- Used to track parser progress (e.g. to enforce size limits)
        local n_outstanding_bytes = 0;
        local handle_progress;
@@ -241,6 +238,25 @@ function new(session, stream_callbacks, stanza_size_limit)
        local parser = new_parser(handlers, ns_separator, false);
        local parse = parser.parse;
 
+       function session.open_stream(session, from, to)
+               local send = session.sends2s or session.send;
+
+               local attr = {
+                       ["xmlns:stream"] = "http://etherx.jabber.org/streams",
+                       ["xml:lang"] = "en",
+                       xmlns = stream_callbacks.default_ns,
+                       version = session.version and (session.version > 0 and "1.0" or nil),
+                       id = session.streamid,
+                       from = from or session.host, to = to,
+               };
+               if session.stream_attrs then
+                       session:stream_attrs(from, to, attr)
+               end
+               send("<?xml version='1.0'?>");
+               send(st.stanza("stream:stream", attr):top_tag());
+               return true;
+       end
+
        return {
                reset = function ()
                        parser = new_parser(handlers, ns_separator, false);
@@ -262,4 +278,9 @@ function new(session, stream_callbacks, stanza_size_limit)
        };
 end
 
-return _M;
+return {
+       ns_separator = ns_separator;
+       ns_pattern = ns_pattern;
+       new_sax_handlers = new_sax_handlers;
+       new = new;
+};