X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fsslserver.h;h=609ec77abf722ab35d2f4e2669b13dedd1c696e6;hb=cdc6091a2e02b84a48937cda287a0769ceb8726a;hp=dbf28025c81e2d507bed25d61440c2629d748801;hpb=04315f46a16fc3627218377071e008b6b9744992;p=quassel.git diff --git a/src/core/sslserver.h b/src/core/sslserver.h index dbf28025..609ec77a 100644 --- a/src/core/sslserver.h +++ b/src/core/sslserver.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,8 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef SSLSERVER_H -#define SSLSERVER_H +#pragma once #ifdef HAVE_SSL @@ -27,6 +26,7 @@ #include #include #include +#include class SslServer : public QTcpServer { @@ -35,26 +35,54 @@ class SslServer : public QTcpServer public: SslServer(QObject *parent = 0); - virtual inline bool hasPendingConnections() const { return !_pendingConnections.isEmpty(); } - virtual QTcpSocket *nextPendingConnection(); + bool hasPendingConnections() const override { return !_pendingConnections.isEmpty(); } + QTcpSocket *nextPendingConnection() override; - virtual inline const QSslCertificate &certificate() const { return _cert; } - virtual inline const QSslKey &key() const { return _key; } - virtual inline bool isCertValid() const { return _isCertValid; } + const QSslCertificate &certificate() const { return _cert; } + const QSslKey &key() const { return _key; } + bool isCertValid() const { return _isCertValid; } + + /** + * Reloads SSL certificates used for connections + * + * If this command fails, it will try to maintain the most recent working certificate. Error + * conditions are automatically written to the log. + * + * @return True if certificates reloaded successfully, otherwise false. + */ + bool reloadCerts(); protected: - virtual void incomingConnection(int socketDescriptor); - virtual bool setCertificate(const QString &path); +#if QT_VERSION >= 0x050000 + void incomingConnection(qintptr socketDescriptor) override; +#else + void incomingConnection(int socketDescriptor) override; +#endif + + bool setCertificate(const QString &path, const QString &keyPath); private: + /** + * Loads SSL certificates used for connections + * + * If this command fails, it will try to maintain the most recent working certificate. Will log + * specific failure points, but does not offer verbose guidance. + * + * @return True if certificates loaded successfully, otherwise false. + */ + bool loadCerts(); + QSslKey loadKey(QFile *keyFile); + QLinkedList _pendingConnections; QSslCertificate _cert; QSslKey _key; QList _ca; bool _isCertValid; + + // Used when reloading certificates later + QString _sslCertPath; /// Path to the certificate file + QString _sslKeyPath; /// Path to the private key file (may be in same file as above) }; #endif //HAVE_SSL - -#endif //SSLSERVER_H