public async Task Connect(string host, int port) { _tcpClient = new TcpClient(); await _tcpClient.ConnectAsync(host, port).ConfigureAwait(false); StartTlsResult sessionInitialized = await TryInitializeSession(_tcpClient.GetStream()).ConfigureAwait(false); if (!sessionInitialized.Success) { throw new Exception("Failed to initialize session."); } TlsClientProtocol clientProtocol = new TlsClientProtocol(_tcpClient.GetStream(), SecureRandom.GetInstance("SHA256PRNG")); clientProtocol.Connect(new BasicTlsClient()); }
private async Task <TlsConnectionResult> DoConnect(string host, int port, TlsVersion version, List <CipherSuite> cipherSuites) { _tcpClient = new TcpClient { NoDelay = true, SendTimeout = _timeOut.Milliseconds, ReceiveTimeout = _timeOut.Milliseconds, }; _log.Debug($"Starting TCP connection to {host ?? "<null>"}:{port}"); await _tcpClient.ConnectAsync(host, port).ConfigureAwait(false); _log.Debug($"Successfully started TCP connection to {host ?? "<null>"}:{port}"); _log.Debug("Initializing session"); StartTlsResult sessionInitialized = await TryInitializeSession(_tcpClient.GetStream()).ConfigureAwait(false); _log.Debug("Successfully initialized session"); if (!sessionInitialized.Success) { _log.Debug("Failed to initialize session"); return(new TlsConnectionResult(Error.SESSION_INITIALIZATION_FAILED, sessionInitialized.Error, sessionInitialized.SmtpSession)); } TestTlsClientProtocol clientProtocol = new TestTlsClientProtocol(_tcpClient.GetStream()); TestTlsClient testSuiteTlsClient = new TestTlsClient(version, cipherSuites); _log.Debug("Starting TLS session"); TlsConnectionResult connectionResult = clientProtocol.ConnectWithResults(testSuiteTlsClient); _log.Debug("Successfully started TLS session"); return(connectionResult); }