From 3742d9db8b6edb10627b0f89336cca5249f1d15a Mon Sep 17 00:00:00 2001 From: Manuel Roman Date: Tue, 13 Sep 2011 15:57:27 -0700 Subject: Uploading the original JmDNS code This code is used by the Broker service to advertise and discover an Active Home using the standard mDNS protocol Change-Id: I5d7068765b4ca771e3f3faf5d12104e2247945f3 --- src/javax/jmdns/impl/tasks/state/Canceler.java | 143 +++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/javax/jmdns/impl/tasks/state/Canceler.java (limited to 'src/javax/jmdns/impl/tasks/state/Canceler.java') diff --git a/src/javax/jmdns/impl/tasks/state/Canceler.java b/src/javax/jmdns/impl/tasks/state/Canceler.java new file mode 100644 index 0000000..50cf316 --- /dev/null +++ b/src/javax/jmdns/impl/tasks/state/Canceler.java @@ -0,0 +1,143 @@ +// Copyright 2003-2005 Arthur van Hoff, Rick Blair +// Licensed under Apache License version 2.0 +// Original license LGPL + +package javax.jmdns.impl.tasks.state; + +import java.io.IOException; +import java.util.Timer; +import java.util.logging.Logger; + +import javax.jmdns.impl.DNSOutgoing; +import javax.jmdns.impl.DNSRecord; +import javax.jmdns.impl.JmDNSImpl; +import javax.jmdns.impl.ServiceInfoImpl; +import javax.jmdns.impl.constants.DNSConstants; +import javax.jmdns.impl.constants.DNSRecordClass; +import javax.jmdns.impl.constants.DNSState; + +/** + * The Canceler sends two announces with TTL=0 for the specified services. + */ +public class Canceler extends DNSStateTask { + static Logger logger = Logger.getLogger(Canceler.class.getName()); + + public Canceler(JmDNSImpl jmDNSImpl) { + super(jmDNSImpl, 0); + + this.setTaskState(DNSState.CANCELING_1); + this.associate(DNSState.CANCELING_1); + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.DNSTask#getName() + */ + @Override + public String getName() { + return "Canceler(" + (this.getDns() != null ? this.getDns().getName() : "") + ")"; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return super.toString() + " state: " + this.getTaskState(); + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.DNSTask#start(java.util.Timer) + */ + @Override + public void start(Timer timer) { + timer.schedule(this, 0, DNSConstants.ANNOUNCE_WAIT_INTERVAL); + } + + /* + * (non-Javadoc) + * @see java.util.TimerTask#cancel() + */ + @Override + public boolean cancel() { + this.removeAssociation(); + + return super.cancel(); + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.state.DNSStateTask#getTaskDescription() + */ + @Override + public String getTaskDescription() { + return "canceling"; + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.state.DNSStateTask#checkRunCondition() + */ + @Override + protected boolean checkRunCondition() { + return true; + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.state.DNSStateTask#createOugoing() + */ + @Override + protected DNSOutgoing createOugoing() { + return new DNSOutgoing(DNSConstants.FLAGS_QR_RESPONSE | DNSConstants.FLAGS_AA); + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.state.DNSStateTask#buildOutgoingForDNS(javax.jmdns.impl.DNSOutgoing) + */ + @Override + protected DNSOutgoing buildOutgoingForDNS(DNSOutgoing out) throws IOException { + DNSOutgoing newOut = out; + for (DNSRecord answer : this.getDns().getLocalHost().answers(DNSRecordClass.UNIQUE, this.getTTL())) { + newOut = this.addAnswer(newOut, null, answer); + } + return newOut; + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.state.DNSStateTask#buildOutgoingForInfo(javax.jmdns.impl.ServiceInfoImpl, javax.jmdns.impl.DNSOutgoing) + */ + @Override + protected DNSOutgoing buildOutgoingForInfo(ServiceInfoImpl info, DNSOutgoing out) throws IOException { + DNSOutgoing newOut = out; + for (DNSRecord answer : info.answers(DNSRecordClass.UNIQUE, this.getTTL(), this.getDns().getLocalHost())) { + newOut = this.addAnswer(newOut, null, answer); + } + return newOut; + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.state.DNSStateTask#recoverTask(java.lang.Throwable) + */ + @Override + protected void recoverTask(Throwable e) { + this.getDns().recover(); + } + + /* + * (non-Javadoc) + * @see javax.jmdns.impl.tasks.state.DNSStateTask#advanceTask() + */ + @Override + protected void advanceTask() { + this.setTaskState(this.getTaskState().advance()); + if (!this.getTaskState().isCanceling()) { + cancel(); + } + } +} \ No newline at end of file -- cgit v1.2.3