Renewer.java revision 3742d9db8b6edb10627b0f89336cca5249f1d15a
1// Copyright 2003-2005 Arthur van Hoff, Rick Blair 2// Licensed under Apache License version 2.0 3// Original license LGPL 4 5package javax.jmdns.impl.tasks.state; 6 7import java.io.IOException; 8import java.util.Timer; 9import java.util.logging.Logger; 10 11import javax.jmdns.impl.DNSOutgoing; 12import javax.jmdns.impl.DNSRecord; 13import javax.jmdns.impl.JmDNSImpl; 14import javax.jmdns.impl.ServiceInfoImpl; 15import javax.jmdns.impl.constants.DNSConstants; 16import javax.jmdns.impl.constants.DNSRecordClass; 17import javax.jmdns.impl.constants.DNSState; 18 19/** 20 * The Renewer is there to send renewal announcement when the record expire for ours infos. 21 */ 22public class Renewer extends DNSStateTask { 23 static Logger logger = Logger.getLogger(Renewer.class.getName()); 24 25 public Renewer(JmDNSImpl jmDNSImpl) { 26 super(jmDNSImpl, defaultTTL()); 27 28 this.setTaskState(DNSState.ANNOUNCED); 29 this.associate(DNSState.ANNOUNCED); 30 } 31 32 /* 33 * (non-Javadoc) 34 * @see javax.jmdns.impl.tasks.DNSTask#getName() 35 */ 36 @Override 37 public String getName() { 38 return "Renewer(" + (this.getDns() != null ? this.getDns().getName() : "") + ")"; 39 } 40 41 /* 42 * (non-Javadoc) 43 * @see java.lang.Object#toString() 44 */ 45 @Override 46 public String toString() { 47 return super.toString() + " state: " + this.getTaskState(); 48 } 49 50 /* 51 * (non-Javadoc) 52 * @see javax.jmdns.impl.tasks.DNSTask#start(java.util.Timer) 53 */ 54 @Override 55 public void start(Timer timer) { 56 if (!this.getDns().isCanceling() && !this.getDns().isCanceled()) { 57 timer.schedule(this, DNSConstants.ANNOUNCED_RENEWAL_TTL_INTERVAL, DNSConstants.ANNOUNCED_RENEWAL_TTL_INTERVAL); 58 } 59 } 60 61 @Override 62 public boolean cancel() { 63 this.removeAssociation(); 64 65 return super.cancel(); 66 } 67 68 /* 69 * (non-Javadoc) 70 * @see javax.jmdns.impl.tasks.state.DNSStateTask#getTaskDescription() 71 */ 72 @Override 73 public String getTaskDescription() { 74 return "renewing"; 75 } 76 77 /* 78 * (non-Javadoc) 79 * @see javax.jmdns.impl.tasks.state.DNSStateTask#checkRunCondition() 80 */ 81 @Override 82 protected boolean checkRunCondition() { 83 return !this.getDns().isCanceling() && !this.getDns().isCanceled(); 84 } 85 86 /* 87 * (non-Javadoc) 88 * @see javax.jmdns.impl.tasks.state.DNSStateTask#createOugoing() 89 */ 90 @Override 91 protected DNSOutgoing createOugoing() { 92 return new DNSOutgoing(DNSConstants.FLAGS_QR_RESPONSE | DNSConstants.FLAGS_AA); 93 } 94 95 /* 96 * (non-Javadoc) 97 * @see javax.jmdns.impl.tasks.state.DNSStateTask#buildOutgoingForDNS(javax.jmdns.impl.DNSOutgoing) 98 */ 99 @Override 100 protected DNSOutgoing buildOutgoingForDNS(DNSOutgoing out) throws IOException { 101 DNSOutgoing newOut = out; 102 for (DNSRecord answer : this.getDns().getLocalHost().answers(DNSRecordClass.UNIQUE, this.getTTL())) { 103 newOut = this.addAnswer(newOut, null, answer); 104 } 105 return newOut; 106 } 107 108 /* 109 * (non-Javadoc) 110 * @see javax.jmdns.impl.tasks.state.DNSStateTask#buildOutgoingForInfo(javax.jmdns.impl.ServiceInfoImpl, javax.jmdns.impl.DNSOutgoing) 111 */ 112 @Override 113 protected DNSOutgoing buildOutgoingForInfo(ServiceInfoImpl info, DNSOutgoing out) throws IOException { 114 DNSOutgoing newOut = out; 115 for (DNSRecord answer : info.answers(DNSRecordClass.UNIQUE, this.getTTL(), this.getDns().getLocalHost())) { 116 newOut = this.addAnswer(newOut, null, answer); 117 } 118 return newOut; 119 } 120 121 /* 122 * (non-Javadoc) 123 * @see javax.jmdns.impl.tasks.state.DNSStateTask#recoverTask(java.lang.Throwable) 124 */ 125 @Override 126 protected void recoverTask(Throwable e) { 127 this.getDns().recover(); 128 } 129 130 /* 131 * (non-Javadoc) 132 * @see javax.jmdns.impl.tasks.state.DNSStateTask#advanceTask() 133 */ 134 @Override 135 protected void advanceTask() { 136 this.setTaskState(this.getTaskState().advance()); 137 if (!this.getTaskState().isAnnounced()) { 138 cancel(); 139 } 140 } 141}