//コンストラクタ //リソース定義(Dat)で初期化する場合 public RrDb(Logger logger, Conf conf, IEnumerable<OneDat> dat, string dname,bool authority) { //ドメイン名の初期化 SetDomainName(dname); //Ver6.1.0 Authority = authority; //Datの読み込み if (dat != null){ foreach (var o in dat){ if (o.Enable){ try{ AddOneDat(_domainName, o); } catch (ValidObjException e){ logger.Set(LogKind.Error, null, 19, string.Format("domain={0} {1}", _domainName, e.Message)); } } } } if (conf != null){ //SOAレコードの追加 var mail = (string) conf.Get("soaMail"); var serial = (uint)((int) conf.Get("soaSerial")); var refresh = (uint)((int) conf.Get("soaRefresh")); var retry = (uint)((int) conf.Get("soaRetry")); _expire = (uint)((int) conf.Get("soaExpire")); //expireは、TTL=0のリソースが検索されたとき、TTLに使用するため、クラス変数に保存する var minimum = (uint)((int) conf.Get("soaMinimum")); if (!InitSoa(_domainName, mail, serial, refresh, retry, _expire, minimum)){ logger.Set(LogKind.Error, null, 20, string.Format("domain={0}", _domainName)); } } }
//リストが無い場合は、allowList及びdenyListはnullでもよい //テスト用にlogger=nullも可 public RelayList(IEnumerable<OneDat> dat,string name,Logger logger) { if (dat == null){ //リストなし return; } foreach (var o in dat) { if (!o.Enable){ continue; } var ipStr= o.StrList[0]; if (ipStr.IndexOf('.') != -1) {//IPv4ルール var acl = new AclV4(name,ipStr); if (!acl.Status) { if (logger != null){ logger.Set(LogKind.Error, null, 25, string.Format("{0} : {1}", name, ipStr)); } } else { _arV4.Add(acl); } } else {//IPv6ルール var acl = new AclV6(name,ipStr); if (!acl.Status) { if (logger != null){ logger.Set(LogKind.Error, null, 25, string.Format("{0} : {1}", name, ipStr)); } } else { _arV6.Add(acl); } } } }
//�e�X�g�p logger��null�ł�� public void Add(String name, String alias, Logger logger) { System.Diagnostics.Debug.Assert(logger != null, "logger != null"); //alias�̕�����ɖ������Ȃ����ǂ�����m�F���� var tmp = alias.Split(','); var sb = new StringBuilder(); foreach (var str in tmp){ if (str.IndexOf('@') != -1){ //�O���[�o���A�h���X�̒lj� sb.Append(str); sb.Append(','); }else if (str.IndexOf('/') == 0){ //���[�J���t�@�C���̏ꍇ sb.Append(str); sb.Append(','); }else if (str.IndexOf('$') == 0){ //��`�̏ꍇ if (str == "$ALL"){ if (_mailBox != null){ foreach (string user in _mailBox.UserList) { sb.Append(string.Format("{0}@{1}", user, _domainList[0])); sb.Append(','); } } }else if (str == "$USER"){ //Ver5.4.3 $USER�lj� sb.Append(string.Format("{0}@{1}", name, _domainList[0])); sb.Append(','); }else{ logger.Set(LogKind.Error, null, 45, string.Format("name:{0} alias:{1}", name, alias)); } }else{ if (_mailBox==null || !_mailBox.IsUser(str)){ //���[�U���͗L�����H logger.Set(LogKind.Error, null, 19, string.Format("name:{0} alias:{1}", name, alias)); }else{ sb.Append(string.Format("{0}@{1}", str, _domainList[0])); sb.Append(','); } } } string buffer; if (_ar.TryGetValue(name, out buffer)){ logger.Set(LogKind.Error, null, 30, string.Format("user:{0} alias:{1}", name, alias)); }else{ _ar.Add(name, sb.ToString()); } }
//変換と追加 public void Exec(Mail mail,Logger logger) { Debug.Assert(logger != null, "logger != null"); //ヘッダ変換 foreach (var a in _replace){ if (mail.RegexHeader(a.Key,a.Value)){ logger.Set(LogKind.Normal, null, 16, string.Format("{0} -> {1}", a.Key,a.Value)); } } //ヘッダの追加 foreach (var a in _append){ mail.AddHeader(a.Key, a.Value); logger.Set(LogKind.Normal, null, 17, string.Format("{0}: {1}", a.Key, a.Value)); } }
public Cache(Kernel kernel, Logger logger, Conf conf) : base(logger) { this.logger = logger; //_oneOption = oneOption; _conf = conf; _useCache = (bool)conf.Get("useCache"); if (!_useCache) return; _expires = (int)conf.Get("expires"); _maxSize = (int)conf.Get("maxSize"); _diskSize = (int)conf.Get("diskSize"); _memorySize = (int)conf.Get("memorySize"); //�L���b�V���Ώۃ��X�g _cacheTargetHost = new CacheTarget((Dat)conf.Get("cacheHost"), (int)conf.Get("enableHost")); _cacheTargetExt = new CacheTarget((Dat)conf.Get("cacheExt"), (int)conf.Get("enableExt")); //�f�B�X�N�L���b�V�� var cacheDir = (string)conf.Get("cacheDir");//�L���b�V����ۑ�����f�B���N�g�� if (cacheDir == "" || !Directory.Exists(cacheDir)) { logger.Set(LogKind.Error, null, 15, string.Format("dir = {0}", cacheDir)); _diskSize = 0; } if (_diskSize != 0) { _diskCache = new DiskCache(cacheDir, logger); } if (_memorySize != 0)//�������L���b�V�� _memoryCache = new MemoryCache(logger); }
/** * 溜まったログをloggerに送る * @param logger */ public void Release(Logger logger) { foreach (var a in _ar){ logger.Set(a.LogKind, a.SockObj, a.MessageNo, a.DetailInfomation); } _ar.Clear(); }
public void Set(LogKind logKind, SockObj sockBase, int messageNo, string detailInfomation) { if (_logger != null) { _logger.Set(logKind, sockBase, messageNo, detailInfomation); } }
/** * 溜まったログをloggerに送る * @param logger */ public void Release(Logger logger) { foreach (var a in _ar) { logger.Set(a.LogKind, a.SockObj, a.MessageNo, a.DetailInfomation); } _ar.Clear(); }
//サーバ用コンストラクタ public Ssl(Logger logger, string fileName, string password) { // this.logger = logger; Status = false;//初期化が成功しているかどうかのステータス if (!File.Exists(fileName)) { logger.Set(LogKind.Error, null, 9000026, fileName); return; } try { _x509Certificate2 = new X509Certificate2(fileName, password); } catch (Exception ex) { logger.Set(LogKind.Error, null, 9000023, ex.Message); return; } Status = true;//初期化が成功しているかどうかのステータス }
public RemoteClient(Kernel kernel) : base(kernel.CreateLogger("RemoteClient",true,null)) { _kernel = kernel; var args = Environment.GetCommandLineArgs(); //this.kernel = kernel; IsConected = false; _logger = _kernel.CreateLogger("RemoteClient", true, this); _optionFileName = string.Format("{0}\\{1}.ini", _kernel.ProgDir(), "$remote"); //Java fix IsJp�͌����_�ł͕s�� _kernel.Menu.InitializeRemote(true);//�ؒf���̌y�ʃ��j���[ //_kernel.Menu.OnClick += Menu_OnClick; //�R�}���h���C�������̏��� if (args.Length != 2 && args.Length !=3) { _logger.Set(LogKind.Error,null,1,string.Format("args.Length={0}",args.Length)); return; } //�ڑ���A�h���X try{ _ip = new Ip(args[1]); }catch(ValidObjException){ _logger.Set(LogKind.Error,null,2,string.Format("ip={0}", args[1])); return; } //_ip = new Ip(args[1]); //if (_ip.ToString() == "0.0.0.0") { // _logger.Set(LogKind.Error,null,2,string.Format("ip={0}", args[1])); // return; //} //�ڑ���|�[�g�ԍ� if (args.Length == 3) { try { _port = Convert.ToInt32(args[2]); } catch { _logger.Set(LogKind.Error,null,3,string.Format("port={0}", args[2])); _ip = new Ip(IpKind.V4_0);//���������s } } }
//(Dat)conf.Get("range") //(int)conf.Get("enableEsmtp") public SmtpAuthRange(IEnumerable<OneDat> range, int enableEsmtp,Logger logger) { _logger = logger; _enableEsmtp = enableEsmtp; if (range != null){ foreach (var o in range){ if (o.Enable){//有効なデータだけを対象にする var name = o.StrList[0]; var ipStr = o.StrList[1]; if (ipStr.IndexOf('.') != -1){//IPv4ルール var acl = new AclV4(name, ipStr); if (!acl.Status){ if (_logger != null){ _logger.Set(LogKind.Error, null, 9000040, string.Format("Name:{0} Address{1}", name, ipStr)); } } else{ _arV4.Add(acl); } }else{//IPv6ルール var acl = new AclV6(name, ipStr); if (!acl.Status){ if (_logger != null){ _logger.Set(LogKind.Error, null, 9000040, string.Format("Name:{0} Address{1}", name, ipStr)); } } else{ _arV6.Add(acl); } } } } } }
public MlCmd(Logger logger, Mail mail, MlOneUser mlOneUser) { //this.logger = logger; var lines = Inet.GetLines(mail.GetBody()); foreach (var line in lines) { var str = mail.GetEncoding().GetString(line); str = Inet.TrimCrlf(str); //Ver5.6.4 前後の空白を除去する str = str.Trim(); if (str == "")//空白行は無視する continue; if (!SetCmd(str, mlOneUser)) { logger.Set(LogKind.Error, null, 40, str);//解釈失敗 } } }
public MlMailDb(Logger logger, string manageDir, string mlName) { Status = false; _logger = logger; _dir = string.Format("{0}\\{1}", manageDir, mlName); if (!Directory.Exists(_dir)) { try { Directory.CreateDirectory(_dir); } catch { if(logger!=null) logger.Set(LogKind.Error, null,31, _dir); return; } } Status = true; }
//RETRの後のメールの保存が完成したら、Job2をこちらに乗せ換えられる public bool Job(Logger logger,DateTime now,ILife iLife) { Debug.Assert(logger != null, "logger != null"); var fetchDb = new FetchDb(_kernel.ProgDir(), _oneFetch.Name); var remoteUidList = new List<String>(); var getList = new List<int>();//取得するメールのリスト var delList = new List<int>();//削除するメールのリスト //受信間隔を過ぎたかどうかの判断 if (_dt.AddMinutes(_oneFetch.Interval) > now){ return false; } logger.Set(LogKind.Normal, null, 1, _oneFetch.ToString()); if (_oneFetch.Ip == null) { logger.Set(LogKind.Error, null, 2, ""); return false; } var popClient = new PopClient(_kernel,_oneFetch.Ip,_oneFetch.Port,_timeout,iLife); //接続 if (!popClient.Connect()){ logger.Set(LogKind.Error, null, 3, popClient.GetLastError()); return false; } //ログイン if (!popClient.Login(_oneFetch.User, _oneFetch.Pass)){ logger.Set(LogKind.Error, null, 4, popClient.GetLastError()); return false; } //UID var lines = new List<String>(); if (!popClient.Uidl(lines)) { logger.Set(LogKind.Error, null, 5, popClient.GetLastError()); return false; } for (int i=0;i<lines.Count;i++){ var tmp = lines[i].Split(' '); if (tmp.Length == 2){ var uid = tmp[1]; remoteUidList.Add(uid); //既に受信が完了しているかどうかデータベースで確認する if (fetchDb.IndexOf(uid) == -1) { //存在しない場合 getList.Add(i);//受信対象とする } } } if (_oneFetch.Synchronize == 0) { //サーバに残す for (var i = 0; i < remoteUidList.Count; i++) { if (_oneFetch.KeepTime != 0){ //保存期間0の時は、削除しない //保存期間が過ぎているかどうかを確認する if (fetchDb.IsPast(remoteUidList[i], _oneFetch.KeepTime * 60)) { //サーバに残す時間(分) delList.Add(i); } } } } else if (_oneFetch.Synchronize == 1) { //メールボックスと同期する //メールボックスの状態を取得する var localUidList = new List<string>(); var folder = string.Format("{0}\\{1}", _kernel.MailBox.Dir, _oneFetch.LocalUser); foreach (var fileName in Directory.GetFiles(folder, "DF_*")) { var mailInfo = new MailInfo(fileName); localUidList.Add(mailInfo.Uid); } //メールボックスに存在しない場合、削除対象になる for (var i = 0; i < remoteUidList.Count; i++) { if (localUidList.IndexOf(remoteUidList[i]) == -1) { delList.Add(i); } } } else if (_oneFetch.Synchronize == 2) { //サーバから削除 //受信完了リストに存在する場合、削除対象になる for (var i = 0; i < remoteUidList.Count; i++) { if (fetchDb.IndexOf(remoteUidList[i]) != -1) { delList.Add(i); } } } //RETR for (int i = 0; i < getList.Count;i++ ){ var mail = new Mail(); if (!popClient.Retr(getList[i], mail)) { logger.Set(LogKind.Error, null, 6, popClient.GetLastError()); return false; } //Ver5.9.8 var fromStr = mail.GetHeader("From"); if (fromStr == null){ fromStr = string.Format("{0}@{1}_{2}", _oneFetch.User, _oneFetch.Host, _oneFetch.Port); } var from = new MailAddress(fromStr); mail.ConvertHeader("X-UIDL", remoteUidList[i]); var remoteAddr = _oneFetch.Ip; var remoteHost = _oneFetch.Host; var rcptList = new List<MailAddress>(); rcptList.Add(new MailAddress(_oneFetch.LocalUser, _domainName)); if (_mailSave != null){ if (!_mailSave.Save(from, rcptList, mail, remoteHost, remoteAddr)){ return false; } } fetchDb.Add(remoteUidList[i]); } //DELE for (int i = 0; i < delList.Count;i++ ){ if (!popClient.Dele(delList[i])){ logger.Set(LogKind.Error, null, 7, popClient.GetLastError()); return false; } fetchDb.Del(remoteUidList[i]); } //QUIT if (!popClient.Quit()){ logger.Set(LogKind.Error, null, 5, popClient.GetLastError()); return false; } fetchDb.Save(); _dt = DateTime.Now;//最終処理時刻の更新 return true; }
//�f�[�^�擾�i����f�[�^�́A�����������j public bool Recv(Logger logger, SockTcp tcpObj,int timeout,ILife iLife) { var buf= tcpObj.LineRecv(timeout,iLife); if (buf == null) return false; buf = Inet.TrimCrlf(buf); _urlEncoding = MLang.GetEncoding(buf);//URL�G���R�[�h�̌`����ۑ����� //Ver5.9.8 if (_urlEncoding == null){ var sb = new StringBuilder(); for (int i = 0; i < buf.Length; i++) { sb.Append(String.Format("0x{0:X},", buf[i])); } logger.Set(LogKind.Error, tcpObj, 9999, String.Format("_urlEncoding==null buf.Length={0} buf={1}", buf.Length,sb.ToString())); //���̂܂ܗ�O�֓˓������� } var str = _urlEncoding.GetString(buf); // ���\�b�h�EURI�E�o�[�W�����ɕ��� //"GET http://hostname:port@user:pass/path/filename.ext?param HTTP/1.1" RequestStr = str; //(�ŕ�������)�@"GET <=> http://hostname:port@user:pass/path/filename.ext?param HTTP/1.1" var index = str.IndexOf(' '); if (index < 0) //Ver5.0.0-a8 return false; //(�O��) "GET" var methodStr = str.Substring(0, index); foreach (HttpMethod m in Enum.GetValues(typeof(HttpMethod))) { if (methodStr.ToUpper() == m.ToString().ToUpper()) { HttpMethod = m; break; } } if (HttpMethod == HttpMethod.Unknown) { logger.Set(LogKind.Secure,tcpObj,1,string.Format("{0}",RequestStr));//�T�|�[�g�O�̃��\�b�h�ł��i������p���ł��܂���j return false; } if (HttpMethod == HttpMethod.Connect) { Protocol = ProxyProtocol.Ssl; Port = 443;//�f�t�H���g�̃|�[�g�ԍ���443�ɂȂ� } //(�㔼) "http://*****:*****@user:pass/path/filename.ext?param HTTP/1.1" str = str.Substring(index + 1); //(�ŕ�������)�@"http://*****:*****@user:pass/path/filename.ext?param <=> HTTP/1.1" index = str.IndexOf(' '); if (index < 0) //Ver5.0.0-a8 return false; //(�㔼) "HTTP/1.1" HttpVer = str.Substring(index + 1); if(HttpVer != "HTTP/0.9" && HttpVer != "HTTP/1.0" && HttpVer != "HTTP/1.1") { logger.Set(LogKind.Secure,tcpObj,2,RequestStr);//�T�|�[�g�O�̃o�[�W�����ł��i������p���ł��܂���j return false; } //(�O��) "http://*****:*****@user:pass/path/filename.ext?param" str = str.Substring(0, index); if (Protocol == ProxyProtocol.Unknown) {//�v���g�R���擾 //("://"�ŕ�������)�@"http <=> hostname:port@user:pass/path/filename.ext?param <=> HTTP/1.1" index = str.IndexOf("://"); if (index < 0) //Ver5.0.0-a8 return false; //(�O��) "http" var protocolStr = str.Substring(0, index); if (protocolStr.ToLower() == "ftp") { Protocol = ProxyProtocol.Ftp;//�v���g�R����FTP�ɏC�� Port = 21;//FTP�ڑ��̃f�t�H���g�̃|�[�g�ԍ���21�ɂȂ� } else if(protocolStr.ToLower() != "http") { //Ver5.6.7 //Msg.Show(MsgKind.Error,"�v�G���[�@Request.Recv()"); //�G���[�\����|�b�v�A�b�v���烍�O�ɕύX logger.Set(LogKind.Error, tcpObj, 29, string.Format("protocolStr={0}", protocolStr)); return false; } else { Protocol = ProxyProtocol.Http; } //(�㔼) "hostname:port@user:pass/path/filename.ext?param" str = str.Substring(index + 3); } //(�ŏ���"/"�ŕ�������)�@"hostname:port@user:pass <=> /path/filename.ext?param" index = str.IndexOf('/'); HostName = str; if (0 <= index) { //(�O��) ""hostname:port@user:pass" HostName = str.Substring(0, index); //(�㔼) "/path/filename.ext?param" str = str.Substring(index); } else { // GET http://hostname HTTP/1.0 �̂悤�ɁA���[�g�f�B���N�g�����w�肳��Ă��Ȃ��ꍇ�̑Ώ� str = "/"; } //�z�X�g�������Ƀ��[�U���F�p�X���[�h�������Ă���ꍇ�̏��� index = HostName.IndexOf("@"); if (0 <= index) { var userpass = HostName.Substring(0,index); //���[�U���F�p�X���[�h��j������ HostName = HostName.Substring(index + 1); var i = userpass.IndexOf(':'); if(i == -1) { User = userpass; } else { User = userpass.Substring(0,i); Pass = userpass.Substring(i + 1); } } //Ver5.1.2 IPv6�A�h���X�\�L�̃z�X�g���ɑΉ� var tmp = HostName.Split(new[] { '[',']' }); if(tmp.Length == 3) {//IPv6�A�h���X�\�L�ł���Ɣ��f���� HostName = string.Format("[{0}]",tmp[1]); index = tmp[2].IndexOf(":"); if(0 <= index) { var s = tmp[2].Substring(index + 1); Port = Convert.ToInt32(s); } }else{ //�z�X�g�������Ƀ|�[�g�ԍ��������Ă���ꍇ�̏��� index = HostName.IndexOf(":"); if (0 <= index) { var s = HostName.Substring(index + 1); Port = Convert.ToInt32(s); HostName = HostName.Substring(0, index); } } Uri = str; //CGI���� if(-1!=Uri.LastIndexOf('?')) Cgi=true; //�g���q�擾 if (!Cgi) { index = Uri.LastIndexOf('/'); if (index != -1) str = Uri.Substring(index + 1); index = str.LastIndexOf('.'); if (index != -1) { Ext = str.Substring(index + 1); } } return true; }
//Dat dat==null で初期化された場合、全てenableNumで指定したものになる //dat=null enableNum=0(不許可) => All Deny //dat=null enableNum=1(許可) => All Allow public AclList(IEnumerable<OneDat> dat, int enableNum, Logger logger) { _enable = (enableNum == 1); _logger = logger; if (dat == null){ return; } foreach (var o in dat){ if (!o.Enable){ continue; } //有効なデータだけを対象にする var name = o.StrList[0]; var ipStr = o.StrList[1]; if (ipStr == "*"){ //全部 try{ var acl = new AclV4(name, ipStr); _arV4.Add(acl); } catch (ValidObjException){ logger.Set(LogKind.Error, null, 9000034, string.Format("Name:{0} Address {1}", name, ipStr)); } try{ var acl = new AclV6(name, ipStr); _arV6.Add(acl); } catch (ValidObjException){ logger.Set(LogKind.Error, null, 9000034, string.Format("Name:{0} Address {1}", name, ipStr)); } } else{ //IPv4指定かどうかの判断 var isV4 = true; foreach (var c in ipStr){ if (char.IsNumber(c)){ continue; } if (c=='*' || c=='.' || c=='/' || c=='-'){ continue; } isV4 = false; break; } if (isV4){ //IPv4ルール try{ var acl = new AclV4(name, ipStr); _arV4.Add(acl); } catch (ValidObjException){ logger.Set(LogKind.Error, null, 9000034, string.Format("Name:{0} Address {1}", name, ipStr)); } } else{ //IPv6指定かどうかの判断 var isV6 = true; foreach (var c in ipStr) { if (char.IsNumber(c)) { continue; } if (c == '*' || c == ':' || c == '[' || c == ']' || c == '-') { continue; } isV6 = false; break; } if (isV6){ //IPv6ルール try{ var acl = new AclV6(name, ipStr); _arV6.Add(acl); } catch (ValidObjException){ logger.Set(LogKind.Error, null, 9000034, string.Format("Name:{0} Address {1}", name, ipStr)); } }else{ //FQDN指定と判断する _arFqdnAcls.Add(new FqdnAcl(name,ipStr)); } } } } }
//通常はこれを使用する public bool Recv(SockTcp sockTcp, int sec,Logger logger, ILife iLife) { var dtLast = DateTime.Now; //受信が20秒無かった場合は、処理を中断する while (iLife.IsLife()){ if (dtLast.AddSeconds(sec) < DateTime.Now){ return false; //タイムアウト } var len = sockTcp.Length(); if (len == 0){ continue; } var buf = sockTcp.Recv(len, sec, iLife); if (buf == null){ return false; //切断された } dtLast = DateTime.Now; var recvStatus = Append(buf); if (recvStatus == RecvStatus.Limit){ //サイズ制限 if (logger != null){ logger.Set(LogKind.Secure, sockTcp, 7, string.Format("Limit:{0}KByte", _sizeLimit)); } sockTcp.AsciiSend("552 Requested mail action aborted: exceeded storage allocation"); return false; } if (recvStatus == RecvStatus.Finish){ return true; } } return false; }
//���惊�X�g�̕ϊ� //�e�X�g�p logger��null�ł�� /*public RcptList Reflection(RcptList rcptList, Logger logger) { var ret = new RcptList(); foreach(var mailAddress in rcptList){ string buffer; if (mailAddress.IsLocal(_domainList) && _ar.TryGetValue(mailAddress.User, out buffer)) { var lines = buffer.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach(var line in lines) { if (logger != null){ logger.Set(LogKind.Normal, null, 27, string.Format("{0} -> {1}", mailAddress, line)); } ret.Add(new MailAddress(line)); } }else{ ret.Add(mailAddress); } } return ret; }*/ public List<MailAddress> Reflection(List<MailAddress> list, Logger logger) { System.Diagnostics.Debug.Assert(logger != null, "logger != null"); //var ret = new RcptList(); var ret = new List<MailAddress>(); foreach (var mailAddress in list) { string buffer; if (mailAddress.IsLocal(_domainList) && _ar.TryGetValue(mailAddress.User, out buffer)) { var lines = buffer.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { logger.Set(LogKind.Normal, null, 27, string.Format("{0} -> {1}", mailAddress, line)); ret.Add(new MailAddress(line)); } } else { ret.Add(mailAddress); } } return ret; }
//IPアドレスからホスト名を検索する(逆引き) //return 取得したIPアドレスの配列 検索に失敗した場合、検索した文字列がそのまま返される public String GetHostName(IPAddress ipaddress, Logger logger) { lock (this){ String ipStr = ipaddress.ToString(); if (ipStr[0] == '/'){ ipStr = ipStr.Substring(1); } foreach (OneDnsCache oneDnsCache in ar){ foreach (Ip ip in oneDnsCache.IpList){ if (ip.ToString() == ipStr){ return oneDnsCache.Name; } } } RemoveOldCache(); //古いものを整理する //DNSに問い合わせる //String hostName = ipaddress.ToString();//.getHostName(); var hostName = ""; try{ var hostInfo = Dns.GetHostByAddress(ipaddress.ToString()); hostName = hostInfo.HostName; } catch{ hostName = ipaddress.ToString(); } if (hostName == ipStr){ if (logger != null){ logger.Set(LogKind.Normal, null, 9000052, string.Format("IP={0}", ipStr)); } } //データベースへの追加 Ip[] ipList = new Ip[1]; try{ ipList[0] = new Ip(ipStr); } catch (ValidObjException e){ //ここで失敗するのはおかしい Util.RuntimeException(string.Format("new Ip({0}) => ValidObjException ({1})", ipStr,e.Message)); } ar.Add(new OneDnsCache(hostName, ipList)); return hostName; } }
//TODO メソッドの配置はここでよいか? public void Resolve(bool useResolve, Logger logger) { if (useResolve){ RemoteHostname = "resolve error!"; try{ RemoteHostname = Kernel.DnsCache.GetHostName(RemoteAddress.Address, Kernel.CreateLogger("SockObj", true, null)); } catch (Exception ex){ logger.Set(LogKind.Error, null, 9000053, ex.Message); } } else{ String ipStr = RemoteAddress.Address.ToString(); if (ipStr[0] == '/'){ ipStr = ipStr.Substring(1); } RemoteHostname = ipStr; } }