16 #ifndef hifi_HTTPConnection_h
17 #define hifi_HTTPConnection_h
22 #include <QtNetwork/QHostAddress>
23 #include <QtNetwork/QNetworkAccessManager>
26 #include <QTemporaryFile>
37 typedef QHash<QByteArray, QByteArray> Headers;
40 typedef QPair<Headers, QByteArray> FormData;
47 static const char* StatusCode200;
48 static const char* StatusCode204;
49 static const char* StatusCode301;
50 static const char* StatusCode302;
51 static const char* StatusCode400;
52 static const char* StatusCode401;
53 static const char* StatusCode403;
54 static const char* StatusCode404;
55 static const char* StatusCode500;
56 static const char* DefaultContentType;
59 enum ReasonCode { NoReason = 0, NormalClosure = 1000, GoingAway = 1001 };
64 virtual ~Storage() =
default;
66 virtual const QByteArray& content()
const = 0;
68 virtual qint64 bytesLeftToWrite()
const = 0;
69 virtual void write(
const QByteArray& data) = 0;
104 void respond(
const char* code,
const QByteArray& content = QByteArray(),
105 const char* contentType = DefaultContentType,
106 const Headers& headers = Headers());
107 void respond(
const char* code, std::unique_ptr<QIODevice> device,
108 const char* contentType = DefaultContentType,
109 const Headers& headers = Headers());
123 void respondWithStatusAndHeaders(
const char* code,
const char* contentType,
const Headers& headers, qint64 size);
Handles a single HTTP connection.
Definition: HTTPConnection.h:43
QList< FormData > parseFormData() const
Parses the request content as form data, returning a list of header/content pairs.
Definition: HTTPConnection.cpp:161
ReasonCode
WebSocket close status codes.
Definition: HTTPConnection.h:59
QByteArray requestHeader(const QString &key) const
Returns a copy of the request header value. If it does not exist, it will return a default constructe...
Definition: HTTPConnection.h:91
QUrl _requestUrl
The requested URL.
Definition: HTTPConnection.h:138
QNetworkAccessManager::Operation _requestOperation
The requested operation.
Definition: HTTPConnection.h:135
std::unique_ptr< QIODevice > _responseDevice
Response content.
Definition: HTTPConnection.h:150
QNetworkAccessManager::Operation requestOperation() const
Returns the request operation.
Definition: HTTPConnection.h:85
std::unique_ptr< Storage > _requestContent
The content of the request.
Definition: HTTPConnection.h:147
void respond(const char *code, const QByteArray &content=QByteArray(), const char *contentType=DefaultContentType, const Headers &headers=Headers())
Sends a response and closes the connection.
Definition: HTTPConnection.cpp:221
void readRequest()
Reads the request line.
Definition: HTTPConnection.cpp:292
QTcpSocket * _socket
The underlying socket.
Definition: HTTPConnection.h:129
const QUrl & requestUrl() const
Returns a reference to the request URL.
Definition: HTTPConnection.h:88
QHash< QString, QString > parseUrlEncodedForm()
Definition: HTTPConnection.cpp:141
QByteArray _lastRequestHeader
The last request header processed (used for continuations).
Definition: HTTPConnection.h:144
HTTPConnection(QTcpSocket *socket, HTTPManager *parentManager)
Initializes the connection.
Definition: HTTPConnection.cpp:118
void readContent()
Reads the content.
Definition: HTTPConnection.cpp:391
void readHeaders()
Reads the headers.
Definition: HTTPConnection.cpp:333
const QByteArray & requestContent() const
Returns a reference to the request content.
Definition: HTTPConnection.h:94
Headers _requestHeaders
The request headers.
Definition: HTTPConnection.h:141
virtual ~HTTPConnection()
Destroys the connection.
Definition: HTTPConnection.cpp:133
QTcpSocket * socket() const
Returns a pointer to the underlying socket, to which WebSocket message bodies should be written.
Definition: HTTPConnection.h:79
HTTPManager * _parentManager
The parent HTTP manager.
Definition: HTTPConnection.h:126
const QHostAddress & peerAddress() const
Returns the IP address on the other side of the connection.
Definition: HTTPConnection.h:82
QHostAddress _address
The stored address.
Definition: HTTPConnection.h:132
Handles HTTP connections.
Definition: HTTPManager.h:32