identd: Initial draft of integrated ident daemon
[quassel.git] / src / core / core.h
index dad8ee2..7da4f22 100644 (file)
@@ -24,6 +24,7 @@
 #include <vector>
 
 #include <QDateTime>
+#include <QPointer>
 #include <QString>
 #include <QVariant>
 #include <QTimer>
 #include "sessionthread.h"
 #include "storage.h"
 #include "types.h"
+#include "identserver.h"
 
 class CoreAuthHandler;
 class CoreSession;
-struct NetworkInfo;
+class InternalPeer;
 class SessionThread;
 class SignalProxy;
 
+struct NetworkInfo;
+
 class AbstractSqlMigrationReader;
 class AbstractSqlMigrationWriter;
 
@@ -686,12 +690,23 @@ public:
 
     static QString setup(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authenticator, const QVariantMap &authSetupMap);
 
-    static inline QTimer &syncTimer() { return instance()->_storageSyncTimer; }
+    static inline QTimer *syncTimer() { return &instance()->_storageSyncTimer; }
 
     inline OidentdConfigGenerator *oidentdConfigGenerator() const { return _oidentdConfigGenerator; }
+    inline IdentServer *identServer() const { return _identServer; }
 
     static const int AddClientEventId;
 
+signals:
+    //! Sent when a BufferInfo is updated in storage.
+    void bufferInfoUpdated(UserId user, const BufferInfo &info);
+
+    //! Relay from CoreSession::sessionState(). Used for internal connection only
+    void sessionState(const Protocol::SessionState &sessionState);
+
+    //! Emitted when database schema upgrade starts or ends
+    void dbUpgradeInProgress(bool inProgress);
+
 public slots:
     bool init();
 
@@ -710,15 +725,9 @@ public slots:
 
     void cacheSysIdent();
 
-    void setupInternalClientSession(InternalPeer *clientConnection);
     QString setupCore(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authenticator, const QVariantMap &authSetupMap);
 
-signals:
-    //! Sent when a BufferInfo is updated in storage.
-    void bufferInfoUpdated(UserId user, const BufferInfo &info);
-
-    //! Relay from CoreSession::sessionState(). Used for internal connection only
-    void sessionState(const Protocol::SessionState &sessionState);
+    void connectInternalPeer(QPointer<InternalPeer> peer);
 
 protected:
     void customEvent(QEvent *event) override;
@@ -746,6 +755,7 @@ private:
     void addClientHelper(RemotePeer *peer, UserId uid);
     //void processCoreSetup(QTcpSocket *socket, QVariantMap &msg);
     QString setupCoreForInternalUsage();
+    void setupInternalClientSession(QPointer<InternalPeer> peer);
 
     bool createUser();
 
@@ -779,9 +789,10 @@ private:
     QHash<UserId, SessionThread *> _sessions;
     DeferredSharedPtr<Storage>       _storage;        ///< Active storage backend
     DeferredSharedPtr<Authenticator> _authenticator;  ///< Active authenticator
-    QTimer _storageSyncTimer;
     QMap<UserId, QString> _authUserNames;
 
+    QTimer _storageSyncTimer;
+
 #ifdef HAVE_SSL
     SslServer _server, _v6server;
 #else
@@ -795,7 +806,12 @@ private:
 
     QDateTime _startTime;
 
-    bool _configured;
+    IdentServer *_identServer {nullptr};
+    
+    bool _initialized{false};
+    bool _configured{false};
+
+    QPointer<InternalPeer> _pendingInternalConnection;
 
     /// Whether or not strict ident mode is enabled, locking users' idents to Quassel username
     bool _strictIdentEnabled;