Example #1
0
 public void SetUp()
 {
     var kernel = new Kernel();
     var ip = new Ip("127.0.0.1");
     const int port = 0;
     Ssl ssl = null;
     var tcpObj = new SockTcp(new Kernel(), ip,port,3,ssl);
     var upperProxy = new UpperProxy(false, "", 0, null,false,"","");//上位プロキシ未使用
     const int timeout = 3;
     _proxy = new Proxy(kernel, null, tcpObj, timeout,upperProxy);
 }
Example #2
0
        public int Port        = 0;//Ver5.0.1

        public Proxy(Kernel kernel, Logger logger, SockTcp clientSocket, int optionTimeout, UpperProxy upperProxy)
        {
            _kernel       = kernel;
            Logger        = logger;
            OptionTimeout = optionTimeout;
            UpperProxy    = upperProxy;

            _sock[CS.Client] = clientSocket;
            _sock[CS.Server] = null;
            //sock[CS.CLIENT].SendTimeout = optionTimeout; //Ver5.0.2 送信タイムアウトは設定しない

            ProxyProtocol = ProxyProtocol.Unknown;
        }
Example #3
0
        public Proxy(Kernel kernel,Logger logger,SockTcp clientSocket,int optionTimeout,UpperProxy upperProxy)
        {
            _kernel = kernel;
            Logger = logger;
            OptionTimeout = optionTimeout;
            UpperProxy = upperProxy;

            _sock[CS.Client] = clientSocket;
            _sock[CS.Server] = null;
            //sock[CS.CLIENT].SendTimeout = optionTimeout; //Ver5.0.2 送信タイムアウトは設定しない

            ProxyProtocol = ProxyProtocol.Unknown;
        }
Example #4
0
        //接続単位の処理
        override protected void OnSubThread(SockObj sockObj)
        {
            //Ver5.6.9
            //UpperProxy upperProxy = new UpperProxy((bool)Conf.Get("useUpperProxy"),(string)this.Conf.Get("upperProxyServer"),(int)this.Conf.Get("upperProxyPort"),disableAddressList);
            var upperProxy = new UpperProxy((bool)Conf.Get("useUpperProxy"), (string)Conf.Get("upperProxyServer"), (int)Conf.Get("upperProxyPort"), _disableAddressList,
                                            (bool)Conf.Get("upperProxyUseAuth"),
                                            (string)Conf.Get("upperProxyAuthName"),
                                            (string)Conf.Get("upperProxyAuthPass"));
            var      proxy    = new Proxy(Kernel, Logger, (SockTcp)sockObj, Timeout, upperProxy);//プロキシ接続情報
            ProxyObj proxyObj = null;
            OneObj   oneObj   = null;

            //最初のリクエスト取得
            for (int i = 0; IsLife() && proxy.Length(CS.Client) == 0; i++)
            {
                //まだサーバと未接続の段階では、クライアントからのリクエストがない場合、
                //このスレッドはエラーとなる
                Thread.Sleep(50);
                if (i > 100)
                {
                    goto end;//切断
                }
            }
            //新たなHTTPオブジェクトを生成する
            oneObj = new OneObj(proxy);

            //リクエスト行・ヘッダ・POSTデータの読み込み・URL制限
            if (!oneObj.RecvRequest(_useRequestLog, _limitUrl, this))
            {
                goto end;
            }

            //HTTPの場合
            if (oneObj.Request.Protocol == ProxyProtocol.Http)
            {
                proxyObj = new ProxyHttp(proxy, Kernel, Conf, _cache, _limitString);//HTTPデータ管理オブジェクト

                //最初のオブジェクトの追加
                proxyObj.Add(oneObj);

                while (IsLife()) //デフォルトで継続型

                //*******************************************************
                //プロキシ処理
                //*******************************************************
                {
                    if (!proxyObj.Pipe(this))
                    {
                        goto end;
                    }

                    if (!((ProxyHttp)proxyObj).KeepAlive)
                    {
                        if (proxyObj.IsFinish())
                        {
                            Logger.Set(LogKind.Debug, null, 999, "break keepAlive=false");
                            break;
                        }
                    }

                    //*******************************************************
                    //次のリクエストを取得
                    //*******************************************************
                    //if(((ProxyHttp)proxyObj).KeepAlive) {
                    for (var i = 0; i < 30; i++)
                    {
                        if (proxy.Length(CS.Client) != 0)
                        {
                            //Ver5.9.0
                            if (oneObj != null)
                            {
                                oneObj.Dispose();
                            }
                            //新たなHTTPオブジェクトを生成する
                            oneObj = new OneObj(proxy);

                            //リクエスト行・ヘッダ・POSTデータの読み込み・URL制限
                            if (!oneObj.RecvRequest(_useRequestLog, _limitUrl, this))
                            {
                                goto end;
                            }

                            if (oneObj.Request.Protocol != ProxyProtocol.Http)
                            {
                                goto end;    //Ver5.0.2
                            }
                            //HTTPオブジェクトの追加
                            proxyObj.Add(oneObj);
                        }
                        else
                        {
                            if (!proxyObj.IsFinish())
                            {
                                break;
                            }

                            //Ver5.6.1 最適化
                            if (!proxyObj.WaitProcessing())
                            {
                                Thread.Sleep(5);
                            }
                        }
                    }
                    //}
                    //デバッグログ
                    //proxyObj.DebugLog();

                    if (proxyObj.IsTimeout())
                    {
                        Logger.Set(LogKind.Debug, null, 999, string.Format("break waitTime>{0}sec [Option Timeout]", proxy.OptionTimeout));
                        break;
                    }
                    //Ver5.1.4-b1
                    //Thread.Sleep(500);

                    Thread.Sleep(1);//Ver5.6.1これを0にするとCPU使用率が100%になってしまう
                }
            }
            else if (oneObj.Request.Protocol == ProxyProtocol.Ssl)
            {
                proxyObj = new ProxySsl(proxy);//SSLデータ管理オブジェクト

                //オブジェクトの追加
                proxyObj.Add(oneObj);

                while (IsLife()) //デフォルトで継続型

                //*******************************************************
                //プロキシ処理
                //*******************************************************
                {
                    if (!proxyObj.Pipe(this))
                    {
                        goto end;
                    }

                    //デバッグログ
                    //proxyObj.DebugLog();

                    if (proxyObj.IsTimeout())
                    {
                        Logger.Set(LogKind.Debug, null, 999, string.Format("break waitTime>{0}sec [Option Timeout]", proxy.OptionTimeout));
                        break;
                    }
                    //Ver5.0.0-b13
                    //Thread.Sleep(500);
                    Thread.Sleep(1);
                }
            }
            else if (oneObj.Request.Protocol == ProxyProtocol.Ftp)
            {
                proxyObj = new ProxyFtp(proxy, Kernel, Conf, this, ++_dataPort);//FTPデータ管理オブジェクト

                //オブジェクトの追加
                proxyObj.Add(oneObj);

                //*******************************************************
                //プロキシ処理
                //*******************************************************
                proxyObj.Pipe(this);

                _dataPort = ((ProxyFtp)proxyObj).DataPort;
                if (_dataPort > DataPortMax)
                {
                    _dataPort = DataPortMin;
                }
            }
end:
            //Ver5.9.0
            if (oneObj != null)
            {
                oneObj.Dispose();
            }


            //終了処理
            if (proxyObj != null)
            {
                proxyObj.Dispose();
            }
            proxy.Dispose();

            //Java fix Ver5.9.0
            GC.Collect();
        }
Example #5
0
        //接続単位の処理
        protected override void OnSubThread(SockObj sockObj)
        {
            //Ver5.6.9
            //UpperProxy upperProxy = new UpperProxy((bool)Conf.Get("useUpperProxy"),(string)this.Conf.Get("upperProxyServer"),(int)this.Conf.Get("upperProxyPort"),disableAddressList);
            var upperProxy = new UpperProxy((bool)Conf.Get("useUpperProxy"), (string)Conf.Get("upperProxyServer"), (int)Conf.Get("upperProxyPort"), _disableAddressList,
                (bool)Conf.Get("upperProxyUseAuth"),
                (string)Conf.Get("upperProxyAuthName"),
                (string)Conf.Get("upperProxyAuthPass"));
            var proxy = new Proxy(Kernel,Logger, (SockTcp)sockObj, Timeout, upperProxy);//プロキシ接続情報
            ProxyObj proxyObj = null;
            OneObj oneObj = null;

            //最初のリクエスト取得
            for(int i = 0;IsLife() && proxy.Length(CS.Client) == 0;i++) {
                //まだサーバと未接続の段階では、クライアントからのリクエストがない場合、
                //このスレッドはエラーとなる
                Thread.Sleep(50);
                if(i > 100)
                    goto end;//切断
            }
            //新たなHTTPオブジェクトを生成する
            oneObj = new OneObj(proxy);

            //リクエスト行・ヘッダ・POSTデータの読み込み・URL制限
            if(!oneObj.RecvRequest(_useRequestLog,_limitUrl,this))
                goto end;

            //HTTPの場合
            if (oneObj.Request.Protocol == ProxyProtocol.Http) {

                proxyObj = new ProxyHttp(proxy,Kernel,Conf,_cache,_limitString);//HTTPデータ管理オブジェクト

                //最初のオブジェクトの追加
                proxyObj.Add(oneObj);

                while(IsLife()) {//デフォルトで継続型

                    //*******************************************************
                    //プロキシ処理
                    //*******************************************************
                    if(!proxyObj.Pipe(this))
                        goto end;

                    if(!((ProxyHttp)proxyObj).KeepAlive) {
                        if(proxyObj.IsFinish()) {
                            Logger.Set(LogKind.Debug,null,999,"break keepAlive=false");
                            break;
                        }
                    }

                    //*******************************************************
                    //次のリクエストを取得
                    //*******************************************************
                    //if(((ProxyHttp)proxyObj).KeepAlive) {
                        for(var i = 0;i < 30;i++) {
                            if(proxy.Length(CS.Client) != 0) {

                                //Ver5.9.0
                                if (oneObj != null){
                                    oneObj.Dispose();
                                }
                                //新たなHTTPオブジェクトを生成する
                                oneObj = new OneObj(proxy);

                                //リクエスト行・ヘッダ・POSTデータの読み込み・URL制限
                                if(!oneObj.RecvRequest(_useRequestLog,_limitUrl,this))
                                    goto end;

                                if (oneObj.Request.Protocol != ProxyProtocol.Http) {
                                    goto end;//Ver5.0.2
                                }
                                //HTTPオブジェクトの追加
                                proxyObj.Add(oneObj);

                            } else {
                                if(!proxyObj.IsFinish())
                                    break;

                                //Ver5.6.1 最適化
                                if (!proxyObj.WaitProcessing()) {
                                    Thread.Sleep(5);
                                }
                            }
                        }
                    //}
                    //デバッグログ
                    //proxyObj.DebugLog();

                    if(proxyObj.IsTimeout()) {
                        Logger.Set(LogKind.Debug,null,999,string.Format("break waitTime>{0}sec [Option Timeout]",proxy.OptionTimeout));
                        break;
                    }
                    //Ver5.1.4-b1
                    //Thread.Sleep(500);

                    Thread.Sleep(1);//Ver5.6.1これを0にするとCPU使用率が100%になってしまう
                }
            } else if (oneObj.Request.Protocol == ProxyProtocol.Ssl) {

                proxyObj = new ProxySsl(proxy);//SSLデータ管理オブジェクト

                //オブジェクトの追加
                proxyObj.Add(oneObj);

                while(IsLife()) {//デフォルトで継続型

                    //*******************************************************
                    //プロキシ処理
                    //*******************************************************
                    if(!proxyObj.Pipe(this))
                        goto end;

                    //デバッグログ
                    //proxyObj.DebugLog();

                    if(proxyObj.IsTimeout()) {
                        Logger.Set(LogKind.Debug,null,999,string.Format("break waitTime>{0}sec [Option Timeout]",proxy.OptionTimeout));
                        break;
                    }
                    //Ver5.0.0-b13
                    //Thread.Sleep(500);
                    Thread.Sleep(1);
                }
            } else if (oneObj.Request.Protocol == ProxyProtocol.Ftp) {
                proxyObj = new ProxyFtp(proxy,Kernel,Conf,this,++_dataPort);//FTPデータ管理オブジェクト

                //オブジェクトの追加
                proxyObj.Add(oneObj);

                //*******************************************************
                //プロキシ処理
                //*******************************************************
                proxyObj.Pipe(this);

                _dataPort = ((ProxyFtp)proxyObj).DataPort;
                if(_dataPort>DataPortMax)
                    _dataPort = DataPortMin;

            }
            end:
            //Ver5.9.0
            if (oneObj != null){
                oneObj.Dispose();
            }

            //終了処理
            if(proxyObj != null)
                proxyObj.Dispose();
            proxy.Dispose();

            //Java fix Ver5.9.0
            GC.Collect();
        }