diff options
Diffstat (limited to 'Swiften/Queries/RawRequest.h')
-rw-r--r-- | Swiften/Queries/RawRequest.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Swiften/Queries/RawRequest.h b/Swiften/Queries/RawRequest.h new file mode 100644 index 0000000..477952f --- /dev/null +++ b/Swiften/Queries/RawRequest.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2011 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include <boost/smart_ptr/make_shared.hpp> +#include <typeinfo> + +#include <Swiften/Queries/Request.h> +#include <Swiften/Elements/RawXMLPayload.h> +#include <Swiften/Elements/ErrorPayload.h> +#include <Swiften/Serializer/PayloadSerializer.h> +#include <Swiften/Serializer/PayloadSerializers/ErrorSerializer.h> +#include <Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h> + +namespace Swift { + class RawRequest : public Request { + public: + typedef boost::shared_ptr<RawRequest> ref; + + static ref create(IQ::Type type, const JID& recipient, const std::string& data, IQRouter* router) { + return ref(new RawRequest(type, recipient, data, router)); + } + + boost::signal<void (const std::string&)> onResponse; + + private: + RawRequest(IQ::Type type, const JID& receiver, const std::string& data, IQRouter* router) : Request(type, receiver, boost::make_shared<RawXMLPayload>(data), router) { + } + + virtual void handleResponse(Payload::ref payload, ErrorPayload::ref error) { + if (error) { + onResponse(ErrorSerializer().serializePayload(error)); + } + else { + assert(payload); + PayloadSerializer* serializer = serializers.getPayloadSerializer(payload); + assert(serializer); + onResponse(serializer->serialize(payload)); + } + } + + private: + FullPayloadSerializerCollection serializers; + }; +} |