diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-02-19 17:30:04 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-02-19 17:30:04 +0000 |
| commit | 68b7f71c483fdaa820f95496c6a4b640dd13f610 (patch) | |
| tree | bcc59a4a9c58fc69c61893c5e6a828a21bf7e4f4 /source | |
| parent | a64840aee77b706ca62a8b80a51857e79639231e (diff) | |
| download | qxmpp-68b7f71c483fdaa820f95496c6a4b640dd13f610.tar.gz | |
allow multiple extensions for XMPP stanzas
Diffstat (limited to 'source')
| -rw-r--r-- | source/QXmppMessage.cpp | 5 | ||||
| -rw-r--r-- | source/QXmppPresence.cpp | 35 | ||||
| -rw-r--r-- | source/QXmppPresence.h | 2 | ||||
| -rw-r--r-- | source/QXmppStanza.cpp | 8 | ||||
| -rw-r--r-- | source/QXmppStanza.h | 6 | ||||
| -rw-r--r-- | source/QXmppStream.cpp | 29 |
6 files changed, 47 insertions, 38 deletions
diff --git a/source/QXmppMessage.cpp b/source/QXmppMessage.cpp index 78fc75d4..72ae50c2 100644 --- a/source/QXmppMessage.cpp +++ b/source/QXmppMessage.cpp @@ -161,7 +161,7 @@ void QXmppMessage::parse(QDomElement &element) QDomElement xElement = element.firstChildElement("x"); if(!xElement.isNull()) - setExtension(QXmppElement(xElement)); + setExtensions(QXmppElement(xElement)); } void QXmppMessage::toXml(QXmlStreamWriter *xmlWriter) const @@ -187,7 +187,8 @@ void QXmppMessage::toXml(QXmlStreamWriter *xmlWriter) const xmlWriter->writeEndElement(); } - getExtension().toXml(xmlWriter); + foreach (const QXmppElement &extension, getExtensions()) + extension.toXml(xmlWriter); xmlWriter->writeEndElement(); } diff --git a/source/QXmppPresence.cpp b/source/QXmppPresence.cpp index 80424066..62098545 100644 --- a/source/QXmppPresence.cpp +++ b/source/QXmppPresence.cpp @@ -25,6 +25,7 @@ #include "QXmppPresence.h" #include "QXmppUtils.h" #include <QtDebug> +#include <QDomElement> #include <QXmlStreamWriter> QXmppPresence::QXmppPresence(QXmppPresence::Type type, @@ -64,6 +65,37 @@ void QXmppPresence::setStatus(const QXmppPresence::Status& status) m_status = status; } +void QXmppPresence::parse(const QDomElement &element) +{ + setTypeFromStr(element.attribute("type")); + setFrom(element.attribute("from")); + setTo(element.attribute("to")); + + QString statusText = element. + firstChildElement("status").text(); + QString show = element. + firstChildElement("show").text(); + int priority = element. + firstChildElement("priority").text().toInt(); + QXmppPresence::Status status; + status.setTypeFromStr(show); + status.setStatusText(statusText); + status.setPriority(priority); + setStatus(status); + + QDomElement errorElement = element. + firstChildElement("error"); + if(!errorElement.isNull()) + { + QXmppStanza::Error error = parseError(errorElement); + setError(error); + } + + QDomElement xElement = element.firstChildElement("x"); + if(!xElement.isNull()) + setExtensions(QXmppElement(xElement)); +} + void QXmppPresence::toXml(QXmlStreamWriter *xmlWriter ) const { @@ -80,7 +112,8 @@ void QXmppPresence::toXml(QXmlStreamWriter *xmlWriter ) const helperToXmlAddTextElement(xmlWriter,"show", getStatus().getTypeStr()); getError().toXml(xmlWriter); - getExtension().toXml(xmlWriter); + foreach (const QXmppElement &extension, getExtensions()) + extension.toXml(xmlWriter); xmlWriter->writeEndElement(); diff --git a/source/QXmppPresence.h b/source/QXmppPresence.h index b6652ae3..c62f640e 100644 --- a/source/QXmppPresence.h +++ b/source/QXmppPresence.h @@ -87,6 +87,8 @@ public: QXmppPresence::Status& getStatus(); const QXmppPresence::Status& getStatus() const; void setStatus(const QXmppPresence::Status&); + + void parse(const QDomElement &element); void toXml( QXmlStreamWriter *writer ) const; private: diff --git a/source/QXmppStanza.cpp b/source/QXmppStanza.cpp index f8bc1fa7..cf5d019a 100644 --- a/source/QXmppStanza.cpp +++ b/source/QXmppStanza.cpp @@ -316,14 +316,14 @@ void QXmppStanza::setError(QXmppStanza::Error& error) m_error = error; } -QXmppElement QXmppStanza::getExtension() const +QXmppElementList QXmppStanza::getExtensions() const { - return m_extension; + return m_extensions; } -void QXmppStanza::setExtension(const QXmppElement &extension) +void QXmppStanza::setExtensions(const QXmppElementList &extensions) { - m_extension = extension; + m_extensions = extensions; } bool QXmppStanza::isErrorStanza() diff --git a/source/QXmppStanza.h b/source/QXmppStanza.h index 591f1741..d7365d03 100644 --- a/source/QXmppStanza.h +++ b/source/QXmppStanza.h @@ -106,7 +106,7 @@ public: QString getId() const; QString getLang() const; QXmppStanza::Error getError() const; - QXmppElement getExtension() const; + QXmppElementList getExtensions() const; void setTo(const QString&); void setFrom(const QString&); @@ -114,7 +114,7 @@ public: void generateAndSetNextId(); void setLang(const QString&); void setError(QXmppStanza::Error& error); - void setExtension(const QXmppElement &element); + void setExtensions(const QXmppElementList &elements); bool isErrorStanza(); // FIXME : make this method protected @@ -127,7 +127,7 @@ private: QString m_id; QString m_lang; QXmppStanza::Error m_error; - QXmppElement m_extension; + QXmppElementList m_extensions; }; #endif // QXMPPSTANZA_H diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp index e71b742a..d089935d 100644 --- a/source/QXmppStream.cpp +++ b/source/QXmppStream.cpp @@ -651,34 +651,7 @@ void QXmppStream::parser(const QByteArray& data) else if(nodeRecv.tagName() == "presence") { QXmppPresence presence; - presence.setTypeFromStr(nodeRecv.attribute("type")); - presence.setFrom(nodeRecv.attribute("from")); - presence.setTo(nodeRecv.attribute("to")); - - QString statusText = nodeRecv. - firstChildElement("status").text(); - QString show = nodeRecv. - firstChildElement("show").text(); - int priority = nodeRecv. - firstChildElement("priority").text().toInt(); - QXmppPresence::Status status; - status.setTypeFromStr(show); - status.setStatusText(statusText); - status.setPriority(priority); - presence.setStatus(status); - - QDomElement errorElement = nodeRecv. - firstChildElement("error"); - if(!errorElement.isNull()) - { - QXmppStanza::Error error = - QXmppStanza::parseError(errorElement); - presence.setError(error); - } - - QDomElement xElement = nodeRecv.firstChildElement("x"); - if(!xElement.isNull()) - presence.setExtension(QXmppElement(xElement)); + presence.parse(nodeRecv); processPresence(presence); } |
