public DDNSServer(string configFileName) : base() { try { this.configFileName = configFileName; //IO.MakeDir(logDir); //lastFlashDateTime = DateTime.Now; //log = new FileLogger(logDir); string dbConnectStr = Ini["DbConnectString"].StrValue; int portNumber = (int)Ini["Port"].IntValue; if (portNumber == 0) { portNumber = Consts.Ports.Dns; } this.hc = new HostsCache(dbConnectStr); this.server = new EasyDnsServer(new EasyDnsServerSetting(ProcessQueryList, portNumber)); var opt = this.server.GetCurrentDynOptions(); opt.ParseUdpProxyProtocolV2 = true; this.server.SetCurrentDynOptions(opt); } catch { this._DisposeSafe(); throw; } }
List <DnsUdpPacket> ProcessQueryList(EasyDnsServer dnsServer, List <DnsUdpPacket> requestList) { List <DnsUdpPacket> replyList = new List <DnsUdpPacket>(requestList.Count); foreach (var request in requestList) { try { var reply = this.processDnsQuery(request.Message, request.RemoteEndPoint.Address); if (reply == null) { // エラー発生 DnsMessage?q = request.Message as DnsMessage; if (q != null) { q.IsQuery = false; q.ReturnCode = ReturnCode.ServerFailure; q.IsRecursionAllowed = false; reply = q; } } if (reply != null) { replyList.Add(new DnsUdpPacket(request.RemoteEndPoint, request.LocalEndPoint, reply)); } } catch (Exception ex) { ex._Debug(); } } return(replyList); }