Esempio n. 1
0
		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();
			}
		}
Esempio n. 2
0
 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();
     }
 }
Esempio n. 3
0
 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();
     }
 }
Esempio n. 4
0
		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();
			}
		}
Esempio n. 5
0
 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();
     }
 }
Esempio n. 6
0
		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();
			}
		}
Esempio n. 7
0
		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();
				}
			}
		}
Esempio n. 8
0
        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();
                }
            }
        }