prosody: Enable storage manager.
[prosody.git] / plugins / mod_bosh.lua
index b11de6c6d7c29ead7b59492f6be8178272dbc1ee..e03b2bbdd3f47264ce5b41950a4f7394df16dab2 100644 (file)
@@ -31,6 +31,8 @@ local BOSH_DEFAULT_POLLING = tonumber(module:get_option("bosh_max_polling")) or
 local BOSH_DEFAULT_REQUESTS = tonumber(module:get_option("bosh_max_requests")) or 2;
 local BOSH_DEFAULT_MAXPAUSE = tonumber(module:get_option("bosh_max_pause")) or 300;
 
+local consider_bosh_secure = module:get_option_boolean("consider_bosh_secure");
+
 local default_headers = { ["Content-Type"] = "text/xml; charset=utf-8" };
 local session_close_reply = { headers = default_headers, body = st.stanza("body", { xmlns = xmlns_bosh, type = "terminate" }), attr = {} };
 
@@ -174,16 +176,25 @@ function stream_callbacks.streamopened(request, attr)
                
                -- New session
                sid = new_uuid();
-               local session = { type = "c2s_unauthed", conn = {}, sid = sid, rid = tonumber(attr.rid)-1, host = attr.to, bosh_version = attr.ver, bosh_wait = attr.wait, streamid = sid, 
-                                               bosh_hold = BOSH_DEFAULT_HOLD, bosh_max_inactive = BOSH_DEFAULT_INACTIVITY,
-                                               requests = { }, send_buffer = {}, reset_stream = bosh_reset_stream, close = bosh_close_stream, 
-                                               dispatch_stanza = core_process_stanza, log = logger.init("bosh"..sid), secure = request.secure };
+               local session = {
+                       type = "c2s_unauthed", conn = {}, sid = sid, rid = tonumber(attr.rid)-1, host = attr.to,
+                       bosh_version = attr.ver, bosh_wait = attr.wait, streamid = sid,
+                       bosh_hold = BOSH_DEFAULT_HOLD, bosh_max_inactive = BOSH_DEFAULT_INACTIVITY,
+                       requests = { }, send_buffer = {}, reset_stream = bosh_reset_stream,
+                       close = bosh_close_stream, dispatch_stanza = core_process_stanza,
+                       log = logger.init("bosh"..sid), secure = consider_bosh_secure or request.secure
+               };
                sessions[sid] = session;
                
                log("info", "New BOSH session, assigned it sid '%s'", sid);
                local r, send_buffer = session.requests, session.send_buffer;
                local response = { headers = default_headers }
                function session.send(s)
+                       -- We need to ensure that outgoing stanzas have the jabber:client xmlns
+                       if s.attr and not s.attr.xmlns then
+                               s = st.clone(s);
+                               s.attr.xmlns = "jabber:client";
+                       end
                        --log("debug", "Sending BOSH data: %s", tostring(s));
                        local oldest_request = r[1];
                        if oldest_request then