//データオブジェクトの追加 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); }
//データオブジェクトの追加 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); }
//データオブジェクトの追加 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); } }
//データオブジェクトの追加 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); }
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; }
public OneProxyHttp(Proxy proxy, ProxyHttp proxyHttp, OneObj oneObj) { _proxy = proxy; ProxyHttp = proxyHttp; _oneObj = oneObj; _sideState[CS.Client] = HttpSideState.ClientSideRecvRequest; _sideState[CS.Server] = HttpSideState.Non; }
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; }
//データオブジェクトの追加 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が成功したことをクライアントに返す } }
//データオブジェクトの追加 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が成功したことをクライアントに返す } }
//データオブジェクトの追加 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); } }
//接続単位の処理 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(); }
public abstract void Add(OneObj oneObj);
//接続単位の処理 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(); }
//データオブジェクトの追加 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); }