void networkReplyError(QNetworkReply::NetworkError code) { Q_D(QJsonRpcHttpReply); QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender()); if (!reply) { qJsonRpcDebug() << Q_FUNC_INFO << "invalid reply"; return; } reply->deleteLater(); if (code == QNetworkReply::NoError) return; QJsonRpcMessage response = QJsonRpcMessage::fromJson(reply->readAll()); if (response.isValid()) { d->response = response; Q_EMIT messageReceived(response); } else { d->response = d->request.createErrorResponse(QJsonRpc::InternalError, QString("error with http request: %1").arg(reply->error()), reply->errorString()); } Q_EMIT finished(); }
int main(int argc, char **argv) { QCoreApplication app(argc, argv); QStringList args = app.arguments(); QString appName = args.takeFirst(); bool notification = args.contains("-n"); if (notification) args.removeAll("-n"); if (args.size() < 2) { qDebug("usage: %s [-n] <service> <method> <arguments>", appName.toLocal8Bit().data()); return -1; } // try to process socket QIODevice *device = 0; QScopedPointer<QIODevice> devicePtr(device); QString service = args.takeFirst(); QUrl serviceUrl = QUrl::fromUserInput(service); QHostAddress serviceAddress(serviceUrl.host()); if (serviceAddress.isNull()) { QLocalSocket *localSocket = new QLocalSocket; device = localSocket; localSocket->connectToServer(service); if (!localSocket->waitForConnected(5000)) { qDebug("could not connect to service: %s", service.toLocal8Bit().data()); return -1; } } else { QTcpSocket *tcpSocket = new QTcpSocket; device = tcpSocket; int servicePort = serviceUrl.port() ? serviceUrl.port() : 5555; tcpSocket->connectToHost(serviceAddress, servicePort); if (!tcpSocket->waitForConnected(5000)) { qDebug("could not connect to host at %s:%d", serviceUrl.host().toLocal8Bit().data(), servicePort); return -1; } } QJsonRpcSocket socket(device); QString method = args.takeFirst(); QVariantList arguments; foreach (QString arg, args) arguments.append(arg); QJsonRpcMessage request = notification ? QJsonRpcMessage::createNotification(method, arguments) : QJsonRpcMessage::createRequest(method, arguments); QJsonRpcMessage response = socket.sendMessageBlocking(request, 5000); if (response.type() == QJsonRpcMessage::Error) { qDebug("error(%d): %s", response.errorCode(), response.errorMessage().toLocal8Bit().data()); return -1; } qDebug() << response.result(); }
void TestQJsonRpcMessage::testInvalidDataResponseWithoutId() { // invalid without id const char *invalid = "{\"jsonrpc\": \"2.0\", \"params\": []}"; QJsonRpcMessage request(invalid); QJsonRpcMessage error = request.createErrorResponse(QJsonRpc::NoError, QString()); QJsonRpcMessage response = request.createResponse(QString()); QCOMPARE(request.type(), QJsonRpcMessage::Invalid); QCOMPARE(response.type(), QJsonRpcMessage::Invalid); QCOMPARE(error.id(), 0); }
bool DlvClient::callBlocked(const QString &method, const JsonDataIn *in, JsonDataOut *out) const { QVariantMap param; in->toMap(param); QJsonRpcMessage request = QJsonRpcMessage::createRequest("RPCServer."+method, QJsonValue::fromVariant(param)); QJsonRpcMessage response = m_dlv->sendMessageBlocking(request,m_callTimeout); if (response.type() == QJsonRpcMessage::Error) { //qDebug("error(%d): %s", response.errorCode(), response.errorMessage().toLocal8Bit().data());// return false; } m_lastJsonData = response.result().toVariant(); out->fromMap(response.result().toVariant().toMap()); return true; }
void QJsonRpcSocketPrivate::writeData(const QJsonRpcMessage &message) { Q_Q(QJsonRpcSocket); QJsonDocument doc = QJsonDocument(message.toObject()); #if QT_VERSION >= 0x050100 || QT_VERSION <= 0x050000 QByteArray data = doc.toJson(QJsonDocument::Compact); #else QByteArray data = doc.toJson(); #endif device.data()->write(data); qJsonRpcDebug() << "sending(" << q << "): " << data; }
void TestQJsonRpcMessage::testWithVariantListArgs() { const char *varListArgsFormat = "{ " \ "\"id\": %1, " \ "\"jsonrpc\": \"2.0\", " \ "\"method\": \"service.variantListParameter\", " \ "\"params\": [[ 1, 20, \"hello\", false ]] " \ "}"; QVariantList firstParameter; firstParameter << 1 << 20 << "hello" << false; QJsonRpcMessage requestFromQJsonRpc = QJsonRpcMessage::createRequest("service.variantListParameter", QVariant(firstParameter)); // QJsonRpcMessage::createRequest is creating objects with an unique id, // and to allow a random test execution order - json data must have the same id int id = requestFromQJsonRpc.id(); QByteArray varListArgs = QString(varListArgsFormat).arg(id).toLatin1(); QJsonRpcMessage requestFromData(varListArgs); QCOMPARE(requestFromQJsonRpc, requestFromData); }
QDebug operator<<(QDebug dbg, const QJsonRpcMessage &msg) { dbg.nospace() << "QJsonRpcMessage(type=" << msg.type(); if (msg.type() != QJsonRpcMessage::Notification) { dbg.nospace() << ", id=" << msg.id(); } if (msg.type() == QJsonRpcMessage::Request || msg.type() == QJsonRpcMessage::Notification) { dbg.nospace() << ", method=" << msg.method() << ", params=" << msg.params(); } else if (msg.type() == QJsonRpcMessage::Response) { dbg.nospace() << ", result=" << msg.result(); } else if (msg.type() == QJsonRpcMessage::Error) { dbg.nospace() << ", code=" << msg.errorCode() << ", message=" << msg.errorMessage() << ", data=" << msg.errorData(); } dbg.nospace() << ")"; return dbg.space(); }
bool QJsonRpcMessage::operator==(const QJsonRpcMessage &message) const { if (message.d == d) return true; if (message.type() == type()) { if (message.type() == QJsonRpcMessage::Error) { return (message.errorCode() == errorCode() && message.errorMessage() == errorMessage() && message.errorData() == errorData()); } else { if (message.type() == QJsonRpcMessage::Notification) { return (message.method() == method() && message.params() == params()); } else { return (message.id() == id() && message.method() == method() && message.params() == params()); } } } return false; }
void TestQJsonRpcMessage::testMessageTypes() { QJsonRpcMessage invalid; QCOMPARE(invalid.type(), QJsonRpcMessage::Invalid); QJsonRpcMessage request = QJsonRpcMessage::createRequest("testMethod"); QCOMPARE(request.type(), QJsonRpcMessage::Request); QJsonRpcMessage response = request.createResponse("testResponse"); QCOMPARE(response.type(), QJsonRpcMessage::Response); QJsonRpcMessage error = request.createErrorResponse(QJsonRpc::NoError); QCOMPARE(error.type(), QJsonRpcMessage::Error); QJsonRpcMessage notification = QJsonRpcMessage::createNotification("testNotification"); QCOMPARE(notification.type(), QJsonRpcMessage::Notification); }
void TestQJsonRpcMessage::testNotificationNoId() { QJsonRpcMessage notification = QJsonRpcMessage::createNotification("testNotification"); QCOMPARE(notification.id(), -1); }
void TestQJsonRpcMessage::testResponseSameId() { QJsonRpcMessage request = QJsonRpcMessage::createRequest("testMethod"); QJsonRpcMessage response = request.createResponse("testResponse"); QCOMPARE(response.id(), request.id()); }