/* * Implements Privilege tag for XEP-0356: Privileged Entity * Licensed under the Simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #include #include #include #include #include #ifdef SWIFTEN_SUPPORTS_FORWARDED #include #include #else #include #endif namespace Swift { PrivilegeSerializer::PrivilegeSerializer(PayloadSerializerCollection* serializers) : GenericPayloadSerializer(), serializers_(serializers) { } PrivilegeSerializer::~PrivilegeSerializer() { } std::string PrivilegeSerializer::serializePayload(SWIFTEN_SHRPTR_NAMESPACE::shared_ptr payload) const { if (!payload) { return ""; } XMLElement element("privilege", "urn:xmpp:privilege:1"); SWIFTEN_SHRPTR_NAMESPACE::shared_ptr forwarded(payload->getForwarded()); if (forwarded) { std::string forwardedStr = ""; #ifdef SWIFTEN_SUPPORTS_FORWARDED forwardedStr = ForwardedSerializer(serializers_).serialize(forwarded); #else PayloadSerializer* serializer = serializers_->getPayloadSerializer(payload); if(serializer) { forwardedStr = serializer->serialize(payload); } #endif element.addNode(SWIFTEN_SHRPTR_NAMESPACE::make_shared(forwardedStr)); } return element.serialize(); } }