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); }
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; }
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; }
//接続単位の処理 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(); }
//接続単位の処理 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(); }