diff --git a/src/serversdk/logger.h b/src/serversdk/logger.h index 5e1c0e7..b515529 100644 --- a/src/serversdk/logger.h +++ b/src/serversdk/logger.h @@ -64,7 +64,7 @@ public: /** * @brief User specific consumer of logger messages - * @param consumer - sublass of serversdk::Loger + * @param consumer - sublass of serversdk::Logger * * @code * #include "core.h" @@ -90,7 +90,7 @@ public: */ static void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg); - /** Pusing messges from installed message handler */ + /** Pushing messges from installed message handler */ virtual void pushMessage(const LoggerMessage& logmsg); QList getNewMessages(int currentCount); diff --git a/src/serversdk/request.cpp b/src/serversdk/request.cpp index d0b41ef..622d3b1 100644 --- a/src/serversdk/request.cpp +++ b/src/serversdk/request.cpp @@ -13,6 +13,8 @@ Request::Request(QString type, QString url, QByteArray requestData) Request::~Request() { + if (mNetworkReply) + mNetworkReply->deleteLater(); } QNetworkRequest Request::networkRequest() const @@ -36,12 +38,29 @@ QNetworkRequest Request::networkRequest() const return request; } +int Request::status() const +{ + Q_ASSERT(mNetworkReply); + return mNetworkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); +} + void Request::appendData(const QByteArray &array) { mResponseData += array; } +void Request::setNetworkReply(QNetworkReply *networkReply) +{ + Q_ASSERT(networkReply); + mNetworkReply = networkReply; +} + +QNetworkReply *Request::networkReply() const +{ + return mNetworkReply; +} + QString Request::type() const { return mType; diff --git a/src/serversdk/request.h b/src/serversdk/request.h index 8fc48ff..52584eb 100644 --- a/src/serversdk/request.h +++ b/src/serversdk/request.h @@ -3,6 +3,7 @@ #include #include #include +#include namespace serversdk { @@ -17,6 +18,9 @@ public: virtual QNetworkRequest networkRequest() const; // Data handling data + int status() const; + QNetworkReply *networkReply() const; + void setNetworkReply(QNetworkReply *networkReply); QByteArray requestData() const; void setRequestData(const QByteArray &requestData); QByteArray responseData() const; @@ -43,7 +47,6 @@ public: void logStartTime() { mStartTime = QDateTime::currentDateTime(); } void logFinishTime() { mStartTime = QDateTime::currentDateTime(); } - private: // Data handling void appendData(const QByteArray &array); @@ -62,12 +65,15 @@ private: QString mToken; // Data + QNetworkReply *mNetworkReply = nullptr; QByteArray mRequestData; QByteArray mResponseData; // Additional attributes QDateTime mStartTime; QDateTime mFinishTime; + + }; diff --git a/src/serversdk/requestmanager.cpp b/src/serversdk/requestmanager.cpp index 4fb4a70..9e110e3 100644 --- a/src/serversdk/requestmanager.cpp +++ b/src/serversdk/requestmanager.cpp @@ -45,6 +45,11 @@ void RequestManager::processRequest(const std::shared_ptr& request) return; } + // Adding reply to final request + reply->setParent(nullptr); // ensure QNetworkreply wont be deleted by QNetworkAccessManager ( it is parent of reply ) + request->setNetworkReply(reply); + + // Add to map to get correct request when reply is used in signal mRequestMap.insert(reply, request); connect(reply, &QNetworkReply::sslErrors, this, &RequestManager::sslErrors); @@ -54,7 +59,6 @@ void RequestManager::processRequest(const std::shared_ptr& request) std::shared_ptr request = mRequestMap.value(reply); request->logFinishTime(); mRequestMap.remove(reply); - reply->deleteLater(); emit request->finished(); emit downloadFinished(request); }); diff --git a/test/auto/tst_soap/tst_soaptest.cpp b/test/auto/tst_soap/tst_soaptest.cpp index 5a80510..1b508be 100644 --- a/test/auto/tst_soap/tst_soaptest.cpp +++ b/test/auto/tst_soap/tst_soaptest.cpp @@ -109,12 +109,15 @@ void SoapTest::public_soap_test() // RequestManagerdownload RequestManager soap; soap.processRequest(req); + QCOMPARE(req->status(), 0); // when not processed yet, status is 0 QSignalSpy progressSpy(&soap, &RequestManager::progresss); QSignalSpy finishedSpy(&soap, &RequestManager::downloadFinished); QVERIFY(finishedSpy.wait(20000)); QVERIFY(progressSpy.count()); + QCOMPARE(req->status(), 200); + //Uncoment to write .xml response to cmd folder // QFile fileWrite(Utils::sourcePath("test/cmd/tst_soap-response.xml")); // QVERIFY(fileWrite.open(QIODevice::WriteOnly));