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
00024 public class Announcer extends DNSStateTask {
00025 static Logger logger = Logger.getLogger(Announcer.class.getName());
00026
00027 public Announcer(JmDNSImpl jmDNSImpl) {
00028 super(jmDNSImpl, defaultTTL());
00029
00030 this.setTaskState(DNSState.ANNOUNCING_1);
00031 this.associate(DNSState.ANNOUNCING_1);
00032 }
00033
00034
00035
00036
00037
00038 @Override
00039 public String getName() {
00040 return "Announcer(" + (this.getDns() != null ? this.getDns().getName() : "") + ")";
00041 }
00042
00043
00044
00045
00046
00047 @Override
00048 public String toString() {
00049 return super.toString() + " state: " + this.getTaskState();
00050 }
00051
00052
00053
00054
00055
00056 @Override
00057 public void start(Timer timer) {
00058 if (!this.getDns().isCanceling() && !this.getDns().isCanceled()) {
00059 timer.schedule(this, DNSConstants.ANNOUNCE_WAIT_INTERVAL, DNSConstants.ANNOUNCE_WAIT_INTERVAL);
00060 }
00061 }
00062
00063 @Override
00064 public boolean cancel() {
00065 this.removeAssociation();
00066
00067 return super.cancel();
00068 }
00069
00070
00071
00072
00073
00074 @Override
00075 public String getTaskDescription() {
00076 return "announcing";
00077 }
00078
00079
00080
00081
00082
00083 @Override
00084 protected boolean checkRunCondition() {
00085 return !this.getDns().isCanceling() && !this.getDns().isCanceled();
00086 }
00087
00088
00089
00090
00091
00092 @Override
00093 protected DNSOutgoing createOugoing() {
00094 return new DNSOutgoing(DNSConstants.FLAGS_QR_RESPONSE | DNSConstants.FLAGS_AA);
00095 }
00096
00097
00098
00099
00100
00101 @Override
00102 protected DNSOutgoing buildOutgoingForDNS(DNSOutgoing out) throws IOException {
00103 DNSOutgoing newOut = out;
00104 for (DNSRecord answer : this.getDns().getLocalHost().answers(DNSRecordClass.UNIQUE, this.getTTL())) {
00105 newOut = this.addAnswer(newOut, null, answer);
00106 }
00107 return newOut;
00108 }
00109
00110
00111
00112
00113
00114 @Override
00115 protected DNSOutgoing buildOutgoingForInfo(ServiceInfoImpl info, DNSOutgoing out) throws IOException {
00116 DNSOutgoing newOut = out;
00117 for (DNSRecord answer : info.answers(DNSRecordClass.UNIQUE, this.getTTL(), this.getDns().getLocalHost())) {
00118 newOut = this.addAnswer(newOut, null, answer);
00119 }
00120 return newOut;
00121 }
00122
00123
00124
00125
00126
00127 @Override
00128 protected void recoverTask(Throwable e) {
00129 this.getDns().recover();
00130 }
00131
00132
00133
00134
00135
00136 @Override
00137 protected void advanceTask() {
00138 this.setTaskState(this.getTaskState().advance());
00139 if (!this.getTaskState().isAnnouncing()) {
00140 this.cancel();
00141
00142 this.getDns().startRenewer();
00143 }
00144 }
00145
00146 }