/// <inheritdoc /> public override IEnumerable <MultiAddress> GetAddresses(Message message) { var qsn = ServiceName + ".local"; var peerNames = message.Answers .OfType <PTRRecord>() .Where(a => DnsObject.NamesEquals(a.Name, qsn)) .Select(a => a.DomainName); foreach (var name in peerNames) { var id = name.Split('.')[0]; var srv = message.Answers .OfType <SRVRecord>() .First(r => DnsObject.NamesEquals(r.Name, name)); var aRecords = message.Answers .OfType <ARecord>() .Where(a => DnsObject.NamesEquals(a.Name, name) || DnsObject.NamesEquals(a.Name, srv.Target)); foreach (var a in aRecords) { yield return(new MultiAddress($"/ip4/{a.Address}/tcp/{srv.Port}/ipfs/{id}")); } var aaaaRecords = message.Answers .OfType <AAAARecord>() .Where(a => DnsObject.NamesEquals(a.Name, name) || DnsObject.NamesEquals(a.Name, srv.Target)); foreach (var a in aaaaRecords) { yield return(new MultiAddress($"/ip6/{a.Address}/tcp/{srv.Port}/ipfs/{id}")); } } }
public void SetDNS(DnsObject dnsObject = null) { string[] dnsArray = null; if (dnsObject != null) { // The FirstAddress property is required. SecondAddress property is optional. if (string.IsNullOrEmpty(dnsObject.FirstAddress)) { var exception = new ArgumentException("The first DNS address is required."); _logger.LogException(exception); throw exception; } var dnsList = new List <string>() { dnsObject.FirstAddress }; if (!string.IsNullOrEmpty(dnsObject.SecondAddress)) { dnsList.Add(dnsObject.SecondAddress); } dnsArray = dnsList.ToArray(); } using (var mc = new ManagementClass(Path)) { using (var moCollection = mc.GetInstances()) { var managementObjList = moCollection.OfType <ManagementObject>() .Where(mo => (bool)mo[IPEnabled]); foreach (var mo in managementObjList) { using (var managementBaseObj = mo.GetMethodParameters(SetDNSServerSearchOrder)) { managementBaseObj[DNSServerSearchOrder] = dnsArray; mo.InvokeMethod(SetDNSServerSearchOrder, managementBaseObj, null); } string caption = mo["Caption"].ToString(); _logger.LogInfo($"DNS values for device '{caption}' is modified."); } } } }