private void ReadBrowser(IAsyncResult ar)
        {
            try
            {
                RawSSLObj rso = (RawSSLObj)ar.AsyncState;
                if (rso.rawData.client == null || rso.rawData.bridge == null)
                {
                    return;
                }
                int bytesRead = rso.rawData.client.EndReceive(ar);

                if (bytesRead > 0)
                {
                    byte[] req = new byte[bytesRead];
                    Array.Copy(rso.rawData.data, req, bytesRead);
                    rso.rawData.bridge.Send(req, 0, bytesRead, SocketFlags.None);
                    Array.Clear(req, 0, bytesRead);
                }
                else
                {
                    if (rso.rawData.client != null)
                    {
                        rso.rawData.client.Close();
                        rso.rawData.client.Dispose();
                        rso.rawData.client = null;
                    }
                    if (rso.rawData.bridge != null)
                    {
                        rso.rawData.bridge.Close();
                        rso.rawData.bridge.Dispose();
                        rso.rawData.bridge = null;
                    }

                    return;
                }

                //Console.WriteLine("Read success!");
                rso.rawData.data = new byte[2048];
                rso.rawData.client.BeginReceive(rso.rawData.data, 0, 2048, SocketFlags.None, new AsyncCallback(ReadBrowser), rso);
            }
            catch (Exception)
            {
                //console.Debug($"Failed to read raw http from browser: {ex.ToString()}");
            }
        }
        public void SendHTTPS(Socket browser)
        {
            //if (https == ProxyServer.Mode.MITM) return;

            try
            {
                Socket    bridge = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ip     = GetIPOfHost(_host);

                if (ip == null)
                {
                    if (browser != null)
                    {
                        browser.Close();
                        browser.Dispose();
                        browser = null;
                    }

                    return;
                }

                //Console.WriteLine("Step 5");

                bridge.Connect(ip, 443);
                RawSSLObj rso = new RawSSLObj()
                {
                    fullText = "", request = null, rawData = new RawObj {
                        data = new byte[2048], client = browser, bridge = bridge
                    }
                };
                RawObj ro = new RawObj()
                {
                    data = new byte[2048], bridge = bridge, client = browser
                };
                bridge.BeginReceive(ro.data, 0, 2048, SocketFlags.None, new AsyncCallback(ForwardRawHTTP), ro);
                browser.BeginReceive(rso.rawData.data, 0, 2048, SocketFlags.None, new AsyncCallback(ReadBrowser), rso);
                GenerateVerify(browser);
            }
            catch (SocketException socketError)
            {
                Console.WriteLine(socketError.ToString());
            }
        }