예제 #1
0
파일: ProxyHttp.cs 프로젝트: schifflee/bjd5
        //データオブジェクトの追加
        override public void Add(OneObj oneObj)
        {
            //オプション指定によるヘッダの追加処理
            if (!(bool)_conf.Get("useBrowserHedaer"))
            {
                if ((bool)_conf.Get("addHeaderRemoteHost"))
                {
                    //    oneObj.Header[cs].Append(key,val);
                    oneObj.Header[CS.Client].Append("Remote-Host-Wp", Encoding.ASCII.GetBytes(Define.ServerAddress()));
                }
                if ((bool)_conf.Get("addHeaderXForwardedFor"))
                {
                    oneObj.Header[CS.Client].Append("X-Forwarded-For", Encoding.ASCII.GetBytes(Define.ServerAddress()));
                }
                if ((bool)_conf.Get("addHeaderForwarded"))
                {
                    string str = string.Format("by {0} (Version {1}) for {2}", Define.ApplicationName(), _kernel.Ver.Version(), Define.ServerAddress());
                    oneObj.Header[CS.Client].Append("Forwarded", Encoding.ASCII.GetBytes(str));
                }
            }

            if (_ar.Count == 0)
            {
                if (oneObj.Request.HttpVer != "HTTP/1.1")
                {
                    KeepAlive = false;//非継続型
                }
            }

            var oneProxyHttp = new OneProxyHttp(Proxy, this, oneObj);

            //キャッシュの確認
            oneProxyHttp.CacheConform(_cache);
            _ar.Add(oneProxyHttp);
        }
예제 #2
0
파일: ProxyHttp.cs 프로젝트: jsakamoto/bjd5
        //データオブジェクトの追加
        public override void Add(OneObj oneObj)
        {
            //オプション指定によるヘッダの追加処理
            if (!(bool)_conf.Get("useBrowserHedaer")) {
                if ((bool)_conf.Get("addHeaderRemoteHost")) {
                    //    oneObj.Header[cs].Append(key,val);
                    oneObj.Header[CS.Client].Append("Remote-Host-Wp", Encoding.ASCII.GetBytes(Define.ServerAddress()));
                }
                if ((bool)_conf.Get("addHeaderXForwardedFor")) {
                    oneObj.Header[CS.Client].Append("X-Forwarded-For", Encoding.ASCII.GetBytes(Define.ServerAddress()));
                }
                if ((bool)_conf.Get("addHeaderForwarded")) {
                    string str = string.Format("by {0} (Version {1}) for {2}", Define.ApplicationName(), _kernel.Ver.Version(), Define.ServerAddress());
                    oneObj.Header[CS.Client].Append("Forwarded", Encoding.ASCII.GetBytes(str));
                }
            }

            if (_ar.Count == 0) {
                if (oneObj.Request.HttpVer != "HTTP/1.1"){
                    KeepAlive = false;//非継続型
                }
            }

            var oneProxyHttp = new OneProxyHttp(Proxy, this, oneObj);
            //キャッシュの確認
            oneProxyHttp.CacheConform(_cache);
            _ar.Add(oneProxyHttp);
        }
예제 #3
0
파일: ProxyFtp.cs 프로젝트: schifflee/bjd5
        //データオブジェクトの追加
        override public void Add(OneObj oneObj)
        {
            _oneObj = oneObj;

            //URLで指定されたユーザ名およびパスワードを使用する
            if (oneObj.Request.User != null)
            {
                _user = oneObj.Request.User;
            }
            if (oneObj.Request.Pass != null)
            {
                _pass = oneObj.Request.Pass;
            }

            //URIをパスとファイル名に分解する
            _path = oneObj.Request.Uri;
            _file = "";
            int index = oneObj.Request.Uri.LastIndexOf('/');

            if (index < oneObj.Request.Uri.Length - 1)
            {
                _path = oneObj.Request.Uri.Substring(0, index);
                _file = oneObj.Request.Uri.Substring(index + 1);
            }
        }
예제 #4
0
        //データオブジェクトの追加
        public void Add(OneObj oneObj)
        {
            //オプション指定によるヘッダの追加処理
            if (!opBase.ValBool("useBrowserHedaer"))
            {
                if (opBase.ValBool("addHeaderRemoteHost"))
                {
                    //    oneObj.Header[cs].Append(key,val);
                    oneObj.Header[CS.CLIENT].Append("Remote-Host-Wp", Define.ServerAddress());
                }
                if (opBase.ValBool("addHeaderXForwardedFor"))
                {
                    oneObj.Header[CS.CLIENT].Append("X-Forwarded-For", Define.ServerAddress());
                }
                if (opBase.ValBool("addHeaderForwarded"))
                {
                    string str = string.Format("by {0} (Version {1}) for {2}", Define.ApplicationName(), kanel.Ver.Version(), Define.ServerAddress());
                    oneObj.Header[CS.CLIENT].Append("Forwarded", str);
                }
            }

            OneHttp oneHttp = new OneHttp(proxy, this, oneObj);

            //キャッシュの確認
            oneHttp.CacheConform();
            ar.Add(oneHttp);
        }
예제 #5
0
파일: Http.cs 프로젝트: jsakamoto/bjd5
        public OneHttp(Proxy proxy,Http http,OneObj oneObj)
        {
            this.proxy = proxy;
            this.Http = http;
            this.oneObj = oneObj;

            sideState[CS.CLIENT] = HTTP_SIDE_STATE.CLIENT_SIDE_RECV_REQUEST;
            sideState[CS.SERVER] = HTTP_SIDE_STATE.NON;
        }
예제 #6
0
        public OneProxyHttp(Proxy proxy, ProxyHttp proxyHttp, OneObj oneObj)
        {
            _proxy = proxy;
            ProxyHttp = proxyHttp;
            _oneObj = oneObj;

            _sideState[CS.Client] = HttpSideState.ClientSideRecvRequest;
            _sideState[CS.Server] = HttpSideState.Non;
        }
예제 #7
0
        public OneProxyHttp(Proxy proxy, ProxyHttp proxyHttp, OneObj oneObj)
        {
            _proxy    = proxy;
            ProxyHttp = proxyHttp;
            _oneObj   = oneObj;

            _sideState[CS.Client] = HttpSideState.ClientSideRecvRequest;
            _sideState[CS.Server] = HttpSideState.Non;
        }
예제 #8
0
        public OneHttp(Proxy proxy, Http http, OneObj oneObj)
        {
            this.proxy  = proxy;
            this.Http   = http;
            this.oneObj = oneObj;

            sideState[CS.CLIENT] = HTTP_SIDE_STATE.CLIENT_SIDE_RECV_REQUEST;
            sideState[CS.SERVER] = HTTP_SIDE_STATE.NON;
        }
예제 #9
0
파일: ProxySsl.cs 프로젝트: jsakamoto/bjd5
        //データオブジェクトの追加
        public override void Add(OneObj oneObj)
        {
            _oneObj = oneObj;

            if(Proxy.UpperProxy.Use) {
                //上位プロキシを使用する場合(リクエストラインはそのまま使用される)
                oneObj.Body[CS.Client].Set(Bytes.Create(oneObj.Request.SendLine(Proxy.UpperProxy.Use),oneObj.Header[CS.Client].GetBytes()));
            } else {
                //取得したリクエストをバッファに格納する
                oneObj.Body[CS.Client].Set(new byte[0]);
                oneObj.Body[CS.Server].Set(Bytes.Create("HTTP/1.0 200 Connection established\r\n\r\n"));//CONNECTが成功したことをクライアントに返す
            }
        }
예제 #10
0
파일: ProxySsl.cs 프로젝트: schifflee/bjd5
        //データオブジェクトの追加
        override public void Add(OneObj oneObj)
        {
            _oneObj = oneObj;

            if (Proxy.UpperProxy.Use)
            {
                //上位プロキシを使用する場合(リクエストラインはそのまま使用される)
                oneObj.Body[CS.Client].Set(Bytes.Create(oneObj.Request.SendLine(Proxy.UpperProxy.Use), oneObj.Header[CS.Client].GetBytes()));
            }
            else
            {
                //取得したリクエストをバッファに格納する
                oneObj.Body[CS.Client].Set(new byte[0]);
                oneObj.Body[CS.Server].Set(Bytes.Create("HTTP/1.0 200 Connection established\r\n\r\n"));//CONNECTが成功したことをクライアントに返す
            }
        }
예제 #11
0
파일: ProxyFtp.cs 프로젝트: jsakamoto/bjd5
        //データオブジェクトの追加
        public override void Add(OneObj oneObj)
        {
            _oneObj = oneObj;

            //URLで指定されたユーザ名およびパスワードを使用する
            if(oneObj.Request.User != null)
                _user = oneObj.Request.User;
            if(oneObj.Request.Pass != null)
                _pass = oneObj.Request.Pass;

            //URIをパスとファイル名に分解する
            _path = oneObj.Request.Uri;
            _file = "";
            int index = oneObj.Request.Uri.LastIndexOf('/');
            if(index < oneObj.Request.Uri.Length - 1) {
                _path = oneObj.Request.Uri.Substring(0,index);
                _file = oneObj.Request.Uri.Substring(index + 1);
            }
        }
예제 #12
0
파일: Server.cs 프로젝트: schifflee/bjd5
        //接続単位の処理
        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();
        }
예제 #13
0
 public abstract void Add(OneObj oneObj);
예제 #14
0
파일: Server.cs 프로젝트: jsakamoto/bjd5
        //接続単位の処理
        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();
        }
예제 #15
0
파일: Http.cs 프로젝트: jsakamoto/bjd5
        //データオブジェクトの追加
        public void Add(OneObj oneObj)
        {
            //オプション指定によるヘッダの追加処理
            if(!opBase.ValBool("useBrowserHedaer")) {
                if(opBase.ValBool("addHeaderRemoteHost")) {
                    //    oneObj.Header[cs].Append(key,val);
                    oneObj.Header[CS.CLIENT].Append("Remote-Host-Wp",Define.ServerAddress());
                }
                if(opBase.ValBool("addHeaderXForwardedFor")) {
                    oneObj.Header[CS.CLIENT].Append("X-Forwarded-For",Define.ServerAddress());
                }
                if(opBase.ValBool("addHeaderForwarded")) {
                    string str = string.Format("by {0} (Version {1}) for {2}",Define.ApplicationName(),kanel.Ver.Version(),Define.ServerAddress());
                    oneObj.Header[CS.CLIENT].Append("Forwarded",str);
                }
            }

            OneHttp oneHttp = new OneHttp(proxy,this,oneObj);
            //キャッシュの確認
            oneHttp.CacheConform();
            ar.Add(oneHttp);
        }