diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-10 08:07:35 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-10 08:07:35 +0000 |
| commit | 1d726c6fd2ac9a0e57fbc661c1d66273ff385ea1 (patch) | |
| tree | 61d73f5ef6b173c9798a3134fe20b8d962f00a08 /source/xmlrpc.cpp | |
| parent | 1147c4f57591397a53bc045ae77106e337c2d940 (diff) | |
| download | qxmpp-1d726c6fd2ac9a0e57fbc661c1d66273ff385ea1.tar.gz | |
merge xmlrpc.cpp into QXmppRpcIq.cpp
Diffstat (limited to 'source/xmlrpc.cpp')
| -rw-r--r-- | source/xmlrpc.cpp | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/source/xmlrpc.cpp b/source/xmlrpc.cpp deleted file mode 100644 index 20ca2718..00000000 --- a/source/xmlrpc.cpp +++ /dev/null @@ -1,302 +0,0 @@ -#include "xmlrpc.h" -#include <QDebug> -#include <QMap> -#include <QVariant> -#include <QDateTime> -#include <QStringList> -#include <QTextStream> - -void XMLRPC::marshall( QXmlStreamWriter *writer, const QVariant &value) -{ - writer->writeStartElement("value"); - switch( value.type() ) - { - case QVariant::Int: - case QVariant::UInt: - case QVariant::LongLong: - case QVariant::ULongLong: - writer->writeTextElement("i4", value.toString()); - break; - case QVariant::Double: - writer->writeTextElement("double", value.toString()); - break; - case QVariant::Bool: - writer->writeTextElement("boolean", value.toBool() ? "1" : "0"); - break; - case QVariant::Date: - writer->writeTextElement("dateTime.iso8601", value.toDate().toString( Qt::ISODate ) ); - break; - case QVariant::DateTime: - writer->writeTextElement("dateTime.iso8601", value.toDateTime().toString( Qt::ISODate ) ); - break; - case QVariant::Time: - writer->writeTextElement("dateTime.iso8601", value.toTime().toString( Qt::ISODate ) ); - break; - case QVariant::StringList: - case QVariant::List: - { - writer->writeStartElement("array"); - writer->writeStartElement("data"); - foreach(const QVariant &item, value.toList()) - marshall(writer, item); - writer->writeEndElement(); - writer->writeEndElement(); - break; - } - case QVariant::Map: - { - writer->writeStartElement("struct"); - QMap<QString, QVariant> map = value.toMap(); - QMap<QString, QVariant>::ConstIterator index = map.begin(); - while( index != map.end() ) - { - writer->writeStartElement("member"); - writer->writeTextElement("name", index.key()); - marshall( writer, *index ); - writer->writeEndElement(); - ++index; - } - writer->writeEndElement(); - break; - } - case QVariant::ByteArray: - { - writer->writeTextElement("base64", value.toByteArray().toBase64() ); - break; - } - default: - { - if (value.isNull()) - writer->writeEmptyElement("nil"); - else if( value.canConvert(QVariant::String) ) - { - writer->writeTextElement("string", value.toString() ); - } - break; - } - } - writer->writeEndElement(); -} - -QVariant XMLRPC::demarshall(const QDomElement &elem, QStringList &errors) -{ - if ( elem.tagName().toLower() != "value" ) - { - errors << "Bad param value"; - return QVariant(); - } - - if ( !elem.firstChild().isElement() ) - { - return QVariant( elem.text() ); - } - - const QDomElement typeData = elem.firstChild().toElement(); - const QString typeName = typeData.tagName().toLower(); - - if (typeName == "nil") - { - return QVariant(); - } - if ( typeName == "string" ) - { - return QVariant( typeData.text() ); - } - else if (typeName == "int" || typeName == "i4" ) - { - bool ok = false; - QVariant val( typeData.text().toInt( &ok ) ); - if (ok) - return val; - errors << "I was looking for an integer but data was courupt"; - return QVariant(); - } - else if( typeName == "double" ) - { - bool ok = false; - QVariant val( typeData.text().toDouble( &ok ) ); - if (ok) - return val; - errors << "I was looking for an double but data was corrupt"; - } - else if( typeName == "boolean" ) - return QVariant( typeData.text() == "1" || typeData.text().toLower() == "true" ); - else if( typeName == "datetime" || typeName == "datetime.iso8601" ) - return QVariant( QDateTime::fromString( typeData.text(), Qt::ISODate ) ); - else if( typeName == "array" ) - { - QVariantList arr; - QDomElement valueNode = typeData.firstChildElement("data").firstChildElement(); - while (!valueNode.isNull() && errors.isEmpty()) - { - arr.append(demarshall(valueNode, errors)); - valueNode = valueNode.nextSiblingElement(); - } - return QVariant( arr ); - } - else if( typeName == "struct" ) - { - QMap<QString,QVariant> stct; - QDomNode valueNode = typeData.firstChild(); - while(!valueNode.isNull() && errors.isEmpty()) - { - const QDomElement memberNode = valueNode.toElement().elementsByTagName("name").item(0).toElement(); - const QDomElement dataNode = valueNode.toElement().elementsByTagName("value").item(0).toElement(); - stct[ memberNode.text() ] = demarshall(dataNode, errors); - valueNode = valueNode.nextSibling(); - } - return QVariant(stct); - } - else if( typeName == "base64" ) - { - QVariant returnVariant; - QByteArray dest; - QByteArray src = typeData.text().toLatin1(); - dest = QByteArray::fromBase64( src ); - QDataStream ds(&dest, QIODevice::ReadOnly); - ds.setVersion(QDataStream::Qt_4_0); - ds >> returnVariant; - if (returnVariant.isValid()) - return returnVariant; - else - return QVariant( dest ); - } - - errors << QString( "Cannot handle type %1").arg(typeName); - return QVariant(); -} - -bool XMLRPC::RequestMessage::parse(const QDomElement &element) -{ - QStringList errors; - - m_args.clear(); - m_method.clear(); - - const QDomElement methodName = element.firstChildElement("methodName"); - if( !methodName.isNull() ) - { - m_method = methodName.text().toLatin1(); - } - else - { - errors << "Missing methodName property"; - return false; - } - - const QDomElement methodParams = element.firstChildElement("params"); - if( !methodParams.isNull() ) - { - QDomNode param = methodParams.firstChildElement("param"); - while (!param.isNull()) - { - QVariant arg = demarshall(param.firstChild().toElement(), errors); - if (!errors.isEmpty()) - return false; - m_args << arg; - param = param.nextSiblingElement("param"); - } - } - return true; -} - -QVariantList XMLRPC::RequestMessage::arguments() const -{ - return m_args; -} - -void XMLRPC::RequestMessage::setArguments(const QVariantList &args) -{ - m_args = args; -} - -QByteArray XMLRPC::RequestMessage::method() const -{ - return m_method; -} - -void XMLRPC::RequestMessage::setMethod(const QByteArray &method) -{ - m_method = method; -} - -void XMLRPC::RequestMessage::writeXml( QXmlStreamWriter *writer ) const -{ - writer->writeStartElement("methodCall"); - writer->writeTextElement("methodName", m_method ); - if( !m_args.isEmpty() ) - { - writer->writeStartElement("params"); - foreach(const QVariant &arg, m_args) - { - writer->writeStartElement("param"); - marshall(writer, arg); - writer->writeEndElement(); - } - writer->writeEndElement(); - } - writer->writeEndElement(); -} - -bool XMLRPC::ResponseMessage::parse(const QDomElement &element) -{ - QStringList errors; - const QDomElement contents = element.firstChild().toElement(); - if( contents.tagName().toLower() == "params") - { - QDomNode param = contents.firstChildElement("param"); - while (!param.isNull()) - { - const QVariant value = demarshall(param.firstChildElement(), errors); - if (!errors.isEmpty()) - return false; - m_values << value; - param = param.nextSiblingElement("param"); - } - return true; - } - else if( contents.tagName().toLower() == "fault") - { - const QDomElement errElement = contents.firstChildElement(); - const QVariant error = demarshall(errElement, errors); - - qWarning() << QString("XMLRPC Fault %1: %2") - .arg(error.toMap()["faultCode"].toString() ) - .arg(error.toMap()["faultString"].toString() ); - return true; - } - else - { - qWarning("Bad XML response"); - return false; - } -} - -QVariantList XMLRPC::ResponseMessage::values() const -{ - return m_values; -} - -void XMLRPC::ResponseMessage::setValues(const QVariantList &values) -{ - m_values = values; -} - -void XMLRPC::ResponseMessage::writeXml( QXmlStreamWriter *writer ) const -{ - writer->writeStartElement("methodResponse"); - - if( !m_values.isEmpty() ) - { - writer->writeStartElement("params"); - foreach (const QVariant &arg, m_values) - { - writer->writeStartElement("param"); - marshall(writer, arg); - writer->writeEndElement(); - } - writer->writeEndElement(); - } - writer->writeEndElement(); -} - |
