Example #1
0
        /// <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.");
                    }
                }
            }
        }