Merge 0.6->0.7
authorMatthew Wild <mwild1@gmail.com>
Sat, 3 Apr 2010 22:09:11 +0000 (23:09 +0100)
committerMatthew Wild <mwild1@gmail.com>
Sat, 3 Apr 2010 22:09:11 +0000 (23:09 +0100)
1  2 
plugins/mod_bosh.lua
plugins/muc/muc.lib.lua
prosody

index 5c77ad46aaff09a04e93502d6abca99c9d479367,14cb1b9104052a8fab7e5ecfd10d169f7f98b70b..02f3ce38457eefc7e9bcddb3debeac80603aa3aa
@@@ -23,7 -23,7 +23,7 @@@ local logger = require "util.logger"
  local log = logger.init("mod_bosh");
  
  local xmlns_bosh = "http://jabber.org/protocol/httpbind"; -- (hard-coded into a literal in session.send)
- local stream_callbacks = { stream_tag = "http://jabber.org/protocol/httpbind\1body", default_ns = "jabber:client" };
 -local stream_callbacks = { stream_ns = "http://jabber.org/protocol/httpbind", stream_tag = "body", default_ns = xmlns_bosh };
++local stream_callbacks = { stream_ns = "http://jabber.org/protocol/httpbind", stream_tag = "body", default_ns = "jabber:client" };
  
  local BOSH_DEFAULT_HOLD = tonumber(module:get_option("bosh_default_hold")) or 1;
  local BOSH_DEFAULT_INACTIVITY = tonumber(module:get_option("bosh_max_inactivity")) or 60;
@@@ -252,9 -274,9 +274,9 @@@ function stream_callbacks.handlestanza(
        local session = sessions[request.sid];
        if session then
                if stanza.attr.xmlns == xmlns_bosh then
 -                      stanza.attr.xmlns = "jabber:client";
 +                      stanza.attr.xmlns = nil;
                end
-               session.ip = request.handler.ip();
+               session.ip = request.handler:ip();
                core_process_stanza(session, stanza);
        end
  end
index 273e21ce94214b585d54580b60eb658b6d59f5af,273e21ce94214b585d54580b60eb658b6d59f5af..1cc001bb0fc8ead4aca56c7e9420f0a0edadbf33
@@@ -122,13 -122,13 +122,9 @@@ function room_mt:broadcast_message(stan
                local history = self._data['history'];
                if not history then history = {}; self._data['history'] = history; end
                stanza = st.clone(stanza);
--              stanza.attr.to = "";
--              local stamp = datetime.datetime();
--              local chars = #tostring(stanza);
--              stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = muc_domain, stamp = stamp}):up(); -- XEP-0203
++              stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = muc_domain, stamp = datetime.datetime()}):up(); -- XEP-0203
                stanza:tag("x", {xmlns = "jabber:x:delay", from = muc_domain, stamp = datetime.legacy()}):up(); -- XEP-0091 (deprecated)
--              local entry = { stanza = stanza, stamp = stamp };
--              t_insert(history, entry);
++              t_insert(history, st.preserialize(stanza));
                while #history > history_length do t_remove(history, 1) end
        end
  end
@@@ -155,46 -155,46 +151,12 @@@ function room_mt:send_occupant_list(to
                end
        end
  end
--function room_mt:send_history(to, stanza)
++function room_mt:send_history(to)
        local history = self._data['history']; -- send discussion history
        if history then
--              local x_tag = stanza and stanza:get_child("x", "http://jabber.org/protocol/muc");
--              local history_tag = x_tag and x_tag:get_child("history", "http://jabber.org/protocol/muc");
--              
--              local maxchars = history_tag and tonumber(history_tag.attr.maxchars);
--              if maxchars then maxchars = math.floor(maxchars); end
--              
--              local maxstanzas = math.floor(history_tag and tonumber(history_tag.attr.maxstanzas) or #history);
--              if not history_tag then maxstanzas = 20; end
--
--              local seconds = history_tag and tonumber(history_tag.attr.seconds);
--              if seconds then seconds = datetime.datetime(os.time() - math.floor(seconds)); end
--
--              local since = history_tag and history_tag.attr.since;
--              if since and not since:match("^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%dZ$") then since = nil; end -- FIXME timezone support
--              if seconds and (not since or since < seconds) then since = seconds; end
--
--              local n = 0;
--              local charcount = 0;
--              local stanzacount = 0;
--              
--              for i=#history,1,-1 do
--                      local entry = history[i];
--                      if maxchars then
--                              if not entry.chars then
--                                      entry.stanza.attr.to = "";
--                                      entry.chars = #tostring(entry.stanza);
--                              end
--                              charcount = charcount + entry.chars + #to;
--                              if charcount > maxchars then break; end
--                      end
--                      if since and since > entry.stamp then break; end
--                      if n + 1 > maxstanzas then break; end
--                      n = n + 1;
--              end
--              for i=#history-n+1,#history do
--                      local msg = history[i].stanza;
--                      msg.attr.to = to;
++              for _, msg in ipairs(history) do
++                      msg = st.deserialize(msg);
++                      msg.attr.to=to;
                        self:_route_stanza(msg);
                end
        end
@@@ -357,7 -357,7 +319,7 @@@ function room_mt:handle_to_occupant(ori
                                                                :tag("item", {affiliation=affiliation or "none", role=role or "none"}):up()
                                                                :tag("status", {code='110'}));
                                                end
--                                              self:send_history(from, stanza);
++                                              self:send_history(from);
                                        else -- banned
                                                local reply = st.error_reply(stanza, "auth", "forbidden"):up();
                                                reply.tags[1].attr.code = "403";
diff --cc prosody
index 0f705b62bc905cd4f1019b6cf049f7dede10f54c,0f705b62bc905cd4f1019b6cf049f7dede10f54c..46f3331f004bc9030f5866c5c50a6bcb3e104dc2
+++ b/prosody
@@@ -22,6 -22,6 +22,9 @@@ if CFG_SOURCEDIR the
        package.cpath = CFG_SOURCEDIR.."/?.so;"..package.cpath;
  end
  
++package.path = package.path..";"..(CFG_SOURCEDIR or ".").."/fallbacks/?.lua";
++package.cpath = package.cpath..";"..(CFG_SOURCEDIR or ".").."/fallbacks/?.so";
++
  -- Substitute ~ with path to home directory in data path
  if CFG_DATADIR then
        if os.getenv("HOME") then