#include "recordingnetworkaccessmanager.h" #include #include #include "core/closure.h" #include "core/logging.h" QMutex RecordingNetworkAccessManager::sMutex; QList* RecordingNetworkAccessManager::sTrafficStats; RecordingNetworkAccessManager::NetworkStat::NetworkStat( QString url, QNetworkAccessManager::Operation op, int bytes_received) : url(url), operation(op), bytes_received(bytes_received) {} RecordingNetworkAccessManager::RecordingNetworkAccessManager(QObject* parent) : QNetworkAccessManager(parent) { StaticInit(); } QNetworkReply* RecordingNetworkAccessManager::createRequest( Operation op, const QNetworkRequest& req, QIODevice* data) { QNetworkReply* reply = QNetworkAccessManager::createRequest(op, req, data); NewClosure( reply, SIGNAL(finished()), this, SLOT(Finished(QNetworkReply*)), reply); // TODO: Listen to uploadProgress() too. return reply; } void RecordingNetworkAccessManager::Finished(QNetworkReply* reply) const { RecordRequest(*reply); } void RecordingNetworkAccessManager::StaticInit() { QMutexLocker l(&sMutex); if (sTrafficStats == nullptr) { sTrafficStats = new QList; } } void RecordingNetworkAccessManager::RecordRequest(const QNetworkReply& reply) { qLog(Debug) << "Recording request" << reply.request().url() << sTrafficStats; QMutexLocker l(&sMutex); sTrafficStats->append(new NetworkStat( reply.request().url().toString(), reply.operation(), reply.size())); qLog(Debug) << "Stats:" << sTrafficStats->count(); } QList RecordingNetworkAccessManager::GetNetworkStatistics() { QMutexLocker l(&sMutex); return *sTrafficStats; }