Home | History | Annotate | Download | only in resolver
      1 // Copyright 2003-2005 Arthur van Hoff, Rick Blair
      2 // Licensed under Apache License version 2.0
      3 // Original license LGPL
      4 
      5 package javax.jmdns.impl.tasks.resolver;
      6 
      7 import java.io.IOException;
      8 
      9 import javax.jmdns.impl.DNSOutgoing;
     10 import javax.jmdns.impl.DNSQuestion;
     11 import javax.jmdns.impl.DNSRecord;
     12 import javax.jmdns.impl.JmDNSImpl;
     13 import javax.jmdns.impl.JmDNSImpl.ServiceTypeEntry;
     14 import javax.jmdns.impl.constants.DNSConstants;
     15 import javax.jmdns.impl.constants.DNSRecordClass;
     16 import javax.jmdns.impl.constants.DNSRecordType;
     17 
     18 /**
     19  * Helper class to resolve service types.
     20  * <p/>
     21  * The TypeResolver queries three times consecutively for service types, and then removes itself from the timer.
     22  * <p/>
     23  * The TypeResolver will run only if JmDNS is in state ANNOUNCED.
     24  */
     25 public class TypeResolver extends DNSResolverTask {
     26 
     27     /**
     28      * @param jmDNSImpl
     29      */
     30     public TypeResolver(JmDNSImpl jmDNSImpl) {
     31         super(jmDNSImpl);
     32     }
     33 
     34     /*
     35      * (non-Javadoc)
     36      * @see javax.jmdns.impl.tasks.DNSTask#getName()
     37      */
     38     @Override
     39     public String getName() {
     40         return "TypeResolver(" + (this.getDns() != null ? this.getDns().getName() : "") + ")";
     41     }
     42 
     43     /*
     44      * (non-Javadoc)
     45      * @see javax.jmdns.impl.tasks.Resolver#addAnswers(javax.jmdns.impl.DNSOutgoing)
     46      */
     47     @Override
     48     protected DNSOutgoing addAnswers(DNSOutgoing out) throws IOException {
     49         DNSOutgoing newOut = out;
     50         long now = System.currentTimeMillis();
     51         for (String type : this.getDns().getServiceTypes().keySet()) {
     52             ServiceTypeEntry typeEntry = this.getDns().getServiceTypes().get(type);
     53             newOut = this.addAnswer(newOut, new DNSRecord.Pointer("_services._dns-sd._udp.local.", DNSRecordClass.CLASS_IN, DNSRecordClass.NOT_UNIQUE, DNSConstants.DNS_TTL, typeEntry.getType()), now);
     54         }
     55         return newOut;
     56     }
     57 
     58     /*
     59      * (non-Javadoc)
     60      * @see javax.jmdns.impl.tasks.Resolver#addQuestions(javax.jmdns.impl.DNSOutgoing)
     61      */
     62     @Override
     63     protected DNSOutgoing addQuestions(DNSOutgoing out) throws IOException {
     64         return this.addQuestion(out, DNSQuestion.newQuestion("_services._dns-sd._udp.local.", DNSRecordType.TYPE_PTR, DNSRecordClass.CLASS_IN, DNSRecordClass.NOT_UNIQUE));
     65     }
     66 
     67     /*
     68      * (non-Javadoc)
     69      * @see javax.jmdns.impl.tasks.Resolver#description()
     70      */
     71     @Override
     72     protected String description() {
     73         return "querying type";
     74     }
     75 }