summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/serializer/payloadserializers/JinglePayloadSerializer.java')
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/JinglePayloadSerializer.java158
1 files changed, 158 insertions, 0 deletions
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