aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/thedevstack/conversationsplus/xmpp
diff options
context:
space:
mode:
authorsteckbrief <steckbrief@chefmail.de>2017-08-06 14:28:00 +0200
committersteckbrief <steckbrief@chefmail.de>2017-08-06 14:28:00 +0200
commitbe1992ce897d3b0551e545646a3e0f45cc6dd8c2 (patch)
treec15c94ade61e5063095d8b429ae4acf85459493f /src/main/java/de/thedevstack/conversationsplus/xmpp
parentf8e083a32cb7232c9601f5011b14738d43bb3b06 (diff)
Implements XEP-0202 Entity Time, moves Software Version to xmpp package, moves namespace definitions for mam, carbons and avatar to xmpp package
Diffstat (limited to 'src/main/java/de/thedevstack/conversationsplus/xmpp')
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/XmppConnection.java10
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacket.java8
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketGenerator.java16
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketParser.java4
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/carbons/Carbons.java7
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/chatstate/ChatState.java3
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/iqversion/IqVersionPacket.java23
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/iqversion/IqVersionPacketGenerator.java38
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/mam/Mam.java7
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/time/TimePacket.java35
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/xmpp/time/TimePacketGenerator.java38
11 files changed, 172 insertions, 17 deletions
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/XmppConnection.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/XmppConnection.java
index dfea06c8..54db5346 100644
--- a/src/main/java/de/thedevstack/conversationsplus/xmpp/XmppConnection.java
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/XmppConnection.java
@@ -71,6 +71,7 @@ import de.thedevstack.conversationsplus.xml.Element;
import de.thedevstack.conversationsplus.xml.Tag;
import de.thedevstack.conversationsplus.xml.TagWriter;
import de.thedevstack.conversationsplus.xml.XmlReader;
+import de.thedevstack.conversationsplus.xmpp.carbons.Carbons;
import de.thedevstack.conversationsplus.xmpp.filetransfer.http.FileTransferHttp;
import de.thedevstack.conversationsplus.xmpp.filetransfer.http.upload.HttpUpload;
import de.thedevstack.conversationsplus.xmpp.forms.Data;
@@ -79,6 +80,7 @@ import de.thedevstack.conversationsplus.xmpp.jid.InvalidJidException;
import de.thedevstack.conversationsplus.xmpp.jid.Jid;
import de.thedevstack.conversationsplus.xmpp.jingle.OnJinglePacketReceived;
import de.thedevstack.conversationsplus.xmpp.jingle.stanzas.JinglePacket;
+import de.thedevstack.conversationsplus.xmpp.mam.Mam;
import de.thedevstack.conversationsplus.xmpp.stanzas.AbstractAcknowledgeableStanza;
import de.thedevstack.conversationsplus.xmpp.stanzas.AbstractStanza;
import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;
@@ -1133,7 +1135,7 @@ public class XmppConnection implements Runnable {
private void sendEnableCarbons() {
final IqPacket iq = new IqPacket(IqPacket.TYPE.SET);
- iq.addChild("enable", "urn:xmpp:carbons:2");
+ iq.addChild("enable", Carbons.NAMESPACE);
this.sendIqPacket(iq, new OnIqPacketReceived() {
@Override
@@ -1490,7 +1492,7 @@ public class XmppConnection implements Runnable {
}
public boolean carbons() {
- return hasDiscoFeature(account.getServer(), "urn:xmpp:carbons:2");
+ return hasDiscoFeature(account.getServer(), Carbons.NAMESPACE);
}
public boolean blocking() {
@@ -1525,8 +1527,8 @@ public class XmppConnection implements Runnable {
}
public boolean mam() {
- return hasDiscoFeature(account.getJid().toBareJid(), "urn:xmpp:mam:0")
- || hasDiscoFeature(account.getServer(), "urn:xmpp:mam:0");
+ return hasDiscoFeature(account.getJid().toBareJid(), Mam.NAMESPACE)
+ || hasDiscoFeature(account.getServer(), Mam.NAMESPACE);
}
public boolean push() {
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacket.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacket.java
new file mode 100644
index 00000000..86cb2274
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacket.java
@@ -0,0 +1,8 @@
+package de.thedevstack.conversationsplus.xmpp.avatar;
+
+/**
+ */
+public class AvatarPacket {
+ public static final String NAMESPACE_AVATAR_DATA = "urn:xmpp:avatar:data";
+ public static final String NAMESPACE_AVATAR_METADATA = "urn:xmpp:avatar:metadata";
+}
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketGenerator.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketGenerator.java
index 4534e870..f9e04122 100644
--- a/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketGenerator.java
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketGenerator.java
@@ -9,11 +9,9 @@ import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;
/**
* Generates the IQ Packets for handling Avatars
* as defined in XEP-0084.
- * @see {@link http://xmpp.org/extensions/xep-0084.html}
+ * @see http://xmpp.org/extensions/xep-0084.html
*/
public final class AvatarPacketGenerator {
- public static final String NAMESPACE_AVATAR_DATA = "urn:xmpp:avatar:data";
- public static final String NAMESPACE_AVATAR_METADATA = "urn:xmpp:avatar:metadata";
/**
* Generates an IqPacket for publishing avatar data.
@@ -37,9 +35,9 @@ public final class AvatarPacketGenerator {
public static IqPacket generatePublishAvatarPacket(Avatar avatar) {
final Element item = new Element("item");
item.setAttribute("id", avatar.sha1sum);
- final Element data = item.addChild("data", NAMESPACE_AVATAR_DATA);
+ final Element data = item.addChild("data", AvatarPacket.NAMESPACE_AVATAR_DATA);
data.setContent(avatar.image);
- return PubSubPacketGenerator.generatePubSubPublishPacket(NAMESPACE_AVATAR_DATA, item);
+ return PubSubPacketGenerator.generatePubSubPublishPacket(AvatarPacket.NAMESPACE_AVATAR_DATA, item);
}
/**
@@ -60,7 +58,7 @@ public final class AvatarPacketGenerator {
public static IqPacket generateRetrieveAvatarPacket(Avatar avatar) {
final Element item = new Element("item");
item.setAttribute("id", avatar.sha1sum);
- final IqPacket packet = PubSubPacketGenerator.generatePubSubRetrievePacket(NAMESPACE_AVATAR_DATA, item);
+ final IqPacket packet = PubSubPacketGenerator.generatePubSubRetrievePacket(AvatarPacket.NAMESPACE_AVATAR_DATA, item);
packet.setTo(avatar.owner);
return packet;
}
@@ -91,14 +89,14 @@ public final class AvatarPacketGenerator {
public static IqPacket generatePublishAvatarMetadataPacket(Avatar avatar) {
final Element item = new Element("item");
item.setAttribute("id", avatar.sha1sum);
- final Element metadata = item.addChild("metadata", NAMESPACE_AVATAR_METADATA);
+ final Element metadata = item.addChild("metadata", AvatarPacket.NAMESPACE_AVATAR_METADATA);
final Element info = metadata.addChild("info");
info.setAttribute("bytes", avatar.size);
info.setAttribute("id", avatar.sha1sum);
info.setAttribute("height", avatar.height);
info.setAttribute("width", avatar.height);
info.setAttribute("type", avatar.type);
- return PubSubPacketGenerator.generatePubSubPublishPacket(NAMESPACE_AVATAR_METADATA, item);
+ return PubSubPacketGenerator.generatePubSubPublishPacket(AvatarPacket.NAMESPACE_AVATAR_METADATA, item);
}
/**
@@ -108,7 +106,7 @@ public final class AvatarPacketGenerator {
* @return the IqPacket
*/
public static IqPacket generateRetrieveAvatarMetadataPacket(Jid to) {
- final IqPacket packet = PubSubPacketGenerator.generatePubSubRetrievePacket(NAMESPACE_AVATAR_METADATA, null);
+ final IqPacket packet = PubSubPacketGenerator.generatePubSubRetrievePacket(AvatarPacket.NAMESPACE_AVATAR_METADATA, null);
if (to != null) {
packet.setTo(to);
}
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketParser.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketParser.java
index 175f54bd..e9f90898 100644
--- a/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketParser.java
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/avatar/AvatarPacketParser.java
@@ -8,7 +8,7 @@ import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;
/**
* Parses the IQ Packets for handling Avatars
* as defined in XEP-0084.
- * @see {@link http://xmpp.org/extensions/xep-0084.html}
+ * @see <a href="http://xmpp.org/extensions/xep-0084.html">http://xmpp.org/extensions/xep-0084.html</a>
*/
public class AvatarPacketParser {
/**
@@ -22,7 +22,7 @@ public class AvatarPacketParser {
if (null != items) {
Element item = items.findChild("item");
if (null != item) {
- base64Avatar = item.findChildContent("data", AvatarPacketGenerator.NAMESPACE_AVATAR_DATA);
+ base64Avatar = item.findChildContent("data", AvatarPacket.NAMESPACE_AVATAR_DATA);
}
}
return base64Avatar;
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/carbons/Carbons.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/carbons/Carbons.java
new file mode 100644
index 00000000..89b9317b
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/carbons/Carbons.java
@@ -0,0 +1,7 @@
+package de.thedevstack.conversationsplus.xmpp.carbons;
+
+/**
+ */
+public interface Carbons {
+ String NAMESPACE = "urn:xmpp:carbons:2";
+}
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/chatstate/ChatState.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatstate/ChatState.java
index 323d99c2..805e1f33 100644
--- a/src/main/java/de/thedevstack/conversationsplus/xmpp/chatstate/ChatState.java
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatstate/ChatState.java
@@ -5,9 +5,9 @@ import de.thedevstack.conversationsplus.xml.Element;
public enum ChatState {
ACTIVE, INACTIVE, GONE, COMPOSING, PAUSED;
+ public static final String NAMESPACE = "http://jabber.org/protocol/chatstates";
public static ChatState parse(Element element) {
- final String NAMESPACE = "http://jabber.org/protocol/chatstates";
if (element.hasChild("active",NAMESPACE)) {
return ACTIVE;
} else if (element.hasChild("inactive",NAMESPACE)) {
@@ -24,7 +24,6 @@ public enum ChatState {
}
public static Element toElement(ChatState state) {
- final String NAMESPACE = "http://jabber.org/protocol/chatstates";
final Element element = new Element(state.toString().toLowerCase());
element.setAttribute("xmlns",NAMESPACE);
return element;
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/iqversion/IqVersionPacket.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/iqversion/IqVersionPacket.java
new file mode 100644
index 00000000..a3cecdac
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/iqversion/IqVersionPacket.java
@@ -0,0 +1,23 @@
+package de.thedevstack.conversationsplus.xmpp.iqversion;
+
+import android.os.Build;
+
+import de.thedevstack.conversationsplus.ConversationsPlusApplication;
+import de.thedevstack.conversationsplus.xml.Element;
+import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;
+
+/**
+ * Representation of an software version packet as defined in XEP-0092.
+ * @see <a href="http://xmpp.org/extensions/xep-0092.html">http://xmpp.org/extensions/xep-0092.html</a>
+ */
+public class IqVersionPacket extends IqPacket {
+ public static final String NAMESPACE = "jabber:iq:version";
+
+ IqVersionPacket() {
+ super(IqPacket.TYPE.RESULT);
+ Element query = this.addChild("query", NAMESPACE);
+ query.addChild("name").setContent(ConversationsPlusApplication.getName());
+ query.addChild("version").setContent(ConversationsPlusApplication.getVersion());
+ query.addChild("os").setContent("Android " + Build.VERSION.RELEASE);
+ }
+}
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/iqversion/IqVersionPacketGenerator.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/iqversion/IqVersionPacketGenerator.java
new file mode 100644
index 00000000..97a7e90d
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/iqversion/IqVersionPacketGenerator.java
@@ -0,0 +1,38 @@
+package de.thedevstack.conversationsplus.xmpp.iqversion;
+
+import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;
+
+/**
+ * Generates the IQ Packets for Software Version
+ * as defined in XEP-0092.
+ * @see <a href="http://xmpp.org/extensions/xep-0092.html">http://xmpp.org/extensions/xep-0092.html</a>
+ */
+public final class IqVersionPacketGenerator {
+
+ /**
+ * Generates the IqPacket to reply the software version.
+ * <pre>
+ * <iq from='juliet@capulet.com/balcony'
+ * type='result'
+ * to='romeo@montague.net/orchard'
+ * id='version_1'>
+ * <query xmlns='jabber:iq:version'>
+ * <name>Exodus</name>
+ * <version>0.7.0.4</version>
+ * <os>Windows-XP 5.01.2600</os>
+ * </query>
+ * </iq>
+ * </pre>
+ * @param packet the packet to respond to
+ * @return
+ */
+ public static IqVersionPacket generateResponse(IqPacket packet) {
+ IqVersionPacket iqVersionPacket = new IqVersionPacket();
+ iqVersionPacket.setTo(packet.getFrom());
+ iqVersionPacket.setId(packet.getId());
+
+ return iqVersionPacket;
+ }
+
+ private IqVersionPacketGenerator() {}
+}
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/mam/Mam.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/mam/Mam.java
new file mode 100644
index 00000000..e2228b32
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/mam/Mam.java
@@ -0,0 +1,7 @@
+package de.thedevstack.conversationsplus.xmpp.mam;
+
+/**
+ */
+public interface Mam {
+ String NAMESPACE = "urn:xmpp:mam:0";
+}
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/time/TimePacket.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/time/TimePacket.java
new file mode 100644
index 00000000..d8756d41
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/time/TimePacket.java
@@ -0,0 +1,35 @@
+package de.thedevstack.conversationsplus.xmpp.time;
+
+import java.util.Locale;
+import java.util.TimeZone;
+
+import de.thedevstack.conversationsplus.generator.AbstractGenerator;
+import de.thedevstack.conversationsplus.xml.Element;
+import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;
+
+/**
+ * Representation of an software version packet as defined in XEP-0202.
+ * @see <a href="http://xmpp.org/extensions/xep-0202.html">http://xmpp.org/extensions/xep-0202.html</a>
+ */
+public class TimePacket extends IqPacket {
+ public static final String NAMESPACE = "urn:xmpp:time";
+
+ TimePacket() {
+ super(IqPacket.TYPE.RESULT);
+ Element time = this.addChild("time", NAMESPACE);
+ final long now = System.currentTimeMillis();
+ time.addChild("utc").setContent(AbstractGenerator.getTimestamp(now));
+ TimeZone ourTimezone = TimeZone.getDefault();
+ long offsetSeconds = ourTimezone.getOffset(now) / 1000;
+ long offsetMinutes = Math.abs((offsetSeconds % 3600) / 60);
+ long offsetHours = offsetSeconds / 3600;
+ String hours;
+ if (offsetHours < 0) {
+ hours = String.format(Locale.US, "%03d", offsetHours);
+ } else {
+ hours = String.format(Locale.US, "%02d", offsetHours);
+ }
+ String minutes = String.format(Locale.US, "%02d", offsetMinutes);
+ time.addChild("tzo").setContent(hours + ":" + minutes);
+ }
+}
diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/time/TimePacketGenerator.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/time/TimePacketGenerator.java
new file mode 100644
index 00000000..344beb9e
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/time/TimePacketGenerator.java
@@ -0,0 +1,38 @@
+package de.thedevstack.conversationsplus.xmpp.time;
+
+import de.thedevstack.conversationsplus.xmpp.iqversion.IqVersionPacket;
+import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;
+
+/**
+ * Generates the IQ Packets for Entity Time
+ * as defined in XEP-0202.
+ * @see <a href="http://xmpp.org/extensions/xep-0202.html">http://xmpp.org/extensions/xep-0202.html</a>
+ */
+public final class TimePacketGenerator {
+
+ /**
+ * Generates the IqPacket to reply the entity time.
+ * <pre>
+ * <iq type='result'
+ * from='juliet@capulet.com/balcony'
+ * to='romeo@montague.net/orchard'
+ * id='time_1'>
+ * <time xmlns='urn:xmpp:time'>
+ * <tzo>-06:00</tzo>
+ * <utc>2006-12-19T17:58:35Z</utc>
+ * </time>
+ * </iq>
+ * </pre>
+ * @param packet
+ * @return
+ */
+ public static TimePacket generateResponse(IqPacket packet) {
+ TimePacket timePacket = new TimePacket();
+ timePacket.setTo(packet.getFrom());
+ timePacket.setId(packet.getId());
+
+ return timePacket;
+ }
+
+ private TimePacketGenerator() {}
+}