diff options
Diffstat (limited to 'src/javax/jmdns/impl/tasks/resolver/ServiceResolver.java')
-rw-r--r-- | src/javax/jmdns/impl/tasks/resolver/ServiceResolver.java | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/javax/jmdns/impl/tasks/resolver/ServiceResolver.java b/src/javax/jmdns/impl/tasks/resolver/ServiceResolver.java new file mode 100644 index 0000000..ae7dee5 --- /dev/null +++ b/src/javax/jmdns/impl/tasks/resolver/ServiceResolver.java @@ -0,0 +1,77 @@ +// 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.ServiceInfo; +import javax.jmdns.impl.DNSOutgoing; +import javax.jmdns.impl.DNSQuestion; +import javax.jmdns.impl.DNSRecord; +import javax.jmdns.impl.JmDNSImpl; +import javax.jmdns.impl.constants.DNSConstants; +import javax.jmdns.impl.constants.DNSRecordClass; +import javax.jmdns.impl.constants.DNSRecordType; + +/** + * The ServiceResolver queries three times consecutively for services of a given type, and then removes itself from the timer. + * <p/> + * The ServiceResolver will run only if JmDNS is in state ANNOUNCED. REMIND: Prevent having multiple service resolvers for the same type in the timer queue. + */ +public class ServiceResolver extends DNSResolverTask { + + private final String _type; + + public ServiceResolver(JmDNSImpl jmDNSImpl, String type) { + super(jmDNSImpl); + this._type = type; + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.DNSTask#getName() + */ + @Override + public String getName() { + return "ServiceResolver(" + (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 (ServiceInfo info : this.getDns().getServices().values()) { + newOut = this.addAnswer(newOut, new DNSRecord.Pointer(info.getType(), DNSRecordClass.CLASS_IN, DNSRecordClass.NOT_UNIQUE, DNSConstants.DNS_TTL, info.getQualifiedName()), now); + // newOut = this.addAnswer(newOut, new DNSRecord.Service(info.getQualifiedName(), DNSRecordClass.CLASS_IN, DNSRecordClass.NOT_UNIQUE, DNSConstants.DNS_TTL, info.getPriority(), info.getWeight(), info.getPort(), + // this.getDns().getLocalHost().getName()), now); + } + return newOut; + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.Resolver#addQuestions(javax.jmdns.impl.DNSOutgoing) + */ + @Override + protected DNSOutgoing addQuestions(DNSOutgoing out) throws IOException { + DNSOutgoing newOut = out; + newOut = this.addQuestion(newOut, DNSQuestion.newQuestion(_type, DNSRecordType.TYPE_PTR, DNSRecordClass.CLASS_IN, DNSRecordClass.NOT_UNIQUE)); + // newOut = this.addQuestion(newOut, DNSQuestion.newQuestion(_type, DNSRecordType.TYPE_SRV, DNSRecordClass.CLASS_IN, DNSRecordClass.NOT_UNIQUE)); + return newOut; + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.Resolver#description() + */ + @Override + protected String description() { + return "querying service"; + } +}
\ No newline at end of file |