qhttpsocket.h
/*
* Copyright (c) 2015 Nathan Osman
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#ifndef QHTTPENGINE_QHTTPSOCKET_H
#define QHTTPENGINE_QHTTPSOCKET_H
#include <QTcpSocket>
#include "qhttpengine.h"
#include "qhttpparser.h"
class QHTTPENGINE_EXPORT QHttpSocketPrivate;
class QHTTPENGINE_EXPORT QHttpSocket : public QIODevice
{
Q_OBJECT
public:
enum {
OK = 200,
MovedPermanently = 301,
Found = 302,
BadRequest = 400,
Forbidden = 403,
NotFound = 404,
MethodNotAllowed = 405,
InternalServerError = 500
};
QHttpSocket(QTcpSocket *socket, QObject *parent = 0);
virtual qint64 bytesAvailable() const;
virtual bool isSequential() const;
virtual void close();
QByteArray method() const;
QByteArray path() const;
bool isHeadersParsed() const;
QHttpHeaderMap headers() const;
qint64 contentLength() const;
void setStatusCode(int statusCode, const QByteArray &statusReason = QByteArray());
void setHeader(const QByteArray &name, const QByteArray &value);
void setHeaders(const QHttpHeaderMap &headers);
void writeHeaders();
void writeRedirect(const QByteArray &path, bool permanent = false);
void writeError(int statusCode, const QByteArray &statusReason = QByteArray());
Q_SIGNALS:
void headersParsed();
protected:
virtual qint64 readData(char *data, qint64 maxlen);
virtual qint64 writeData(const char *data, qint64 len);
private:
QHttpSocketPrivate *const d;
friend class QHttpSocketPrivate;
};
#endif // QHTTPENGINE_QHTTPSOCKET_H
QHttpSocket
Implementation of the HTTP protocol.
Definition: qhttpsocket.h:88