aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-03-04 08:43:53 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-03-04 08:43:53 +0000
commitbb95ebd0e305071ccea30e356844042402bcd76b (patch)
tree8290d542d1c53c81828a3f8a5d45cf387a4c72d7 /source
parentf3c8579fd664461f529d2fe4713093596ba9ff97 (diff)
downloadqxmpp-bb95ebd0e305071ccea30e356844042402bcd76b.tar.gz
regroup common stanza parsing inside QXmppStanza::parse()
Diffstat (limited to 'source')
-rw-r--r--source/QXmppArchiveIq.cpp40
-rw-r--r--source/QXmppArchiveIq.h12
-rw-r--r--source/QXmppByteStreamIq.cpp9
-rw-r--r--source/QXmppByteStreamIq.h4
-rw-r--r--source/QXmppDiscoveryIq.cpp9
-rw-r--r--source/QXmppDiscoveryIq.h8
-rw-r--r--source/QXmppIbbIqs.cpp115
-rw-r--r--source/QXmppIbbIqs.h20
-rw-r--r--source/QXmppIq.cpp7
-rw-r--r--source/QXmppIq.h6
-rw-r--r--source/QXmppMessage.cpp14
-rw-r--r--source/QXmppMessage.h2
-rw-r--r--source/QXmppPresence.cpp12
-rw-r--r--source/QXmppRpcIq.cpp135
-rw-r--r--source/QXmppRpcIq.h21
-rw-r--r--source/QXmppStanza.cpp12
-rw-r--r--source/QXmppStanza.h1
-rw-r--r--source/QXmppVCard.cpp11
18 files changed, 217 insertions, 221 deletions
diff --git a/source/QXmppArchiveIq.cpp b/source/QXmppArchiveIq.cpp
index 7710df9b..1b186d4e 100644
--- a/source/QXmppArchiveIq.cpp
+++ b/source/QXmppArchiveIq.cpp
@@ -29,20 +29,22 @@
static const char *ns_archive = "urn:xmpp:archive";
-bool QXmppArchiveChatIq::isArchiveChatIq( QDomElement &element )
+QXmppArchiveChat QXmppArchiveChatIq::chat() const
+{
+ return m_chat;
+}
+
+bool QXmppArchiveChatIq::isArchiveChatIq(const QDomElement &element)
{
QDomElement chatElement = element.firstChildElement("chat");
return !chatElement.attribute("with").isEmpty();
//return (chatElement.namespaceURI() == ns_archive);
}
-QXmppArchiveChat QXmppArchiveChatIq::chat() const
+void QXmppArchiveChatIq::parse(const QDomElement &element)
{
- return m_chat;
-}
+ QXmppStanza::parse(element);
-void QXmppArchiveChatIq::parse( QDomElement &element )
-{
QDomElement chatElement = element.firstChildElement("chat");
m_chat.subject = chatElement.attribute("subject");
m_chat.start = datetimeFromString(chatElement.attribute("start"));
@@ -89,7 +91,7 @@ QString QXmppArchiveListIq::with() const
return m_with;
}
-void QXmppArchiveListIq::setWith( const QString &with )
+void QXmppArchiveListIq::setWith(const QString &with)
{
m_with = with;
}
@@ -99,7 +101,7 @@ QDateTime QXmppArchiveListIq::start() const
return m_start;
}
-void QXmppArchiveListIq::setStart( const QDateTime &start )
+void QXmppArchiveListIq::setStart(const QDateTime &start)
{
m_start = start;
}
@@ -109,19 +111,21 @@ QDateTime QXmppArchiveListIq::end() const
return m_end;
}
-void QXmppArchiveListIq::setEnd( const QDateTime &end )
+void QXmppArchiveListIq::setEnd(const QDateTime &end)
{
m_end = end;
}
-bool QXmppArchiveListIq::isArchiveListIq( QDomElement &element )
+bool QXmppArchiveListIq::isArchiveListIq(const QDomElement &element)
{
QDomElement listElement = element.firstChildElement("list");
return (listElement.namespaceURI() == ns_archive);
}
-void QXmppArchiveListIq::parse( QDomElement &element )
+void QXmppArchiveListIq::parse(const QDomElement &element)
{
+ QXmppStanza::parse(element);
+
QDomElement listElement = element.firstChildElement("list");
m_with = element.attribute("with");
@@ -160,19 +164,21 @@ void QXmppArchiveListIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
writer->writeEndElement();
}
-bool QXmppArchivePrefIq::isArchivePrefIq( QDomElement &element )
+bool QXmppArchivePrefIq::isArchivePrefIq(const QDomElement &element)
{
QDomElement prefElement = element.firstChildElement("pref");
return (prefElement.namespaceURI() == ns_archive);
}
-void QXmppArchivePrefIq::parse( QDomElement &element )
+void QXmppArchivePrefIq::parse(const QDomElement &element)
{
+ QXmppStanza::parse(element);
+
QDomElement queryElement = element.firstChildElement("pref");
//setId( element.attribute("id"));
}
-void QXmppArchivePrefIq::toXmlElementFromChild( QXmlStreamWriter *writer ) const
+void QXmppArchivePrefIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
{
writer->writeStartElement("pref");
helperToXmlAddAttribute(writer, "xmlns", ns_archive);
@@ -199,7 +205,7 @@ QDateTime QXmppArchiveRetrieveIq::start() const
return m_start;
}
-void QXmppArchiveRetrieveIq::setStart( const QDateTime &start )
+void QXmppArchiveRetrieveIq::setStart(const QDateTime &start)
{
m_start = start;
}
@@ -209,12 +215,12 @@ QString QXmppArchiveRetrieveIq::with() const
return m_with;
}
-void QXmppArchiveRetrieveIq::setWith( const QString &with )
+void QXmppArchiveRetrieveIq::setWith(const QString &with)
{
m_with = with;
}
-void QXmppArchiveRetrieveIq::toXmlElementFromChild( QXmlStreamWriter *writer ) const
+void QXmppArchiveRetrieveIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
{
writer->writeStartElement("retrieve");
helperToXmlAddAttribute(writer, "xmlns", ns_archive);
diff --git a/source/QXmppArchiveIq.h b/source/QXmppArchiveIq.h
index 5de5563a..731f5dca 100644
--- a/source/QXmppArchiveIq.h
+++ b/source/QXmppArchiveIq.h
@@ -53,8 +53,8 @@ public:
class QXmppArchiveChatIq : public QXmppIq
{
public:
- void parse( QDomElement &element );
- static bool isArchiveChatIq( QDomElement &element );
+ static bool isArchiveChatIq(const QDomElement &element);
+ void parse(const QDomElement &element);
QXmppArchiveChat chat() const;
@@ -66,9 +66,9 @@ class QXmppArchiveListIq : public QXmppIq
{
public:
QXmppArchiveListIq();
+ static bool isArchiveListIq(const QDomElement &element);
+ void parse(const QDomElement &element);
void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isArchiveListIq( QDomElement &element );
QList<QXmppArchiveChat> chats() const;
@@ -116,9 +116,9 @@ private:
class QXmppArchivePrefIq : public QXmppIq
{
public:
+ static bool isArchivePrefIq(const QDomElement &element);
+ void parse(const QDomElement &element);
void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isArchivePrefIq( QDomElement &element );
};
#endif // QXMPPARCHIVEIQ_H
diff --git a/source/QXmppByteStreamIq.cpp b/source/QXmppByteStreamIq.cpp
index 237488cc..03af6130 100644
--- a/source/QXmppByteStreamIq.cpp
+++ b/source/QXmppByteStreamIq.cpp
@@ -117,16 +117,15 @@ void QXmppByteStreamIq::setStreamHostUsed(const QString &jid)
m_streamHostUsed = jid;
}
-bool QXmppByteStreamIq::isByteStreamIq(QDomElement &element)
+bool QXmppByteStreamIq::isByteStreamIq(const QDomElement &element)
{
return element.firstChildElement("query").namespaceURI() == ns_bytestreams;
}
-void QXmppByteStreamIq::parse(QDomElement &element)
+void QXmppByteStreamIq::parse(const QDomElement &element)
{
- setId(element.attribute("id"));
- setFrom(element.attribute("from"));
- setTo(element.attribute("to"));
+ QXmppStanza::parse(element);
+
setTypeFromStr(element.attribute("type"));
QDomElement queryElement = element.firstChildElement("query");
diff --git a/source/QXmppByteStreamIq.h b/source/QXmppByteStreamIq.h
index 9f3390e0..b9ee67da 100644
--- a/source/QXmppByteStreamIq.h
+++ b/source/QXmppByteStreamIq.h
@@ -77,9 +77,9 @@ public:
QString streamHostUsed() const;
void setStreamHostUsed(const QString &jid);
- void parse(QDomElement &element);
+ static bool isByteStreamIq(const QDomElement &element);
+ void parse(const QDomElement &element);
void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- static bool isByteStreamIq(QDomElement &element);
private:
Mode m_mode;
diff --git a/source/QXmppDiscoveryIq.cpp b/source/QXmppDiscoveryIq.cpp
index b54df435..36052dd6 100644
--- a/source/QXmppDiscoveryIq.cpp
+++ b/source/QXmppDiscoveryIq.cpp
@@ -47,18 +47,17 @@ void QXmppDiscoveryIq::setQueryType(enum QXmppDiscoveryIq::QueryType type)
m_queryType = type;
}
-bool QXmppDiscoveryIq::isDiscoveryIq( QDomElement &element )
+bool QXmppDiscoveryIq::isDiscoveryIq(const QDomElement &element)
{
QDomElement queryElement = element.firstChildElement("query");
return (queryElement.namespaceURI() == ns_disco_info ||
queryElement.namespaceURI() == ns_disco_items);
}
-void QXmppDiscoveryIq::parse( QDomElement &element )
+void QXmppDiscoveryIq::parse(const QDomElement &element)
{
- setId(element.attribute("id"));
- setFrom(element.attribute("from"));
- setTo(element.attribute("to"));
+ QXmppStanza::parse(element);
+
setTypeFromStr(element.attribute("type"));
QDomElement queryElement = element.firstChildElement("query");
if (queryElement.namespaceURI() == ns_disco_items)
diff --git a/source/QXmppDiscoveryIq.h b/source/QXmppDiscoveryIq.h
index fb8d5a39..76eabca1 100644
--- a/source/QXmppDiscoveryIq.h
+++ b/source/QXmppDiscoveryIq.h
@@ -37,16 +37,16 @@ public:
ItemsQuery,
};
- void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isDiscoveryIq( QDomElement &element );
-
QXmppElementList queryItems() const;
void setQueryItems(const QXmppElementList &items);
enum QueryType queryType() const;
void setQueryType(enum QueryType type);
+ static bool isDiscoveryIq(const QDomElement &element);
+ void parse(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
+
private:
QXmppElementList m_queryItems;
enum QueryType m_queryType;
diff --git a/source/QXmppIbbIqs.cpp b/source/QXmppIbbIqs.cpp
index caffe49f..9d360ac9 100644
--- a/source/QXmppIbbIqs.cpp
+++ b/source/QXmppIbbIqs.cpp
@@ -9,32 +9,6 @@ QXmppIbbOpenIq::QXmppIbbOpenIq() : QXmppIq(QXmppIq::Set), m_block_size(1024)
}
-void QXmppIbbOpenIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
-{
- writer->writeStartElement("open");
- writer->writeAttribute( "xmlns",ns_ibb);
- writer->writeAttribute( "sid",m_sid);
- writer->writeAttribute( "block-size",QString::number(m_block_size) );
- writer->writeEndElement();
-}
-
-void QXmppIbbOpenIq::parse( QDomElement &element )
-{
- QDomElement openElement = element.firstChildElement("open");
- setId( element.attribute("id"));
- setTo( element.attribute("to"));
- setFrom( element.attribute("from"));
- setTypeFromStr( element.attribute("type"));
- m_sid = openElement.attribute( "sid" );
- m_block_size = openElement.attribute( "block-size" ).toLong();
-}
-
-bool QXmppIbbOpenIq::isIbbOpenIq( QDomElement &element )
-{
- QDomElement openElement = element.firstChildElement("open");
- return openElement.namespaceURI() == ns_ibb;
-}
-
long QXmppIbbOpenIq::blockSize() const
{
return m_block_size;
@@ -55,33 +29,35 @@ void QXmppIbbOpenIq::setSid( const QString &sid )
m_sid = sid;
}
-QXmppIbbCloseIq::QXmppIbbCloseIq() : QXmppIq(QXmppIq::Set)
+bool QXmppIbbOpenIq::isIbbOpenIq(const QDomElement &element)
{
+ QDomElement openElement = element.firstChildElement("open");
+ return openElement.namespaceURI() == ns_ibb;
+}
+
+void QXmppIbbOpenIq::parse(const QDomElement &element)
+{
+ QXmppStanza::parse(element);
+
+ setTypeFromStr(element.attribute("type"));
+ QDomElement openElement = element.firstChildElement("open");
+ m_sid = openElement.attribute( "sid" );
+ m_block_size = openElement.attribute( "block-size" ).toLong();
}
-void QXmppIbbCloseIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+void QXmppIbbOpenIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
{
- writer->writeStartElement("close");
+ writer->writeStartElement("open");
writer->writeAttribute( "xmlns",ns_ibb);
writer->writeAttribute( "sid",m_sid);
+ writer->writeAttribute( "block-size",QString::number(m_block_size) );
writer->writeEndElement();
}
-void QXmppIbbCloseIq::parse( QDomElement &element )
+QXmppIbbCloseIq::QXmppIbbCloseIq() : QXmppIq(QXmppIq::Set)
{
- QDomElement openElement = element.firstChildElement("close");
- setId( element.attribute("id"));
- setTo( element.attribute("to"));
- setFrom( element.attribute("from"));
- setTypeFromStr( element.attribute("type"));
- m_sid = openElement.attribute( "sid" );
-}
-bool QXmppIbbCloseIq::isIbbCloseIq( QDomElement &element )
-{
- QDomElement openElement = element.firstChildElement("close");
- return openElement.namespaceURI() == ns_ibb;
}
QString QXmppIbbCloseIq::sid() const
@@ -94,6 +70,31 @@ void QXmppIbbCloseIq::setSid( const QString &sid )
m_sid = sid;
}
+bool QXmppIbbCloseIq::isIbbCloseIq(const QDomElement &element)
+{
+ QDomElement openElement = element.firstChildElement("close");
+ return openElement.namespaceURI() == ns_ibb;
+}
+
+void QXmppIbbCloseIq::parse(const QDomElement &element)
+{
+ QXmppStanza::parse(element);
+
+ setTypeFromStr(element.attribute("type"));
+
+ QDomElement openElement = element.firstChildElement("close");
+ m_sid = openElement.attribute( "sid" );
+}
+
+void QXmppIbbCloseIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+{
+ writer->writeStartElement("close");
+ writer->writeAttribute( "xmlns",ns_ibb);
+ writer->writeAttribute( "sid",m_sid);
+ writer->writeEndElement();
+}
+
+
QXmppIbbDataIq::QXmppIbbDataIq() : QXmppIq( QXmppIq::Set ), m_seq(0)
{
}
@@ -128,32 +129,30 @@ void QXmppIbbDataIq::setPayload( const QByteArray &data )
m_payload = data;
}
-
-void QXmppIbbDataIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+bool QXmppIbbDataIq::isIbbDataIq(const QDomElement &element)
{
- writer->writeStartElement("data");
- writer->writeAttribute( "xmlns",ns_ibb);
- writer->writeAttribute( "sid",m_sid);
- writer->writeAttribute( "seq",QString::number(m_seq) );
- writer->writeCharacters( m_payload.toBase64() );
- writer->writeEndElement();
+ QDomElement dataElement = element.firstChildElement("data");
+ return dataElement.namespaceURI() == ns_ibb;
}
-void QXmppIbbDataIq::parse( QDomElement &element )
+void QXmppIbbDataIq::parse(const QDomElement &element)
{
- QDomElement dataElement = element.firstChildElement("data");
- setId( element.attribute("id"));
- setTo( element.attribute("to"));
- setFrom( element.attribute("from"));
- setTypeFromStr( element.attribute("type"));
+ QXmppStanza::parse(element);
+
+ setTypeFromStr(element.attribute("type"));
+ QDomElement dataElement = element.firstChildElement("data");
m_sid = dataElement.attribute( "sid" );
m_seq = dataElement.attribute( "seq" ).toLong();
m_payload = QByteArray::fromBase64( dataElement.text().toLatin1() );
}
-bool QXmppIbbDataIq::isIbbDataIq( QDomElement &element )
+void QXmppIbbDataIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
{
- QDomElement dataElement = element.firstChildElement("data");
- return dataElement.namespaceURI() == ns_ibb;
+ writer->writeStartElement("data");
+ writer->writeAttribute( "xmlns",ns_ibb);
+ writer->writeAttribute( "sid",m_sid);
+ writer->writeAttribute( "seq",QString::number(m_seq) );
+ writer->writeCharacters( m_payload.toBase64() );
+ writer->writeEndElement();
}
diff --git a/source/QXmppIbbIqs.h b/source/QXmppIbbIqs.h
index 783ef9e0..4401e7dc 100644
--- a/source/QXmppIbbIqs.h
+++ b/source/QXmppIbbIqs.h
@@ -10,9 +10,6 @@ class QXmppIbbOpenIq: public QXmppIq
{
public:
QXmppIbbOpenIq();
- void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isIbbOpenIq( QDomElement &element );
long blockSize() const;
void setBlockSize( long block_size );
@@ -20,6 +17,10 @@ public:
QString sid() const;
void setSid( const QString &sid );
+ static bool isIbbOpenIq(const QDomElement &element);
+ void parse(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
+
private:
long m_block_size;
QString m_sid;
@@ -29,13 +30,14 @@ class QXmppIbbCloseIq: public QXmppIq
{
public:
QXmppIbbCloseIq();
- void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isIbbCloseIq( QDomElement &element );
QString sid() const;
void setSid( const QString &sid );
+ static bool isIbbCloseIq(const QDomElement &element);
+ void parse(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
+
private:
QString m_sid;
};
@@ -47,14 +49,16 @@ public:
quint16 sequence() const;
void setSequence( quint16 seq );
+
QString sid() const;
void setSid( const QString &sid );
+
QByteArray payload() const;
void setPayload( const QByteArray &data );
+ static bool isIbbDataIq(const QDomElement &element);
+ void parse(const QDomElement &element);
void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isIbbDataIq( QDomElement &element );
private:
quint16 m_seq;
diff --git a/source/QXmppIq.cpp b/source/QXmppIq.cpp
index 601092b4..c367fcba 100644
--- a/source/QXmppIq.cpp
+++ b/source/QXmppIq.cpp
@@ -56,11 +56,10 @@ void QXmppIq::setType(QXmppIq::Type type)
m_type = type;
}
-void QXmppIq::parse( QDomElement &element )
+void QXmppIq::parse(const QDomElement &element)
{
- setId(element.attribute("id"));
- setFrom(element.attribute("from"));
- setTo(element.attribute("to"));
+ QXmppStanza::parse(element);
+
setTypeFromStr(element.attribute("type"));
QXmppElementList extensions;
diff --git a/source/QXmppIq.h b/source/QXmppIq.h
index 5961466d..d65d360e 100644
--- a/source/QXmppIq.h
+++ b/source/QXmppIq.h
@@ -51,9 +51,9 @@ public:
QXmppIq::Type type() const;
void setType(QXmppIq::Type);
- void parse( QDomElement &element );
- void toXml( QXmlStreamWriter *writer ) const;
- virtual void toXmlElementFromChild( QXmlStreamWriter *writer ) const;
+ void parse(const QDomElement &element);
+ void toXml(QXmlStreamWriter *writer) const;
+ virtual void toXmlElementFromChild(QXmlStreamWriter *writer) const;
// deprecated accessors, use the form without "get" instead
QXmppIq::Type Q_DECL_DEPRECATED getType() const;
diff --git a/source/QXmppMessage.cpp b/source/QXmppMessage.cpp
index cafadc87..c2296f79 100644
--- a/source/QXmppMessage.cpp
+++ b/source/QXmppMessage.cpp
@@ -129,10 +129,10 @@ void QXmppMessage::setState(QXmppMessage::State state)
m_state = state;
}
-void QXmppMessage::parse(QDomElement &element)
+void QXmppMessage::parse(const QDomElement &element)
{
- setFrom(element.attribute("from"));
- setTo(element.attribute("to"));
+ QXmppStanza::parse(element);
+
setTypeFromStr(element.attribute("type"));
setBody(unescapeString(
element.firstChildElement("body").text()));
@@ -140,14 +140,6 @@ void QXmppMessage::parse(QDomElement &element)
element.firstChildElement("subject").text()));
setThread(element.firstChildElement("thread").text());
- QDomElement errorElement = element.
- firstChildElement("error");
- if(!errorElement.isNull())
- {
- QXmppStanza::Error error = parseError(errorElement);
- setError(error);
- }
-
for (int i = Active; i <= Paused; i++)
{
QDomElement stateElement = element.firstChildElement(chat_states[i]);
diff --git a/source/QXmppMessage.h b/source/QXmppMessage.h
index 92b55478..45fd1570 100644
--- a/source/QXmppMessage.h
+++ b/source/QXmppMessage.h
@@ -70,7 +70,7 @@ public:
QString thread() const;
void setThread(const QString&);
- void parse(QDomElement &element);
+ void parse(const QDomElement &element);
void toXml(QXmlStreamWriter *writer) const;
// deprecated accessors, use the form without "get" instead
diff --git a/source/QXmppPresence.cpp b/source/QXmppPresence.cpp
index d6088312..b6bd27fa 100644
--- a/source/QXmppPresence.cpp
+++ b/source/QXmppPresence.cpp
@@ -67,9 +67,9 @@ void QXmppPresence::setStatus(const QXmppPresence::Status& status)
void QXmppPresence::parse(const QDomElement &element)
{
+ QXmppStanza::parse(element);
+
setTypeFromStr(element.attribute("type"));
- setFrom(element.attribute("from"));
- setTo(element.attribute("to"));
QString statusText = element.
firstChildElement("status").text();
@@ -83,14 +83,6 @@ void QXmppPresence::parse(const QDomElement &element)
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));
diff --git a/source/QXmppRpcIq.cpp b/source/QXmppRpcIq.cpp
index 8e7a6b99..4e9fed2f 100644
--- a/source/QXmppRpcIq.cpp
+++ b/source/QXmppRpcIq.cpp
@@ -24,14 +24,23 @@ QXmppRpcInvokeIq QXmppRpcErrorIq::getQuery() const
return m_query;
}
-void QXmppRpcErrorIq::parse( QDomElement &element )
+bool QXmppRpcErrorIq::isRpcErrorIq(const QDomElement &element)
{
+ QString type = element.attribute("type");
QDomElement errorElement = element.firstChildElement("error");
- setId( element.attribute("id"));
- setTo( element.attribute("to"));
- setFrom( element.attribute("from"));
- setTypeFromStr( element.attribute("type"));
+ QDomElement queryElement = element.firstChildElement("query");
+ return (type == "error") &&
+ !errorElement.isNull() &&
+ queryElement.namespaceURI() == ns_rpc;
+}
+
+void QXmppRpcErrorIq::parse(const QDomElement &element)
+{
+ QXmppStanza::parse(element);
+
+ setTypeFromStr(element.attribute("type"));
+ QDomElement errorElement = element.firstChildElement("error");
QXmppStanza::Error error;
error.setTypeFromStr( errorElement.attribute("type"));
@@ -48,44 +57,21 @@ void QXmppRpcErrorIq::parse( QDomElement &element )
setError( error );
}
-bool QXmppRpcErrorIq::isRpcErrorIq( QDomElement &element )
-{
- QString type = element.attribute("type");
- QDomElement errorElement = element.firstChildElement("error");
- QDomElement queryElement = element.firstChildElement("query");
- return (type == "error") &&
- !errorElement.isNull() &&
- queryElement.namespaceURI() == ns_rpc;
-}
-
QXmppRpcResponseIq::QXmppRpcResponseIq() : QXmppIq( QXmppIq::Result )
{
}
-void QXmppRpcResponseIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+QVariant QXmppRpcResponseIq::getPayload() const
{
- XMLRPC::ResponseMessage message( m_payload );
- writer->writeStartElement(ns_rpc, "query");
- message.writeXml(writer);
- writer->writeEndElement();
+ return m_payload;
}
-void QXmppRpcResponseIq::parse( QDomElement &element )
+void QXmppRpcResponseIq::setPayload( const QVariant &payload )
{
- QDomElement queryElement = element.firstChildElement("query");
- setId( element.attribute("id"));
- setTo( element.attribute("to"));
- setFrom( element.attribute("from"));
- setTypeFromStr( element.attribute("type"));
-
- QDomElement methodElement = queryElement.firstChildElement("methodResponse");
-
- XMLRPC::ResponseMessage message( methodElement );
- m_payload = message.value();
-
+ m_payload = payload;
}
-bool QXmppRpcResponseIq::isRpcResponseIq( QDomElement &element )
+bool QXmppRpcResponseIq::isRpcResponseIq(const QDomElement &element)
{
QString type = element.attribute("type");
QDomElement dataElement = element.firstChildElement("query");
@@ -93,57 +79,32 @@ bool QXmppRpcResponseIq::isRpcResponseIq( QDomElement &element )
type == "result";
}
-QVariant QXmppRpcResponseIq::getPayload() const
+void QXmppRpcResponseIq::parse(const QDomElement &element)
{
- return m_payload;
-}
+ QXmppStanza::parse(element);
-void QXmppRpcResponseIq::setPayload( const QVariant &payload )
-{
- m_payload = payload;
-}
+ setTypeFromStr(element.attribute("type"));
+ QDomElement queryElement = element.firstChildElement("query");
+ QDomElement methodElement = queryElement.firstChildElement("methodResponse");
+
+ XMLRPC::ResponseMessage message( methodElement );
+ m_payload = message.value();
-QXmppRpcInvokeIq::QXmppRpcInvokeIq() : QXmppIq( QXmppIq::Set )
-{
}
-void QXmppRpcInvokeIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+void QXmppRpcResponseIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
{
- QString methodName = m_interface + "." + m_method;
- XMLRPC::RequestMessage message( methodName.toLatin1() ,m_payload );
+ XMLRPC::ResponseMessage message( m_payload );
writer->writeStartElement(ns_rpc, "query");
message.writeXml(writer);
writer->writeEndElement();
}
-void QXmppRpcInvokeIq::parse( QDomElement &element )
-{
- QDomElement queryElement = element.firstChildElement("query");
- setId( element.attribute("id"));
- setTo( element.attribute("to"));
- setFrom( element.attribute("from"));
- setTypeFromStr( element.attribute("type"));
-
- QDomElement methodElement = queryElement.firstChildElement("methodCall");
-
- XMLRPC::RequestMessage message( methodElement );
-
- m_interface = message.method().split('.').value(0);
- m_method = message.method().split('.').value(1);
- m_payload = message.args();
-
-}
-
-bool QXmppRpcInvokeIq::isRpcInvokeIq( QDomElement &element )
+QXmppRpcInvokeIq::QXmppRpcInvokeIq() : QXmppIq( QXmppIq::Set )
{
- QString type = element.attribute("type");
- QDomElement dataElement = element.firstChildElement("query");
- return dataElement.namespaceURI() == ns_rpc &&
- type == "set";
}
-
QVariantList QXmppRpcInvokeIq::getPayload() const
{
return m_payload;
@@ -167,7 +128,43 @@ QString QXmppRpcInvokeIq::getInterface() const
{
return m_interface;
}
+
void QXmppRpcInvokeIq::setInterface( const QString &interface )
{
m_interface = interface;
}
+
+bool QXmppRpcInvokeIq::isRpcInvokeIq(const QDomElement &element)
+{
+ QString type = element.attribute("type");
+ QDomElement dataElement = element.firstChildElement("query");
+ return dataElement.namespaceURI() == ns_rpc &&
+ type == "set";
+}
+
+void QXmppRpcInvokeIq::parse(const QDomElement &element)
+{
+ QXmppStanza::parse(element);
+
+ setTypeFromStr(element.attribute("type"));
+
+ QDomElement queryElement = element.firstChildElement("query");
+ QDomElement methodElement = queryElement.firstChildElement("methodCall");
+
+ XMLRPC::RequestMessage message( methodElement );
+
+ m_interface = message.method().split('.').value(0);
+ m_method = message.method().split('.').value(1);
+ m_payload = message.args();
+
+}
+
+void QXmppRpcInvokeIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+{
+ QString methodName = m_interface + "." + m_method;
+ XMLRPC::RequestMessage message( methodName.toLatin1() ,m_payload );
+ writer->writeStartElement(ns_rpc, "query");
+ message.writeXml(writer);
+ writer->writeEndElement();
+}
+
diff --git a/source/QXmppRpcIq.h b/source/QXmppRpcIq.h
index 4e469364..461fcb4a 100644
--- a/source/QXmppRpcIq.h
+++ b/source/QXmppRpcIq.h
@@ -11,13 +11,14 @@ class QXmppRpcResponseIq : public QXmppIq
{
public:
QXmppRpcResponseIq();
- void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isRpcResponseIq( QDomElement &element );
QVariant getPayload() const;
void setPayload( const QVariant &payload );
+ static bool isRpcResponseIq(const QDomElement &element);
+ void parse(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
+
private:
QVariant m_payload;
@@ -28,10 +29,6 @@ class QXmppRpcInvokeIq : public QXmppIq
public:
QXmppRpcInvokeIq();
- void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isRpcInvokeIq( QDomElement &element );
-
QVariantList getPayload() const;
void setPayload( const QVariantList &payload );
@@ -41,6 +38,9 @@ public:
QString getInterface() const;
void setInterface( const QString &interface );
+ static bool isRpcInvokeIq(const QDomElement &element);
+ void parse(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
private:
QVariantList m_payload;
@@ -53,13 +53,14 @@ class QXmppRpcErrorIq : public QXmppIq
{
public:
QXmppRpcErrorIq();
- void toXmlElementFromChild(QXmlStreamWriter *writer) const;
- void parse( QDomElement &element );
- static bool isRpcErrorIq( QDomElement &element );
void setQuery(const QXmppRpcInvokeIq &query );
QXmppRpcInvokeIq getQuery() const;
+ static bool isRpcErrorIq(const QDomElement &element);
+ void parse(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
+
private:
QXmppRpcInvokeIq m_query;
};
diff --git a/source/QXmppStanza.cpp b/source/QXmppStanza.cpp
index aa57cbf2..0e4813e6 100644
--- a/source/QXmppStanza.cpp
+++ b/source/QXmppStanza.cpp
@@ -349,6 +349,18 @@ bool QXmppStanza::isErrorStanza()
m_error.getConditionStr().isEmpty());
}
+void QXmppStanza::parse(const QDomElement &element)
+{
+ m_from = element.attribute("from");
+ m_to = element.attribute("to");
+ m_id = element.attribute("id");
+ m_lang = element.attribute("lang");
+
+ QDomElement errorElement = element.firstChildElement("error");
+ if(!errorElement.isNull())
+ m_error = parseError(errorElement);
+}
+
QXmppStanza::Error QXmppStanza::parseError(const QDomElement &errorElement)
{
QXmppStanza::Error error;
diff --git a/source/QXmppStanza.h b/source/QXmppStanza.h
index fd1f2426..60630a1c 100644
--- a/source/QXmppStanza.h
+++ b/source/QXmppStanza.h
@@ -137,6 +137,7 @@ public:
protected:
void generateAndSetNextId();
+ void parse(const QDomElement &element);
private:
static uint s_uniqeIdNo;
diff --git a/source/QXmppVCard.cpp b/source/QXmppVCard.cpp
index bbab4bff..5035c0f4 100644
--- a/source/QXmppVCard.cpp
+++ b/source/QXmppVCard.cpp
@@ -77,14 +77,9 @@ void QXmppVCard::setPhoto(const QImage& image)
void QXmppVCard::parse(const QDomElement& nodeRecv)
{
- QString id = nodeRecv.attribute("id");
- QString to = nodeRecv.attribute("to");
- QString from = nodeRecv.attribute("from");
- QString type = nodeRecv.attribute("type");
- setTypeFromStr(type);
- setId(id);
- setTo(to);
- setFrom(from);
+ QXmppStanza::parse(nodeRecv);
+
+ setTypeFromStr(nodeRecv.attribute("type"));
// vCard
setFullName(nodeRecv.firstChildElement("vCard").