public override void Flush() { try { WriteBackStream.Flush(); } catch { Parent.TerminateReader(this); } }
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); } }