Merge with trunk
[prosody.git] / net / server_select.lua
index 6ab8ce915ff4346641fc2e0359e52b7731a20d9f..d7970296d8431a412684a967a727990095f245d9 100644 (file)
@@ -166,7 +166,7 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxco
 \r
     local connections = 0\r
 \r
-    local dispatch, disconnect = listeners.incoming or listeners.listener, listeners.disconnect\r
+    local dispatch, disconnect = listeners.onincoming, listeners.ondisconnect\r
 \r
     local err\r
 \r
@@ -241,7 +241,7 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxco
         for _, handler in pairs( _socketlist ) do\r
             if handler.serverport == serverport then\r
                 handler.disconnect( handler, "server closed" )\r
-                handler.close( true )\r
+                handler:close( true )\r
             end\r
         end\r
         socket:close( )\r
@@ -300,9 +300,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
 \r
     local ssl\r
 \r
-    local dispatch = listeners.incoming or listeners.listener\r
+    local dispatch = listeners.onincoming\r
     local status = listeners.status\r
-    local disconnect = listeners.disconnect\r
+    local disconnect = listeners.ondisconnect\r
 \r
     local bufferqueue = { }    -- buffer array\r
     local bufferqueuelen = 0    -- end of buffer array\r
@@ -331,9 +331,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
     handler.disconnect = function( )\r
         return disconnect\r
     end\r
-    handler.setlistener = function( listeners )\r
-        dispatch = listeners.incoming\r
-        disconnect = listeners.disconnect\r
+    handler.setlistener = function( self, listeners )\r
+        dispatch = listeners.onincoming\r
+        disconnect = listeners.ondisconnect\r
     end\r
     handler.getstats = function( )\r
         return readtraffic, sendtraffic\r
@@ -400,7 +400,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
     handler.clientport = function( )\r
         return clientport\r
     end\r
-    local write = function( data )\r
+    local write = function( self, data )\r
         bufferlen = bufferlen + string_len( data )\r
         if bufferlen > maxsendlen then\r
             _closelist[ handler ] = "send buffer exceeded"   -- cannot close the client at the moment, have to wait to the end of the cycle\r
@@ -417,26 +417,26 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
         return true\r
     end\r
     handler.write = write\r
-    handler.bufferqueue = function( )\r
+    handler.bufferqueue = function( self )\r
         return bufferqueue\r
     end\r
-    handler.socket = function( )\r
+    handler.socket = function( self )\r
         return socket\r
     end\r
-    handler.pattern = function( new )\r
+    handler.pattern = function( self, new )\r
         pattern = new or pattern\r
         return pattern\r
     end\r
-    handler.setsend = function ( newsend )\r
+    handler.setsend = function ( self, newsend )\r
         send = newsend or send\r
         return send\r
     end\r
-    handler.bufferlen = function( readlen, sendlen )\r
+    handler.bufferlen = function( self, readlen, sendlen )\r
         maxsendlen = sendlen or maxsendlen\r
         maxreadlen = readlen or maxreadlen\r
         return maxreadlen, maxsendlen\r
     end\r
-    handler.lock = function( switch )\r
+    handler.lock = function( self, switch )\r
         if switch == true then\r
             handler.write = idfalse\r
             local tmp = _sendlistlen\r
@@ -507,7 +507,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
             bufferqueuelen = 0\r
             bufferlen = 0\r
             _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )    -- delete socket from writelist\r
-            _ = needtls and handler.starttls(true)\r
+            _ = needtls and handler:starttls(true)\r
             _writetimes[ handler ] = nil\r
            _ = toclose and handler.close( )\r
             return true\r
@@ -529,7 +529,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
 \r
     -- Set the sslctx\r
     local handshake;\r
-    function handler.set_sslctx(new_sslctx)\r
+    function handler.set_sslctx(self, new_sslctx)\r
         ssl = true\r
         sslctx = new_sslctx;\r
         local wrote\r
@@ -564,13 +564,13 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
                     end\r
                 end\r
                 disconnect( handler, "ssl handshake failed" )\r
-                _ = handler and handler.close( true )    -- forced disconnect\r
+                _ = handler and handler:close( true )    -- forced disconnect\r
                 return false    -- handshake failed\r
             end\r
         )\r
     end\r
     if sslctx then    -- ssl?\r
-       handler.set_sslctx(sslctx);\r
+       handler:set_sslctx(sslctx);\r
         if startssl then    -- ssl now?\r
             --out_put("server.lua: ", "starting ssl handshake")\r
            local err\r
@@ -590,7 +590,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
         else\r
             -- We're not automatically doing SSL, so we're not secure (yet)\r
             ssl = false\r
-            handler.starttls = function( now )\r
+            handler.starttls = function( self, now )\r
                 if not now then\r
                     --out_put "server.lua: we need to do tls, but delaying until later"\r
                     needtls = true\r
@@ -692,7 +692,7 @@ end
 \r
 ----------------------------------// PUBLIC //--\r
 \r
-addserver = function( listeners, port, addr, pattern, sslctx, maxconnections, startssl )    -- this function provides a way for other scripts to reg a server\r
+addserver = function( addr, port, listeners, pattern, sslctx, startssl )    -- this function provides a way for other scripts to reg a server\r
     local err\r
     --out_put("server.lua: autossl on ", port, " is ", startssl)\r
     if type( listeners ) ~= "table" then\r
@@ -715,7 +715,7 @@ addserver = function( listeners, port, addr, pattern, sslctx, maxconnections, st
         out_error( "server.lua, port ", port, ": ", err )\r
         return nil, err\r
     end\r
-    local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, maxconnections, startssl )    -- wrap new server socket\r
+    local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, _maxclientsperserver, startssl )    -- wrap new server socket\r
     if not handler then\r
         server:close( )\r
         return nil, err\r
@@ -737,14 +737,14 @@ removeserver = function( port )
     if not handler then\r
         return nil, "no server found on port '" .. tostring( port ) .. "'"\r
     end\r
-    handler.close( )\r
+    handler:close( )\r
     _server[ port ] = nil\r
     return true\r
 end\r
 \r
 closeall = function( )\r
     for _, handler in pairs( _socketlist ) do\r
-        handler.close( )\r
+        handler:close( )\r
         _socketlist[ _ ] = nil\r
     end\r
     _readlistlen = 0\r
@@ -822,7 +822,7 @@ loop = function( )    -- this is the main loop of the program
         end\r
         for handler, err in pairs( _closelist ) do\r
             handler.disconnect( )( handler, err )\r
-            handler.close( true )    -- forced disconnect\r
+            handler:close( true )    -- forced disconnect\r
         end\r
         clean( _closelist )\r
         _currenttime = os_time( )\r
@@ -880,14 +880,14 @@ addtimer( function( )
                 if os_difftime( _currenttime - timestamp ) > _sendtimeout then\r
                     --_writetimes[ handler ] = nil\r
                     handler.disconnect( )( handler, "send timeout" )\r
-                    handler.close( true )    -- forced disconnect\r
+                    handler:close( true )    -- forced disconnect\r
                 end\r
             end\r
             for handler, timestamp in pairs( _readtimes ) do\r
                 if os_difftime( _currenttime - timestamp ) > _readtimeout then\r
                     --_readtimes[ handler ] = nil\r
                     handler.disconnect( )( handler, "read timeout" )\r
-                    handler.close( )    -- forced disconnect?\r
+                    handler:close( )    -- forced disconnect?\r
                 end\r
             end\r
         end\r