/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include "Swiften/Serializer/XMPPSerializer.h" #include #include #include #include #include "Swiften/Elements/ProtocolHeader.h" #include "Swiften/Base/foreach.h" #include "Swiften/Serializer/CompressRequestSerializer.h" #include "Swiften/Serializer/CompressFailureSerializer.h" #include "Swiften/Serializer/StreamErrorSerializer.h" #include "Swiften/Serializer/StreamFeaturesSerializer.h" #include "Swiften/Serializer/AuthRequestSerializer.h" #include "Swiften/Serializer/AuthFailureSerializer.h" #include "Swiften/Serializer/AuthSuccessSerializer.h" #include "Swiften/Serializer/AuthChallengeSerializer.h" #include "Swiften/Serializer/AuthResponseSerializer.h" #include "Swiften/Serializer/EnableStreamManagementSerializer.h" #include "Swiften/Serializer/StreamManagementEnabledSerializer.h" #include "Swiften/Serializer/StreamManagementFailedSerializer.h" #include "Swiften/Serializer/StanzaAckSerializer.h" #include "Swiften/Serializer/StanzaAckRequestSerializer.h" #include "Swiften/Serializer/StartTLSRequestSerializer.h" #include "Swiften/Serializer/StartTLSFailureSerializer.h" #include "Swiften/Serializer/TLSProceedSerializer.h" #include "Swiften/Serializer/MessageSerializer.h" #include "Swiften/Serializer/PresenceSerializer.h" #include "Swiften/Serializer/IQSerializer.h" #include "Swiften/Serializer/ComponentHandshakeSerializer.h" namespace Swift { XMPPSerializer::XMPPSerializer(PayloadSerializerCollection* payloadSerializers, StreamType type) : type_(type) { serializers_.push_back(boost::make_shared(payloadSerializers)); serializers_.push_back(boost::make_shared(payloadSerializers)); serializers_.push_back(boost::make_shared(payloadSerializers)); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); serializers_.push_back(boost::make_shared()); } String XMPPSerializer::serializeHeader(const ProtocolHeader& header) const { String result = " element) const { std::vector< boost::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 { std::cerr << "Could not find serializer for " << typeid(*(element.get())).name() << std::endl; return ""; } } String XMPPSerializer::serializeFooter() const { return ""; } 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 ""; } }