Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 package javax.jmdns.impl.tasks.state;
00006 
00007 import java.io.IOException;
00008 import java.util.Timer;
00009 import java.util.logging.Logger;
00010 
00011 import javax.jmdns.impl.DNSOutgoing;
00012 import javax.jmdns.impl.DNSRecord;
00013 import javax.jmdns.impl.JmDNSImpl;
00014 import javax.jmdns.impl.ServiceInfoImpl;
00015 import javax.jmdns.impl.constants.DNSConstants;
00016 import javax.jmdns.impl.constants.DNSRecordClass;
00017 import javax.jmdns.impl.constants.DNSState;
00018 
00022 public class Renewer extends DNSStateTask {
00023     static Logger logger = Logger.getLogger(Renewer.class.getName());
00024 
00025     public Renewer(JmDNSImpl jmDNSImpl) {
00026         super(jmDNSImpl, defaultTTL());
00027 
00028         this.setTaskState(DNSState.ANNOUNCED);
00029         this.associate(DNSState.ANNOUNCED);
00030     }
00031 
00032     
00033 
00034 
00035 
00036     @Override
00037     public String getName() {
00038         return "Renewer(" + (this.getDns() != null ? this.getDns().getName() : "") + ")";
00039     }
00040 
00041     
00042 
00043 
00044 
00045     @Override
00046     public String toString() {
00047         return super.toString() + " state: " + this.getTaskState();
00048     }
00049 
00050     
00051 
00052 
00053 
00054     @Override
00055     public void start(Timer timer) {
00056         if (!this.getDns().isCanceling() && !this.getDns().isCanceled()) {
00057             timer.schedule(this, DNSConstants.ANNOUNCED_RENEWAL_TTL_INTERVAL, DNSConstants.ANNOUNCED_RENEWAL_TTL_INTERVAL);
00058         }
00059     }
00060 
00061     @Override
00062     public boolean cancel() {
00063         this.removeAssociation();
00064 
00065         return super.cancel();
00066     }
00067 
00068     
00069 
00070 
00071 
00072     @Override
00073     public String getTaskDescription() {
00074         return "renewing";
00075     }
00076 
00077     
00078 
00079 
00080 
00081     @Override
00082     protected boolean checkRunCondition() {
00083         return !this.getDns().isCanceling() && !this.getDns().isCanceled();
00084     }
00085 
00086     
00087 
00088 
00089 
00090     @Override
00091     protected DNSOutgoing createOugoing() {
00092         return new DNSOutgoing(DNSConstants.FLAGS_QR_RESPONSE | DNSConstants.FLAGS_AA);
00093     }
00094 
00095     
00096 
00097 
00098 
00099     @Override
00100     protected DNSOutgoing buildOutgoingForDNS(DNSOutgoing out) throws IOException {
00101         DNSOutgoing newOut = out;
00102         for (DNSRecord answer : this.getDns().getLocalHost().answers(DNSRecordClass.UNIQUE, this.getTTL())) {
00103             newOut = this.addAnswer(newOut, null, answer);
00104         }
00105         return newOut;
00106     }
00107 
00108     
00109 
00110 
00111 
00112     @Override
00113     protected DNSOutgoing buildOutgoingForInfo(ServiceInfoImpl info, DNSOutgoing out) throws IOException {
00114         DNSOutgoing newOut = out;
00115         for (DNSRecord answer : info.answers(DNSRecordClass.UNIQUE, this.getTTL(), this.getDns().getLocalHost())) {
00116             newOut = this.addAnswer(newOut, null, answer);
00117         }
00118         return newOut;
00119     }
00120 
00121     
00122 
00123 
00124 
00125     @Override
00126     protected void recoverTask(Throwable e) {
00127         this.getDns().recover();
00128     }
00129 
00130     
00131 
00132 
00133 
00134     @Override
00135     protected void advanceTask() {
00136         this.setTaskState(this.getTaskState().advance());
00137         if (!this.getTaskState().isAnnounced()) {
00138             cancel();
00139         }
00140     }
00141 }