Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
testhttpserver_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef TESTHTTPSERVER_P_H
5#define TESTHTTPSERVER_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QTcpServer>
19#include <QUrl>
20#include <QPair>
21#include <QThread>
22#include <QMutex>
23#include <QWaitCondition>
24#include <private/qglobal_p.h>
25#include <QObject>
26#include <QSet>
27#include <QList>
28#include <QString>
29
31
32class TestHTTPServer : public QObject
33{
35public:
37
38 bool listen();
39 quint16 port() const;
40 QUrl baseUrl() const;
41 QUrl url(const QString &documentPath) const;
42 QString urlString(const QString &documentPath) const;
43 QString errorString() const;
44
46 bool serveDirectory(const QString &, Mode = Normal);
47
48 bool wait(const QUrl &expect, const QUrl &reply, const QUrl &body);
49 bool hasFailed() const;
50
51 void addAlias(const QString &filename, const QString &aliasName);
52 void addRedirect(const QString &filename, const QString &redirectName);
53
55
56 // In Delay mode, each item needs one call to this function to be sent
57 void sendDelayedItem();
58
59private Q_SLOTS:
60 void newConnection();
61 void disconnected();
62 void readyRead();
63 void sendOne();
64
65private:
66 enum State {
67 AwaitingHeader,
68 AwaitingData,
69 Failed
70 };
71
72 void serveGET(QTcpSocket *, const QByteArray &);
73 bool reply(QTcpSocket *, const QByteArray &);
74
75 QList<QPair<QString, Mode> > m_directories;
76 QHash<QTcpSocket *, QByteArray> m_dataCache;
77 QList<QPair<QTcpSocket *, QByteArray> > m_toSend;
78 QSet<QString> m_contentSubstitutedFileNames;
79
80 struct WaitData {
81 QList<QByteArray> headerExactMatches;
82 QList<QByteArray> headerPrefixes;
83 QByteArray body;
84 } m_waitData;
85 QByteArray m_replyData;
86 QByteArray m_bodyData;
87 QByteArray m_data;
88 State m_state;
89
90 QHash<QString, QString> m_aliases;
91 QHash<QString, QString> m_redirects;
92
93 QTcpServer m_server;
94};
95
97{
99public:
101 ThreadedTestHTTPServer(const QHash<QString, TestHTTPServer::Mode> &dirs);
103
104 QUrl baseUrl() const;
105 QUrl url(const QString &documentPath) const;
106 QString urlString(const QString &documentPath) const;
107
108protected:
109 void run() override;
110
111private:
112 void start();
113
114 QHash<QString, TestHTTPServer::Mode> m_dirs;
115 quint16 m_port;
116 QMutex m_mutex;
117 QWaitCondition m_condition;
118};
119
121
122#endif // TESTHTTPSERVER_P_H
123
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore
Definition qmutex.h:281
\inmodule QtCore
Definition qobject.h:103
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
The QTcpServer class provides a TCP-based server.
Definition qtcpserver.h:22
The QTcpSocket class provides a TCP socket.
Definition qtcpsocket.h:18
\inmodule QtCore
Definition qurl.h:94
provides a very, very basic HTTP server for testing.
QUrl baseUrl() const
QString errorString() const
void addAlias(const QString &filename, const QString &aliasName)
bool wait(const QUrl &expect, const QUrl &reply, const QUrl &body)
bool serveDirectory(const QString &, Mode=Normal)
void registerFileNameForContentSubstitution(const QString &fileName)
void addRedirect(const QString &filename, const QString &redirectName)
quint16 port() const
bool hasFailed() const
QString urlString(const QString &documentPath) const
QString urlString(const QString &documentPath) const
ThreadedTestHTTPServer(const QString &dir, TestHTTPServer::Mode mode=TestHTTPServer::Normal)
Combined button and popup list for selecting options.
GLenum mode
GLuint start
#define Q_OBJECT
#define Q_SLOTS
unsigned short quint16
Definition qtypes.h:48
QUrl url("example.com")
[constructor-url-reference]
QString dir
[11]
QNetworkReply * reply