X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fsslserver.h;h=16ab183bd3e33495ce6fe72e49b872832e6272d6;hb=e212eabe53878a8fa6ecb15909a325ed7dd63283;hp=fdbecbf29104ca5f3725fbe87b4eb693f1c3afce;hpb=f9c4125d5da21eac006eaa2558f87705ddefff4f;p=quassel.git diff --git a/src/core/sslserver.h b/src/core/sslserver.h index fdbecbf2..16ab183b 100644 --- a/src/core/sslserver.h +++ b/src/core/sslserver.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 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 * @@ -15,44 +15,77 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef SSLSERVER_H #define SSLSERVER_H -#ifndef QT_NO_OPENSSL -# include -# include +#ifdef HAVE_SSL + +#include +#include #include #include -#endif - -#ifndef QT_NO_OPENSSL +#include -class SslServer : public QTcpServer { - Q_OBJECT +class SslServer : public QTcpServer +{ + Q_OBJECT public: - SslServer(QObject *parent = 0); + SslServer(QObject *parent = 0); - virtual inline bool hasPendingConnections() const { return !_pendingConnections.isEmpty(); } - virtual QTcpSocket *nextPendingConnection(); + virtual inline bool hasPendingConnections() const { return !_pendingConnections.isEmpty(); } + virtual QTcpSocket *nextPendingConnection(); - virtual inline const QSslCertificate &certificate() const { return _cert; } - virtual inline const QSslKey &key() const { return _key; } - virtual inline bool certIsValid() const { return _certIsValid; } + virtual inline const QSslCertificate &certificate() const { return _cert; } + virtual inline const QSslKey &key() const { return _key; } + virtual inline 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); +#if QT_VERSION >= 0x050000 + virtual void incomingConnection(qintptr socketDescriptor); +#else + virtual void incomingConnection(int socketDescriptor); +#endif + + virtual bool setCertificate(const QString &path, const QString &keyPath); private: - QLinkedList _pendingConnections; - QSslCertificate _cert; - QSslKey _key; - bool _certIsValid; + /** + * 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 //QT_NO_OPENSSL + +#endif //HAVE_SSL #endif //SSLSERVER_H