From ece92a886ab1c7f5a44906f43cdeea58d2872944 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Sun, 12 Dec 2021 17:25:55 +0800 Subject: [PATCH] Restart idle timer on sending network response --- src/base/http/connection.cpp | 19 ++++++++++++++----- src/base/http/connection.h | 4 +--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/base/http/connection.cpp b/src/base/http/connection.cpp index 0dc5a8b98..f8bb1cf2b 100644 --- a/src/base/http/connection.cpp +++ b/src/base/http/connection.cpp @@ -45,8 +45,18 @@ Connection::Connection(QTcpSocket *socket, IRequestHandler *requestHandler, QObj , m_requestHandler(requestHandler) { m_socket->setParent(this); + + // reset timer when there are activity m_idleTimer.start(); - connect(m_socket, &QTcpSocket::readyRead, this, &Connection::read); + connect(m_socket, &QIODevice::readyRead, this, [this]() + { + m_idleTimer.start(); + read(); + }); + connect(m_socket, &QIODevice::bytesWritten, this, [this]() + { + m_idleTimer.start(); + }); } Connection::~Connection() @@ -56,7 +66,6 @@ Connection::~Connection() void Connection::read() { - m_idleTimer.restart(); m_receivedData.append(m_socket->readAll()); while (!m_receivedData.isEmpty()) @@ -66,7 +75,7 @@ void Connection::read() switch (result.status) { case RequestParser::ParseStatus::Incomplete: - { + { const long bufferLimit = RequestParser::MAX_CONTENT_SIZE * 1.1; // some margin for headers if (m_receivedData.size() > bufferLimit) { @@ -83,7 +92,7 @@ void Connection::read() return; case RequestParser::ParseStatus::BadRequest: - { + { Logger::instance()->addMessage(tr("Bad Http request, closing socket. IP: %1") .arg(m_socket->peerAddress().toString()), Log::WARNING); @@ -96,7 +105,7 @@ void Connection::read() return; case RequestParser::ParseStatus::OK: - { + { const Environment env {m_socket->localAddress(), m_socket->localPort(), m_socket->peerAddress(), m_socket->peerPort()}; Response resp = m_requestHandler->processRequest(result.request, env); diff --git a/src/base/http/connection.h b/src/base/http/connection.h index a6f97615e..062f7bdb1 100644 --- a/src/base/http/connection.h +++ b/src/base/http/connection.h @@ -52,11 +52,9 @@ namespace Http bool hasExpired(qint64 timeout) const; bool isClosed() const; - private slots: - void read(); - private: static bool acceptsGzipEncoding(QString codings); + void read(); void sendResponse(const Response &response) const; QTcpSocket *m_socket;