#pragma once
+#include <list>
+
+#include <QHash>
+#include <QObject>
+#include <QPointer>
+#include <QString>
#include <QTcpServer>
#include <QTcpSocket>
#include "coreidentity.h"
-struct Request {
- QTcpSocket *socket;
+struct Request
+{
+ QPointer<QTcpSocket> socket;
uint16_t localPort;
QString query;
qint64 transactionId;
qint64 requestId;
friend bool operator==(const Request &a, const Request &b);
+
+ void respondSuccess(const QString &user);
+ void respondError(const QString &error);
};
-class IdentServer : public QObject {
-Q_OBJECT
+
+class IdentServer : public QObject
+{
+ Q_OBJECT
+
public:
- IdentServer(bool strict, QObject *parent);
- ~IdentServer() override;
+ IdentServer(QObject *parent = nullptr);
bool startListening();
void stopListening(const QString &msg);
qint64 addWaitingSocket();
+
public slots:
- bool addSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort, qint64 socketId);
- bool removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort, qint64 socketId);
+ void addSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort, qint64 socketId);
+ void removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort, qint64 socketId);
private slots:
void incomingConnection();
void respond();
private:
- bool responseAvailable(Request request);
- void responseUnavailable(Request request);
-
- QString sysIdentForIdentity(const CoreIdentity *identity) const;
+ bool responseAvailable(Request request) const;
- qint64 lowestSocketId();
+ qint64 lowestSocketId() const;
void processWaiting(qint64 socketId);
QTcpServer _server, _v6server;
- bool _strict;
-
QHash<uint16_t, QString> _connections;
std::list<Request> _requestQueue;
std::list<qint64> _waiting;
- qint64 _socketId;
- qint64 _requestId;
+ qint64 _socketId{0};
+ qint64 _requestId{0};
};