Exemple #1
0
        internal override bool HandleResponse(mDNS dns)
        {
            ServiceInfo info = (ServiceInfo)dns.services[name.ToLower()];

            if (info != null && (port != info.port || !server.ToUpper().Equals(dns.LocalHost.Name.ToUpper())))
            {
                logger.Debug("handleResponse() Denial detected");

                if (info.State.Probing)
                {
                    string oldName = info.QualifiedName.ToLower();
                    info.SetName(dns.IncrementName(info.getName()));
                    dns.services.Remove(oldName);
                    dns.services[info.QualifiedName.ToLower()] = info;
                    logger.Debug("handleResponse() New unique name chose:" + info.getName());
                }
                info.RevertState();
                return(true);
            }
            return(false);
        }
Exemple #2
0
        internal override bool HandleQuery(mDNS dns, long expirationTime)
        {
            ServiceInfo info = (ServiceInfo)dns.services[name.ToLower()];

            if (info != null && (port != info.port || !server.ToUpper().Equals(dns.LocalHost.Name.ToUpper())))
            {
                logger.Debug("handleQuery() Conflicting probe detected");

                // Tie breaker test
                if (info.State.Probing && lexCompare(new Service(info.QualifiedName, DNSConstants.TYPE_SRV, DNSConstants.CLASS_IN | DNSConstants.CLASS_UNIQUE, DNSConstants.DNS_TTL, info.priority, info.weight, info.port, dns.LocalHost.Name)) >= 0)
                {
                    // We lost the tie break
                    string oldName = info.QualifiedName.ToLower();
                    info.SetName(dns.IncrementName(info.getName()));
                    dns.services.Remove(oldName);
                    dns.services[info.QualifiedName.ToLower()] = info;
                    logger.Debug("handleQuery() Lost tie break: new unique name chosen:" + info.getName());
                }
                info.RevertState();
                return(true);
            }
            return(false);
        }