private void ListenLoop() { if (scheduler.Verbose) { Console.WriteLine("Starting to listen on {0}", myEndpoint); } listener = new TcpListener(myEndpoint); listener.ExclusiveAddressUse = true; listener.Start(); while (true) { if (scheduler.Verbose) { Console.WriteLine("Waiting for the next incoming connection"); } TcpClient client = listener.AcceptTcpClient(); CertificateValidator myValidator = new CertificateValidator(scheduler); SslStream sslStream = new SslStream(client.GetStream(), leaveInnerStreamOpen: false, myValidator.ValidateSSLCertificate); sslStream.AuthenticateAsServer(scheduler.MyCert, clientCertificateRequired: true, checkCertificateRevocation: false); var remoteCert = sslStream.RemoteCertificate as X509Certificate2; if (scheduler.Verbose) { Console.WriteLine("Received an incoming connection from remote certified as {0}", IoScheduler.CertificateToString(remoteCert)); } ReceiverThread.Create(scheduler, sslStream); ServerSenderThread.Create(scheduler, sslStream); } }
public static ServerSenderThread Create(IoScheduler scheduler, SslStream stream) { var remoteCert = stream.RemoteCertificate as X509Certificate2; var destinationPublicKey = IoScheduler.GetCertificatePublicKey(remoteCert); if (scheduler.Verbose) { Console.WriteLine("Creating sender thread to send to remote certified as {0}", IoScheduler.CertificateToString(remoteCert)); } ServerSenderThread senderThread = new ServerSenderThread(scheduler, destinationPublicKey, stream, remoteCert); senderThread.Start(); return(senderThread); }