public void Run(object state) { try { if (Enclosing_Instance.State == DNSState.ANNOUNCED) { if (count++ < 3 && !info.HasData) { long now = (DateTime.Now.Ticks - 621355968000000000) / 10000; DNSOutgoing out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); out_Renamed.AddQuestion(new DNSQuestion(info.QualifiedName, DNSConstants.TYPE_SRV, DNSConstants.CLASS_IN)); out_Renamed.AddQuestion(new DNSQuestion(info.QualifiedName, DNSConstants.TYPE_TXT, DNSConstants.CLASS_IN)); if (info.server != null) { out_Renamed.AddQuestion(new DNSQuestion(info.server, DNSConstants.TYPE_A, DNSConstants.CLASS_IN)); } out_Renamed.AddAnswer((DNSRecord) Enclosing_Instance.Cache.get_Renamed(info.QualifiedName, DNSConstants.TYPE_SRV, DNSConstants.CLASS_IN), now); out_Renamed.AddAnswer((DNSRecord) Enclosing_Instance.Cache.get_Renamed(info.QualifiedName, DNSConstants.TYPE_TXT, DNSConstants.CLASS_IN), now); if (info.server != null) { out_Renamed.AddAnswer((DNSRecord) Enclosing_Instance.Cache.get_Renamed(info.server, DNSConstants.TYPE_A, DNSConstants.CLASS_IN), now); } Enclosing_Instance.Send(out_Renamed); } else { // After three queries, we can quit. // TODO: can omit cancel()? //cancel(); Enclosing_Instance.RemoveListener(info); } ; } else if (Enclosing_Instance.State == DNSState.CANCELED) { // TODO: can omit cancel?? //cancel(); Enclosing_Instance.RemoveListener(info); } } catch (Exception e) { logger.Warn("run() exception ", e); Enclosing_Instance.Recover(); } }
public void Run(object state) { try { if (Enclosing_Instance.State == DNSState.ANNOUNCED) { if (count++ < 3 && !info.HasData) { long now = (DateTime.Now.Ticks - 621355968000000000) / 10000; DNSOutgoing out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); out_Renamed.AddQuestion(new DNSQuestion(info.QualifiedName, DNSConstants.TYPE_SRV, DNSConstants.CLASS_IN)); out_Renamed.AddQuestion(new DNSQuestion(info.QualifiedName, DNSConstants.TYPE_TXT, DNSConstants.CLASS_IN)); if (info.server != null) { out_Renamed.AddQuestion(new DNSQuestion(info.server, DNSConstants.TYPE_A, DNSConstants.CLASS_IN)); } out_Renamed.AddAnswer((DNSRecord)Enclosing_Instance.Cache.get_Renamed(info.QualifiedName, DNSConstants.TYPE_SRV, DNSConstants.CLASS_IN), now); out_Renamed.AddAnswer((DNSRecord)Enclosing_Instance.Cache.get_Renamed(info.QualifiedName, DNSConstants.TYPE_TXT, DNSConstants.CLASS_IN), now); if (info.server != null) { out_Renamed.AddAnswer((DNSRecord)Enclosing_Instance.Cache.get_Renamed(info.server, DNSConstants.TYPE_A, DNSConstants.CLASS_IN), now); } Enclosing_Instance.Send(out_Renamed); } else { // After three queries, we can quit. // TODO: can omit cancel()? //cancel(); Enclosing_Instance.RemoveListener(info); } ; } else if (Enclosing_Instance.State == DNSState.CANCELED) { // TODO: can omit cancel?? //cancel(); Enclosing_Instance.RemoveListener(info); } } catch (Exception e) { logger.Warn("run() exception ", e); Enclosing_Instance.Recover(); } }
public void Run(object state) { try { if (Enclosing_Instance.State == DNSState.ANNOUNCED) { if (count++ < 3) { logger.Debug("run() JmDNS querying service"); long now = (DateTime.Now.Ticks - 621355968000000000) / 10000; DNSOutgoing out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); out_Renamed.AddQuestion(new DNSQuestion(type, DNSConstants.TYPE_PTR, DNSConstants.CLASS_IN)); foreach (ServiceInfo info in Enclosing_Instance.services.Values) { try { out_Renamed.AddAnswer(new Pointer(info.type, DNSConstants.TYPE_PTR, DNSConstants.CLASS_IN, DNSConstants.DNS_TTL, info.QualifiedName), now); } catch { break; } } Enclosing_Instance.Send(out_Renamed); } else { // After three queries, we can quit. // TODO: can omit? //cancel(); } ; } else if (Enclosing_Instance.State == DNSState.CANCELED) { // TODO: can omit? //cancel(); } } catch (Exception e) { logger.Warn("run() exception ", e); Enclosing_Instance.Recover(); } }
public void Run(object state) { try { if (Enclosing_Instance.State == DNSState.ANNOUNCED) { if (count++ < 3) { logger.Debug("run() JmDNS querying service"); long now = (DateTime.Now.Ticks - 621355968000000000) / 10000; DNSOutgoing out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); out_Renamed.AddQuestion(new DNSQuestion(type, DNSConstants.TYPE_PTR, DNSConstants.CLASS_IN)); foreach (ServiceInfo info in Enclosing_Instance.services.Values) { try { out_Renamed.AddAnswer(new Pointer(info.type, DNSConstants.TYPE_PTR, DNSConstants.CLASS_IN, DNSConstants.DNS_TTL, info.QualifiedName), now); } catch { break; } } Enclosing_Instance.Send(out_Renamed); } else { // After three queries, we can quit. // TODO: can omit? //cancel(); } ; } else if (Enclosing_Instance.State == DNSState.CANCELED) { // TODO: can omit? //cancel(); } } catch (Exception e) { logger.Warn("run() exception ", e); Enclosing_Instance.Recover(); } }
public void Run(object state) { try { if (Enclosing_Instance.State == DNSState.ANNOUNCED) { if (++count < 3) { logger.Debug("run() JmDNS querying type"); DNSOutgoing out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); out_Renamed.AddQuestion(new DNSQuestion("_services._mdns._udp.local.", DNSConstants.TYPE_PTR, DNSConstants.CLASS_IN)); foreach (string s in Enclosing_Instance.serviceTypes.Values) { out_Renamed.AddAnswer(new Pointer("_services._mdns._udp.local.", DNSConstants.TYPE_PTR, DNSConstants.CLASS_IN, DNSConstants.DNS_TTL, s), 0); } Enclosing_Instance.Send(out_Renamed); } else { // After three queries, we can quit. // TODO: can we omit this? //cancel(); } ; } else if (Enclosing_Instance.State == DNSState.CANCELED) { // TODO: can omit this? //cancel(); } } catch (Exception e) { logger.Warn("run() exception ", e); Enclosing_Instance.Recover(); } }
public void Run(object state) { try { if (Enclosing_Instance.State == DNSState.ANNOUNCED) { if (++count < 3) { logger.Debug("run() JmDNS querying type"); DNSOutgoing out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); out_Renamed.AddQuestion(new DNSQuestion("_services._mdns._udp.local.", DNSConstants.TYPE_PTR, DNSConstants.CLASS_IN)); foreach (string s in Enclosing_Instance.serviceTypes.Values) { out_Renamed.AddAnswer(new Pointer("_services._mdns._udp.local.", DNSConstants.TYPE_PTR, DNSConstants.CLASS_IN, DNSConstants.DNS_TTL, s), 0); } Enclosing_Instance.Send(out_Renamed); } else { // After three queries, we can quit. // TODO: can we omit this? //cancel(); } ; } else if (Enclosing_Instance.State == DNSState.CANCELED) { // TODO: can omit this? //cancel(); } } catch (Exception e) { logger.Warn("run() exception ", e); Enclosing_Instance.Recover(); } }
public void Run(object state) { lock (Enclosing_Instance.IOLock) { DNSOutgoing out_Renamed = null; try { // send probes for JmDNS itself if (Enclosing_Instance.State == taskState && Enclosing_Instance.Task == this) { if (out_Renamed == null) { out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); } out_Renamed.AddQuestion(new DNSQuestion(Enclosing_Instance.localHost.Name, DNSConstants.TYPE_ANY, DNSConstants.CLASS_IN)); DNSRecord answer = Enclosing_Instance.localHost.DNS4AddressRecord; if (answer != null) out_Renamed.AddAuthorativeAnswer(answer); answer = Enclosing_Instance.localHost.DNS6AddressRecord; if (answer != null) out_Renamed.AddAuthorativeAnswer(answer); Enclosing_Instance.AdvanceState(); } // send probes for services // Defensively copy the services into a local list, // to prevent race conditions with methods registerService // and unregisterService. IList list; lock (Enclosing_Instance) { list = new ArrayList(Enclosing_Instance.services.Values); } foreach (ServiceInfo info in list) { lock (info) { if (info.State == taskState && info.task == this) { info.AdvanceState(); logger.Info("run() JmDNS probing " + info.QualifiedName + " state " + info.State); if (out_Renamed == null) { out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); out_Renamed.AddQuestion(new DNSQuestion(info.QualifiedName, DNSConstants.TYPE_ANY, DNSConstants.CLASS_IN)); } out_Renamed.AddAuthorativeAnswer(new Service(info.QualifiedName, DNSConstants.TYPE_SRV, DNSConstants.CLASS_IN, DNSConstants.DNS_TTL, info.priority, info.weight, info.port, info.server)); } } } if (out_Renamed != null) { logger.Debug("run() JmDNS probing #" + taskState); Enclosing_Instance.Send(out_Renamed); } else { // If we have nothing to send, another timer taskState ahead // of us has done the job for us. We can cancel. cancel(); return ; } } catch (Exception e) { logger.Warn("run() exception ", e); Enclosing_Instance.Recover(); } taskState = taskState.Advance(); if (!taskState.Probing) { cancel(); new Announcer(enclosingInstance).start(); } } }
public void Run(object state) { lock (Enclosing_Instance.IOLock) { DNSOutgoing out_Renamed = null; try { // send probes for JmDNS itself if (Enclosing_Instance.State == taskState && Enclosing_Instance.Task == this) { if (out_Renamed == null) { out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); } out_Renamed.AddQuestion(new DNSQuestion(Enclosing_Instance.localHost.Name, DNSConstants.TYPE_ANY, DNSConstants.CLASS_IN)); DNSRecord answer = Enclosing_Instance.localHost.DNS4AddressRecord; if (answer != null) { out_Renamed.AddAuthorativeAnswer(answer); } answer = Enclosing_Instance.localHost.DNS6AddressRecord; if (answer != null) { out_Renamed.AddAuthorativeAnswer(answer); } Enclosing_Instance.AdvanceState(); } // send probes for services // Defensively copy the services into a local list, // to prevent race conditions with methods registerService // and unregisterService. IList list; lock (Enclosing_Instance) { list = new ArrayList(Enclosing_Instance.services.Values); } foreach (ServiceInfo info in list) { lock (info) { if (info.State == taskState && info.task == this) { info.AdvanceState(); logger.Info("run() JmDNS probing " + info.QualifiedName + " state " + info.State); if (out_Renamed == null) { out_Renamed = new DNSOutgoing(DNSConstants.FLAGS_QR_QUERY); out_Renamed.AddQuestion(new DNSQuestion(info.QualifiedName, DNSConstants.TYPE_ANY, DNSConstants.CLASS_IN)); } out_Renamed.AddAuthorativeAnswer(new Service(info.QualifiedName, DNSConstants.TYPE_SRV, DNSConstants.CLASS_IN, DNSConstants.DNS_TTL, info.priority, info.weight, info.port, info.server)); } } } if (out_Renamed != null) { logger.Debug("run() JmDNS probing #" + taskState); Enclosing_Instance.Send(out_Renamed); } else { // If we have nothing to send, another timer taskState ahead // of us has done the job for us. We can cancel. cancel(); return; } } catch (Exception e) { logger.Warn("run() exception ", e); Enclosing_Instance.Recover(); } taskState = taskState.Advance(); if (!taskState.Probing) { cancel(); new Announcer(enclosingInstance).start(); } } }