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 };