Merge with Maranda
[prosody.git] / net / server_event.lua
index 8d6f5597b945d91eaed1d742afdcc58caf0528b0..3c4185af96b07e2a7ecbd26bba16a988787ece16 100644 (file)
@@ -143,7 +143,7 @@ do
                                        debug( "new connection failed. id:", self.id, "error:", self.fatalerror )
                                else
                                        if plainssl and ssl then  -- start ssl session
-                                               self:starttls(nil, true)
+                                               self:starttls(self._sslctx, true)
                                        else  -- normal connection
                                                self:_start_session(true)
                                        end
@@ -249,7 +249,7 @@ do
                        return true
        end
        function interface_mt:_destroy()  -- close this interface + events and call last listener
-                       debug( "closing client with id:", self.id )
+                       debug( "closing client with id:", self.id, self.fatalerror )
                        self:_lock( true, true, true )  -- first of all, lock the interface to avoid further actions
                        local _
                        _ = self.eventread and self.eventread:close( )  -- close events; this must be called outside of the event callbacks!
@@ -328,22 +328,22 @@ do
                end
                return true
        end
-       function interface_mt:close(now)
+       function interface_mt:close()
                if self.nointerface then return nil, "locked"; end
                debug( "try to close client connection with id:", self.id )
                if self.type == "client" then
                        self.fatalerror = "client to close"
-                       if ( not self.eventwrite ) or now then  -- try to close immediately
-                               self:_lock( true, true, true )
-                               self:_close()
-                               return true
-                       else  -- wait for incomplete write request
+                       if self.eventwrite then -- wait for incomplete write request
                                self:_lock( true, true, false )
                                debug "closing delayed until writebuffer is empty"
                                return nil, "writebuffer not empty, waiting"
+                       else -- close now
+                               self:_lock( true, true, true )
+                               self:_close()
+                               return true
                        end
                else
-                       debug( "try to close server with id:", tostring(self.id), "args:", tostring(now) )
+                       debug( "try to close server with id:", tostring(self.id))
                        self.fatalerror = "server to close"
                        self:_lock( true )
                        self:_close( 0 )  -- add new event to remove the server interface
@@ -473,7 +473,7 @@ do
        local coroutine_wrap = coroutine.wrap
        local socket_gettime = socket.gettime
        local coroutine_yield = coroutine.yield
-       function handleclient( client, ip, port, server, pattern, listener, _, sslctx )  -- creates an client interface
+       function handleclient( client, ip, port, server, pattern, listener, sslctx )  -- creates an client interface
                --vdebug("creating client interfacce...")
                local interface = {
                        type = "client";
@@ -692,7 +692,7 @@ do
                                end
                                local client_ip, client_port = client:getpeername( )
                                interface._connections = interface._connections + 1  -- increase connection count
-                               local clientinterface = handleclient( client, client_ip, client_port, interface, pattern, listener, nil, sslctx )
+                               local clientinterface = handleclient( client, client_ip, client_port, interface, pattern, listener, sslctx )
                                --vdebug( "client id:", clientinterface, "startssl:", startssl )
                                if ssl and sslctx then
                                        clientinterface:starttls(sslctx, true)
@@ -744,7 +744,7 @@ local addclient, wrapclient
 do
        function wrapclient( client, ip, port, listeners, pattern, sslctx, startssl )
                local interface = handleclient( client, ip, port, nil, pattern, listeners, sslctx )
-               interface:_start_session()
+               interface:_start_connection(sslctx)
                return interface, client
                --function handleclient( client, ip, port, server, pattern, listener, _, sslctx )  -- creates an client interface
        end