From bb95ebd0e305071ccea30e356844042402bcd76b Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 4 Mar 2010 08:43:53 +0000 Subject: regroup common stanza parsing inside QXmppStanza::parse() --- source/QXmppRpcIq.cpp | 135 ++++++++++++++++++++++++-------------------------- 1 file changed, 66 insertions(+), 69 deletions(-) (limited to 'source/QXmppRpcIq.cpp') 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(); +} + -- cgit v1.2.3