/// <summary> Handle an incoming query. See if we can answer any part of it /// given our service infos. /// </summary> internal void HandleQuery(DNSIncoming in_Renamed, IPAddress addr, int port) { // Track known answers bool hostConflictDetected = false; bool serviceConflictDetected = false; long expirationTime = (DateTime.Now.Ticks - 621355968000000000) / 10000 + DNSConstants.KNOWN_ANSWER_TTL; foreach (DNSRecord answer in in_Renamed.answers) { if ((answer.GetEntryType() == DNSConstants.TYPE_A) || (answer.GetEntryType() == DNSConstants.TYPE_AAAA)) { hostConflictDetected |= answer.HandleQuery(this, expirationTime); } else { serviceConflictDetected |= answer.HandleQuery(this, expirationTime); } } if (plannedAnswer != null) { plannedAnswer.Append(in_Renamed); } else { if (in_Renamed.Truncated) { plannedAnswer = in_Renamed; } new Responder(this, in_Renamed, addr, port).start(); } if (hostConflictDetected || serviceConflictDetected) { new Prober(this).start(); } }