748 interface:_start_connection(sslctx) |
748 interface:_start_connection(sslctx) |
749 return interface, client |
749 return interface, client |
750 --function handleclient( client, ip, port, server, pattern, listener, _, sslctx ) -- creates an client interface |
750 --function handleclient( client, ip, port, server, pattern, listener, _, sslctx ) -- creates an client interface |
751 end |
751 end |
752 |
752 |
753 function addclient( addr, serverport, listener, pattern, localaddr, localport, sslcfg, startssl ) |
753 function addclient( addr, serverport, listener, pattern, sslctx ) |
|
754 if sslctx and not ssl then |
|
755 debug "need luasec, but not available" |
|
756 return nil, "luasec not found" |
|
757 end |
754 local client, err = socket.tcp() -- creating new socket |
758 local client, err = socket.tcp() -- creating new socket |
755 if not client then |
759 if not client then |
756 debug( "cannot create socket:", err ) |
760 debug( "cannot create socket:", err ) |
757 return nil, err |
761 return nil, err |
758 end |
762 end |
759 client:settimeout( 0 ) -- set nonblocking |
763 client:settimeout( 0 ) -- set nonblocking |
760 if localaddr then |
|
761 local res, err = client:bind( localaddr, localport, -1 ) |
|
762 if not res then |
|
763 debug( "cannot bind client:", err ) |
|
764 return nil, err |
|
765 end |
|
766 end |
|
767 local sslctx |
|
768 if sslcfg then -- handle ssl/new context |
|
769 if not has_luasec then |
|
770 debug "need luasec, but not available" |
|
771 return nil, "luasec not found" |
|
772 end |
|
773 sslctx, err = sslcfg |
|
774 if err then |
|
775 debug( "cannot create new ssl context:", err ) |
|
776 return nil, err |
|
777 end |
|
778 end |
|
779 local res, err = client:connect( addr, serverport ) -- connect |
764 local res, err = client:connect( addr, serverport ) -- connect |
780 if res or ( err == "timeout" ) then |
765 if res or ( err == "timeout" ) then |
781 local ip, port = client:getsockname( ) |
766 local ip, port = client:getsockname( ) |
782 local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx, startssl ) |
767 local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx ) |
783 interface:_start_connection( startssl ) |
768 interface:_start_connection( startssl ) |
784 debug( "new connection id:", interface.id ) |
769 debug( "new connection id:", interface.id ) |
785 return interface, err |
770 return interface, err |
786 else |
771 else |
787 debug( "new connection failed:", err ) |
772 debug( "new connection failed:", err ) |