summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/disco/DiscoInfoResponder.java')
-rw-r--r--src/com/isode/stroke/disco/DiscoInfoResponder.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/com/isode/stroke/disco/DiscoInfoResponder.java b/src/com/isode/stroke/disco/DiscoInfoResponder.java
new file mode 100644
index 0000000..c0edca2
--- /dev/null
+++ b/src/com/isode/stroke/disco/DiscoInfoResponder.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010-2015, Isode Limited, London, England.
+ * All rights reserved.
+ */
+package com.isode.stroke.disco;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.isode.stroke.elements.DiscoInfo;
+import com.isode.stroke.elements.ErrorPayload;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.queries.GetResponder;
+import com.isode.stroke.queries.IQRouter;
+
+public class DiscoInfoResponder extends GetResponder<DiscoInfo> {
+ private DiscoInfo info_;
+ private Map<String, DiscoInfo> nodeInfo_ = new HashMap<String, DiscoInfo>();
+
+ public DiscoInfoResponder(IQRouter router) {
+ super(new DiscoInfo(), router);
+ }
+
+ void clearDiscoInfo() {
+ info_ = new DiscoInfo();
+ nodeInfo_.clear();
+ }
+
+ void setDiscoInfo(final DiscoInfo info) {
+ info_ = info;
+ }
+
+ void setDiscoInfo(final String node, final DiscoInfo info) {
+ DiscoInfo newInfo = info;
+ newInfo.setNode(node);
+ nodeInfo_.put(node, newInfo);
+ }
+
+ protected boolean handleGetRequest(final JID from, final JID j, final String id, DiscoInfo info) {
+ if (info.getNode().isEmpty()) {
+ sendResponse(from, id, info_);
+ }
+ else {
+ DiscoInfo i = nodeInfo_.get(info.getNode());
+ if (i != null) {
+ sendResponse(from, id, i);
+ }
+ else {
+ sendError(from, id, ErrorPayload.Condition.ItemNotFound, ErrorPayload.Type.Cancel);
+ }
+ }
+ return true;
+ }
+}