Files
DbWebserver/webserverlib/httpclientconnection.h
T

51 lines
1.1 KiB
C++
Raw Normal View History

2018-09-17 19:29:29 +02:00
#pragma once
2018-09-22 03:05:34 +02:00
#include "webserverlib_global.h"
2018-09-17 19:29:29 +02:00
#include <QObject>
2018-09-22 03:05:34 +02:00
2018-09-17 19:29:29 +02:00
#include <QIODevice>
#include <memory>
2018-09-22 03:05:34 +02:00
#include "httpresponse.h"
#include "httprequest.h"
2018-09-17 19:29:29 +02:00
class QTcpSocket;
class QFileDevice;
2018-09-17 19:29:29 +02:00
class WebListener;
2018-09-22 03:05:34 +02:00
class WEBSERVERLIB_EXPORT HttpClientConnection : public QObject
2018-09-17 19:29:29 +02:00
{
Q_OBJECT
static const int m_bufferSize;
2018-09-17 19:29:29 +02:00
public:
explicit HttpClientConnection(QTcpSocket &socket, WebListener &webListener);
2018-09-17 19:29:29 +02:00
void sendResponse(const HttpResponse &response);
void sendResponse(HttpResponse response, const QByteArray &byteArray);
void sendResponse(HttpResponse response, const QString &string);
void sendResponse(HttpResponse response, std::unique_ptr<QIODevice> &&device);
void sendResponse(HttpResponse response, std::unique_ptr<QFileDevice> &&device);
2018-09-17 19:29:29 +02:00
private Q_SLOTS:
void readyRead();
void bytesWritten();
private:
void clearRequest();
QTcpSocket &m_socket;
WebListener &m_webListener;
QByteArray m_buffer;
enum { RequestLine, Headers, RequestBody, WaitingForResponse, SendingResponse } m_state;
int m_bodyLength;
HttpRequest m_request;
std::unique_ptr<QIODevice> m_sendingDeivce;
};