From: Marcus Eggenberger Date: Sun, 30 Mar 2008 13:42:24 +0000 (+0000) Subject: added missing files X-Git-Tag: 0.2.0-alpha5~48 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=3d5ff3b49a93a3f375b6b454088caafec751dfb6;hp=b79832bf9c4c21b05629cfd2fdbd008ad690572f added missing files --- diff --git a/src/core/sslserver.cpp b/src/core/sslserver.cpp new file mode 100644 index 00000000..b007a65f --- /dev/null +++ b/src/core/sslserver.cpp @@ -0,0 +1,68 @@ +/*************************************************************************** + * Copyright (C) 2005-08 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * 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. * + ***************************************************************************/ + +#include "sslserver.h" + +#include +#include +#include + +#include "util.h" + +SslServer::SslServer(QObject *parent) + : QTcpServer(parent) +{ + QFile certFile(quasselDir().absolutePath() + "/quasselCert.pem"); + certFile.open(QIODevice::ReadOnly); + _cert = QSslCertificate(&certFile); + certFile.close(); + + certFile.open(QIODevice::ReadOnly); + _key = QSslKey(&certFile, QSsl::Rsa); + certFile.close(); + + _certIsValid = !_cert.isNull() && _cert.isValid() && !_key.isNull(); + if(!_certIsValid) { + qWarning() << "SslServer: SSL Certificate is either missing or has wrong format!"; + qWarning() << " make sure that ~/.quassel/quasselCert.pem is pem format and contains the cert and an rsa key!"; + qWarning() << "SslServer: this Quassel Core cannot provide SSL!"; + } +} + +QTcpSocket *SslServer::nextPendingConnection() { + if(_pendingConnections.isEmpty()) + return 0; + else + return _pendingConnections.takeFirst(); +} + +void SslServer::incomingConnection(int socketDescriptor) { + QSslSocket *serverSocket = new QSslSocket(this); + if(serverSocket->setSocketDescriptor(socketDescriptor)) { + if(certIsValid()) { + serverSocket->setLocalCertificate(_cert); + serverSocket->setPrivateKey(_key); + } + _pendingConnections << serverSocket; + emit newConnection(); + } else { + delete serverSocket; + } +} diff --git a/src/core/sslserver.h b/src/core/sslserver.h new file mode 100644 index 00000000..3dd5bd98 --- /dev/null +++ b/src/core/sslserver.h @@ -0,0 +1,52 @@ +/*************************************************************************** + * Copyright (C) 2005-08 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * 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. * + ***************************************************************************/ + +#ifndef SSLSERVER_H +#define SSLSERVER_H + +#include +#include +#include +#include + +class SslServer : public QTcpServer { + Q_OBJECT + +public: + SslServer(QObject *parent = 0); + + 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; } + +protected: + virtual void incomingConnection(int socketDescriptor); + +private: + QLinkedList _pendingConnections; + QSslCertificate _cert; + QSslKey _key; + bool _certIsValid; +}; + +#endif //SSLSERVER_H