From d98bbdffd9f45ff8ecd1fece04cad2d93f5d0a9e Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Tue, 10 Aug 2010 08:31:00 +0000 Subject: parse/serialise XML-RPC faults --- source/QXmppRpcIq.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 12 deletions(-) (limited to 'source/QXmppRpcIq.cpp') diff --git a/source/QXmppRpcIq.cpp b/source/QXmppRpcIq.cpp index 94848010..def28458 100644 --- a/source/QXmppRpcIq.cpp +++ b/source/QXmppRpcIq.cpp @@ -22,7 +22,6 @@ * */ -#include #include #include #include @@ -221,15 +220,58 @@ void QXmppRpcErrorIq::toXmlElementFromChild(QXmlStreamWriter *writer) const m_query.toXmlElementFromChild(writer); } -QXmppRpcResponseIq::QXmppRpcResponseIq() : QXmppIq( QXmppIq::Result ) +QXmppRpcResponseIq::QXmppRpcResponseIq() + : QXmppIq(QXmppIq::Result), + m_faultCode(0) { } +/// Returns the fault code. +/// + +int QXmppRpcResponseIq::faultCode() const +{ + return m_faultCode; +} + +/// Sets the fault code. +/// +/// \param faultCode + +void QXmppRpcResponseIq::setFaultCode(int faultCode) +{ + m_faultCode = faultCode; +} + +/// Returns the fault string. +/// + +QString QXmppRpcResponseIq::faultString() const +{ + return m_faultString; +} + +/// Sets the fault string. +/// +/// \param faultString + +void QXmppRpcResponseIq::setFaultString(const QString& faultString) +{ + m_faultString = faultString; +} + +/// Returns the response values. +/// + QVariantList QXmppRpcResponseIq::values() const { return m_values; } +/// Sets the response values. +/// +/// \param values + void QXmppRpcResponseIq::setValues(const QVariantList &values) { m_values = values; @@ -255,7 +297,7 @@ void QXmppRpcResponseIq::parseElementFromChild(const QDomElement &element) while (!param.isNull()) { QStringList errors; - const QVariant value = XMLRPC::demarshall(param.firstChildElement(), errors); + const QVariant value = XMLRPC::demarshall(param.firstChildElement("value"), errors); if (!errors.isEmpty()) break; m_values << value; @@ -265,12 +307,12 @@ void QXmppRpcResponseIq::parseElementFromChild(const QDomElement &element) else if( contents.tagName().toLower() == "fault") { QStringList errors; - const QDomElement errElement = contents.firstChildElement(); + const QDomElement errElement = contents.firstChildElement("value"); const QVariant error = XMLRPC::demarshall(errElement, errors); - - qWarning() << QString("XMLRPC Fault %1: %2") - .arg(error.toMap()["faultCode"].toString() ) - .arg(error.toMap()["faultString"].toString() ); + if (!errors.isEmpty()) + return; + m_faultCode = error.toMap()["faultCode"].toInt(); + m_faultString = error.toMap()["faultString"].toString(); } } @@ -280,7 +322,16 @@ void QXmppRpcResponseIq::toXmlElementFromChild(QXmlStreamWriter *writer) const helperToXmlAddAttribute(writer, "xmlns", ns_rpc); writer->writeStartElement("methodResponse"); - if (!m_values.isEmpty()) + if (m_faultCode) + { + writer->writeStartElement("fault"); + QMap fault; + fault["faultCode"] = m_faultCode; + fault["faultString"] = m_faultString; + XMLRPC::marshall(writer, fault); + writer->writeEndElement(); + } + else if (!m_values.isEmpty()) { writer->writeStartElement("params"); foreach (const QVariant &arg, m_values) @@ -296,15 +347,23 @@ void QXmppRpcResponseIq::toXmlElementFromChild(QXmlStreamWriter *writer) const writer->writeEndElement(); } -QXmppRpcInvokeIq::QXmppRpcInvokeIq() : QXmppIq( QXmppIq::Set ) +QXmppRpcInvokeIq::QXmppRpcInvokeIq() + : QXmppIq(QXmppIq::Set) { } +/// Returns the method arguments. +/// + QVariantList QXmppRpcInvokeIq::arguments() const { return m_arguments; } +/// Sets the method arguments. +/// +/// \param arguments + void QXmppRpcInvokeIq::setArguments(const QVariantList &arguments) { m_arguments = arguments; @@ -357,7 +416,7 @@ void QXmppRpcInvokeIq::parseElementFromChild(const QDomElement &element) while (!param.isNull()) { QStringList errors; - QVariant arg = XMLRPC::demarshall(param.firstChildElement(), errors); + QVariant arg = XMLRPC::demarshall(param.firstChildElement("value"), errors); if (!errors.isEmpty()) break; m_arguments << arg; @@ -389,4 +448,3 @@ void QXmppRpcInvokeIq::toXmlElementFromChild(QXmlStreamWriter *writer) const writer->writeEndElement(); } - -- cgit v1.2.3