File indexing completed on 2025-02-16 04:50:06
0001 /* 0002 SPDX-FileCopyrightText: 2015-2019 Krzysztof Nowicki <krissn@op.pl> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <functional> 0010 0011 #include "fakeewsserver_export.h" 0012 0013 #include <QMutex> 0014 #include <QPointer> 0015 #include <QTcpServer> 0016 class QTcpSocket; 0017 0018 class FakeEwsConnection; 0019 class QXmlResultItems; 0020 class QXmlNamePool; 0021 0022 class FAKEEWSSERVER_EXPORT FakeEwsServer : public QTcpServer 0023 { 0024 Q_OBJECT 0025 public: 0026 class FAKEEWSSERVER_EXPORT DialogEntry 0027 { 0028 public: 0029 using HttpResponse = QPair<QString, ushort>; 0030 using ReplyCallback = std::function<HttpResponse(const QString &, QXmlResultItems &, const QXmlNamePool &)>; 0031 QString xQuery; 0032 ReplyCallback replyCallback; 0033 QString description; 0034 0035 using List = QList<DialogEntry>; 0036 }; 0037 0038 static const DialogEntry::HttpResponse EmptyResponse; 0039 0040 explicit FakeEwsServer(QObject *parent); 0041 ~FakeEwsServer() override; 0042 bool start(); 0043 void setDefaultReplyCallback(const DialogEntry::ReplyCallback &defaultReplyCallback); 0044 void setOverrideReplyCallback(const DialogEntry::ReplyCallback &overrideReplyCallback); 0045 void queueEventsXml(const QStringList &events); 0046 void setDialog(const DialogEntry::List &dialog); 0047 ushort portNumber() const; 0048 private Q_SLOTS: 0049 void newConnectionReceived(); 0050 void streamingConnectionStarted(FakeEwsConnection *conn); 0051 0052 private: 0053 void dataAvailable(QTcpSocket *sock); 0054 void sendError(QTcpSocket *sock, const QString &msg, ushort code = 500); 0055 const DialogEntry::List dialog() const; 0056 const DialogEntry::ReplyCallback defaultReplyCallback() const; 0057 const DialogEntry::ReplyCallback overrideReplyCallback() const; 0058 QStringList retrieveEventsXml(); 0059 0060 DialogEntry::List mDialog; 0061 DialogEntry::ReplyCallback mDefaultReplyCallback; 0062 DialogEntry::ReplyCallback mOverrideReplyCallback; 0063 QStringList mEventQueue; 0064 QPointer<FakeEwsConnection> mStreamingEventsConnection; 0065 ushort mPortNumber; 0066 mutable QMutex mMutex; 0067 0068 friend class FakeEwsConnection; 0069 };