summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften')
-rw-r--r--Swiften/Parser/GenericPayloadParser.h11
-rw-r--r--Swiften/Parser/GenericPayloadParserFactory.h6
-rw-r--r--Swiften/Parser/PayloadParser.h29
-rw-r--r--Swiften/Parser/PayloadParserFactory.h15
-rw-r--r--Swiften/SConscript4
-rw-r--r--Swiften/Serializer/GenericPayloadSerializer.h5
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