diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-12-04 12:43:57 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-12-04 13:24:48 (GMT) |
commit | bbf8a5fcb47d649bdcee1b2122eaa76f2c914ef7 (patch) | |
tree | 3cef6ffab06f263ad6f5dc3df5d7ba065223f84e /Swiften | |
parent | ebd2b8b8a2f1ad2812543c5350c0acf0a5b8c188 (diff) | |
download | swift-contrib-bbf8a5fcb47d649bdcee1b2122eaa76f2c914ef7.zip swift-contrib-bbf8a5fcb47d649bdcee1b2122eaa76f2c914ef7.tar.bz2 |
Added EchoPayload parserialement.
Diffstat (limited to 'Swiften')
-rw-r--r-- | Swiften/Parser/GenericPayloadParser.h | 11 | ||||
-rw-r--r-- | Swiften/Parser/GenericPayloadParserFactory.h | 6 | ||||
-rw-r--r-- | Swiften/Parser/PayloadParser.h | 29 | ||||
-rw-r--r-- | Swiften/Parser/PayloadParserFactory.h | 15 | ||||
-rw-r--r-- | Swiften/SConscript | 4 | ||||
-rw-r--r-- | Swiften/Serializer/GenericPayloadSerializer.h | 5 |
6 files changed, 51 insertions, 19 deletions
diff --git a/Swiften/Parser/GenericPayloadParser.h b/Swiften/Parser/GenericPayloadParser.h index 0c0f8c3..a1720e8 100644 --- a/Swiften/Parser/GenericPayloadParser.h +++ b/Swiften/Parser/GenericPayloadParser.h @@ -4,8 +4,7 @@ * See Documentation/Licenses/GPLv3.txt for more information. */ -#ifndef GENERICPAYLOADPARSER_H -#define GENERICPAYLOADPARSER_H +#pragma once #include <boost/shared_ptr.hpp> @@ -15,6 +14,12 @@ namespace Swift { class String; class FormParser; + /** + * A generic payload parser for payloads of the given type. + * + * This class provides getPayloadInternal() for retrieving the actual + * payload. + */ template<typename PAYLOAD_TYPE> class GenericPayloadParser : public PayloadParser { public: @@ -34,5 +39,3 @@ namespace Swift { boost::shared_ptr<PAYLOAD_TYPE> payload_; }; } - -#endif diff --git a/Swiften/Parser/GenericPayloadParserFactory.h b/Swiften/Parser/GenericPayloadParserFactory.h index 05b996a..a636dd7 100644 --- a/Swiften/Parser/GenericPayloadParserFactory.h +++ b/Swiften/Parser/GenericPayloadParserFactory.h @@ -11,9 +11,15 @@ namespace Swift { + /** + * A generic class for PayloadParserFactories that parse a specific payload (given as the template parameter of the class). + */ template<typename PARSER_TYPE> class GenericPayloadParserFactory : public PayloadParserFactory { public: + /** + * Construct a parser factory that can parse the given top-level tag in the given namespace. + */ GenericPayloadParserFactory(const String& tag, const String& xmlns = "") : tag_(tag), xmlns_(xmlns) {} virtual bool canParse(const String& element, const String& ns, const AttributeMap&) const { diff --git a/Swiften/Parser/PayloadParser.h b/Swiften/Parser/PayloadParser.h index 8a0fc35..a5a9025 100644 --- a/Swiften/Parser/PayloadParser.h +++ b/Swiften/Parser/PayloadParser.h @@ -4,8 +4,7 @@ * See Documentation/Licenses/GPLv3.txt for more information. */ -#ifndef SWIFTEN_PAYLOADPARSER_H -#define SWIFTEN_PAYLOADPARSER_H +#pragma once #include <boost/shared_ptr.hpp> #include "Swiften/Parser/AttributeMap.h" @@ -15,16 +14,36 @@ namespace Swift { class String; + /** + * A parser for XMPP stanza payloads. + * + * The parser is event driven: handleStartElement, handleEndElement, and handleCharacterData will be called + * when the parser detects start and end of XML elements, or character data. + * After the data for the given top-level element is processed, getPayload() will be called to retrieve the + * payload. + */ class PayloadParser { public: virtual ~PayloadParser(); + /** + * Handle the start of an XML element. + */ virtual void handleStartElement(const String& element, const String& ns, const AttributeMap& attributes) = 0; + + /** + * Handle the end of an XML element. + */ virtual void handleEndElement(const String& element, const String& ns) = 0; + + /** + * Handle character data. + */ virtual void handleCharacterData(const String& data) = 0; - virtual boost::shared_ptr<Payload> getPayload() const = 0; + /** + * Retrieve a pointer to the payload. + */ + virtual Payload::ref getPayload() const = 0; }; } - -#endif diff --git a/Swiften/Parser/PayloadParserFactory.h b/Swiften/Parser/PayloadParserFactory.h index d97595b..3d647c6 100644 --- a/Swiften/Parser/PayloadParserFactory.h +++ b/Swiften/Parser/PayloadParserFactory.h @@ -4,8 +4,7 @@ * See Documentation/Licenses/GPLv3.txt for more information. */ -#ifndef SWIFTEN_PAYLOADPARSERFACTORY_H -#define SWIFTEN_PAYLOADPARSERFACTORY_H +#pragma once #include "Swiften/Parser/AttributeMap.h" @@ -13,13 +12,21 @@ namespace Swift { class String; class PayloadParser; + /** + * A factory for PayloadParsers. + */ class PayloadParserFactory { public: virtual ~PayloadParserFactory(); + /** + * Checks whether this factory can parse the given top-level element in the given namespace (with the given attributes). + */ virtual bool canParse(const String& element, const String& ns, const AttributeMap& attributes) const = 0; + + /** + * Creates a new payload parser. + */ virtual PayloadParser* createPayloadParser() = 0; }; } - -#endif diff --git a/Swiften/SConscript b/Swiften/SConscript index 9827171..afab713 100644 --- a/Swiften/SConscript +++ b/Swiften/SConscript @@ -293,7 +293,7 @@ if env["SCONS_STAGE"] == "build" : # Generate the Swiften header swiften_header = "#pragma once\n" top_path = env.Dir("..").abspath - public_dirs = ["Avatars", "Base", "Chat", "Client", "Component", "Disco", "Entity", "Elements", "JID", "MUC", "Network", "Presence", "Queries", "Roster", "StringCodecs", "TLS", "VCards"] + public_dirs = ["Avatars", "Base", "Chat", "Client", "Component", "Disco", "Entity", "Elements", "JID", "MUC", "Network", "Parser", "Presence", "Queries", "Roster", "Serializer", "StringCodecs", "TLS", "VCards"] for public_dir in public_dirs : for root, dirs, files in os.walk(env.Dir(public_dir).abspath) : if root.endswith("UnitTest") : @@ -303,7 +303,7 @@ if env["SCONS_STAGE"] == "build" : for file in files : if not file.endswith(".h") : continue - if file.startswith("CAres") : + if file.startswith("CAres") or file.startswith("LibXML") or file.startswith("Expat") : continue swiften_header += "#include \"" + os.path.relpath(os.path.join(root, file), top_path) + "\"\n" for file in ["EventLoop/SimpleEventLoop.h"] : diff --git a/Swiften/Serializer/GenericPayloadSerializer.h b/Swiften/Serializer/GenericPayloadSerializer.h index b1cb9c4..b415256 100644 --- a/Swiften/Serializer/GenericPayloadSerializer.h +++ b/Swiften/Serializer/GenericPayloadSerializer.h @@ -4,8 +4,7 @@ * See Documentation/Licenses/GPLv3.txt for more information. */ -#ifndef SWIFTEN_GenericPayloadSerializer_H -#define SWIFTEN_GenericPayloadSerializer_H +#pragma once #include <boost/shared_ptr.hpp> @@ -27,5 +26,3 @@ namespace Swift { virtual String serializePayload(boost::shared_ptr<PAYLOAD_TYPE>) const = 0; }; } - -#endif |