Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }