File indexing completed on 2025-02-16 04:50:06
0001 /* 0002 SPDX-FileCopyrightText: 2015-2017 Krzysztof Nowicki <krissn@op.pl> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <QObject> 0010 #include <QPointer> 0011 #include <QTimer> 0012 0013 #include "fakeewsserver.h" 0014 0015 class QTcpSocket; 0016 0017 class FakeEwsConnection : public QObject 0018 { 0019 Q_OBJECT 0020 public: 0021 FakeEwsConnection(QTcpSocket *sock, FakeEwsServer *parent); 0022 ~FakeEwsConnection() override; 0023 void sendEvents(const QStringList &events); 0024 private Q_SLOTS: 0025 void disconnected(); 0026 void dataAvailable(); 0027 void dataTimeout(); 0028 void streamingRequestTimeout(); 0029 void streamingRequestHeartbeat(); 0030 Q_SIGNALS: 0031 void streamingRequestStarted(FakeEwsConnection *conn); 0032 0033 private: 0034 void sendError(const QString &msg, ushort code = 500); 0035 FakeEwsServer::DialogEntry::HttpResponse parseRequest(const QString &content); 0036 FakeEwsServer::DialogEntry::HttpResponse handleGetEventsRequest(const QString &content); 0037 FakeEwsServer::DialogEntry::HttpResponse handleGetStreamingEventsRequest(const QString &content); 0038 QString prepareEventsResponse(const QStringList &events); 0039 0040 enum HttpConnectionState { 0041 Initial, 0042 RequestReceived, 0043 HeadersReceived, 0044 }; 0045 0046 QPointer<QTcpSocket> mSock; 0047 uint mContentLength; 0048 QByteArray mContent; 0049 QTimer mDataTimer; 0050 bool mKeepAlive; 0051 QTimer mStreamingRequestHeartbeat; 0052 QTimer mStreamingRequestTimeout; 0053 QString mStreamingSubId; 0054 HttpConnectionState mState; 0055 bool mAuthenticated; 0056 };