diff options
| author | Remko Tronçon <git@el-tramo.be> | 2011-09-20 18:49:30 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2011-09-20 19:15:26 (GMT) | 
| commit | 5c1ec7985808aba408bec724f5b90fed0dbcb7ce (patch) | |
| tree | 9d980111f412b55913e3029ac4e28bad18d77f53 | |
| parent | 36ab1556313fe42a77d38d056ace0bd9ae6ce573 (diff) | |
| download | swift-contrib-5c1ec7985808aba408bec724f5b90fed0dbcb7ce.zip swift-contrib-5c1ec7985808aba408bec724f5b90fed0dbcb7ce.tar.bz2  | |
Added XEP-191 parserialements.
| -rw-r--r-- | Swiften/Elements/BlockListPayload.h | 31 | ||||
| -rw-r--r-- | Swiften/Elements/BlockPayload.h | 31 | ||||
| -rw-r--r-- | Swiften/Elements/UnblockPayload.h | 31 | ||||
| -rw-r--r-- | Swiften/Parser/PayloadParsers/BlockParser.h | 39 | ||||
| -rw-r--r-- | Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp | 7 | ||||
| -rw-r--r-- | Swiften/Serializer/PayloadSerializers/BlockSerializer.h | 34 | ||||
| -rw-r--r-- | Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp | 7 | 
7 files changed, 180 insertions, 0 deletions
diff --git a/Swiften/Elements/BlockListPayload.h b/Swiften/Elements/BlockListPayload.h new file mode 100644 index 0000000..25cb602 --- /dev/null +++ b/Swiften/Elements/BlockListPayload.h @@ -0,0 +1,31 @@ +/* + * 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 <vector> + +#include <Swiften/JID/JID.h> +#include <Swiften/Elements/Payload.h> + +namespace Swift { +	class BlockListPayload : public Payload { +		public: +			BlockListPayload() { +			} + +			void addItem(const JID& item) { +				items.push_back(item); +			} + +			const std::vector<JID>& getItems() const { +				return items; +			} + +		private: +			std::vector<JID> items; +	}; +} diff --git a/Swiften/Elements/BlockPayload.h b/Swiften/Elements/BlockPayload.h new file mode 100644 index 0000000..6dd5170 --- /dev/null +++ b/Swiften/Elements/BlockPayload.h @@ -0,0 +1,31 @@ +/* + * 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 <vector> + +#include <Swiften/JID/JID.h> +#include <Swiften/Elements/Payload.h> + +namespace Swift { +	class BlockPayload : public Payload { +		public: +			BlockPayload() { +			} + +			void addItem(const JID& jid) { +				items.push_back(jid); +			} + +			const std::vector<JID>& getItems() const { +				return items; +			} + +		private: +			std::vector<JID> items; +	}; +} diff --git a/Swiften/Elements/UnblockPayload.h b/Swiften/Elements/UnblockPayload.h new file mode 100644 index 0000000..b6593ab --- /dev/null +++ b/Swiften/Elements/UnblockPayload.h @@ -0,0 +1,31 @@ +/* + * 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 <vector> + +#include <Swiften/JID/JID.h> +#include <Swiften/Elements/Payload.h> + +namespace Swift { +	class UnblockPayload : public Payload { +		public: +			UnblockPayload() { +			} + +			void addItem(const JID& item) { +				items.push_back(item); +			} + +			const std::vector<JID>& getItems() const { +				return items; +			} + +		private: +			std::vector<JID> items; +	}; +} diff --git a/Swiften/Parser/PayloadParsers/BlockParser.h b/Swiften/Parser/PayloadParsers/BlockParser.h new file mode 100644 index 0000000..cd727ad --- /dev/null +++ b/Swiften/Parser/PayloadParsers/BlockParser.h @@ -0,0 +1,39 @@ +/* + * 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 <Swiften/Elements/Nickname.h> +#include <Swiften/Parser/GenericPayloadParser.h> + +namespace Swift { +	template<typename BLOCK_ELEMENT> +	class BlockParser : public GenericPayloadParser<BLOCK_ELEMENT> { +		public: +			BlockParser() : GenericPayloadParser<BLOCK_ELEMENT>() { +			} + +			virtual void handleStartElement(const std::string& element, const std::string&, const AttributeMap& attributes) { +				if (level == 1 && element == "item") { +					JID jid(attributes.getAttribute("jid")); +					if (jid.isValid()) { +						GenericPayloadParser<BLOCK_ELEMENT>::getPayloadInternal()->addItem(jid); +					} +				} +				++level; +			} + +			virtual void handleEndElement(const std::string&, const std::string&) { +				--level; +			} + +			virtual void handleCharacterData(const std::string&) { +			} + +		private: +			int level; +	}; +} diff --git a/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp b/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp index 4b143fd..e9c49ee 100644 --- a/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp +++ b/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp @@ -6,11 +6,15 @@  #include <Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h>  #include <Swiften/Base/foreach.h> +#include <Swiften/Elements/BlockPayload.h> +#include <Swiften/Elements/UnblockPayload.h> +#include <Swiften/Elements/BlockListPayload.h>  #include <Swiften/Parser/GenericPayloadParser.h>  #include <Swiften/Parser/PayloadParserFactory.h>  #include <Swiften/Parser/PayloadParsers/ErrorParser.h>  #include <Swiften/Parser/PayloadParsers/ErrorParserFactory.h>  #include <Swiften/Parser/PayloadParsers/BodyParser.h> +#include <Swiften/Parser/PayloadParsers/BlockParser.h>  #include <Swiften/Parser/PayloadParsers/SubjectParser.h>  #include <Swiften/Parser/PayloadParsers/ChatStateParserFactory.h>  #include <Swiften/Parser/PayloadParsers/PriorityParser.h> @@ -68,6 +72,9 @@ FullPayloadParserFactoryCollection::FullPayloadParserFactoryCollection() {  	factories_.push_back(shared_ptr<PayloadParserFactory>(new GenericPayloadParserFactory<CapsInfoParser>("c", "http://jabber.org/protocol/caps")));  	factories_.push_back(shared_ptr<PayloadParserFactory>(new GenericPayloadParserFactory<ResourceBindParser>("bind", "urn:ietf:params:xml:ns:xmpp-bind")));  	factories_.push_back(shared_ptr<PayloadParserFactory>(new GenericPayloadParserFactory<StartSessionParser>("session", "urn:ietf:params:xml:ns:xmpp-session"))); +	factories_.push_back(shared_ptr<PayloadParserFactory>(new GenericPayloadParserFactory<BlockParser<BlockPayload> >("block", "urn:xmpp:blocking"))); +	factories_.push_back(shared_ptr<PayloadParserFactory>(new GenericPayloadParserFactory<BlockParser<BlockListPayload> >("blocklist", "urn:xmpp:blocking"))); +	factories_.push_back(shared_ptr<PayloadParserFactory>(new GenericPayloadParserFactory<BlockParser<UnblockPayload> >("unblock", "urn:xmpp:blocking")));  	factories_.push_back(shared_ptr<PayloadParserFactory>(new SecurityLabelParserFactory()));  	factories_.push_back(shared_ptr<PayloadParserFactory>(new SecurityLabelsCatalogParserFactory()));  	factories_.push_back(shared_ptr<PayloadParserFactory>(new FormParserFactory())); diff --git a/Swiften/Serializer/PayloadSerializers/BlockSerializer.h b/Swiften/Serializer/PayloadSerializers/BlockSerializer.h new file mode 100644 index 0000000..345463c --- /dev/null +++ b/Swiften/Serializer/PayloadSerializers/BlockSerializer.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2010 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 <Swiften/Serializer/GenericPayloadSerializer.h> +#include <Swiften/Serializer/XML/XMLElement.h> +#include <Swiften/Base/foreach.h> + +namespace Swift { +	template<typename BLOCK_ELEMENT> +	class BlockSerializer : public GenericPayloadSerializer<BLOCK_ELEMENT> { +		public: +			BlockSerializer(std::string tag) : GenericPayloadSerializer<BLOCK_ELEMENT>(), tag(tag) { +			} + +			virtual std::string serializePayload(boost::shared_ptr<BLOCK_ELEMENT> payload)  const { +				XMLElement element(tag, "urn:xmpp:blocking"); +				foreach (const JID& jid, payload->getItems()) { +					boost::shared_ptr<XMLElement> item = boost::make_shared<XMLElement>("item"); +					item->setAttribute("jid", jid); +				} +				return element.serialize(); +			} + +		private: +			std::string tag; +	}; +} diff --git a/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp b/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp index 14e3b46..0746c37 100644 --- a/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp +++ b/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp @@ -6,9 +6,13 @@  #include <Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h>  #include <Swiften/Base/foreach.h> +#include <Swiften/Elements/BlockPayload.h> +#include <Swiften/Elements/UnblockPayload.h> +#include <Swiften/Elements/BlockListPayload.h>  #include <Swiften/Serializer/PayloadSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/IBBSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/BodySerializer.h> +#include <Swiften/Serializer/PayloadSerializers/BlockSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/SubjectSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/ChatStateSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/PrioritySerializer.h> @@ -64,6 +68,9 @@ FullPayloadSerializerCollection::FullPayloadSerializerCollection() {  	serializers_.push_back(new DiscoInfoSerializer());  	serializers_.push_back(new DiscoItemsSerializer());  	serializers_.push_back(new CapsInfoSerializer()); +	serializers_.push_back(new BlockSerializer<BlockPayload>("block")); +	serializers_.push_back(new BlockSerializer<UnblockPayload>("unblock")); +	serializers_.push_back(new BlockSerializer<BlockListPayload>("blocklist"));  	serializers_.push_back(new ResourceBindSerializer());  	serializers_.push_back(new StartSessionSerializer());  	serializers_.push_back(new SecurityLabelSerializer());  | 
 Swift