diff --git a/include/Swiften/Serializer/PayloadSerializers/PrivilegeSerializer.cpp b/include/Swiften/Serializer/PayloadSerializers/PrivilegeSerializer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1d28267e38bc60b5024c37a291c45fa2e42ca7e7 --- /dev/null +++ b/include/Swiften/Serializer/PayloadSerializers/PrivilegeSerializer.cpp @@ -0,0 +1,54 @@ +/* + * 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(); +} + +}