private void OnSslAuthenticated(IAsyncResult ar) { try { _sslStream.EndAuthenticateAsClient(ar); _session = new TcpSession(_socket, _sslStream); if (OnSessionConnected != null) { OnSessionConnected(_session); } _session.Start(); } catch (Exception e) { try { if (OnConnectionError != null) { OnConnectionError(e); } } catch (Exception) { // ignored } Close(); } }
private void ProcessConnect(IAsyncResult ar) { try { _socket.EndConnect(ar); if (_secureConnect) { string targetAddress = ((IPEndPoint)_socket.RemoteEndPoint).Address.ToString(); if (_certificates != null) { _sslStream = new SslStream(new NetworkStream(_socket, true), false, _certValidationCallback); _sslStream.BeginAuthenticateAsClient(targetAddress, _certificates, SslProtocols.Tls, false, OnSslAuthenticated, this); } else { _sslStream = new SslStream(new NetworkStream(_socket, true), false, AcceptServerCertificate); _sslStream.BeginAuthenticateAsClient(targetAddress, null, SslProtocols.Tls, false, OnSslAuthenticated, this); } } else { _session = new TcpSession(_socket, new NetworkStream(_socket, true)); try { if (OnSessionConnected != null) { OnSessionConnected(_session); } } catch (Exception) { // ignored } _session.Start(); } } catch (Exception e) { try { if (OnConnectionError != null) { OnConnectionError(e); } } catch (Exception) { // ignored } Close(); } }
private void OnClientAutenticated(IAsyncResult ar) { var sslConnection = (SslConnection)ar.AsyncState; TcpSession session = null; try { sslConnection.SslStream.EndAuthenticateAsServer(ar); session = new TcpSession(sslConnection.Socket, sslConnection.SslStream); try { if (OnClientConnected != null) { OnClientConnected(session); } } catch (Exception) { // ignored } session.Start(); } catch (Exception e) { try { if (OnError != null) { OnError(e); } } catch (Exception) { // ignored } if (session != null) { session.Close(); } else { sslConnection.SslStream.Close(); sslConnection.Socket.Close(); } } }
private void OnClientAccepted(IAsyncResult ar) { var listener = (TcpListener)ar.AsyncState; Socket socket = null; TcpSession session = null; SslConnection sslConnection = null; try { socket = listener.EndAcceptSocket(ar); if (SecureServer) { sslConnection = new SslConnection { Socket = socket, }; sslConnection.SslStream = new SslStream( new NetworkStream(socket, true), false, CertificateValidationCallback); sslConnection.SslStream.BeginAuthenticateAsServer( ServerCertificate, ClientCertificateReqired, SslProtocols.Tls, true, OnClientAutenticated, sslConnection); } else { session = new TcpSession(socket, new NetworkStream(socket, true)); try { if (OnClientConnected != null) { OnClientConnected(session); } } catch (Exception e) { Console.WriteLine(e); // ignored } session.Start(); } } catch (Exception e) { try { if (OnError != null) { OnError(e); } } catch (Exception) { // ignored } if (session != null) { session.Close(); } else if (sslConnection != null) { if (sslConnection.SslStream != null) { sslConnection.SslStream.Close(); } else { sslConnection.Socket.Close(); } } else if (socket != null) { socket.Close(); } } listener.BeginAcceptTcpClient(OnClientAccepted, listener); }