summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2012-10-02 10:37:00 (GMT)
committerKevin Smith <git@kismith.co.uk>2012-10-02 10:37:00 (GMT)
commitdc9e9875a01065f3091738eb6d370c77d914481a (patch)
treed0e718f6ce2655d2edbed401bae952df059089d3 /src/com/isode/stroke/queries
parent816655ed98893382b82569ccbbebdb04c4af9127 (diff)
downloadstroke-dc9e9875a01065f3091738eb6d370c77d914481a.zip
stroke-dc9e9875a01065f3091738eb6d370c77d914481a.tar.bz2
Adding Support for SoftwareVersionResponder
Diffstat (limited to 'src/com/isode/stroke/queries')
-rw-r--r--src/com/isode/stroke/queries/GetResponder.java25
-rw-r--r--src/com/isode/stroke/queries/GetVersionRequest.java8
-rw-r--r--src/com/isode/stroke/queries/IQHandler.java4
-rw-r--r--src/com/isode/stroke/queries/Responder.java139
-rw-r--r--src/com/isode/stroke/queries/responders/SoftwareVersionResponder.java37
5 files changed, 207 insertions, 6 deletions
diff --git a/src/com/isode/stroke/queries/GetResponder.java b/src/com/isode/stroke/queries/GetResponder.java
new file mode 100644
index 0000000..edc798b
--- /dev/null
+++ b/src/com/isode/stroke/queries/GetResponder.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+package com.isode.stroke.queries;
+
+import com.isode.stroke.elements.Payload;
+import com.isode.stroke.jid.JID;
+
+public abstract class GetResponder<T extends Payload> extends Responder<T> {
+
+ public GetResponder(T t, IQRouter router) {
+ super(t, router);
+ }
+
+ @Override
+ protected boolean handleSetRequest(final JID from, final JID to, final String id, final T payload) {
+ return false;
+ }
+};
diff --git a/src/com/isode/stroke/queries/GetVersionRequest.java b/src/com/isode/stroke/queries/GetVersionRequest.java
index b81e972..f387a27 100644
--- a/src/com/isode/stroke/queries/GetVersionRequest.java
+++ b/src/com/isode/stroke/queries/GetVersionRequest.java
@@ -10,15 +10,15 @@
package com.isode.stroke.queries;
import com.isode.stroke.elements.IQ.Type;
-import com.isode.stroke.elements.Version;
+import com.isode.stroke.elements.SoftwareVersion;
import com.isode.stroke.jid.JID;
-public class GetVersionRequest extends GenericRequest<Version> {
+public class GetVersionRequest extends GenericRequest<SoftwareVersion> {
public GetVersionRequest(JID target, IQRouter iqRouter) {
- super(Type.Get, target, new Version(), iqRouter);
+ super(Type.Get, target, new SoftwareVersion(), iqRouter);
}
public GetVersionRequest(IQRouter iqRouter) {
- super(Type.Get, new JID(), new Version(), iqRouter);
+ super(Type.Get, new JID(), new SoftwareVersion(), iqRouter);
}
}
diff --git a/src/com/isode/stroke/queries/IQHandler.java b/src/com/isode/stroke/queries/IQHandler.java
index 54ff4c6..783f013 100644
--- a/src/com/isode/stroke/queries/IQHandler.java
+++ b/src/com/isode/stroke/queries/IQHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Isode Limited, London, England.
+ * Copyright (c) 2010-2012, Isode Limited, London, England.
* All rights reserved.
*/
/*
@@ -15,5 +15,5 @@ import com.isode.stroke.elements.IQ;
* Thing reacting to IQs.
*/
public interface IQHandler {
- boolean handleIQ(IQ iq);
+ public boolean handleIQ(IQ iq);
}
diff --git a/src/com/isode/stroke/queries/Responder.java b/src/com/isode/stroke/queries/Responder.java
new file mode 100644
index 0000000..203dd7e
--- /dev/null
+++ b/src/com/isode/stroke/queries/Responder.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+package com.isode.stroke.queries;
+
+import com.isode.stroke.elements.ErrorPayload;
+import com.isode.stroke.elements.IQ;
+import com.isode.stroke.elements.Payload;
+import com.isode.stroke.jid.JID;
+
+/**
+ * A class for handling incoming IQ Get and Set requests of a specific payload
+ * type.
+ *
+ * Concrete subclasses of this class need to implement handleGetRequest() and
+ * handleSetRequest() to implement the behavior of the responder.
+ *
+ * \tparam PAYLOAD_TYPE The type of payload this Responder handles. Only IQ
+ * requests containing this payload type will be passed to handleGetRequest()
+ * and handleSetRequest()
+ */
+public abstract class Responder<PAYLOAD_TYPE extends Payload> implements IQHandler {
+
+ public Responder(final PAYLOAD_TYPE payloadType, IQRouter router) {
+ payloadType_ = payloadType;
+ router_ = router;
+ }
+
+ /**
+ * Starts the responder.
+ *
+ * After the responder has started, it will start receiving and responding
+ * to requests.
+ *
+ * \see stop()
+ */
+ public void start() {
+ router_.addHandler(this);
+ }
+
+ /**
+ * Stops the responder.
+ *
+ * When the responder is stopped, it will no longer receive incoming
+ * requests.
+ *
+ * \see start()
+ */
+ public void stop() {
+ router_.removeHandler(this);
+ }
+
+ /**
+ * Handle an incoming IQ-Get request containing a payload of class
+ * PAYLOAD_TYPE.
+ *
+ * This method is implemented in the concrete subclasses.
+ */
+ protected abstract boolean handleGetRequest(final JID from, final JID to, final String id, PAYLOAD_TYPE payload);
+
+ /**
+ * Handle an incoming IQ-Set request containing a payload of class
+ * PAYLOAD_TYPE.
+ *
+ * This method is implemented in the concrete subclasses.
+ */
+ protected abstract boolean handleSetRequest(final JID from, final JID to, final String id, PAYLOAD_TYPE payload);
+
+ /**
+ * Convenience function for sending an IQ response.
+ */
+ protected void sendResponse(final JID to, final String id, PAYLOAD_TYPE payload) {
+ router_.sendIQ(IQ.createResult(to, id, payload));
+ }
+
+ /**
+ * Convenience function for sending an IQ response, with a specific from
+ * address.
+ */
+ protected void sendResponse(final JID to, final JID from, final String id, PAYLOAD_TYPE payload) {
+ router_.sendIQ(IQ.createResult(to, from, id, payload));
+ }
+
+ /**
+ * Convenience function for responding with an error.
+ */
+ protected void sendError(final JID to, final String id, ErrorPayload.Condition condition, ErrorPayload.Type type, Payload payload) {
+ router_.sendIQ(IQ.createError(to, id, condition, type, payload));
+ }
+
+ protected void sendError(final JID to, final String id, ErrorPayload.Condition condition, ErrorPayload.Type type) {
+ sendError(to, id, condition, type, null);
+ }
+
+ /**
+ * Convenience function for responding with an error from a specific from
+ * address.
+ */
+ protected void sendError(final JID to, final JID from, final String id, ErrorPayload.Condition condition, ErrorPayload.Type type, Payload payload) {
+ router_.sendIQ(IQ.createError(to, from, id, condition, type, payload));
+ }
+
+ protected void sendError(final JID to, final JID from, final String id, ErrorPayload.Condition condition, ErrorPayload.Type type) {
+ sendError(to, from, id, condition, type, null);
+ }
+
+ protected IQRouter getIQRouter() {
+ return router_;
+ }
+
+ @Override
+ public boolean handleIQ(IQ iq) {
+ if (IQ.Type.Set.equals(iq.getType()) || IQ.Type.Get.equals(iq.getType())) {
+ PAYLOAD_TYPE payload = iq.getPayload(payloadType_);
+ if (payload != null) {
+ boolean result;
+ if (IQ.Type.Set.equals(
+ iq.getType())) {
+ result = handleSetRequest(iq.getFrom(), iq.getTo(), iq.getID(), payload);
+ } else {
+ result = handleGetRequest(iq.getFrom(), iq.getTo(), iq.getID(), payload);
+ }
+ if (!result) {
+ router_.sendIQ(IQ.createError(iq.getFrom(), iq.getID(), ErrorPayload.Condition.NotAllowed, ErrorPayload.Type.Cancel));
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+ private IQRouter router_;
+ private PAYLOAD_TYPE payloadType_;
+};
diff --git a/src/com/isode/stroke/queries/responders/SoftwareVersionResponder.java b/src/com/isode/stroke/queries/responders/SoftwareVersionResponder.java
new file mode 100644
index 0000000..1fd5b36
--- /dev/null
+++ b/src/com/isode/stroke/queries/responders/SoftwareVersionResponder.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+package com.isode.stroke.queries.responders;
+
+import com.isode.stroke.elements.SoftwareVersion;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.queries.GetResponder;
+import com.isode.stroke.queries.IQRouter;
+
+public class SoftwareVersionResponder extends GetResponder<SoftwareVersion> {
+
+ public SoftwareVersionResponder(IQRouter router) {
+ super(new SoftwareVersion(), router);
+ }
+
+ public void setVersion(final String client, final String version, final String os) {
+ this.client = client;
+ this.version = version;
+ this.os = os;
+ }
+
+ @Override
+ public boolean handleGetRequest(final JID from, final JID to, final String id, SoftwareVersion payload) {
+ sendResponse(from, id, new SoftwareVersion(client, version, os));
+ return true;
+ }
+ private String client;
+ private String version;
+ private String os;
+} \ No newline at end of file