diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-03-04 08:43:53 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-03-04 08:43:53 +0000 |
| commit | bb95ebd0e305071ccea30e356844042402bcd76b (patch) | |
| tree | 8290d542d1c53c81828a3f8a5d45cf387a4c72d7 | |
| parent | f3c8579fd664461f529d2fe4713093596ba9ff97 (diff) | |
| download | qxmpp-bb95ebd0e305071ccea30e356844042402bcd76b.tar.gz | |
regroup common stanza parsing inside QXmppStanza::parse()
| -rw-r--r-- | source/QXmppArchiveIq.cpp | 40 | ||||
| -rw-r--r-- | source/QXmppArchiveIq.h | 12 | ||||
| -rw-r--r-- | source/QXmppByteStreamIq.cpp | 9 | ||||
| -rw-r--r-- | source/QXmppByteStreamIq.h | 4 | ||||
| -rw-r--r-- | source/QXmppDiscoveryIq.cpp | 9 | ||||
| -rw-r--r-- | source/QXmppDiscoveryIq.h | 8 | ||||
| -rw-r--r-- | source/QXmppIbbIqs.cpp | 115 | ||||
| -rw-r--r-- | source/QXmppIbbIqs.h | 20 | ||||
| -rw-r--r-- | source/QXmppIq.cpp | 7 | ||||
| -rw-r--r-- | source/QXmppIq.h | 6 | ||||
| -rw-r--r-- | source/QXmppMessage.cpp | 14 | ||||
| -rw-r--r-- | source/QXmppMessage.h | 2 | ||||
| -rw-r--r-- | source/QXmppPresence.cpp | 12 | ||||
| -rw-r--r-- | source/QXmppRpcIq.cpp | 135 | ||||
| -rw-r--r-- | source/QXmppRpcIq.h | 21 | ||||
| -rw-r--r-- | source/QXmppStanza.cpp | 12 | ||||
| -rw-r--r-- | source/QXmppStanza.h | 1 | ||||
| -rw-r--r-- | source/QXmppVCard.cpp | 11 |
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"). |
