mod_presence: Don't depend on sessions array existing for a user when handling outgoi...
[prosody.git] / net / server_event.lua
index 79b2f388227875b689e573d52ef026869b98cafa..450bd341517487b489cf946ba2e828158e82f13a 100644 (file)
@@ -380,6 +380,9 @@ do
                        self.starttls = false; -- prevent starttls()\r
                end\r
        end\r
+       \r
+       function interface_mt:set_send(new_send)\r
+               -- No-op, we always use the underlying connection's send\r
        end\r
        \r
        function interface_mt:starttls()\r
@@ -535,9 +538,9 @@ do
                end\r
                \r
                interface.readcallback = function( event )  -- called on read events\r
-                       --vdebug( "new client read event, id/ip/port:", interface, ip, port )\r
+                       --vdebug( "new client read event, id/ip/port:", tostring(interface.id), tostring(ip), tostring(port) )\r
                        if interface.noreading or interface.fatalerror then  -- leave this event\r
-                               --vdebug( "leaving this event because:", interface.noreading or interface.fatalerror )\r
+                               --vdebug( "leaving this event because:", tostring(interface.noreading or interface.fatalerror) )\r
                                interface.eventread = nil\r
                                return -1\r
                        end\r
@@ -551,7 +554,7 @@ do
                                if interface._usingssl then  -- handle luasec\r
                                        if interface.eventwritetimeout then  -- ok, in the past writecallback was regged\r
                                                local ret = interface.writecallback( )  -- call it\r
-                                               --vdebug( "tried to write in readcallback, result:", ret )\r
+                                               --vdebug( "tried to write in readcallback, result:", tostring(ret) )\r
                                        end\r
                                        if interface.eventreadtimeout then\r
                                                interface.eventreadtimeout:close( )\r
@@ -690,26 +693,16 @@ local addserver = ( function( )
        end\r
 end )( )\r
 \r
-local wrapclient = ( function( )\r
-       return function( client, addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )\r
-               debug( "try to connect to:", addr, serverport, "with parameters:", pattern, localaddr, localport, sslcfg, startssl )\r
-               local sslctx\r
-               if sslcfg then  -- handle ssl/new context\r
-                       if not ssl then\r
-                               debug "need luasec, but not available" \r
-                               return nil, "luasec not found"\r
-                       end\r
-                       sslctx, err = ssl.newcontext( sslcfg )\r
-                       if err then\r
-                               debug( "cannot create new ssl context:", err )\r
-                               return nil, err\r
-                       end\r
-               end\r
+local addclient, wrapclient\r
+do\r
+       function wrapclient( client, ip, port, listeners, pattern, sslctx, startssl )\r
+               local interface = handleclient( client, ip, port, nil, pattern, listeners, sslctx )\r
+               interface:_start_session()\r
+               return interface\r
+               --function handleclient( client, ip, port, server, pattern, listener, _, sslctx )  -- creates an client interface\r
        end\r
-end )( )\r
-\r
-local addclient = ( function( )\r
-       return function( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )\r
+       \r
+       function addclient( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )\r
                local client, err = socket.tcp()  -- creating new socket\r
                if not client then\r
                        debug( "cannot create socket:", err ) \r
@@ -723,23 +716,35 @@ local addclient = ( function( )
                                return nil, err\r
                        end\r
                end\r
+               local sslctx\r
+               if sslcfg then  -- handle ssl/new context\r
+                       if not ssl then\r
+                               debug "need luasec, but not available" \r
+                               return nil, "luasec not found"\r
+                       end\r
+                       sslctx, err = ssl.newcontext( sslcfg )\r
+                       if err then\r
+                               debug( "cannot create new ssl context:", err )\r
+                               return nil, err\r
+                       end\r
+               end\r
                local res, err = client:connect( addr, serverport )  -- connect\r
                if res or ( err == "timeout" ) then\r
                        local ip, port = client:getsockname( )\r
                        local server = function( )\r
                                return nil, "this is a dummy server interface"\r
                        end\r
-                       local interface = handleclient( client, ip, port, server, pattern, listener, sslctx )\r
+                       local interface = wrapclient( client, ip, serverport, listeners, pattern, sslctx, startssl )\r
                        interface:_start_connection( startssl )\r
-                       debug( "new connection id:", interface )\r
+                       debug( "new connection id:", interface.id )\r
                        return interface, err\r
                else\r
                        debug( "new connection failed:", err )\r
                        return nil, err\r
                end\r
-               return wrapclient( client, addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl )    \r
        end\r
-end )( )\r
+end\r
+\r
 \r
 local loop = function( )  -- starts the event loop\r
        return base:loop( )\r