NOISSUE Remove Requestor, it is unused
This commit is contained in:
parent
d2a44effb5
commit
a5956194df
@ -23,7 +23,6 @@
|
|||||||
#include "Env.h"
|
#include "Env.h"
|
||||||
|
|
||||||
using OAuth2 = Katabasis::OAuth2;
|
using OAuth2 = Katabasis::OAuth2;
|
||||||
using Requestor = AuthRequest;
|
|
||||||
using Activity = Katabasis::Activity;
|
using Activity = Katabasis::Activity;
|
||||||
|
|
||||||
AuthContext::AuthContext(AccountData * data, QObject *parent) :
|
AuthContext::AuthContext(AccountData * data, QObject *parent) :
|
||||||
@ -164,8 +163,8 @@ void AuthContext::doUserAuth() {
|
|||||||
QNetworkRequest request = QNetworkRequest(QUrl("https://user.auth.xboxlive.com/user/authenticate"));
|
QNetworkRequest request = QNetworkRequest(QUrl("https://user.auth.xboxlive.com/user/authenticate"));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
request.setRawHeader("Accept", "application/json");
|
request.setRawHeader("Accept", "application/json");
|
||||||
auto *requestor = new Requestor(this);
|
auto *requestor = new AuthRequest(this);
|
||||||
connect(requestor, &Requestor::finished, this, &AuthContext::onUserAuthDone);
|
connect(requestor, &AuthRequest::finished, this, &AuthContext::onUserAuthDone);
|
||||||
requestor->post(request, xbox_auth_data.toUtf8());
|
requestor->post(request, xbox_auth_data.toUtf8());
|
||||||
qDebug() << "First layer of XBox auth ... commencing.";
|
qDebug() << "First layer of XBox auth ... commencing.";
|
||||||
}
|
}
|
||||||
@ -358,8 +357,8 @@ void AuthContext::doSTSAuthMinecraft() {
|
|||||||
QNetworkRequest request = QNetworkRequest(QUrl("https://xsts.auth.xboxlive.com/xsts/authorize"));
|
QNetworkRequest request = QNetworkRequest(QUrl("https://xsts.auth.xboxlive.com/xsts/authorize"));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
request.setRawHeader("Accept", "application/json");
|
request.setRawHeader("Accept", "application/json");
|
||||||
Requestor *requestor = new Requestor(this);
|
AuthRequest *requestor = new AuthRequest(this);
|
||||||
connect(requestor, &Requestor::finished, this, &AuthContext::onSTSAuthMinecraftDone);
|
connect(requestor, &AuthRequest::finished, this, &AuthContext::onSTSAuthMinecraftDone);
|
||||||
requestor->post(request, xbox_auth_data.toUtf8());
|
requestor->post(request, xbox_auth_data.toUtf8());
|
||||||
qDebug() << "Getting Minecraft services STS token...";
|
qDebug() << "Getting Minecraft services STS token...";
|
||||||
}
|
}
|
||||||
@ -428,8 +427,8 @@ void AuthContext::doMinecraftAuth() {
|
|||||||
QNetworkRequest request = QNetworkRequest(QUrl("https://api.minecraftservices.com/authentication/login_with_xbox"));
|
QNetworkRequest request = QNetworkRequest(QUrl("https://api.minecraftservices.com/authentication/login_with_xbox"));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
request.setRawHeader("Accept", "application/json");
|
request.setRawHeader("Accept", "application/json");
|
||||||
Requestor *requestor = new Requestor(this);
|
AuthRequest *requestor = new AuthRequest(this);
|
||||||
connect(requestor, &Requestor::finished, this, &AuthContext::onMinecraftAuthDone);
|
connect(requestor, &AuthRequest::finished, this, &AuthContext::onMinecraftAuthDone);
|
||||||
requestor->post(request, data.toUtf8());
|
requestor->post(request, data.toUtf8());
|
||||||
qDebug() << "Getting Minecraft access token...";
|
qDebug() << "Getting Minecraft access token...";
|
||||||
}
|
}
|
||||||
@ -518,8 +517,8 @@ void AuthContext::doSTSAuthGeneric() {
|
|||||||
QNetworkRequest request = QNetworkRequest(QUrl("https://xsts.auth.xboxlive.com/xsts/authorize"));
|
QNetworkRequest request = QNetworkRequest(QUrl("https://xsts.auth.xboxlive.com/xsts/authorize"));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
request.setRawHeader("Accept", "application/json");
|
request.setRawHeader("Accept", "application/json");
|
||||||
Requestor *requestor = new Requestor(this);
|
AuthRequest *requestor = new AuthRequest(this);
|
||||||
connect(requestor, &Requestor::finished, this, &AuthContext::onSTSAuthGenericDone);
|
connect(requestor, &AuthRequest::finished, this, &AuthContext::onSTSAuthGenericDone);
|
||||||
requestor->post(request, xbox_auth_data.toUtf8());
|
requestor->post(request, xbox_auth_data.toUtf8());
|
||||||
qDebug() << "Getting generic STS token...";
|
qDebug() << "Getting generic STS token...";
|
||||||
}
|
}
|
||||||
@ -574,8 +573,8 @@ void AuthContext::doXBoxProfile() {
|
|||||||
request.setRawHeader("Accept", "application/json");
|
request.setRawHeader("Accept", "application/json");
|
||||||
request.setRawHeader("x-xbl-contract-version", "3");
|
request.setRawHeader("x-xbl-contract-version", "3");
|
||||||
request.setRawHeader("Authorization", QString("XBL3.0 x=%1;%2").arg(m_data->userToken.extra["uhs"].toString(), m_data->xboxApiToken.token).toUtf8());
|
request.setRawHeader("Authorization", QString("XBL3.0 x=%1;%2").arg(m_data->userToken.extra["uhs"].toString(), m_data->xboxApiToken.token).toUtf8());
|
||||||
Requestor *requestor = new Requestor(this);
|
AuthRequest *requestor = new AuthRequest(this);
|
||||||
connect(requestor, &Requestor::finished, this, &AuthContext::onXBoxProfileDone);
|
connect(requestor, &AuthRequest::finished, this, &AuthContext::onXBoxProfileDone);
|
||||||
requestor->get(request);
|
requestor->get(request);
|
||||||
qDebug() << "Getting Xbox profile...";
|
qDebug() << "Getting Xbox profile...";
|
||||||
}
|
}
|
||||||
@ -753,8 +752,8 @@ void AuthContext::doMinecraftProfile() {
|
|||||||
// request.setRawHeader("Accept", "application/json");
|
// request.setRawHeader("Accept", "application/json");
|
||||||
request.setRawHeader("Authorization", QString("Bearer %1").arg(m_data->yggdrasilToken.token).toUtf8());
|
request.setRawHeader("Authorization", QString("Bearer %1").arg(m_data->yggdrasilToken.token).toUtf8());
|
||||||
|
|
||||||
Requestor *requestor = new Requestor(this);
|
AuthRequest *requestor = new AuthRequest(this);
|
||||||
connect(requestor, &Requestor::finished, this, &AuthContext::onMinecraftProfileDone);
|
connect(requestor, &AuthRequest::finished, this, &AuthContext::onMinecraftProfileDone);
|
||||||
requestor->get(request);
|
requestor->get(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -801,8 +800,8 @@ void AuthContext::doMigrationEligibilityCheck() {
|
|||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
request.setRawHeader("Authorization", QString("Bearer %1").arg(m_data->yggdrasilToken.token).toUtf8());
|
request.setRawHeader("Authorization", QString("Bearer %1").arg(m_data->yggdrasilToken.token).toUtf8());
|
||||||
|
|
||||||
Requestor *requestor = new Requestor(this);
|
AuthRequest *requestor = new AuthRequest(this);
|
||||||
connect(requestor, &Requestor::finished, this, &AuthContext::onMigrationEligibilityCheckDone);
|
connect(requestor, &AuthRequest::finished, this, &AuthContext::onMigrationEligibilityCheckDone);
|
||||||
requestor->get(request);
|
requestor->get(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -853,8 +852,8 @@ void AuthContext::doGetSkin() {
|
|||||||
|
|
||||||
auto url = QUrl(m_data->minecraftProfile.skin.url);
|
auto url = QUrl(m_data->minecraftProfile.skin.url);
|
||||||
QNetworkRequest request = QNetworkRequest(url);
|
QNetworkRequest request = QNetworkRequest(url);
|
||||||
Requestor *requestor = new Requestor(this);
|
AuthRequest *requestor = new AuthRequest(this);
|
||||||
connect(requestor, &Requestor::finished, this, &AuthContext::onSkinDone);
|
connect(requestor, &AuthRequest::finished, this, &AuthContext::onSkinDone);
|
||||||
requestor->get(request);
|
requestor->get(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,24 +28,19 @@ find_package(Qt5 COMPONENTS Core Network REQUIRED)
|
|||||||
|
|
||||||
set( katabasis_PRIVATE
|
set( katabasis_PRIVATE
|
||||||
src/OAuth2.cpp
|
src/OAuth2.cpp
|
||||||
|
|
||||||
src/JsonResponse.cpp
|
src/JsonResponse.cpp
|
||||||
src/JsonResponse.h
|
src/JsonResponse.h
|
||||||
src/PollServer.cpp
|
src/PollServer.cpp
|
||||||
src/Reply.cpp
|
src/Reply.cpp
|
||||||
src/ReplyServer.cpp
|
src/ReplyServer.cpp
|
||||||
src/Requestor.cpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set( katabasis_PUBLIC
|
set( katabasis_PUBLIC
|
||||||
include/katabasis/OAuth2.h
|
include/katabasis/OAuth2.h
|
||||||
|
|
||||||
include/katabasis/Globals.h
|
include/katabasis/Globals.h
|
||||||
include/katabasis/PollServer.h
|
include/katabasis/PollServer.h
|
||||||
include/katabasis/Reply.h
|
include/katabasis/Reply.h
|
||||||
include/katabasis/ReplyServer.h
|
include/katabasis/ReplyServer.h
|
||||||
|
|
||||||
include/katabasis/Requestor.h
|
|
||||||
include/katabasis/RequestParameter.h
|
include/katabasis/RequestParameter.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <QObject>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QUrl>
|
|
||||||
#include <QByteArray>
|
|
||||||
#include <QHttpMultiPart>
|
|
||||||
|
|
||||||
#include "Reply.h"
|
|
||||||
|
|
||||||
namespace Katabasis {
|
|
||||||
|
|
||||||
class OAuth2;
|
|
||||||
|
|
||||||
/// Makes authenticated requests.
|
|
||||||
class Requestor: public QObject {
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit Requestor(QNetworkAccessManager *manager, OAuth2 *authenticator, QObject *parent = 0);
|
|
||||||
~Requestor();
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
int get(const QNetworkRequest &req, int timeout = 60*1000);
|
|
||||||
int post(const QNetworkRequest &req, const QByteArray &data, int timeout = 60*1000);
|
|
||||||
|
|
||||||
|
|
||||||
signals:
|
|
||||||
|
|
||||||
/// Emitted when a request has been completed or failed.
|
|
||||||
void finished(int id, QNetworkReply::NetworkError error, QByteArray data, QList<QNetworkReply::RawHeaderPair> headers);
|
|
||||||
|
|
||||||
/// Emitted when an upload has progressed.
|
|
||||||
void uploadProgress(int id, qint64 bytesSent, qint64 bytesTotal);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
/// Handle refresh completion.
|
|
||||||
void onRefreshFinished(QNetworkReply::NetworkError error);
|
|
||||||
|
|
||||||
/// Handle request finished.
|
|
||||||
void onRequestFinished();
|
|
||||||
|
|
||||||
/// Handle request error.
|
|
||||||
void onRequestError(QNetworkReply::NetworkError error);
|
|
||||||
|
|
||||||
/// Handle ssl errors.
|
|
||||||
void onSslErrors(QList<QSslError> errors);
|
|
||||||
|
|
||||||
/// Re-try request (after successful token refresh).
|
|
||||||
void retry();
|
|
||||||
|
|
||||||
/// Finish the request, emit finished() signal.
|
|
||||||
void finish();
|
|
||||||
|
|
||||||
/// Handle upload progress.
|
|
||||||
void onUploadProgress(qint64 uploaded, qint64 total);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
int setup(const QNetworkRequest &request, QNetworkAccessManager::Operation operation, const QByteArray &verb = QByteArray());
|
|
||||||
|
|
||||||
enum Status {
|
|
||||||
Idle, Requesting, ReRequesting
|
|
||||||
};
|
|
||||||
|
|
||||||
QNetworkAccessManager *manager_;
|
|
||||||
OAuth2 *authenticator_;
|
|
||||||
QNetworkRequest request_;
|
|
||||||
QByteArray data_;
|
|
||||||
QNetworkReply *reply_;
|
|
||||||
Status status_;
|
|
||||||
int id_;
|
|
||||||
QNetworkAccessManager::Operation operation_;
|
|
||||||
QUrl url_;
|
|
||||||
ReplyList timedReplies_;
|
|
||||||
QNetworkReply::NetworkError error_;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,195 +0,0 @@
|
|||||||
#include <cassert>
|
|
||||||
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QBuffer>
|
|
||||||
#include <QUrlQuery>
|
|
||||||
|
|
||||||
#include "katabasis/Requestor.h"
|
|
||||||
#include "katabasis/OAuth2.h"
|
|
||||||
#include "katabasis/Globals.h"
|
|
||||||
|
|
||||||
namespace Katabasis {
|
|
||||||
|
|
||||||
Requestor::Requestor(QNetworkAccessManager *manager, OAuth2 *authenticator, QObject *parent): QObject(parent), reply_(NULL), status_(Idle) {
|
|
||||||
manager_ = manager;
|
|
||||||
authenticator_ = authenticator;
|
|
||||||
if (authenticator) {
|
|
||||||
timedReplies_.setIgnoreSslErrors(authenticator->ignoreSslErrors());
|
|
||||||
}
|
|
||||||
qRegisterMetaType<QNetworkReply::NetworkError>("QNetworkReply::NetworkError");
|
|
||||||
connect(authenticator, &OAuth2::refreshFinished, this, &Requestor::onRefreshFinished);
|
|
||||||
}
|
|
||||||
|
|
||||||
Requestor::~Requestor() {
|
|
||||||
}
|
|
||||||
|
|
||||||
int Requestor::get(const QNetworkRequest &req, int timeout/* = 60*1000*/) {
|
|
||||||
if (-1 == setup(req, QNetworkAccessManager::GetOperation)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
reply_ = manager_->get(request_);
|
|
||||||
timedReplies_.add(new Reply(reply_, timeout));
|
|
||||||
connect(reply_, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onRequestError(QNetworkReply::NetworkError)));
|
|
||||||
connect(reply_, SIGNAL(finished()), this, SLOT(onRequestFinished()));
|
|
||||||
connect(reply_, &QNetworkReply::sslErrors, this, &Requestor::onSslErrors);
|
|
||||||
return id_;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Requestor::post(const QNetworkRequest &req, const QByteArray &data, int timeout/* = 60*1000*/) {
|
|
||||||
if (-1 == setup(req, QNetworkAccessManager::PostOperation)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
data_ = data;
|
|
||||||
reply_ = manager_->post(request_, data_);
|
|
||||||
timedReplies_.add(new Reply(reply_, timeout));
|
|
||||||
connect(reply_, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onRequestError(QNetworkReply::NetworkError)));
|
|
||||||
connect(reply_, SIGNAL(finished()), this, SLOT(onRequestFinished()));
|
|
||||||
connect(reply_, &QNetworkReply::sslErrors, this, &Requestor::onSslErrors);
|
|
||||||
connect(reply_, SIGNAL(uploadProgress(qint64,qint64)), this, SLOT(onUploadProgress(qint64,qint64)));
|
|
||||||
return id_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Requestor::onRefreshFinished(QNetworkReply::NetworkError error) {
|
|
||||||
if (status_ != Requesting) {
|
|
||||||
qWarning() << "O2Requestor::onRefreshFinished: No pending request";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (QNetworkReply::NoError == error) {
|
|
||||||
QTimer::singleShot(100, this, &Requestor::retry);
|
|
||||||
} else {
|
|
||||||
error_ = error;
|
|
||||||
QTimer::singleShot(10, this, &Requestor::finish);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Requestor::onRequestFinished() {
|
|
||||||
if (status_ == Idle) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (reply_ != qobject_cast<QNetworkReply *>(sender())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (reply_->error() == QNetworkReply::NoError) {
|
|
||||||
QTimer::singleShot(10, this, SLOT(finish()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Requestor::onRequestError(QNetworkReply::NetworkError error) {
|
|
||||||
qWarning() << "O2Requestor::onRequestError: Error" << (int)error;
|
|
||||||
if (status_ == Idle) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (reply_ != qobject_cast<QNetworkReply *>(sender())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
qWarning() << "O2Requestor::onRequestError: Error string: " << reply_->errorString();
|
|
||||||
int httpStatus = reply_->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
||||||
qWarning() << "O2Requestor::onRequestError: HTTP status" << httpStatus << reply_->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
|
|
||||||
if ((status_ == Requesting) && (httpStatus == 401)) {
|
|
||||||
// Call OAuth2::refresh. Note the O2 instance might live in a different thread
|
|
||||||
if (QMetaObject::invokeMethod(authenticator_, "refresh")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
qCritical() << "O2Requestor::onRequestError: Invoking remote refresh failed";
|
|
||||||
}
|
|
||||||
error_ = error;
|
|
||||||
QTimer::singleShot(10, this, SLOT(finish()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Requestor::onSslErrors(QList<QSslError> errors) {
|
|
||||||
int i = 1;
|
|
||||||
for (auto error : errors) {
|
|
||||||
qCritical() << "LOGIN SSL Error #" << i << " : " << error.errorString();
|
|
||||||
auto cert = error.certificate();
|
|
||||||
qCritical() << "Certificate in question:\n" << cert.toText();
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Requestor::onUploadProgress(qint64 uploaded, qint64 total) {
|
|
||||||
if (status_ == Idle) {
|
|
||||||
qWarning() << "O2Requestor::onUploadProgress: No pending request";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (reply_ != qobject_cast<QNetworkReply *>(sender())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Restart timeout because request in progress
|
|
||||||
Reply *o2Reply = timedReplies_.find(reply_);
|
|
||||||
if(o2Reply)
|
|
||||||
o2Reply->start();
|
|
||||||
emit uploadProgress(id_, uploaded, total);
|
|
||||||
}
|
|
||||||
|
|
||||||
int Requestor::setup(const QNetworkRequest &req, QNetworkAccessManager::Operation operation, const QByteArray &verb) {
|
|
||||||
static int currentId;
|
|
||||||
|
|
||||||
if (status_ != Idle) {
|
|
||||||
qWarning() << "O2Requestor::setup: Another request pending";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
request_ = req;
|
|
||||||
operation_ = operation;
|
|
||||||
id_ = currentId++;
|
|
||||||
url_ = req.url();
|
|
||||||
|
|
||||||
QUrl url = url_;
|
|
||||||
request_.setUrl(url);
|
|
||||||
|
|
||||||
if (!verb.isEmpty()) {
|
|
||||||
request_.setRawHeader(HTTP_HTTP_HEADER, verb);
|
|
||||||
}
|
|
||||||
|
|
||||||
status_ = Requesting;
|
|
||||||
error_ = QNetworkReply::NoError;
|
|
||||||
return id_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Requestor::finish() {
|
|
||||||
QByteArray data;
|
|
||||||
if (status_ == Idle) {
|
|
||||||
qWarning() << "O2Requestor::finish: No pending request";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
data = reply_->readAll();
|
|
||||||
status_ = Idle;
|
|
||||||
timedReplies_.remove(reply_);
|
|
||||||
reply_->disconnect(this);
|
|
||||||
reply_->deleteLater();
|
|
||||||
QList<QNetworkReply::RawHeaderPair> headers = reply_->rawHeaderPairs();
|
|
||||||
emit finished(id_, error_, data, headers);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Requestor::retry() {
|
|
||||||
if (status_ != Requesting) {
|
|
||||||
qWarning() << "O2Requestor::retry: No pending request";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
timedReplies_.remove(reply_);
|
|
||||||
reply_->disconnect(this);
|
|
||||||
reply_->deleteLater();
|
|
||||||
QUrl url = url_;
|
|
||||||
request_.setUrl(url);
|
|
||||||
|
|
||||||
status_ = ReRequesting;
|
|
||||||
switch (operation_) {
|
|
||||||
case QNetworkAccessManager::GetOperation:
|
|
||||||
reply_ = manager_->get(request_);
|
|
||||||
break;
|
|
||||||
case QNetworkAccessManager::PostOperation:
|
|
||||||
reply_ = manager_->post(request_, data_);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert(!"Unspecified operation for request");
|
|
||||||
reply_ = manager_->get(request_);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
timedReplies_.add(reply_);
|
|
||||||
connect(reply_, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onRequestError(QNetworkReply::NetworkError)), Qt::QueuedConnection);
|
|
||||||
connect(reply_, SIGNAL(finished()), this, SLOT(onRequestFinished()), Qt::QueuedConnection);
|
|
||||||
connect(reply_, SIGNAL(uploadProgress(qint64,qint64)), this, SLOT(onUploadProgress(qint64,qint64)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user