summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/serializer')
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java6
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/JingleContentPayloadSerializer.java96
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferDescriptionSerializer.java41
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferFileInfoSerializer.java71
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferHashSerializer.java48
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/JingleIBBTransportPayloadSerializer.java37
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/JinglePayloadSerializer.java158
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/JingleS5BTransportPayloadSerializer.java98
8 files changed, 555 insertions, 0 deletions
diff --git a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
index d8f90c3..8c1f14b 100644
--- a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
+++ b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
@@ -24,6 +24,12 @@ public class FullPayloadSerializerCollection extends PayloadSerializerCollection
addSerializer(new ErrorSerializer());
addSerializer(new InBandRegistrationPayloadSerializer());
addSerializer(new IBBSerializer());
+ addSerializer(new JingleIBBTransportPayloadSerializer());
+ addSerializer(new JingleS5BTransportPayloadSerializer());
+ addSerializer(new JingleFileTransferFileInfoSerializer());
+ addSerializer(new JingleFileTransferDescriptionSerializer());
+ addSerializer(new JingleFileTransferHashSerializer());
+ addSerializer(new JingleContentPayloadSerializer());
addSerializer(new RosterSerializer());
addSerializer(new MUCPayloadSerializer());
addSerializer(new MUCDestroyPayloadSerializer());
diff --git a/src/com/isode/stroke/serializer/payloadserializers/JingleContentPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/JingleContentPayloadSerializer.java
new file mode 100644
index 0000000..b295807
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/JingleContentPayloadSerializer.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2011 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+/*
+ * Copyright (c) 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.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.xml.XMLNode;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.JingleS5BTransportPayload;
+import com.isode.stroke.elements.JingleIBBTransportPayload;
+import com.isode.stroke.elements.JingleTransportPayload;
+import com.isode.stroke.elements.JingleFileTransferDescription;
+import com.isode.stroke.elements.JingleDescription;
+import com.isode.stroke.elements.JingleContentPayload;
+import com.isode.stroke.serializer.payloadserializers.JingleFileTransferDescriptionSerializer;
+import com.isode.stroke.serializer.payloadserializers.JingleIBBTransportPayloadSerializer;
+import com.isode.stroke.serializer.payloadserializers.JingleS5BTransportPayloadSerializer;
+import java.util.logging.Logger;
+
+public class JingleContentPayloadSerializer extends GenericPayloadSerializer<JingleContentPayload> {
+
+ private Logger logger_ = Logger.getLogger(this.getClass().getName());
+
+ public JingleContentPayloadSerializer() {
+ super(JingleContentPayload.class);
+ }
+
+ private String creatorToString(JingleContentPayload.Creator creator) {
+ switch(creator) {
+ case InitiatorCreator:
+ return "initiator";
+ case ResponderCreator:
+ return "responder";
+ case UnknownCreator:
+ logger_.warning("Serializing unknown creator value.");
+ return "ERROR ERROR ERROR";
+ }
+ assert(false);
+ return "";
+ }
+
+ public String serializePayload(JingleContentPayload payload) {
+
+ XMLElement payloadXML = new XMLElement("content");
+ payloadXML.setAttribute("creator", creatorToString(payload.getCreator()));
+ payloadXML.setAttribute("name", payload.getName());
+
+ if (!payload.getDescriptions().isEmpty()) {
+ // JingleFileTransferDescription
+ JingleFileTransferDescriptionSerializer ftSerializer = new JingleFileTransferDescriptionSerializer();
+ JingleFileTransferDescription filetransfer;
+
+ for(JingleDescription desc : payload.getDescriptions()) {
+ if(desc instanceof JingleFileTransferDescription) {
+ filetransfer = (JingleFileTransferDescription)(desc);
+ payloadXML.addNode(new XMLRawTextNode(ftSerializer.serializePayload(filetransfer)));
+ }
+ }
+ }
+
+ if (!payload.getTransports().isEmpty()) {
+ // JingleIBBTransportPayload
+ JingleIBBTransportPayloadSerializer ibbSerializer = new JingleIBBTransportPayloadSerializer();
+ JingleIBBTransportPayload ibb;
+
+ // JingleS5BTransportPayload
+ JingleS5BTransportPayloadSerializer s5bSerializer = new JingleS5BTransportPayloadSerializer();
+ JingleS5BTransportPayload s5b;
+
+ for(JingleTransportPayload transport: payload.getTransports()) {
+ if(transport instanceof JingleIBBTransportPayload) {
+ ibb = (JingleIBBTransportPayload)(transport);
+ payloadXML.addNode(new XMLRawTextNode(ibbSerializer.serializePayload(ibb)));
+ } else if (transport instanceof JingleS5BTransportPayload) {
+ s5b = (JingleS5BTransportPayload)(transport);
+ payloadXML.addNode(new XMLRawTextNode(s5bSerializer.serializePayload(s5b)));
+ }
+ }
+ }
+ return payloadXML.serialize();
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferDescriptionSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferDescriptionSerializer.java
new file mode 100644
index 0000000..5bc14b8
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferDescriptionSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2011 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+/*
+ * Copyright (c) 2015 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.payloadserializers.JingleFileTransferFileInfoSerializer;
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.JingleFileTransferDescription;
+import com.isode.stroke.elements.JingleFileTransferFileInfo;
+import com.isode.stroke.base.NotNull;
+
+public class JingleFileTransferDescriptionSerializer extends GenericPayloadSerializer<JingleFileTransferDescription> {
+
+ public JingleFileTransferDescriptionSerializer() {
+ super(JingleFileTransferDescription.class);
+ }
+
+ public String serializePayload(JingleFileTransferDescription payload) {
+ XMLElement description = new XMLElement("description", "urn:xmpp:jingle:apps:file-transfer:4");
+
+ JingleFileTransferFileInfoSerializer fileInfoSerializer = new JingleFileTransferFileInfoSerializer();
+ XMLRawTextNode fileInfoXML = new XMLRawTextNode(fileInfoSerializer.serialize((JingleFileTransferFileInfo)(payload.getFileInfo())));
+ description.addNode(fileInfoXML);
+ return description.serialize();
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferFileInfoSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferFileInfoSerializer.java
new file mode 100644
index 0000000..a9ae722
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferFileInfoSerializer.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 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.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.JingleFileTransferFileInfo;
+import com.isode.stroke.base.NotNull;
+import com.isode.stroke.base.DateTime;
+import com.isode.stroke.base.ByteArray;
+import com.isode.stroke.stringcodecs.Base64;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Date;
+
+public class JingleFileTransferFileInfoSerializer extends GenericPayloadSerializer<JingleFileTransferFileInfo> {
+
+ public JingleFileTransferFileInfoSerializer() {
+ super(JingleFileTransferFileInfo.class);
+ }
+
+ public String serializePayload(JingleFileTransferFileInfo fileInfo) {
+ XMLElement fileElement = new XMLElement("file", "");
+
+ if (fileInfo.getDate().getTime() != 0L) {
+ fileElement.addNode(new XMLElement("date", "", DateTime.dateToString(fileInfo.getDate())));
+ }
+
+ if (fileInfo.getDescription().length() != 0) {
+ fileElement.addNode(new XMLElement("desc", "", fileInfo.getDescription()));
+ }
+
+ if (fileInfo.getMediaType().length() != 0) {
+ fileElement.addNode(new XMLElement("media-type", "", fileInfo.getMediaType()));
+ }
+
+ if (fileInfo.getName().length() != 0) {
+ fileElement.addNode(new XMLElement("name", "", fileInfo.getName()));
+ }
+
+ if (fileInfo.getSupportsRangeRequests()) {
+ XMLElement range = new XMLElement("range");
+ if (fileInfo.getRangeOffset() != 0) {
+ range.setAttribute("offset", Long.toString(fileInfo.getRangeOffset()));
+ }
+ fileElement.addNode(range);
+ }
+
+ if (fileInfo.getSize() > 0) {
+ fileElement.addNode(new XMLElement("size", "", Long.toString(fileInfo.getSize())));
+ }
+
+ for (Map.Entry<String, ByteArray> entry : fileInfo.getHashes().entrySet()) {
+ XMLElement hash = new XMLElement("hash", "urn:xmpp:hashes:1", Base64.encode(entry.getValue()));
+ hash.setAttribute("algo", entry.getKey());
+ fileElement.addNode(hash);
+ }
+
+ return fileElement.serialize();
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferHashSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferHashSerializer.java
new file mode 100644
index 0000000..73a3fd6
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/JingleFileTransferHashSerializer.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2011 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+/*
+ * Copyright (c) 2015 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.payloadserializers.JingleFileTransferFileInfoSerializer;
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.JingleFileTransferHash;
+import com.isode.stroke.elements.JingleFileTransferFileInfo;
+import com.isode.stroke.base.NotNull;
+
+public class JingleFileTransferHashSerializer extends GenericPayloadSerializer<JingleFileTransferHash> {
+
+ public JingleFileTransferHashSerializer() {
+ super(JingleFileTransferHash.class);
+ }
+
+ public String serializePayload(JingleFileTransferHash payload) {
+ // code for version urn:xmpp:jingle:apps:file-transfer:2
+ //XMLElement hash("hash", "urn:xmpp:jingle:apps:file-transfer:info:2", payload->getHash());
+
+ // code for version urn:xmpp:jingle:apps:file-transfer:4
+ XMLElement checksum = new XMLElement("checksum", "urn:xmpp:jingle:apps:file-transfer:4");
+
+ JingleFileTransferFileInfoSerializer fileSerializer = new JingleFileTransferFileInfoSerializer();
+
+ XMLRawTextNode file = new XMLRawTextNode(fileSerializer.serialize((JingleFileTransferFileInfo)(payload.getFileInfo())));
+
+ checksum.addNode(file);
+
+ return checksum.serialize();
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/JingleIBBTransportPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/JingleIBBTransportPayloadSerializer.java
new file mode 100644
index 0000000..3633ba9
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/JingleIBBTransportPayloadSerializer.java
@@ -0,0 +1,37 @@
+/*
+ * 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.XMLRawTextNode;
+import com.isode.stroke.serializer.xml.XMLNode;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.JingleIBBTransportPayload;
+import com.isode.stroke.base.NotNull;
+
+public class JingleIBBTransportPayloadSerializer extends GenericPayloadSerializer<JingleIBBTransportPayload> {
+
+ public JingleIBBTransportPayloadSerializer() {
+ super(JingleIBBTransportPayload.class);
+ }
+
+ public String serializePayload(JingleIBBTransportPayload payload) {
+ XMLElement payloadXML = new XMLElement("transport", "urn:xmpp:jingle:transports:ibb:1");
+ if (payload.getBlockSize() > 0) {
+ payloadXML.setAttribute("block-size", Integer.toString(payload.getBlockSize()));
+ }
+ payloadXML.setAttribute("sid", payload.getSessionID());
+
+ return payloadXML.serialize();
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/JinglePayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/JinglePayloadSerializer.java
new file mode 100644
index 0000000..a529f5b
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/JinglePayloadSerializer.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2011 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+/*
+ * Copyright (c) 2015 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.payloadserializers.JingleContentPayloadSerializer;
+import com.isode.stroke.serializer.payloadserializers.JingleFileTransferHashSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializer;
+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.JinglePayload;
+import com.isode.stroke.elements.JingleContentPayload;
+import com.isode.stroke.elements.JingleIBBTransportPayload;
+import com.isode.stroke.elements.JingleFileTransferDescription;
+import com.isode.stroke.elements.JingleFileTransferHash;
+import com.isode.stroke.elements.Payload;
+import com.isode.stroke.base.NotNull;
+import java.util.Vector;
+import java.util.logging.Logger;
+
+public class JinglePayloadSerializer extends GenericPayloadSerializer<JinglePayload> {
+
+ private PayloadSerializerCollection serializers;
+ private Logger logger_ = Logger.getLogger(this.getClass().getName());
+
+ public JinglePayloadSerializer(PayloadSerializerCollection serializers) {
+ super(JinglePayload.class);
+ this.serializers = serializers;
+ }
+
+ private String actionToString(JinglePayload.Action action) {
+ switch(action) {
+ case ContentAccept:
+ return "content-accept";
+ case ContentAdd:
+ return "content-add";
+ case ContentModify:
+ return "content-modify";
+ case ContentReject:
+ return "content-reject";
+ case ContentRemove:
+ return "content-remove";
+ case DescriptionInfo:
+ return "description-info";
+ case SecurityInfo:
+ return "security-info";
+ case SessionAccept:
+ return "session-accept";
+ case SessionInfo:
+ return "session-info";
+ case SessionInitiate:
+ return "session-initiate";
+ case SessionTerminate:
+ return "session-terminate";
+ case TransportAccept:
+ return "transport-accept";
+ case TransportInfo:
+ return "transport-info";
+ case TransportReject:
+ return "transport-reject";
+ case TransportReplace:
+ return "transport-replace";
+ case UnknownAction:
+ logger_.warning("Serializing unknown action value.\n");
+ return "";
+ }
+ assert(false);
+ return "";
+ }
+
+ private String reasonTypeToString(JinglePayload.Reason.Type type) {
+ switch(type) {
+ case UnknownType:
+ logger_.warning("Unknown jingle reason type!\n");
+ return "";
+ case AlternativeSession:
+ return "alternative-session";
+ case Busy:
+ return "busy";
+ case Cancel:
+ return "cancel";
+ case ConnectivityError:
+ return "connectivity-error";
+ case Decline:
+ return "decline";
+ case Expired:
+ return "expired";
+ case FailedApplication:
+ return "failed-application";
+ case FailedTransport:
+ return "failed-transport";
+ case GeneralError:
+ return "general-error";
+ case Gone:
+ return "gone";
+ case IncompatibleParameters:
+ return "incompatible-parameters";
+ case MediaError:
+ return "media-error";
+ case SecurityError:
+ return "security-error";
+ case Success:
+ return "success";
+ case Timeout:
+ return "timeout";
+ case UnsupportedApplications:
+ return "unsupported-applications";
+ case UnsupportedTransports:
+ return "unsupported-transports";
+ }
+ assert(false);
+ return "";
+ }
+
+ public String serializePayload(JinglePayload payload) {
+ XMLElement jinglePayload = new XMLElement("jingle", "urn:xmpp:jingle:1");
+ jinglePayload.setAttribute("action", actionToString(payload.getAction()));
+ jinglePayload.setAttribute("initiator", payload.getInitiator().toString());
+ jinglePayload.setAttribute("sid", payload.getSessionID());
+
+ Vector<Payload> payloads = payload.getPayloads();
+ if (!payloads.isEmpty()) {
+ for(Payload subPayload : payloads) {
+ PayloadSerializer serializer = serializers.getPayloadSerializer(subPayload);
+ if (serializer != null) {
+ jinglePayload.addNode(new XMLRawTextNode(serializer.serialize(subPayload)));
+ }
+ }
+ }
+
+ if (payload.getReason() != null) {
+ XMLElement reason = new XMLElement("reason");
+ reason.addNode(new XMLElement(reasonTypeToString(payload.getReason().type)));
+ if (payload.getReason().text.length() != 0) {
+ reason.addNode(new XMLElement("desc", "", payload.getReason().text));
+ }
+ jinglePayload.addNode(reason);
+ }
+
+ return jinglePayload.serialize();
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/JingleS5BTransportPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/JingleS5BTransportPayloadSerializer.java
new file mode 100644
index 0000000..f6cc205
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/JingleS5BTransportPayloadSerializer.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2011 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+/*
+ * Copyright (c) 2015 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.XMLNode;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.elements.JingleS5BTransportPayload;
+
+public class JingleS5BTransportPayloadSerializer extends GenericPayloadSerializer<JingleS5BTransportPayload> {
+
+ public JingleS5BTransportPayloadSerializer() {
+ super(JingleS5BTransportPayload.class);
+ }
+
+ private String modeToString(JingleS5BTransportPayload.Mode mode) {
+ switch(mode) {
+ case TCPMode:
+ return "tcp";
+ case UDPMode:
+ return "udp";
+ }
+ assert(false);
+ return "";
+ }
+
+ private String typeToString(JingleS5BTransportPayload.Candidate.Type type) {
+ switch(type) {
+ case AssistedType:
+ return "assisted";
+ case DirectType:
+ return "direct";
+ case ProxyType:
+ return "proxy";
+ case TunnelType:
+ return "tunnel";
+ }
+ assert(false);
+ return "";
+ }
+
+ public String serializePayload(JingleS5BTransportPayload payload) {
+
+ XMLElement payloadXML = new XMLElement("transport", "urn:xmpp:jingle:transports:s5b:1");
+ payloadXML.setAttribute("sid", payload.getSessionID());
+ payloadXML.setAttribute("mode", modeToString(payload.getMode()));
+ if (payload.getDstAddr().length() != 0) {
+ payloadXML.setAttribute("dstaddr", payload.getDstAddr());
+ }
+
+ for(JingleS5BTransportPayload.Candidate candidate : payload.getCandidates()) {
+ XMLElement candidateXML = new XMLElement("candidate");
+ candidateXML.setAttribute("cid", candidate.cid);
+ candidateXML.setAttribute("host", candidate.hostPort.getAddress().toString());
+ candidateXML.setAttribute("jid", candidate.jid.toString());
+ candidateXML.setAttribute("port", Integer.toString(candidate.hostPort.getPort()));
+ candidateXML.setAttribute("priority", Integer.toString(candidate.priority));
+ candidateXML.setAttribute("type", typeToString(candidate.type));
+ payloadXML.addNode(candidateXML);
+ }
+
+ if (payload.hasCandidateError()) {
+ payloadXML.addNode(new XMLElement("candidate-error"));
+ }
+ if (payload.hasProxyError()) {
+ payloadXML.addNode(new XMLElement("proxy-error"));
+ }
+
+ if (payload.getActivated().length() != 0) {
+ XMLElement activatedXML = new XMLElement("activated");
+ activatedXML.setAttribute("cid", payload.getActivated());
+ payloadXML.addNode(activatedXML);
+ }
+ if (payload.getCandidateUsed().length() != 0) {
+ XMLElement candusedXML = new XMLElement("candidate-used");
+ candusedXML.setAttribute("cid", payload.getCandidateUsed());
+ payloadXML.addNode(candusedXML);
+ }
+
+ return payloadXML.serialize();
+ }
+} \ No newline at end of file