// Copyright 2003-2005 Arthur van Hoff, Rick Blair // Licensed under Apache License version 2.0 // Original license LGPL package javax.jmdns.impl.tasks.resolver; import java.io.IOException; import javax.jmdns.impl.DNSOutgoing; import javax.jmdns.impl.DNSQuestion; import javax.jmdns.impl.DNSRecord; import javax.jmdns.impl.JmDNSImpl; import javax.jmdns.impl.JmDNSImpl.ServiceTypeEntry; import javax.jmdns.impl.constants.DNSConstants; import javax.jmdns.impl.constants.DNSRecordClass; import javax.jmdns.impl.constants.DNSRecordType; /** * Helper class to resolve service types. * <p/> * The TypeResolver queries three times consecutively for service types, and then removes itself from the timer. * <p/> * The TypeResolver will run only if JmDNS is in state ANNOUNCED. */ public class TypeResolver extends DNSResolverTask { /** * @param jmDNSImpl */ public TypeResolver(JmDNSImpl jmDNSImpl) { super(jmDNSImpl); } /* * (non-Javadoc) * @see javax.jmdns.impl.tasks.DNSTask#getName() */ @Override public String getName() { return "TypeResolver(" + (this.getDns() != null ? this.getDns().getName() : "") + ")"; } /* * (non-Javadoc) * @see javax.jmdns.impl.tasks.Resolver#addAnswers(javax.jmdns.impl.DNSOutgoing) */ @Override protected DNSOutgoing addAnswers(DNSOutgoing out) throws IOException { DNSOutgoing newOut = out; long now = System.currentTimeMillis(); for (String type : this.getDns().getServiceTypes().keySet()) { ServiceTypeEntry typeEntry = this.getDns().getServiceTypes().get(type); newOut = this.addAnswer(newOut, new DNSRecord.Pointer("_services._dns-sd._udp.local.", DNSRecordClass.CLASS_IN, DNSRecordClass.NOT_UNIQUE, DNSConstants.DNS_TTL, typeEntry.getType()), now); } return newOut; } /* * (non-Javadoc) * @see javax.jmdns.impl.tasks.Resolver#addQuestions(javax.jmdns.impl.DNSOutgoing) */ @Override protected DNSOutgoing addQuestions(DNSOutgoing out) throws IOException { return this.addQuestion(out, DNSQuestion.newQuestion("_services._dns-sd._udp.local.", DNSRecordType.TYPE_PTR, DNSRecordClass.CLASS_IN, DNSRecordClass.NOT_UNIQUE)); } /* * (non-Javadoc) * @see javax.jmdns.impl.tasks.Resolver#description() */ @Override protected String description() { return "querying type"; } }