summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarun Gupta <tarun1995gupta@gmail.com>2015-06-20 12:10:51 (GMT)
committerTarun Gupta <tarun1995gupta@gmail.com>2015-06-30 13:23:04 (GMT)
commitba7342e593920595af36fcd8e8e44ec206f8b561 (patch)
treefa8921599a20d85845d23d9a97bbc1cf230c7a51 /src/com/isode/stroke/serializer
parenta673d269487fd86efe7f9c5f9b4cd1c00cab556d (diff)
downloadstroke-ba7342e593920595af36fcd8e8e44ec206f8b561.zip
stroke-ba7342e593920595af36fcd8e8e44ec206f8b561.tar.bz2
Add StreamInitiation Elements.
Adds StreamInitiationFileInfo Element, its Parser and Serializer. Adds StreamInitiation Element, its Parser and Serializer. Adds StreamError Parser and Serializer. Updates StreamManagementEnabled Element. License: This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details. Test-Information: Tests added for StreamInitiation Parser and Serializer, which passes. Change-Id: I21a7de3f6a5ac0955b6e5aaae3c2607a30eae002
Diffstat (limited to 'src/com/isode/stroke/serializer')
-rw-r--r--src/com/isode/stroke/serializer/StreamErrorSerializer.java65
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java4
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/StreamInitiationFileInfoSerializer.java57
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/StreamInitiationSerializer.java79
4 files changed, 203 insertions, 2 deletions
diff --git a/src/com/isode/stroke/serializer/StreamErrorSerializer.java b/src/com/isode/stroke/serializer/StreamErrorSerializer.java
new file mode 100644
index 0000000..2455efe
--- /dev/null
+++ b/src/com/isode/stroke/serializer/StreamErrorSerializer.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010-2014 Isode Limited.
+ * All rights reserved.
+ * See the COPYING file for more information.
+ */
+/*
+ * Copyright (c) 2015 Tarun Gupta.
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+package com.isode.stroke.serializer;
+
+import com.isode.stroke.serializer.GenericElementSerializer;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.StreamError;
+import com.isode.stroke.elements.Element;
+
+public class StreamErrorSerializer extends GenericElementSerializer<StreamError> {
+
+ public StreamErrorSerializer() {
+ super(StreamError.class);
+ }
+
+ public String serialize(Element element) {
+ StreamError error = (StreamError)element;
+ XMLElement errorElement = new XMLElement("error", "http://etherx.jabber.org/streams");
+
+ String typeTag = "";
+ switch (error.getType()) {
+ case BadFormat: typeTag = "bad-format"; break;
+ case BadNamespacePrefix: typeTag = "bad-namespace-prefix"; break;
+ case Conflict: typeTag = "conflict"; break;
+ case ConnectionTimeout: typeTag = "connection-timeout"; break;
+ case HostGone: typeTag = "host-gone"; break;
+ case HostUnknown: typeTag = "host-unknown"; break;
+ case ImproperAddressing: typeTag = "improper-addressing"; break;
+ case InternalServerError: typeTag = "internal-server-error"; break;
+ case InvalidFrom: typeTag = "invalid-from"; break;
+ case InvalidID: typeTag = "invalid-id"; break;
+ case InvalidNamespace: typeTag = "invalid-namespace"; break;
+ case InvalidXML: typeTag = "invalid-xml"; break;
+ case NotAuthorized: typeTag = "not-authorized"; break;
+ case NotWellFormed: typeTag = "not-well-formed"; break;
+ case PolicyViolation: typeTag = "policy-violation"; break;
+ case RemoteConnectionFailed: typeTag = "remote-connection-failed"; break;
+ case Reset: typeTag = "reset"; break;
+ case ResourceConstraint: typeTag = "resource-constraint"; break;
+ case RestrictedXML: typeTag = "restricted-xml"; break;
+ case SeeOtherHost: typeTag = "see-other-host"; break;
+ case SystemShutdown: typeTag = "system-shutdown"; break;
+ case UndefinedCondition: typeTag = "undefined-condition"; break;
+ case UnsupportedEncoding: typeTag = "unsupported-encoding"; break;
+ case UnsupportedStanzaType: typeTag = "unsupported-stanza-type"; break;
+ case UnsupportedVersion: typeTag = "unsupported-version"; break;
+ }
+ errorElement.addNode(new XMLElement(typeTag, "urn:ietf:params:xml:ns:xmpp-streams"));
+
+ if (!error.getText().isEmpty()) {
+ errorElement.addNode(new XMLElement("text", "urn:ietf:params:xml:ns:xmpp-streams", error.getText()));
+ }
+
+ return errorElement.serialize();
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
index 64b17d1..ba0d4e9 100644
--- a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
+++ b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
@@ -53,8 +53,8 @@ public class FullPayloadSerializerCollection extends PayloadSerializerCollection
addSerializer(new StartSessionSerializer());
addSerializer(new SecurityLabelSerializer());
addSerializer(new SecurityLabelsCatalogSerializer());
- //addSerializer(new StreamInitiationFileInfoSerializer());
- //addSerializer(new StreamInitiationSerializer());
+ addSerializer(new StreamInitiationFileInfoSerializer());
+ addSerializer(new StreamInitiationSerializer());
addSerializer(new ThreadSerializer());
addSerializer(new BytestreamsSerializer());
addSerializer(new VCardSerializer());
diff --git a/src/com/isode/stroke/serializer/payloadserializers/StreamInitiationFileInfoSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/StreamInitiationFileInfoSerializer.java
new file mode 100644
index 0000000..1823dba
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/StreamInitiationFileInfoSerializer.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+/*
+ * Copyright (c) 2015 Tarun Gupta.
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.xml.XMLTextNode;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.StreamInitiationFileInfo;
+import com.isode.stroke.base.NotNull;
+import com.isode.stroke.base.DateTime;
+
+public class StreamInitiationFileInfoSerializer extends GenericPayloadSerializer<StreamInitiationFileInfo> {
+
+ public StreamInitiationFileInfoSerializer() {
+ super(StreamInitiationFileInfo.class);
+ }
+
+ public String serializePayload(StreamInitiationFileInfo fileInfo) {
+ XMLElement fileElement = new XMLElement("file", "http://jabber.org/protocol/si/profile/file-transfer");
+
+ if (fileInfo.getDate() != null) {
+ fileElement.setAttribute("date", DateTime.dateToString(fileInfo.getDate()));
+ }
+ fileElement.setAttribute("hash", fileInfo.getHash());
+ if (!fileInfo.getAlgo().equals("md5")) {
+ fileElement.setAttribute("algo", fileInfo.getAlgo());
+ }
+ if (fileInfo.getName().length() != 0) {
+ fileElement.setAttribute("name", fileInfo.getName());
+ }
+ if (fileInfo.getSize() != 0) {
+ fileElement.setAttribute("size", Long.toString(fileInfo.getSize()));
+ }
+ if (fileInfo.getDescription().length() != 0) {
+ XMLElement desc = new XMLElement("desc", "", fileInfo.getDescription());
+ fileElement.addNode(desc);
+ }
+ if (fileInfo.getSupportsRangeRequests()) {
+ XMLElement range = new XMLElement("range");
+ if (fileInfo.getRangeOffset() != 0) {
+ range.setAttribute("offset", Long.toString(fileInfo.getRangeOffset()));
+ }
+ fileElement.addNode(range);
+ }
+ return fileElement.serialize();
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/StreamInitiationSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/StreamInitiationSerializer.java
new file mode 100644
index 0000000..64c608c
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/StreamInitiationSerializer.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2010-2013 Isode Limited.
+ * All rights reserved.
+ * See the COPYING file for more information.
+ */
+/*
+ * Copyright (c) 2015 Tarun Gupta.
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.xml.XMLTextNode;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.StreamInitiation;
+import com.isode.stroke.elements.StreamInitiationFileInfo;
+import com.isode.stroke.elements.Form;
+import com.isode.stroke.elements.FormField;
+import com.isode.stroke.base.NotNull;
+
+public class StreamInitiationSerializer extends GenericPayloadSerializer<StreamInitiation> {
+
+ private static final String FILE_TRANSFER_NS = "http://jabber.org/protocol/si/profile/file-transfer";
+ private static final String FEATURE_NEG_NS = "http://jabber.org/protocol/feature-neg";
+
+ public StreamInitiationSerializer() {
+ super(StreamInitiation.class);
+ }
+
+ public String serializePayload(StreamInitiation streamInitiation) {
+ assert(streamInitiation.getIsFileTransfer() == true);
+
+ XMLElement siElement = new XMLElement("si", "http://jabber.org/protocol/si");
+ if (streamInitiation.getID().length() != 0) {
+ siElement.setAttribute("id", streamInitiation.getID());
+ }
+ siElement.setAttribute("profile", FILE_TRANSFER_NS);
+
+ if (streamInitiation.getFileInfo() != null) {
+ StreamInitiationFileInfo file = streamInitiation.getFileInfo();
+ XMLElement fileElement = new XMLElement("file", "http://jabber.org/protocol/si/profile/file-transfer");
+ fileElement.setAttribute("name", file.getName());
+ if (file.getSize() != 0) {
+ fileElement.setAttribute("size", Long.toString(file.getSize()));
+ }
+ if (file.getDescription().length() != 0) {
+ XMLElement descElement = new XMLElement("desc");
+ descElement.addNode(new XMLTextNode(file.getDescription()));
+ fileElement.addNode(descElement);
+ }
+ siElement.addNode(fileElement);
+ }
+
+ XMLElement featureElement = new XMLElement("feature", FEATURE_NEG_NS);
+ if (streamInitiation.getProvidedMethods().size() > 0) {
+ Form form = new Form(Form.Type.FORM_TYPE);
+ FormField field = new FormField(FormField.Type.LIST_SINGLE_TYPE);
+ field.setName("stream-method");
+ for(String method : streamInitiation.getProvidedMethods()) {
+ field.addOption(new FormField.Option("", method));
+ }
+ form.addField(field);
+ featureElement.addNode(new XMLRawTextNode(new FormSerializer().serialize(form)));
+ }
+ else if (streamInitiation.getRequestedMethod().length() != 0) {
+ Form form = new Form(Form.Type.SUBMIT_TYPE);
+ FormField field = new FormField(FormField.Type.LIST_SINGLE_TYPE);
+ field.addValue(streamInitiation.getRequestedMethod());
+ field.setName("stream-method");
+ form.addField(field);
+ featureElement.addNode(new XMLRawTextNode(new FormSerializer().serialize(form)));
+ }
+ siElement.addNode(featureElement);
+ return siElement.serialize();
+ }
+} \ No newline at end of file