add timeouts to each network request
This commit is contained in:
parent
087a89b64b
commit
bfdc45472d
@ -49,52 +49,72 @@ NetworkAccessManagerImpl::NetworkAccessManagerImpl(QNetworkAccessManager *networ
|
|||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::get(const QNetworkRequest &request)
|
QNetworkReply *NetworkAccessManagerImpl::get(const QNetworkRequest &request)
|
||||||
{
|
{
|
||||||
return m_manager->get(request);
|
QNetworkReply *reply = m_manager->get(request);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::deleteResource(const QNetworkRequest &request)
|
QNetworkReply *NetworkAccessManagerImpl::deleteResource(const QNetworkRequest &request)
|
||||||
{
|
{
|
||||||
return m_manager->deleteResource(request);
|
QNetworkReply *reply = m_manager->deleteResource(request);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::head(const QNetworkRequest &request)
|
QNetworkReply *NetworkAccessManagerImpl::head(const QNetworkRequest &request)
|
||||||
{
|
{
|
||||||
return m_manager->head(request);
|
QNetworkReply *reply = m_manager->head(request);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::post(const QNetworkRequest &request, QIODevice *data)
|
QNetworkReply *NetworkAccessManagerImpl::post(const QNetworkRequest &request, QIODevice *data)
|
||||||
{
|
{
|
||||||
return m_manager->post(request, data);
|
QNetworkReply *reply = m_manager->post(request, data);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::post(const QNetworkRequest &request, const QByteArray &data)
|
QNetworkReply *NetworkAccessManagerImpl::post(const QNetworkRequest &request, const QByteArray &data)
|
||||||
{
|
{
|
||||||
return m_manager->post(request, data);
|
QNetworkReply *reply = m_manager->post(request, data);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
|
QNetworkReply *NetworkAccessManagerImpl::post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
|
||||||
{
|
{
|
||||||
return m_manager->post(request, multiPart);
|
QNetworkReply *reply = m_manager->post(request, multiPart);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::put(const QNetworkRequest &request, QIODevice *data)
|
QNetworkReply *NetworkAccessManagerImpl::put(const QNetworkRequest &request, QIODevice *data)
|
||||||
{
|
{
|
||||||
return m_manager->put(request, data);
|
QNetworkReply *reply = m_manager->put(request, data);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::put(const QNetworkRequest &request, const QByteArray &data)
|
QNetworkReply *NetworkAccessManagerImpl::put(const QNetworkRequest &request, const QByteArray &data)
|
||||||
{
|
{
|
||||||
return m_manager->put(request, data);
|
QNetworkReply *reply = m_manager->put(request, data);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::put(const QNetworkRequest &request, QHttpMultiPart *multiPart)
|
QNetworkReply *NetworkAccessManagerImpl::put(const QNetworkRequest &request, QHttpMultiPart *multiPart)
|
||||||
{
|
{
|
||||||
return m_manager->put(request, multiPart);
|
QNetworkReply *reply = m_manager->put(request, multiPart);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply *NetworkAccessManagerImpl::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data)
|
QNetworkReply *NetworkAccessManagerImpl::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data)
|
||||||
{
|
{
|
||||||
return m_manager->sendCustomRequest(request, verb, data);
|
QNetworkReply* reply = m_manager->sendCustomRequest(request, verb, data);
|
||||||
|
hookupTimeoutTimer(reply);
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkAccessManagerImpl::setEnabled(bool enabled)
|
void NetworkAccessManagerImpl::setEnabled(bool enabled)
|
||||||
@ -119,6 +139,32 @@ void NetworkAccessManagerImpl::setEnabled(bool enabled)
|
|||||||
m_enabled = enabled;
|
m_enabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkAccessManagerImpl::hookupTimeoutTimer(QNetworkReply *reply)
|
||||||
|
{
|
||||||
|
connect(reply, &QNetworkReply::finished, this, &NetworkAccessManagerImpl::networkReplyFinished);
|
||||||
|
QTimer *timer = new QTimer(this);
|
||||||
|
connect(timer, &QTimer::timeout, this, &NetworkAccessManagerImpl::networkTimeout);
|
||||||
|
timer->setSingleShot(true);
|
||||||
|
timer->start(30000);
|
||||||
|
m_timeoutTimers.insert(reply, timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkAccessManagerImpl::networkReplyFinished()
|
||||||
|
{
|
||||||
|
QNetworkReply *reply = static_cast<QNetworkReply*>(sender());
|
||||||
|
QTimer *timer = m_timeoutTimers.take(reply);
|
||||||
|
timer->stop();
|
||||||
|
timer->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkAccessManagerImpl::networkTimeout()
|
||||||
|
{
|
||||||
|
QTimer *timer = static_cast<QTimer*>(sender());
|
||||||
|
QNetworkReply *reply = m_timeoutTimers.key(timer);
|
||||||
|
qCDebug(dcNetworkManager()) << "Network request timeout for:" << reply->request().url();
|
||||||
|
reply->abort();
|
||||||
|
}
|
||||||
|
|
||||||
bool NetworkAccessManagerImpl::available() const
|
bool NetworkAccessManagerImpl::available() const
|
||||||
{
|
{
|
||||||
return m_available;
|
return m_available;
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
namespace nymeaserver {
|
namespace nymeaserver {
|
||||||
|
|
||||||
@ -68,6 +69,13 @@ private:
|
|||||||
bool m_enabled = false;
|
bool m_enabled = false;
|
||||||
|
|
||||||
QNetworkAccessManager *m_manager;
|
QNetworkAccessManager *m_manager;
|
||||||
|
QHash<QNetworkReply*, QTimer*> m_timeoutTimers;
|
||||||
|
|
||||||
|
void hookupTimeoutTimer(QNetworkReply* reply);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void networkReplyFinished();
|
||||||
|
void networkTimeout();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user