/***************************************************************************
- * Copyright (C) 2005-2013 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 *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef AUTHHANDLER_H
-#define AUTHHANDLER_H
+#pragma once
-#include <QTcpSocket>
+#include "common-export.h"
+
+#include <QSslSocket>
#include "protocol.h"
class Peer;
-class AuthHandler : public QObject
+class COMMON_EXPORT AuthHandler : public QObject
{
Q_OBJECT
public:
- enum State {
- UnconnectedState,
- HostLookupState,
- ConnectingState,
- ConnectedState,
- RetryWithLegacyState,
- AuthenticatingState,
- AuthenticatedState,
- ClosingState
- };
-
- AuthHandler(QObject *parent = 0);
-
- State state() const;
- QTcpSocket *socket() const;
-
- virtual void handle(const Protocol::RegisterClient &) { invalidMessage(); }
- virtual void handle(const Protocol::ClientDenied &) { invalidMessage(); }
- virtual void handle(const Protocol::ClientRegistered &) { invalidMessage(); }
- virtual void handle(const Protocol::SetupData &) { invalidMessage(); }
- virtual void handle(const Protocol::SetupFailed &) { invalidMessage(); }
- virtual void handle(const Protocol::SetupDone &) { invalidMessage(); }
- virtual void handle(const Protocol::Login &) { invalidMessage(); }
- virtual void handle(const Protocol::LoginFailed &) { invalidMessage(); }
- virtual void handle(const Protocol::LoginSuccess &) { invalidMessage(); }
- virtual void handle(const Protocol::SessionState &) { invalidMessage(); }
+ AuthHandler(QObject* parent = nullptr);
+
+ QSslSocket* socket() const;
+
+ virtual bool isLocal() const;
+
+ virtual void handle(const Protocol::RegisterClient&) { invalidMessage(); }
+ virtual void handle(const Protocol::ClientDenied&) { invalidMessage(); }
+ virtual void handle(const Protocol::ClientRegistered&) { invalidMessage(); }
+ virtual void handle(const Protocol::SetupData&) { invalidMessage(); }
+ virtual void handle(const Protocol::SetupFailed&) { invalidMessage(); }
+ virtual void handle(const Protocol::SetupDone&) { invalidMessage(); }
+ virtual void handle(const Protocol::Login&) { invalidMessage(); }
+ virtual void handle(const Protocol::LoginFailed&) { invalidMessage(); }
+ virtual void handle(const Protocol::LoginSuccess&) { invalidMessage(); }
+ virtual void handle(const Protocol::SessionState&) { invalidMessage(); }
// fallback for unknown types, will trigger an error
template<class T>
- void handle(const T &) { invalidMessage(); }
+ void handle(const T&)
+ {
+ invalidMessage();
+ }
public slots:
void close();
signals:
- void stateChanged(State state);
void disconnected();
-
- void socketStateChanged(QAbstractSocket::SocketState state);
- void socketError(QAbstractSocket::SocketError error, const QString &errorString);
+ void socketError(QAbstractSocket::SocketError error, const QString& errorString);
protected:
- void setSocket(QTcpSocket *socket);
- void setState(State state);
+ void setSocket(QSslSocket* socket);
-private slots:
- void socketError(QAbstractSocket::SocketError error);
+protected slots:
+ virtual void onSocketError(QAbstractSocket::SocketError error);
+ virtual void onSocketDisconnected();
private:
void invalidMessage();
- State _state;
- QTcpSocket *_socket; // FIXME: should be a QSharedPointer? -> premature disconnect before the peer has taken over
+ QSslSocket* _socket{nullptr}; // FIXME: should be a QSharedPointer? -> premature disconnect before the peer has taken over
+ bool _disconnectedSent{false};
};
-
-#endif