diff options
| author | Remko Tronçon <git@el-tramo.be> | 2009-11-20 22:28:29 (GMT) |
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2009-11-20 22:28:29 (GMT) |
| commit | 4e944a225d91ff4622e50186120ef0bbbb3a1d69 (patch) | |
| tree | 2221e2ccdbaade17c419f45bfea139c3f952f85f /Swiften/Parser/XMPPParser.cpp | |
| parent | c84fb752cc881dfca9727b69fcdb3230830b7cc4 (diff) | |
| download | swift-4e944a225d91ff4622e50186120ef0bbbb3a1d69.zip swift-4e944a225d91ff4622e50186120ef0bbbb3a1d69.tar.bz2 | |
Added challenge & response parser & serializer.
Diffstat (limited to 'Swiften/Parser/XMPPParser.cpp')
| -rw-r--r-- | Swiften/Parser/XMPPParser.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Swiften/Parser/XMPPParser.cpp b/Swiften/Parser/XMPPParser.cpp index f97bed8..83de263 100644 --- a/Swiften/Parser/XMPPParser.cpp +++ b/Swiften/Parser/XMPPParser.cpp @@ -1,67 +1,69 @@ #include "Swiften/Parser/XMPPParser.h" #include <iostream> #include <cassert> #include "Swiften/Elements/ProtocolHeader.h" #include "Swiften/Base/String.h" #include "Swiften/Parser/XMLParser.h" #include "Swiften/Parser/PlatformXMLParserFactory.h" #include "Swiften/Parser/XMPPParserClient.h" #include "Swiften/Parser/XMPPParser.h" #include "Swiften/Parser/ElementParser.h" #include "Swiften/Parser/PresenceParser.h" #include "Swiften/Parser/IQParser.h" #include "Swiften/Parser/MessageParser.h" #include "Swiften/Parser/StreamFeaturesParser.h" #include "Swiften/Parser/AuthRequestParser.h" #include "Swiften/Parser/AuthSuccessParser.h" #include "Swiften/Parser/AuthFailureParser.h" +#include "Swiften/Parser/AuthChallengeParser.h" +#include "Swiften/Parser/AuthResponseParser.h" #include "Swiften/Parser/StartTLSParser.h" #include "Swiften/Parser/StartTLSFailureParser.h" #include "Swiften/Parser/CompressParser.h" #include "Swiften/Parser/CompressFailureParser.h" #include "Swiften/Parser/CompressedParser.h" #include "Swiften/Parser/UnknownElementParser.h" #include "Swiften/Parser/TLSProceedParser.h" // TODO: Whenever an error occurs in the handlers, stop the parser by returing // a bool value, and stopping the XML parser namespace Swift { XMPPParser::XMPPParser( XMPPParserClient* client, PayloadParserFactoryCollection* payloadParserFactories) : xmlParser_(0), client_(client), payloadParserFactories_(payloadParserFactories), currentDepth_(0), currentElementParser_(0), parseErrorOccurred_(false) { xmlParser_ = PlatformXMLParserFactory().createXMLParser(this); } XMPPParser::~XMPPParser() { delete currentElementParser_; delete xmlParser_; } bool XMPPParser::parse(const String& data) { bool xmlParseResult = xmlParser_->parse(data); return xmlParseResult && !parseErrorOccurred_; } void XMPPParser::handleStartElement(const String& element, const String& ns, const AttributeMap& attributes) { if (!inStream()) { if (element == "stream" && ns == "http://etherx.jabber.org/streams") { ProtocolHeader header; header.setFrom(attributes.getAttribute("from")); header.setTo(attributes.getAttribute("to")); header.setID(attributes.getAttribute("id")); header.setVersion(attributes.getAttribute("version")); client_->handleStreamStart(header); } else { parseErrorOccurred_ = true; } @@ -82,70 +84,76 @@ void XMPPParser::handleEndElement(const String& element, const String& ns) { if (inElement()) { assert(currentElementParser_); currentElementParser_->handleEndElement(element, ns); --currentDepth_; if (!inElement()) { client_->handleElement(currentElementParser_->getElement()); delete currentElementParser_; currentElementParser_ = 0; } } else { assert(element == "stream"); --currentDepth_; client_->handleStreamEnd(); } } void XMPPParser::handleCharacterData(const String& data) { if (currentElementParser_) { currentElementParser_->handleCharacterData(data); } //else { // std::cerr << "XMPPParser: Ignoring stray character data: " << data << std::endl; //} } ElementParser* XMPPParser::createElementParser(const String& element, const String& ns) { if (element == "presence") { return new PresenceParser(payloadParserFactories_); } else if (element == "iq") { return new IQParser(payloadParserFactories_); } else if (element == "message") { return new MessageParser(payloadParserFactories_); } else if (element == "features" && ns == "http://etherx.jabber.org/streams") { return new StreamFeaturesParser(); } else if (element == "auth") { return new AuthRequestParser(); } else if (element == "success") { return new AuthSuccessParser(); } else if (element == "failure" && ns == "urn:ietf:params:xml:ns:xmpp-sasl") { return new AuthFailureParser(); } + else if (element == "challenge" && ns == "urn:ietf:params:xml:ns:xmpp-sasl") { + return new AuthChallengeParser(); + } + else if (element == "response" && ns == "urn:ietf:params:xml:ns:xmpp-sasl") { + return new AuthResponseParser(); + } else if (element == "starttls") { return new StartTLSParser(); } else if (element == "failure" && ns == "urn:ietf:params:xml:ns:xmpp-tls") { return new StartTLSFailureParser(); } else if (element == "compress") { return new CompressParser(); } else if (element == "compressed") { return new CompressedParser(); } else if (element == "failure" && ns == "http://jabber.org/protocol/compress") { return new CompressFailureParser(); } else if (element == "proceed") { return new TLSProceedParser(); } return new UnknownElementParser(); } } |
Swift