void TestXmlRpc::testResponseFault() { const QByteArray xml( "<iq" " id=\"rpc1\"" " to=\"[email protected]/jrpc-client\"" " from=\"[email protected]/jrpc-server\"" " type=\"result\">" "<query xmlns=\"jabber:iq:rpc\">" "<methodResponse>" "<fault>" "<value>" "<struct>" "<member>" "<name>faultCode</name>" "<value><i4>404</i4></value>" "</member>" "<member>" "<name>faultString</name>" "<value><string>Not found</string></value>" "</member>" "</struct>" "</value>" "</fault>" "</methodResponse>" "</query>" "</iq>"); QXmppRpcResponseIq iq; parsePacket(iq, xml); QCOMPARE(iq.faultCode(), 404); QCOMPARE(iq.faultString(), QLatin1String("Not found")); QCOMPARE(iq.values(), QVariantList()); serializePacket(iq, xml); }
void TestXmlRpc::testResponse() { const QByteArray xml( "<iq" " id=\"rpc1\"" " to=\"[email protected]/jrpc-client\"" " from=\"[email protected]/jrpc-server\"" " type=\"result\">" "<query xmlns=\"jabber:iq:rpc\">" "<methodResponse>" "<params>" "<param>" "<value><string>Colorado</string></value>" "</param>" "</params>" "</methodResponse>" "</query>" "</iq>"); QXmppRpcResponseIq iq; parsePacket(iq, xml); QCOMPARE(iq.faultCode(), 0); QCOMPARE(iq.faultString(), QString()); QCOMPARE(iq.values(), QVariantList() << QString("Colorado")); serializePacket(iq, xml); }
void QXmppRemoteMethod::gotResult( const QXmppRpcResponseIq &iq ) { if ( iq.id() == m_payload.id() ) { m_result.hasError = false; m_result.result = iq.getPayload(); emit callDone(); } }
void QXmppRemoteMethod::gotResult( const QXmppRpcResponseIq &iq ) { if ( iq.id() == m_payload.id() ) { m_result.hasError = false; // FIXME: we don't handle multiple responses m_result.result = iq.values().first(); emit callDone(); } }
void QXmppClient::invokeInterfaceMethod( const QXmppRpcInvokeIq &iq ) { QXmppStanza::Error error; const QStringList methodBits = iq.method().split('.'); if (methodBits.size() != 2) return; const QString interface = methodBits.first(); const QString method = methodBits.last(); QXmppInvokable *iface = d->interfaces.value(interface); if (iface) { if ( iface->isAuthorized( iq.from() ) ) { if ( iface->interfaces().contains(method) ) { QVariant result = iface->dispatch(method.toLatin1(), iq.arguments() ); QXmppRpcResponseIq resultIq; resultIq.setId(iq.id()); resultIq.setTo(iq.from()); resultIq.setFrom(d->stream->configuration().jid()); resultIq.setValues(QVariantList() << result); d->stream->sendPacket( resultIq ); return; } else { error.setType(QXmppStanza::Error::Cancel); error.setCondition(QXmppStanza::Error::ItemNotFound); } } else { error.setType(QXmppStanza::Error::Auth); error.setCondition(QXmppStanza::Error::Forbidden); } } else { error.setType(QXmppStanza::Error::Cancel); error.setCondition(QXmppStanza::Error::ItemNotFound); } QXmppRpcErrorIq errorIq; errorIq.setId(iq.id()); errorIq.setTo(iq.from()); errorIq.setFrom(d->stream->configuration().jid()); errorIq.setQuery( iq ); errorIq.setError( error ); d->stream->sendPacket( errorIq ); }