summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/disco/ClientDiscoManager.java')
-rw-r--r--src/com/isode/stroke/disco/ClientDiscoManager.java76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/com/isode/stroke/disco/ClientDiscoManager.java b/src/com/isode/stroke/disco/ClientDiscoManager.java
new file mode 100644
index 0000000..3770fbc
--- /dev/null
+++ b/src/com/isode/stroke/disco/ClientDiscoManager.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010-2015, Isode Limited, London, England.
+ * All rights reserved.
+ */
+package com.isode.stroke.disco;
+
+import com.isode.stroke.crypto.CryptoProvider;
+import com.isode.stroke.elements.CapsInfo;
+import com.isode.stroke.elements.DiscoInfo;
+import com.isode.stroke.presence.PayloadAddingPresenceSender;
+import com.isode.stroke.presence.PresenceSender;
+import com.isode.stroke.queries.IQRouter;
+
+public class ClientDiscoManager {
+ private PayloadAddingPresenceSender presenceSender;
+ private CryptoProvider crypto;
+ private DiscoInfoResponder discoInfoResponder;
+ private String capsNode;
+ private CapsInfo capsInfo;
+
+ /**
+ * Constructs the manager
+ *
+ * \param iqRouter the router on which requests will be answered \param
+ * presenceSender the presence sender to which all outgoing presence (with
+ * caps information) will be sent.
+ */
+ public ClientDiscoManager(IQRouter iqRouter, PresenceSender presenceSender,
+ CryptoProvider crypto) {
+ this.crypto = crypto;
+ discoInfoResponder = new DiscoInfoResponder(iqRouter);
+ discoInfoResponder.start();
+ this.presenceSender = new PayloadAddingPresenceSender(presenceSender);
+ }
+
+ void delete() {
+ discoInfoResponder.stop();
+ }
+
+ /**
+ * Needs to be called before calling setDiscoInfo().
+ */
+ public void setCapsNode(final String node) {
+ capsNode = node;
+ }
+
+ /**
+ * Sets the capabilities of the client.
+ */
+ public void setDiscoInfo(final DiscoInfo discoInfo) {
+ capsInfo = new CapsInfoGenerator(capsNode, crypto).generateCapsInfo(discoInfo);
+ discoInfoResponder.clearDiscoInfo();
+ discoInfoResponder.setDiscoInfo(discoInfo);
+ discoInfoResponder.setDiscoInfo(
+ capsInfo.getNode() + "#" + capsInfo.getVersion(), discoInfo);
+ presenceSender.setPayload(capsInfo);
+ }
+
+ /**
+ * Returns the presence sender through which all outgoing presence should be
+ * sent. The manager will add the necessary caps information, and forward it
+ * to the presence sender passed at construction time.
+ */
+ public PresenceSender getPresenceSender() {
+ return presenceSender;
+ }
+
+ /**
+ * Called when the client is connected. This resets the presence sender,
+ * such that it assumes initial presence hasn't been sent yet.
+ */
+ void handleConnected() {
+ presenceSender.reset();
+ }
+
+}