Пример #1
0
            Boolean ProcessConnect(HttpHeader entity, ReceivedEventArgs e)
            {
                //WriteDebugLog("[{3}] {0} {1} [{2}]", entity.Method, entity.Url, entity.ContentLength, ID);
                var pxy = Host as HttpProxy;

                //var host = entity.Url.ToString();
                var uri = RemoteServerUri;
                var ep  = NetHelper.ParseEndPoint(entity.Url.ToString(), 80);

                uri.EndPoint = ep;

                // 不要连自己,避免死循环
                if (ep.Port == pxy.Server.Port &&
                    (ep.Address == IPAddress.Loopback || ep.Address == IPAddress.IPv6Loopback))
                {
                    WriteLog("不要连自己,避免死循环");
                    Dispose();
                    return(false);
                }

                var rs = new HttpHeader
                {
                    Version = entity.Version
                };

                try
                {
                    // 连接远程服务器,启动数据交换
                    if (RemoteServer == null)
                    {
                        StartRemote(e);
                    }

                    rs.StatusCode        = 200;
                    rs.StatusDescription = "OK";
                }
                catch (Exception ex)
                {
                    rs.StatusCode        = 500;
                    rs.StatusDescription = ex.Message;
                }

                // 告诉客户端,已经连上了服务端,或者没有连上,这里不需要向服务端发送任何数据
                Send(rs.GetStream());
                return(false);
            }