Merge 0.9->0.10
authorKim Alvefur <zash@zash.se>
Tue, 2 Sep 2014 20:33:11 +0000 (22:33 +0200)
committerKim Alvefur <zash@zash.se>
Tue, 2 Sep 2014 20:33:11 +0000 (22:33 +0200)
1  2 
net/http.lua
net/http/server.lua
net/server_event.lua
net/server_select.lua
plugins/mod_admin_telnet.lua
plugins/mod_c2s.lua
plugins/mod_component.lua
plugins/mod_s2s/mod_s2s.lua

diff --cc net/http.lua
Simple merge
Simple merge
index e10606dded0dd079f17ecd176cc40ef585274b4a,45938a13b46c94f718c3fcf8c6259dd3d1e31220..756e9837b43c7ffa13de2c2ba1c6fe03916519f6
                end
                return false, "setoption not implemented";
        end
 -      
 +
        function interface_mt:setlistener(listener)
-               self.onconnect, self.ondisconnect, self.onincoming, self.ontimeout, self.onreadtimeout, self.onstatus
-                       = listener.onconnect, listener.ondisconnect, listener.onincoming,
-                         listener.ontimeout, listener.onreadtimeout, listener.onstatus;
+               self:ondetach(); -- Notify listener that it is no longer responsible for this connection
 -              self.onconnect, self.ondisconnect, self.onincoming,
 -              self.ontimeout, self.onstatus, self.ondetach
 -                      = listener.onconnect, listener.ondisconnect, listener.onincoming,
 -                      listener.ontimeout, listener.onstatus, listener.ondetach;
++              self.onconnect, self.ondisconnect, self.onincoming, self.ontimeout,
++              self.onreadtimeout, self.onstatus, self.ondetach
++                      = listener.onconnect, listener.ondisconnect, listener.onincoming, listener.ontimeout,
++                        listener.onreadtimeout, listener.onstatus, listener.ondetach;
        end
 -      
 +
        -- Stub handlers
        function interface_mt:onconnect()
        end
        end
        function interface_mt:ontimeout()
        end
 +      function interface_mt:onreadtimeout()
 +              self.fatalerror = "timeout during receiving"
 +              debug( "connection failed:", self.fatalerror )
 +              self:_close()
 +              self.eventread = nil
 +      end
        function interface_mt:ondrain()
        end
+       function interface_mt:ondetach()
+       end
        function interface_mt:onstatus()
        end
  end
@@@ -485,8 -483,8 +489,9 @@@ d
                        ondisconnect = listener.ondisconnect;  -- will be called when client disconnects
                        onincoming = listener.onincoming;  -- will be called when client sends data
                        ontimeout = listener.ontimeout; -- called when fatal socket timeout occurs
 +                      onreadtimeout = listener.onreadtimeout; -- called when socket inactivity timeout occurs
                        ondrain = listener.ondrain; -- called when writebuffer is empty
+                       ondetach = listener.ondetach; -- called when disassociating this listener from this connection
                        onstatus = listener.onstatus; -- called for status changes (e.g. of SSL/TLS)
                        eventread = false, eventwrite = false, eventclose = false,
                        eventhandshake = false, eventstarthandshake = false;  -- event handler
index 6308e62fa4485b623243ab6d29b24edfce3a831f,7ac4152314cca2068f711b3f8865fbe5371b73d3..d2192f0abd827bea81de3746f06bde11d5b3ea30
@@@ -284,7 -284,7 +284,8 @@@ wrapconnection = function( server, list
        local status = listeners.onstatus
        local disconnect = listeners.ondisconnect
        local drain = listeners.ondrain
 +      local onreadtimeout = listeners.onreadtimeout;
+       local detach = listeners.ondetach
  
        local bufferqueue = { } -- buffer array
        local bufferqueuelen = 0        -- end of buffer array
        handler.disconnect = function( )
                return disconnect
        end
 +      handler.onreadtimeout = onreadtimeout;
 +
        handler.setlistener = function( self, listeners )
+               if detach then
+                       detach(self) -- Notify listener that it is no longer responsible for this connection
+               end
                dispatch = listeners.onincoming
                disconnect = listeners.ondisconnect
                status = listeners.onstatus
                drain = listeners.ondrain
 +              handler.onreadtimeout = listeners.onreadtimeout
+               detach = listeners.ondetach
        end
        handler.getstats = function( )
                return readtraffic, sendtraffic
Simple merge
index bb3858c0770604f527249c40a935daa0733c3a33,3d6487c91eadd11b942e2063a32437b58990ce9c..4238b2e7e1f3b729450dcccd845477f9065ff62e
@@@ -231,23 -222,15 +231,23 @@@ function listener.onconnect(conn
                session.notopen = true;
                session.stream:reset();
        end
 -      
 +
 +      session.thread = runner(function (stanza)
 +              core_process_stanza(session, stanza);
 +      end, runner_callbacks, session);
 +
        local filter = session.filter;
        function session.data(data)
-                       data = filter("bytes/in", data);
-                       if data then
-                               local ok, err = stream:feed(data);
 +              -- Parse the data, which will store stanzas in session.pending_stanzas
 +              if data then
 -                      if ok then return; end
 -                      log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_"));
 -                      session:close("not-well-formed");
+               data = filter("bytes/in", data);
+               if data then
+                       local ok, err = stream:feed(data);
 +                              if not ok then
 +                                      log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_"));
 +                                      session:close("not-well-formed");
 +                              end
 +                      end
                end
        end
  
Simple merge
Simple merge