aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-02-18 13:42:38 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-02-18 13:42:38 +0000
commitc913e78592620d195eea725e13bd6821789a5b76 (patch)
tree9f2511a7c2fe09e685960cecc1683a1cc8c74988 /source
parentc12a2d1eca2d73d0842584724629e00dbbc52952 (diff)
downloadqxmpp-c913e78592620d195eea725e13bd6821789a5b76.tar.gz
move parsing of XMPP messages to QXmppMessage
Diffstat (limited to 'source')
-rw-r--r--source/QXmppMessage.cpp25
-rw-r--r--source/QXmppMessage.h1
-rw-r--r--source/QXmppStream.cpp57
-rw-r--r--source/QXmppStream.h1
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&);