/* * Copyright (c) 2010-2019 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Swift { XMPPSerializer::XMPPSerializer(PayloadSerializerCollection* payloadSerializers, StreamType type, bool setExplictNSonTopLevelElements) : type_(type) { serializers_.push_back(std::make_shared(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : boost::optional())); serializers_.push_back(std::make_shared(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : boost::optional())); serializers_.push_back(std::make_shared(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : boost::optional())); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); serializers_.push_back(std::make_shared()); } std::string XMPPSerializer::serializeHeader(const ProtocolHeader& header) const { std::string result = " element) const { std::vector< std::shared_ptr >::const_iterator i = std::find_if(serializers_.begin(), serializers_.end(), boost::bind(&ElementSerializer::canSerialize, _1, element)); if (i != serializers_.end()) { return (*i)->serialize(element); } else { SWIFT_LOG(warning) << "Could not find serializer for " << typeid(*(element.get())).name(); return createSafeByteArray(""); } } std::string XMPPSerializer::serializeFooter() const { return ""; } std::string XMPPSerializer::getDefaultNamespace() const { switch (type_) { case ClientStreamType: return "jabber:client"; case ServerStreamType: return "jabber:server"; case ComponentStreamType: return "jabber:component:accept"; } assert(false); return ""; } }