aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-10 08:31:00 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-10 08:31:00 +0000
commitd98bbdffd9f45ff8ecd1fece04cad2d93f5d0a9e (patch)
tree1e371d69c010daf60dae5e04121a897394306115 /source
parent064a65d8d2bde24369bb83d8393da1344035ad83 (diff)
downloadqxmpp-d98bbdffd9f45ff8ecd1fece04cad2d93f5d0a9e.tar.gz
parse/serialise XML-RPC faults
Diffstat (limited to 'source')
-rw-r--r--source/QXmppRpcIq.cpp82
-rw-r--r--source/QXmppRpcIq.h18
2 files changed, 88 insertions, 12 deletions
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 <QDebug>
#include <QDomElement>
#include <QMap>
#include <QVariant>
@@ -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<QString,QVariant> 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();
}
-
diff --git a/source/QXmppRpcIq.h b/source/QXmppRpcIq.h
index 1f92f086..d6cf63ab 100644
--- a/source/QXmppRpcIq.h
+++ b/source/QXmppRpcIq.h
@@ -37,11 +37,22 @@ namespace XMLRPC
QVariant demarshall(const QDomElement &elem, QStringList &errors);
}
+/// \brief The QXmppResponseIq class represents an IQ used to carry
+/// an RPC response as specified by XEP-0009: Jabber-RPC.
+///
+/// \ingroup Stanzas
+
class QXmppRpcResponseIq : public QXmppIq
{
public:
QXmppRpcResponseIq();
+ int faultCode() const;
+ void setFaultCode(int faultCode);
+
+ QString faultString() const;
+ void setFaultString(const QString &faultString);
+
QVariantList values() const;
void setValues(const QVariantList &values);
@@ -52,9 +63,16 @@ protected:
void toXmlElementFromChild(QXmlStreamWriter *writer) const;
private:
+ int m_faultCode;
+ QString m_faultString;
QVariantList m_values;
};
+/// \brief The QXmppInvokeIq class represents an IQ used to carry
+/// an RPC invocation as specified by XEP-0009: Jabber-RPC.
+///
+/// \ingroup Stanzas
+
class QXmppRpcInvokeIq : public QXmppIq
{
public: