Ejemplo n.º 1
0
        public MdnsRecord Query(string serviceName)
        {
            byte[] data = MdnsQuery.Create(serviceName);

            var        _client = CreateClient();
            MdnsRecord rec     = null;
            bool       worked  = false;

            _client.Send(data, data.Length, new IPEndPoint(IPAddress.Parse(MdnsListener.MDNS_IP), MdnsListener.MDNS_PORT));

            while (!worked)
            {
                try
                {
                    var    endpoint = new IPEndPoint(IPAddress.Any, MdnsListener.MDNS_PORT);
                    byte[] qData    = _client.Receive(ref endpoint);
                    var    record   = new MdnsRecord(qData);
                    if (record.Domain.Replace(".local", "") == serviceName)
                    {
                        rec    = record;
                        worked = true;
                    }
                }
                catch { }
            }
            return(rec);
        }
Ejemplo n.º 2
0
        private GlobalRecord CreateMyRecord()
        {
            string myname = "_mdns._http";
            string serv   = Environment.MachineName;
            short  port   = (short)manager.Port;

            System.Net.IPAddress ip = null;

            foreach (var iface in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
            {
                if (iface.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up)
                {
                    try
                    {
                        var prop = iface.GetIPProperties();
                        foreach (var addr in prop.UnicastAddresses)
                        {
                            if (addr.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                            {
                                ip = addr.Address;
                                break;
                            }
                        }
                    }
                    catch { }
                }
            }
            if (ip == null)
            {
                ip = System.Net.IPAddress.Loopback;
            }
            var record = new MdnsRecord(myname, serv, port, ip);

            return(new GlobalRecord(record, MY_SETTINGS));
        }
Ejemplo n.º 3
0
        void manager_RecordAdded(MdnsRecord record)
        {
            var glob = new GlobalRecord(record);

            allRecords.Add(glob);
            mdns.ResolverDatabase.Add(record.Domain, record);
            recordMan.SaveRecord(glob);
        }
Ejemplo n.º 4
0
        public string AddRecord(MdnsRecord record)
        {
            dynamic doc = new System.Dynamic.ExpandoObject();

            doc.name    = record.Name;
            doc.port    = record.Port.ToString();
            doc.ip      = record.IP.ToString();
            doc.service = record.Domain;
            string json = JsonConvert.SerializeObject(doc);

            using (var client = new WebClient())
            {
                var response = client.UploadData(EndpointUrl + "AddRecord", Encoding.ASCII.GetBytes(json));

                return(Encoding.Default.GetString(response));
            }
        }
Ejemplo n.º 5
0
        public List <MdnsRecord> QueryAll(string serviceName, int timeout)
        {
            byte[] payload = MdnsQuery.Create(serviceName);
            var    _client = CreateClient();


            List <MdnsRecord> records = new List <MdnsRecord>();
            bool KeepSearching        = true;
            var  now = DateTime.Now;

            var queryThread = new System.Threading.Thread(() =>
            {
                _client.Send(payload, payload.Length, new IPEndPoint(IPAddress.Parse(MdnsListener.MDNS_IP), MdnsListener.MDNS_PORT));

                while (KeepSearching)
                {
                    try
                    {
                        var endpoint   = new IPEndPoint(IPAddress.Any, MdnsListener.MDNS_PORT);
                        byte[] recData = _client.Receive(ref endpoint);
                        var record     = new MdnsRecord(recData);
                        if (record.Domain.Replace(".local", "") == serviceName)
                        {
                            records.Add(record);
                        }
                    }
                    catch { }
                }
            });

            queryThread.Start();

            while ((DateTime.Now - now).TotalSeconds < timeout)
            {
                ;
            }

            try
            {
                queryThread.Abort();
                queryThread = null;
            }
            catch {}
            return(new List <MdnsRecord>(records));
        }
Ejemplo n.º 6
0
        public async Task <MdnsRecord> QueryAsync(string serviceName)
        {
            byte[] data = MdnsQuery.Create(serviceName);

            var _client = CreateClient();


            MdnsRecord rec = null;

            await Task.Factory.StartNew(() =>
            {
                bool worked = false;
                _client.Send(data, data.Length, new IPEndPoint(IPAddress.Parse(MdnsListener.MDNS_IP), MdnsListener.MDNS_PORT));
                DateTime now = DateTime.Now;
                while (!worked)
                {
                    try
                    {
                        var endpoint = new IPEndPoint(IPAddress.Any, MdnsListener.MDNS_PORT);
                        byte[] qData = _client.Receive(ref endpoint);
                        var record   = new MdnsRecord(qData);
                        if (record.Domain.Replace(".local", "") == serviceName)
                        {
                            rec    = record;
                            worked = true;
                        }
                    }
                    catch { }
                }
            });


            if (rec == null)
            {
                throw new Exception("The timeout period was exceeded while waiting for a response for \"" + serviceName + "\".");
            }

            return(rec);
        }
Ejemplo n.º 7
0
 public void SendResponse(IPEndPoint endpoint, MdnsRecord record)
 {
     byte[] payload = record.ToPayload();
     _client.Send(payload, payload.Length, new IPEndPoint(_ip, MDNS_PORT));
 }
Ejemplo n.º 8
0
 public GlobalRecord(MdnsRecord record, Guid id)
 {
     this.Record = record;
     this.ID     = id;
 }
Ejemplo n.º 9
0
 public GlobalRecord(MdnsRecord record)
 {
     this.ID     = Guid.NewGuid();
     this.Record = record;
 }