public static DNSServerModel FromServer(DNSManagement.Server server) { var model = new DNSServerModel(); model.ServerName = server.Name; model.ServerIPAddresses = server.ServerAddresses; model.ListenAddresses = server.ListenAddresses; model.Forwarders = ResolvedServer.FromIPs(server.Forwarders); model.IsSlave = server.IsSlave; model.Version = server.Version.ToString(); model.NoRecursion = server.NoRecursion; model.BindSecondaries = server.BindSecondaries; model.StrictFileParsing = server.StrictFileParsing; model.RoundRobin = server.RoundRobin; model.LocalNetPriority = server.LocalNetPriority; model.SecureResponses = server.SecureResponses; model.NameCheckFlag = server.NameCheckFlag; model.BootMethod = server.BootMethod; model.ScavengingInterval = server.ScavengingInterval; model.LogLevel = server.LogLevel; model.LogIPFilterList = server.LogIPFilterList; model.LogFilePath = server.LogFilePath; model.LogFileMaxSize = server.LogFileMaxSize; model.EventLogLevel = server.EventLogLevel; //convert root hints to list for display List <ResolvedServer> roothintslist = new List <ResolvedServer>(); var rhints = server.GetRootHints(); foreach (var rh in rhints) { var records = rh.GetRecords(); foreach (var r in records.Where(i => i.DomainName == "..RootHints")) { if (r.ResourceRecordType != DNSManagement.RR.ResourceRecord.ResourceRecordEnum.NS) { continue; } var ns = ((DNSManagement.RR.NSType)r.UnderlyingRecord); var nsa = (records.Where(i => i.RecordType == typeof(DNSManagement.RR.AType) && ((DNSManagement.RR.AType)i.UnderlyingRecord).OwnerName == ns.NSHost)).Select(i => ((DNSManagement.RR.AType)i).IPAddress).ToList(); nsa.AddRange((records.Where(i => i.RecordType == typeof(DNSManagement.RR.AAAAType) && ((DNSManagement.RR.AAAAType)i.UnderlyingRecord).OwnerName == ns.NSHost)).Select(i => ((DNSManagement.RR.AAAAType)i).IPv6Address).ToArray()); roothintslist.Add(new ResolvedServer { ServerName = ns.NSHost, IPAddress = string.Join(", ", nsa.ToArray()) }); } } model.RootHints = roothintslist.ToArray(); return(model); }
public static DNSServerModel FromServer(DNSManagement.Server server) { var model = new DNSServerModel(); model.ServerName = server.Name; model.ServerIPAddresses = server.ServerAddresses; model.ListenAddresses = server.ListenAddresses; model.Forwarders = ResolvedServer.FromIPs(server.Forwarders); model.IsSlave = server.IsSlave; model.Version = server.Version.ToString(); model.NoRecursion = server.NoRecursion; model.BindSecondaries = server.BindSecondaries; model.StrictFileParsing = server.StrictFileParsing; model.RoundRobin = server.RoundRobin; model.LocalNetPriority = server.LocalNetPriority; model.SecureResponses = server.SecureResponses; model.NameCheckFlag = server.NameCheckFlag; model.BootMethod = server.BootMethod; model.ScavengingInterval = server.ScavengingInterval; model.LogLevel = server.LogLevel; model.LogIPFilterList = server.LogIPFilterList; model.LogFilePath = server.LogFilePath; model.LogFileMaxSize = server.LogFileMaxSize; model.EventLogLevel = server.EventLogLevel; //convert root hints to list for display List<ResolvedServer> roothintslist = new List<ResolvedServer>(); var rhints = server.GetRootHints(); foreach (var rh in rhints) { var records = rh.GetRecords(); foreach (var r in records.Where(i => i.DomainName == "..RootHints")) { if (r.ResourceRecordType != DNSManagement.RR.ResourceRecord.ResourceRecordEnum.NS) continue; var ns = ((DNSManagement.RR.NSType)r.UnderlyingRecord); var nsa = (records.Where(i=>i.RecordType == typeof(DNSManagement.RR.AType) && ((DNSManagement.RR.AType)i.UnderlyingRecord).OwnerName == ns.NSHost)).Select(i=>((DNSManagement.RR.AType)i).IPAddress).ToList(); nsa.AddRange((records.Where(i => i.RecordType == typeof(DNSManagement.RR.AAAAType) && ((DNSManagement.RR.AAAAType)i.UnderlyingRecord).OwnerName == ns.NSHost)).Select(i=>((DNSManagement.RR.AAAAType)i).IPv6Address).ToArray()); roothintslist.Add(new ResolvedServer { ServerName = ns.NSHost, IPAddress = string.Join(", ", nsa.ToArray()) }); } } model.RootHints = roothintslist.ToArray(); return model; }