/***************************************************************************
- * Copyright (C) 2005-2018 by the Quassel Project *
+ * Copyright (C) 2005-2020 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#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;
+ uint16_t remotePort;
QString query;
qint64 transactionId;
qint64 requestId;
- friend bool operator==(const Request &a, const Request &b);
+ friend bool operator==(const Request& a, const Request& b);
+
+ void respondSuccess(const QString& user);
+ void respondError(const QString& error);
- void respondSuccess(const QString &user);
- void respondError(const QString &error);
+ const static int DISCONNECTION_TIMEOUT = 500;
};
-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);
+ 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);
-
- 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};
};