18 #ifndef CUTELYST_RESPONSE_H
19 #define CUTELYST_RESPONSE_H
21 #include <QtCore/QIODevice>
23 #include <Cutelyst/cutelyst_global.h>
24 #include <Cutelyst/headers.h>
33 class ResponsePrivate;
34 class CUTELYST_LIBRARY
Response final :
public QIODevice
42 SwitchingProtocols = 101,
46 NonAuthoritativeInformation = 203,
51 MultipleChoices = 300,
52 MovedPermanently = 301,
57 TemporaryRedirect = 307,
58 PermanentRedirect = 308,
61 PaymentRequired = 402,
64 MethodNotAllowed = 405,
66 ProxyAuthenticationRequired = 407,
71 PreconditionFailed = 412,
72 RequestEntityTooLarge = 413,
73 RequestURITooLong = 414,
74 UnsupportedMediaType = 415,
75 RequestedRangeNotSatisfiable = 416,
76 ExpectationFailed = 417,
77 InternalServerError = 500,
80 ServiceUnavailable = 503,
82 HTTPVersionNotSupported = 505,
83 BandwidthLimitExceeded = 509
89 CloseCodeNormal = 1000,
90 CloseCodeGoingAway = 1001,
91 CloseCodeProtocolError = 1002,
92 CloseCodeDatatypeNotSupported = 1003,
93 CloseCodeReserved1004 = 1004,
94 CloseCodeMissingStatusCode = 1005,
95 CloseCodeAbnormalDisconnection = 1006,
96 CloseCodeWrongDatatype = 1007,
97 CloseCodePolicyViolated = 1008,
98 CloseCodeTooMuchData = 1009,
99 CloseCodeMissingExtension = 1010,
100 CloseCodeBadOperation = 1011,
101 CloseCodeTlsHandshakeFailed = 1015
110 quint16 status()
const;
115 void setStatus(quint16 status);
122 bool hasBody()
const;
130 Q_REQUIRED_RESULT QByteArray &body();
135 QIODevice *bodyDevice()
const;
143 void setBody(QIODevice *body);
149 void setBody(
const QByteArray &body);
155 inline void setBody(
const QString &body);
162 void setJsonBody(
const QJsonDocument &documment);
168 void setJsonBody(
const QString &json);
174 void setJsonBody(
const QByteArray &json);
181 void setJsonObjectBody(
const QJsonObject &
object);
188 void setJsonArrayBody(
const QJsonArray &array);
193 QString contentEncoding()
const;
198 void setContentEncoding(
const QString &encoding);
203 qint64 contentLength()
const;
208 void setContentLength(qint64 length);
213 QString contentType()
const;
219 { headers().setContentType(type); }
224 QString contentTypeCharset()
const;
230 QVariant cookie(
const QByteArray &name)
const;
235 QList<QNetworkCookie> cookies()
const;
241 void setCookie(
const QNetworkCookie &cookie);
247 void setCookies(
const QList<QNetworkCookie> &cookies);
253 int removeCookies(
const QByteArray &name);
267 void redirect(
const QUrl &url, quint16 status = Found);
281 void redirect(
const QString &url, quint16 status = Found);
300 void redirectSafe(
const QUrl &url,
const QUrl &fallback);
305 QUrl location()
const;
310 QString header(
const QString &field)
const;
315 void setHeader(
const QString &field,
const QString &value);
325 bool isFinalizedHeaders()
const;
330 virtual bool isSequential()
const override;
335 virtual qint64 size()
const override;
347 bool webSocketHandshake(
const QString &key = QString(),
const QString &origin = QString(),
const QString &protocol = QString());
352 bool webSocketTextMessage(
const QString &message);
357 bool webSocketBinaryMessage(
const QByteArray &message);
367 bool webSocketPing(
const QByteArray &payload = QByteArray());
376 bool webSocketClose(quint16 code = Response::CloseCodeNormal,
const QString &reason = QString());
391 virtual qint64 writeData(
const char *data, qint64 len)
override;
396 virtual qint64 readData(
char *data, qint64 maxlen)
override;
398 ResponsePrivate *d_ptr;
401 friend class EngineConnection;
403 friend class ContextPrivate;
412 #endif // CUTELYST_RESPONSE_H