diff options
Diffstat (limited to 'Swiften/Parser')
-rw-r--r-- | Swiften/Parser/BOSHParser.cpp | 55 | ||||
-rw-r--r-- | Swiften/Parser/BOSHParser.h | 47 | ||||
-rw-r--r-- | Swiften/Parser/SConscript | 1 |
3 files changed, 103 insertions, 0 deletions
diff --git a/Swiften/Parser/BOSHParser.cpp b/Swiften/Parser/BOSHParser.cpp new file mode 100644 index 0000000..9fb218a --- /dev/null +++ b/Swiften/Parser/BOSHParser.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2011 Thilo Cestonaro + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include <cassert> + +#include <Swiften/Parser/BOSHParser.h> +#include <Swiften/Parser/XMLParser.h> +#include <Swiften/Parser/PlatformXMLParserFactory.h> + +namespace Swift { + +BOSHParser::BOSHParser() : + xmlParser_(0), + level_(-1), + parseErrorOccurred_(false) +{ + xmlParser_ = PlatformXMLParserFactory().createXMLParser(this); +} + +BOSHParser::~BOSHParser() { + delete xmlParser_; +} + +bool BOSHParser::parse(const std::string& data) { + bool xmlParseResult = xmlParser_->parse(data); + return xmlParseResult && !parseErrorOccurred_; +} + +void BOSHParser::handleStartElement(const std::string& /*element*/, const std::string& /*ns*/, const AttributeMap& attributes) { + if (!parseErrorOccurred_) { + if (level_ == BoshTopLevel) { + boshBodyAttributes_ = attributes; + } + } + ++level_; +} + +void BOSHParser::handleEndElement(const std::string& /*element*/, const std::string& /*ns*/) { + assert(level_ > BoshTopLevel); + --level_; + if (!parseErrorOccurred_) { + + } +} + +void BOSHParser::handleCharacterData(const std::string& /*data*/) { + if (!parseErrorOccurred_) { + + } +} + +} diff --git a/Swiften/Parser/BOSHParser.h b/Swiften/Parser/BOSHParser.h new file mode 100644 index 0000000..69b3d13 --- /dev/null +++ b/Swiften/Parser/BOSHParser.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2011 Thilo Cestonaro + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#pragma once + +#include <boost/noncopyable.hpp> + +#include <Swiften/Parser/XMLParserClient.h> +#include <Swiften/Parser/AttributeMap.h> + +namespace Swift { + class XMLParser; + + class BOSHParser : public XMLParserClient, boost::noncopyable { + public: + BOSHParser(); + ~BOSHParser(); + + bool parse(const std::string&); + + std::string getAttribute(const std::string& attribute, const std::string& ns = "") const { + return boshBodyAttributes_.getAttribute(attribute, ns); + } + private: + virtual void handleStartElement( + const std::string& element, + const std::string& ns, + const AttributeMap& attributes); + virtual void handleEndElement(const std::string& element, const std::string& ns); + virtual void handleCharacterData(const std::string& data); + + private: + AttributeMap boshBodyAttributes_; + XMLParser* xmlParser_; + enum Level { + BoshTopLevel = -1, + TopLevel = 0, + StreamLevel = 1, + ElementLevel = 2 + }; + int level_; + bool parseErrorOccurred_; + }; +} diff --git a/Swiften/Parser/SConscript b/Swiften/Parser/SConscript index e4c2778..dd19238 100644 --- a/Swiften/Parser/SConscript +++ b/Swiften/Parser/SConscript @@ -11,6 +11,7 @@ sources = [ "AuthChallengeParser.cpp", "AuthSuccessParser.cpp", "AuthResponseParser.cpp", + "BOSHParser.cpp", "CompressParser.cpp", "ElementParser.cpp", "IQParser.cpp", |