예제 #1
0
        private static NetworkStream UpgradeToSSL(javax.net.ssl.SSLServerSocketFactory xSSLServerSocketFactory, TcpClient c, int count, byte[] buffer)
        {
            NetworkStream s = null;

            //lock (xSSLServerSocketFactory)
            {
                Console.WriteLine("UpgradeToSSL " + new { count });


                // we cannot upgrade in place because byte 0x16 was already read.
                // need to feed it all to the new serversocket?

                try
                {




                    // need to bridge

                    new Thread(
                        delegate()
                        {
                            Console.WriteLine("new bridge");
                            Thread.Sleep(1);
                            // accept called yet?

                            var cc = new TcpClient();
                            cc.Connect("127.0.0.1", UpgradeToSSL_serverport);

                            Console.WriteLine("new bridge connected");

                            // first lets flush the buffer.

                            cc.GetStream().Write(buffer, 0, count);

                            // at the same time start reading server to reply to client

                            new Thread(
                                delegate()
                                {
                                    Console.WriteLine("new reply bridge");

                                    var rx = new byte[2048];
                                    var rxa = true;
                                    while (rxa)
                                    {
                                        var rxc = cc.GetStream().Read(rx, 0, rx.Length);

                                        if (rxc < 0)
                                        {
                                            rxa = false;
                                        }
                                        else
                                        {
                                            c.GetStream().Write(rx, 0, rxc);
                                        }
                                    }
                                }
                            ).Start();


                            // keep reading client and writing to server...

                            var tx = new byte[2048];
                            var txa = true;

                            while (txa)
                            {
                                var txc = c.GetStream().Read(tx, 0, tx.Length);

                                if (txc < 0)
                                {
                                    txa = false;
                                }
                                else
                                {
                                    cc.GetStream().Write(tx, 0, txc);
                                }
                            }

                        }
                    ).Start();

                    var xSSLSocket = UpgradeToSSL_server.accept() as jvm::javax.net.ssl.SSLSocket;

                    // need to init our context!
                    //var f = (javax.net.ssl.SSLSocketFactory)javax.net.ssl.SSLSocketFactory.getDefault();
                    //var xSSLSocket = (javax.net.ssl.SSLSocket)xSSLSocketFactory.createSocket(csocket.InternalSocket,

                    //    // why we need that?
                    //    "127.0.0.1", 443,
                    //    true);

                    //// now what?
                    //// ssl.startHandshake();
                    //// xSslStream.AuthenticateAsServer(


                    xSSLSocket.startHandshake();


                    var xNetworkStream = new jvm::ScriptCoreLibJava.BCLImplementation.System.Net.Sockets.__NetworkStream
                    {
                        //InternalDiagnostics = true,


                        InternalInputStream = xSSLSocket.getInputStream(),
                        InternalOutputStream = xSSLSocket.getOutputStream()
                    };

                    s = xNetworkStream;
                }
                catch
                {
                    throw;
                }
            }

            return s;
        }
예제 #2
0
        private static NetworkStream UpgradeToSSL(javax.net.ssl.SSLServerSocketFactory xSSLServerSocketFactory, TcpClient c, int count, byte[] buffer)
        {
            NetworkStream s = null;

            //lock (xSSLServerSocketFactory)
            {
                Console.WriteLine("UpgradeToSSL " + new { count });


                // we cannot upgrade in place because byte 0x16 was already read.
                // need to feed it all to the new serversocket?

                try
                {
                    // need to bridge

                    new Thread(
                        delegate()
                    {
                        Console.WriteLine("new bridge");
                        Thread.Sleep(1);
                        // accept called yet?

                        var cc = new TcpClient();
                        cc.Connect("127.0.0.1", UpgradeToSSL_serverport);

                        Console.WriteLine("new bridge connected");

                        // first lets flush the buffer.

                        cc.GetStream().Write(buffer, 0, count);

                        // at the same time start reading server to reply to client

                        new Thread(
                            delegate()
                        {
                            Console.WriteLine("new reply bridge");

                            var rx  = new byte[2048];
                            var rxa = true;
                            while (rxa)
                            {
                                var rxc = cc.GetStream().Read(rx, 0, rx.Length);

                                if (rxc < 0)
                                {
                                    rxa = false;
                                }
                                else
                                {
                                    c.GetStream().Write(rx, 0, rxc);
                                }
                            }
                        }
                            ).Start();


                        // keep reading client and writing to server...

                        var tx  = new byte[2048];
                        var txa = true;

                        while (txa)
                        {
                            var txc = c.GetStream().Read(tx, 0, tx.Length);

                            if (txc < 0)
                            {
                                txa = false;
                            }
                            else
                            {
                                cc.GetStream().Write(tx, 0, txc);
                            }
                        }
                    }
                        ).Start();

                    var xSSLSocket = UpgradeToSSL_server.accept() as jvm::javax.net.ssl.SSLSocket;

                    // need to init our context!
                    //var f = (javax.net.ssl.SSLSocketFactory)javax.net.ssl.SSLSocketFactory.getDefault();
                    //var xSSLSocket = (javax.net.ssl.SSLSocket)xSSLSocketFactory.createSocket(csocket.InternalSocket,

                    //    // why we need that?
                    //    "127.0.0.1", 443,
                    //    true);

                    //// now what?
                    //// ssl.startHandshake();
                    //// xSslStream.AuthenticateAsServer(


                    xSSLSocket.startHandshake();


                    var xNetworkStream = new jvm::ScriptCoreLibJava.BCLImplementation.System.Net.Sockets.__NetworkStream
                    {
                        //InternalDiagnostics = true,


                        InternalInputStream  = xSSLSocket.getInputStream(),
                        InternalOutputStream = xSSLSocket.getOutputStream()
                    };

                    s = xNetworkStream;
                }
                catch
                {
                    throw;
                }
            }

            return(s);
        }