diff options
Diffstat (limited to 'Swiften/Parser/PayloadParsers/IBBParser.cpp')
-rw-r--r-- | Swiften/Parser/PayloadParsers/IBBParser.cpp | 92 |
1 files changed, 45 insertions, 47 deletions
diff --git a/Swiften/Parser/PayloadParsers/IBBParser.cpp b/Swiften/Parser/PayloadParsers/IBBParser.cpp index c04e3cc..9b6babc 100644 --- a/Swiften/Parser/PayloadParsers/IBBParser.cpp +++ b/Swiften/Parser/PayloadParsers/IBBParser.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -8,7 +8,6 @@ #include <boost/lexical_cast.hpp> -#include <Swiften/Base/foreach.h> #include <Swiften/StringCodecs/Base64.h> namespace Swift { @@ -20,57 +19,56 @@ IBBParser::~IBBParser() { } void IBBParser::handleStartElement(const std::string& element, const std::string&, const AttributeMap& attributes) { - if (level == TopLevel) { - if (element == "data") { - getPayloadInternal()->setAction(IBB::Data); - getPayloadInternal()->setStreamID(attributes.getAttribute("sid")); - try { - getPayloadInternal()->setSequenceNumber(boost::lexical_cast<int>(attributes.getAttribute("seq"))); - } - catch (boost::bad_lexical_cast&) { - } - } - else if (element == "open") { - getPayloadInternal()->setAction(IBB::Open); - getPayloadInternal()->setStreamID(attributes.getAttribute("sid")); - if (attributes.getAttribute("stanza") == "message") { - getPayloadInternal()->setStanzaType(IBB::MessageStanza); - } - else { - getPayloadInternal()->setStanzaType(IBB::IQStanza); - } - try { - getPayloadInternal()->setBlockSize(boost::lexical_cast<int>(attributes.getAttribute("block-size"))); - } - catch (boost::bad_lexical_cast&) { - } - } - else if (element == "close") { - getPayloadInternal()->setAction(IBB::Close); - getPayloadInternal()->setStreamID(attributes.getAttribute("sid")); - } - } - ++level; + if (level == TopLevel) { + if (element == "data") { + getPayloadInternal()->setAction(IBB::Data); + getPayloadInternal()->setStreamID(attributes.getAttribute("sid")); + try { + getPayloadInternal()->setSequenceNumber(boost::lexical_cast<int>(attributes.getAttribute("seq"))); + } + catch (boost::bad_lexical_cast&) { + } + } + else if (element == "open") { + getPayloadInternal()->setAction(IBB::Open); + getPayloadInternal()->setStreamID(attributes.getAttribute("sid")); + if (attributes.getAttribute("stanza") == "message") { + getPayloadInternal()->setStanzaType(IBB::MessageStanza); + } + else { + getPayloadInternal()->setStanzaType(IBB::IQStanza); + } + try { + getPayloadInternal()->setBlockSize(boost::lexical_cast<int>(attributes.getAttribute("block-size"))); + } + catch (boost::bad_lexical_cast&) { + } + } + else if (element == "close") { + getPayloadInternal()->setAction(IBB::Close); + getPayloadInternal()->setStreamID(attributes.getAttribute("sid")); + } + } + ++level; } void IBBParser::handleEndElement(const std::string& element, const std::string&) { - --level; - if (level == TopLevel) { - if (element == "data") { - std::vector<char> data; - for (size_t i = 0; i < currentText.size(); ++i) { - char c = currentText[i]; - if ((c >= 48 && c <= 122) || c == 47 || c == 43) { - data.push_back(c); - } - } - getPayloadInternal()->setData(Base64::decode(std::string(&data[0], data.size()))); - } - } + --level; + if (level == TopLevel) { + if (element == "data") { + std::vector<char> data; + for (char c : currentText) { + if ((c >= 48 && c <= 122) || c == 47 || c == 43) { + data.push_back(c); + } + } + getPayloadInternal()->setData(Base64::decode(std::string(&data[0], data.size()))); + } + } } void IBBParser::handleCharacterData(const std::string& data) { - currentText += data; + currentText += data; } |