diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-02-18 13:42:38 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-02-18 13:42:38 +0000 |
| commit | c913e78592620d195eea725e13bd6821789a5b76 (patch) | |
| tree | 9f2511a7c2fe09e685960cecc1683a1cc8c74988 /source | |
| parent | c12a2d1eca2d73d0842584724629e00dbbc52952 (diff) | |
| download | qxmpp-c913e78592620d195eea725e13bd6821789a5b76.tar.gz | |
move parsing of XMPP messages to QXmppMessage
Diffstat (limited to 'source')
| -rw-r--r-- | source/QXmppMessage.cpp | 25 | ||||
| -rw-r--r-- | source/QXmppMessage.h | 1 | ||||
| -rw-r--r-- | source/QXmppStream.cpp | 57 | ||||
| -rw-r--r-- | source/QXmppStream.h | 1 |
4 files changed, 30 insertions, 54 deletions
diff --git a/source/QXmppMessage.cpp b/source/QXmppMessage.cpp index 9fb0037b..cd8c905c 100644 --- a/source/QXmppMessage.cpp +++ b/source/QXmppMessage.cpp @@ -24,6 +24,7 @@ #include "QXmppMessage.h" #include "QXmppUtils.h" +#include <QDomElement> #include <QXmlStreamWriter> QXmppMessage::QXmppMessage(const QString& from, const QString& to, const @@ -108,6 +109,30 @@ void QXmppMessage::setTypeFromStr(const QString& str) } } +void QXmppMessage::parse(QDomElement &element) +{ + setFrom(element.attribute("from")); + setTo(element.attribute("to")); + setTypeFromStr(element.attribute("type")); + setBody(unescapeString( + element.firstChildElement("body").text())); + setSubject(unescapeString( + element.firstChildElement("subject").text())); + setThread(element.firstChildElement("thread").text()); + + QDomElement errorElement = element. + firstChildElement("error"); + if(!errorElement.isNull()) + { + QXmppStanza::Error error = parseError(errorElement); + setError(error); + } + + QDomElement xElement = element.firstChildElement("x"); + if(!xElement.isNull()) + setExtension(QXmppElement(xElement)); +} + void QXmppMessage::toXml(QXmlStreamWriter *xmlWriter) const { diff --git a/source/QXmppMessage.h b/source/QXmppMessage.h index 6ea1bcd5..e985706c 100644 --- a/source/QXmppMessage.h +++ b/source/QXmppMessage.h @@ -55,6 +55,7 @@ public: QString getThread() const; void setThread(const QString&); + void parse(QDomElement &element); void toXml(QXmlStreamWriter *writer) const; private: diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp index 4c6321dc..960ab352 100644 --- a/source/QXmppStream.cpp +++ b/source/QXmppStream.cpp @@ -403,7 +403,7 @@ void QXmppStream::parser(const QByteArray& data) QXmppIq iqPacket; // to emit QDomElement elemen = nodeRecv.firstChildElement("error"); - QXmppStanza::Error error = parseStanzaError(elemen); + QXmppStanza::Error error = QXmppStanza::parseError(elemen); if( QXmppIbbOpenIq::isIbbOpenIq( nodeRecv ) ) { @@ -670,7 +670,7 @@ void QXmppStream::parser(const QByteArray& data) if(!errorElement.isNull()) { QXmppStanza::Error error = - parseStanzaError(errorElement); + QXmppStanza::parseError(errorElement); presence.setError(error); } @@ -682,29 +682,8 @@ void QXmppStream::parser(const QByteArray& data) } else if(nodeRecv.tagName() == "message") { - QString from = nodeRecv.attribute("from"); - QString to = nodeRecv.attribute("to"); - QString type = nodeRecv.attribute("type"); - QString body = unescapeString( - nodeRecv.firstChildElement("body").text()); - QString sub = unescapeString( - nodeRecv.firstChildElement("subject").text()); - QString thread = nodeRecv.firstChildElement("thread").text(); - QXmppMessage message(from, to, body, thread); - message.setSubject(sub); - message.setTypeFromStr(type); - - QDomElement errorElement = nodeRecv. - firstChildElement("error"); - if(!errorElement.isNull()) - { - QXmppStanza::Error error = parseStanzaError(errorElement); - message.setError(error); - } - - QDomElement xElement = nodeRecv.firstChildElement("x"); - if(!xElement.isNull()) - message.setExtension(QXmppElement(xElement)); + QXmppMessage message; + message.parse(nodeRecv); processMessage(message); } @@ -1037,34 +1016,6 @@ void QXmppStream::processRosterIq(const QXmppRosterIq& rosterIq) } } -QXmppStanza::Error QXmppStream::parseStanzaError(QDomElement & errorElement) -{ - QXmppStanza::Error error; - - if(errorElement.isNull()) - return error; - - QString type = errorElement.attribute("type"); - QString text; - QString cond; - QDomElement element = errorElement.firstChildElement(); - while(!element.isNull()) - { - if(element.tagName() == "text") - text = element.text(); - else if(element.namespaceURI() == ns_stanza) - { - cond = element.tagName(); - } - element = element.nextSiblingElement(); - } - - error.setConditionFromStr(cond); - error.setTypeFromStr(type); - error.setText(text); - return error; -} - QAbstractSocket::SocketError QXmppStream::getSocketError() { return m_socketError; diff --git a/source/QXmppStream.h b/source/QXmppStream.h index a9242f7d..df3401bf 100644 --- a/source/QXmppStream.h +++ b/source/QXmppStream.h @@ -147,7 +147,6 @@ private: void sendToServer(const QByteArray&); bool hasStartStreamElement(const QByteArray&); bool hasEndStreamElement(const QByteArray&); - QXmppStanza::Error parseStanzaError(QDomElement & errorElement); void processPresence(const QXmppPresence&); void processMessage(const QXmppMessage&); |
