public SplitStreamReader(Stream writeBackStream, SplitStream parent)
 {
     WriteBackStream = writeBackStream;
     Parent          = parent;
 }
        private void OnBeginAcceptTcpClient(IAsyncResult ar)
        {
            var clientConnection = m_listener.EndAcceptTcpClient(ar);

            m_listener.BeginAcceptTcpClient(OnBeginAcceptTcpClient, ar.AsyncState);

            try
            {
                // SSL the client
                var clientStream = clientConnection.GetStream();

                var inputSplitStream = new SplitStream.SplitStream(clientStream);
                var splitStream1     = inputSplitStream.GetReader();
                var splitStream2     = inputSplitStream.GetReader();
                inputSplitStream.StartReadAhead();

                StringBuilder sb = new StringBuilder();

                int prev = -1;

                int byt;
                while ((byt = splitStream2.ReadByte()) != -1)
                {
                    sb.Append((char)byt);

                    if ((char)byt == 'm' && (char)prev == 'o')
                    {
                        break;
                    }

                    prev = byt;
                }

                var   host       = sb.ToString();
                Regex hostreg    = new Regex(@"[\.\-a-zA-Z0-9]*.playboundless.com$");
                Match q          = hostreg.Match(host);
                var   remoteHost = q.Groups[0].Value;

                inputSplitStream.TerminateReader(splitStream2);
                splitStream2.Dispose();

                var clientSecureStream = new SslStream(splitStream1, false);
                clientSecureStream.AuthenticateAsServer(m_certificate);

                // Connect to server
                var serverConnection = new TcpClient(m_hostLookup[remoteHost], m_port);

                // SSL the server
                var serverStream       = serverConnection.GetStream();
                var serverSecureStream = new SslStream(serverStream, false, (a, b, c, d) => true);
                serverSecureStream.AuthenticateAsClient(remoteHost);

                MainWindow.Instance.Dispatcher.BeginInvoke(new Action(() =>
                {
                    ConnectionInstance instanceModel = new ConnectionInstance()
                    {
                        HostName = remoteHost,
                        Id       = Guid.NewGuid(),
                        Parent   = m_connectionGrouping,
                    };
                    SslMitmInstance instance = new SslMitmInstance(clientSecureStream, serverSecureStream, instanceModel)
                    {
                        ReplaceIpaddr = ReplaceIpaddr,
                    };

                    m_connectionGrouping.Instances.Add(instanceModel);
                }));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }