sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead)...
[prosody.git] / net / server_event.lua
index 610c2e7a2254f72a4b96e6039f6c1b3e9c1cea2b..b767cb20f62e1ce76fbec47648a5b10b460f96b0 100644 (file)
@@ -262,7 +262,7 @@ do
                                _ = self.eventsession and self.eventsession:close( )
                                _ = self.eventwritetimeout and self.eventwritetimeout:close( )
                                _ = self.eventreadtimeout and self.eventreadtimeout:close( )
-                               _ = self.ondisconnect and self:ondisconnect( self.fatalerror )  -- call ondisconnect listener (wont be the case if handshake failed on connect)
+                               _ = self.ondisconnect and self:ondisconnect( self.fatalerror ~= "client to close" and self.fatalerror)  -- call ondisconnect listener (wont be the case if handshake failed on connect)
                                _ = self.conn and self.conn:close( ) -- close connection, must also be called outside of any socket registered events!
                                _ = self._server and self._server:counter(-1);
                                self.eventread, self.eventwrite = nil, nil
@@ -281,6 +281,10 @@ do
                        self.nointerface, self.noreading, self.nowriting = nointerface, noreading, nowriting
                        return nointerface, noreading, nowriting
        end
+       
+       function interface_mt:lock_read(switch)
+               return self:_lock(self.nointerface, switch, self.nowriting);
+       end
 
        function interface_mt:counter(c)
                if c then
@@ -539,7 +543,7 @@ do
                                                local callback = function( )
                                                        interface:_close()
                                                        interface.eventwritetimeout = nil
-                                                       return evreturn, evtimeout
+                                                       return -1;
                                                end
                                                interface.eventwritetimeout = addevent( base, nil, EV_TIMEOUT, callback, cfg.WRITE_TIMEOUT )  -- reg a new timeout event
                                                debug( "wantread during write attemp, reg it in readcallback but dont know what really happens next..." )
@@ -667,16 +671,16 @@ do
                                        debug( "maximal connections reached, refuse client connection; accept delay:", delay )
                                        return EV_TIMEOUT, delay  -- delay for next accept attemp
                                end
-                               local ip, port = client:getpeername( )
+                               local client_ip, client_port = client:getpeername( )
                                interface._connections = interface._connections + 1  -- increase connection count
-                               local clientinterface = handleclient( client, ip, port, interface, pattern, listener, nil, sslctx )
+                               local clientinterface = handleclient( client, client_ip, client_port, interface, pattern, listener, nil, sslctx )
                                --vdebug( "client id:", clientinterface, "startssl:", startssl )
                                if ssl and sslctx then
                                        clientinterface:starttls(sslctx)
                                else
                                        clientinterface:_start_session( clientinterface.onconnect )
                                end
-                               debug( "accepted incoming client connection from:", ip, port )
+                               debug( "accepted incoming client connection from:", client_ip or "<unknown IP>", client_port or "<unknown port>", "to", port or "<unknown port>");
                                
                                client, err = server:accept()    -- try to accept again
                        end
@@ -758,7 +762,7 @@ do
                        local server = function( )
                                return nil, "this is a dummy server interface"
                        end
-                       local interface = wrapclient( client, ip, serverport, listeners, pattern, sslctx, startssl )
+                       local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx, startssl )
                        interface:_start_connection( startssl )
                        debug( "new connection id:", interface.id )
                        return interface, err