File: server.cpp

package info (click to toggle)
qt6-webengine 6.4.2-final%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,090,536 kB
  • sloc: cpp: 17,808,031; ansic: 5,245,139; javascript: 3,178,881; python: 1,361,176; asm: 648,577; xml: 571,140; java: 196,952; sh: 96,408; objc: 88,289; perl: 70,982; cs: 39,145; fortran: 24,137; makefile: 20,242; pascal: 12,634; sql: 10,875; yacc: 9,671; tcl: 8,385; php: 6,188; lisp: 2,848; lex: 2,263; ada: 727; ruby: 623; awk: 339; sed: 37
file content (47 lines) | stat: -rw-r--r-- 1,537 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

#include "server.h"
#include <QDataStream>
#include <QTcpSocket>

Server::Server(QObject *parent) : QObject(parent)
{
    connect(&m_server, &QTcpServer::newConnection, this, &Server::handleNewConnection);
}

void Server::run()
{
    if (!m_server.listen(QHostAddress::LocalHost, 5555))
        qWarning() << "Could not start the server -> http/proxy authentication dialog"
                      " will not work. Error:" << m_server.errorString();
}

void Server::handleNewConnection()
{
    QTcpSocket *socket = m_server.nextPendingConnection();
    connect(socket, &QAbstractSocket::disconnected, socket, &QObject::deleteLater);
    connect(socket, &QAbstractSocket::readyRead, this, &Server::handleReadReady);
}

void Server::handleReadReady()
{
    QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
    Q_ASSERT(socket);
    m_data.append(socket->readAll());

    // simply wait for whole request
    if (!m_data.endsWith("\r\n\r\n"))
        return;
    if (m_data.contains(QByteArrayLiteral("OPEN_AUTH"))) {
        socket->write("HTTP/1.1 401 Unauthorized\nWWW-Authenticate: "
                      "Basic realm=\"Very Restricted Area\"\r\n\r\n");
        m_data.clear();
        return;
    }

    socket->write("HTTP/1.1 407 Proxy Auth Required\nProxy-Authenticate: "
                  "Basic realm=\"Proxy requires authentication\"\r\n"
                  "content-length: 0\r\n\r\n");
    m_data.clear();
}