mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-02-05 11:24:15 +00:00
Merge pull request #15831 from Chocobo1/server
Improvements for WebAPI server
This commit is contained in:
commit
87e1a14a4b
@ -45,8 +45,18 @@ Connection::Connection(QTcpSocket *socket, IRequestHandler *requestHandler, QObj
|
|||||||
, m_requestHandler(requestHandler)
|
, m_requestHandler(requestHandler)
|
||||||
{
|
{
|
||||||
m_socket->setParent(this);
|
m_socket->setParent(this);
|
||||||
|
|
||||||
|
// reset timer when there are activity
|
||||||
m_idleTimer.start();
|
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()
|
Connection::~Connection()
|
||||||
@ -56,7 +66,6 @@ Connection::~Connection()
|
|||||||
|
|
||||||
void Connection::read()
|
void Connection::read()
|
||||||
{
|
{
|
||||||
m_idleTimer.restart();
|
|
||||||
m_receivedData.append(m_socket->readAll());
|
m_receivedData.append(m_socket->readAll());
|
||||||
|
|
||||||
while (!m_receivedData.isEmpty())
|
while (!m_receivedData.isEmpty())
|
||||||
@ -66,7 +75,7 @@ void Connection::read()
|
|||||||
switch (result.status)
|
switch (result.status)
|
||||||
{
|
{
|
||||||
case RequestParser::ParseStatus::Incomplete:
|
case RequestParser::ParseStatus::Incomplete:
|
||||||
{
|
{
|
||||||
const long bufferLimit = RequestParser::MAX_CONTENT_SIZE * 1.1; // some margin for headers
|
const long bufferLimit = RequestParser::MAX_CONTENT_SIZE * 1.1; // some margin for headers
|
||||||
if (m_receivedData.size() > bufferLimit)
|
if (m_receivedData.size() > bufferLimit)
|
||||||
{
|
{
|
||||||
@ -83,7 +92,7 @@ void Connection::read()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case RequestParser::ParseStatus::BadRequest:
|
case RequestParser::ParseStatus::BadRequest:
|
||||||
{
|
{
|
||||||
Logger::instance()->addMessage(tr("Bad Http request, closing socket. IP: %1")
|
Logger::instance()->addMessage(tr("Bad Http request, closing socket. IP: %1")
|
||||||
.arg(m_socket->peerAddress().toString()), Log::WARNING);
|
.arg(m_socket->peerAddress().toString()), Log::WARNING);
|
||||||
|
|
||||||
@ -96,7 +105,7 @@ void Connection::read()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case RequestParser::ParseStatus::OK:
|
case RequestParser::ParseStatus::OK:
|
||||||
{
|
{
|
||||||
const Environment env {m_socket->localAddress(), m_socket->localPort(), m_socket->peerAddress(), m_socket->peerPort()};
|
const Environment env {m_socket->localAddress(), m_socket->localPort(), m_socket->peerAddress(), m_socket->peerPort()};
|
||||||
|
|
||||||
Response resp = m_requestHandler->processRequest(result.request, env);
|
Response resp = m_requestHandler->processRequest(result.request, env);
|
||||||
|
@ -52,11 +52,9 @@ namespace Http
|
|||||||
bool hasExpired(qint64 timeout) const;
|
bool hasExpired(qint64 timeout) const;
|
||||||
bool isClosed() const;
|
bool isClosed() const;
|
||||||
|
|
||||||
private slots:
|
|
||||||
void read();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static bool acceptsGzipEncoding(QString codings);
|
static bool acceptsGzipEncoding(QString codings);
|
||||||
|
void read();
|
||||||
void sendResponse(const Response &response) const;
|
void sendResponse(const Response &response) const;
|
||||||
|
|
||||||
QTcpSocket *m_socket;
|
QTcpSocket *m_socket;
|
||||||
|
@ -42,19 +42,23 @@ QByteArray Http::toByteArray(Response response)
|
|||||||
response.headers[HEADER_DATE] = httpDate();
|
response.headers[HEADER_DATE] = httpDate();
|
||||||
|
|
||||||
QByteArray buf;
|
QByteArray buf;
|
||||||
buf.reserve(10 * 1024);
|
buf.reserve(1024 + response.content.length());
|
||||||
|
|
||||||
// Status Line
|
// Status Line
|
||||||
buf += QString("HTTP/%1 %2 %3")
|
buf.append("HTTP/1.1 ") // TODO: depends on request
|
||||||
.arg("1.1", // TODO: depends on request
|
.append(QByteArray::number(response.status.code))
|
||||||
QString::number(response.status.code),
|
.append(' ')
|
||||||
response.status.text)
|
.append(response.status.text.toLatin1())
|
||||||
.toLatin1()
|
|
||||||
.append(CRLF);
|
.append(CRLF);
|
||||||
|
|
||||||
// Header Fields
|
// Header Fields
|
||||||
for (auto i = response.headers.constBegin(); i != response.headers.constEnd(); ++i)
|
for (auto i = response.headers.constBegin(); i != response.headers.constEnd(); ++i)
|
||||||
buf += QString::fromLatin1("%1: %2").arg(i.key(), i.value()).toLatin1().append(CRLF);
|
{
|
||||||
|
buf.append(i.key().toLatin1())
|
||||||
|
.append(": ")
|
||||||
|
.append(i.value().toLatin1())
|
||||||
|
.append(CRLF);
|
||||||
|
}
|
||||||
|
|
||||||
// the first empty line
|
// the first empty line
|
||||||
buf += CRLF;
|
buf += CRLF;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user