aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-02-19 17:30:04 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-02-19 17:30:04 +0000
commit68b7f71c483fdaa820f95496c6a4b640dd13f610 (patch)
treebcc59a4a9c58fc69c61893c5e6a828a21bf7e4f4 /source
parenta64840aee77b706ca62a8b80a51857e79639231e (diff)
downloadqxmpp-68b7f71c483fdaa820f95496c6a4b640dd13f610.tar.gz
allow multiple extensions for XMPP stanzas
Diffstat (limited to 'source')
-rw-r--r--source/QXmppMessage.cpp5
-rw-r--r--source/QXmppPresence.cpp35
-rw-r--r--source/QXmppPresence.h2
-rw-r--r--source/QXmppStanza.cpp8
-rw-r--r--source/QXmppStanza.h6
-rw-r--r--source/QXmppStream.cpp29
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);
}