/* * Copyright (c) 2014-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Swift; ForwardedSerializer::ForwardedSerializer(PayloadSerializerCollection* serializers) : serializers_(serializers) { } ForwardedSerializer::~ForwardedSerializer() { } std::string ForwardedSerializer::serializePayload(std::shared_ptr payload) const { if (!payload) { return ""; } XMLElement element("forwarded", "urn:xmpp:forward:0"); if (payload->getDelay()) { element.addNode(std::make_shared(DelaySerializer().serialize(payload->getDelay()))); } if (payload->getStanza()) { /* find out what type of stanza we are dealing with and branch into the correct serializer*/ std::shared_ptr iq; std::shared_ptr message; std::shared_ptr presence; const std::string ns = "jabber:client"; if ((iq = std::dynamic_pointer_cast(payload->getStanza()))) { element.addNode(std::make_shared(safeByteArrayToString(IQSerializer(serializers_).serialize(iq, ns)))); } else if ((message = std::dynamic_pointer_cast(payload->getStanza()))) { element.addNode(std::make_shared(safeByteArrayToString(MessageSerializer(serializers_).serialize(message, ns)))); } else if ((presence = std::dynamic_pointer_cast(payload->getStanza()))) { element.addNode(std::make_shared(safeByteArrayToString(PresenceSerializer(serializers_).serialize(presence, ns)))); } } return element.serialize(); }