diff --git a/server/guhcore.cpp b/server/guhcore.cpp index 6d21402d..fab88a65 100644 --- a/server/guhcore.cpp +++ b/server/guhcore.cpp @@ -370,13 +370,13 @@ TimeManager *GuhCore::timeManager() const /*! Returns a pointer to the \l{WebServer} instance owned by GuhCore.*/ WebServer *GuhCore::webServer() const { - return m_webServer; + return m_serverManager->webServer(); } /*! Returns a pointer to the \l{WebSocketServer} instance owned by GuhCore.*/ WebSocketServer *GuhCore::webSocketServer() const { - return m_webSocketServer; + return m_serverManager->webSocketServer(); } /*! Returns a pointer to the \l{ServerManager} instance owned by GuhCore. */ @@ -395,7 +395,7 @@ QStringList GuhCore::getAvailableLanguages() /*! Returns a pointer to the \l{BluetoothServer} instance owned by GuhCore. */ BluetoothServer *GuhCore::bluetoothServer() const { - return m_bluetoothServer; + return m_serverManager->bluetoothServer(); } /*! Returns a pointer to the \l{NetworkManager} instance owned by GuhCore. */ @@ -410,17 +410,15 @@ UserManager *GuhCore::userManager() const } #ifdef TESTING_ENABLED -MockTcpServer *GuhCore::tcpServer() const -{ - return m_tcpServer; -} +MockTcpServer #else /*! Returns a pointer to the \l{TcpServer} instance owned by GuhCore. */ -TcpServer *GuhCore::tcpServer() const -{ - return m_tcpServer; -} +TcpServer #endif +*GuhCore::tcpServer() const +{ + return m_serverManager->tcpServer(); +} /*! Constructs GuhCore with the given \a parent. This is private. Use \l{GuhCore::instance()} to access the single instance.*/ @@ -443,26 +441,7 @@ GuhCore::GuhCore(QObject *parent) : m_ruleEngine = new RuleEngine(this); qCDebug(dcApplication) << "Creating Server Manager"; - m_serverManager = new ServerManager(this); - -#ifdef TESTING_ENABLED - m_tcpServer = new MockTcpServer(this); -#else - m_tcpServer = new TcpServer(m_configuration->tcpServerAddress(), m_configuration->tcpServerPort(), this); -#endif - - m_webSocketServer = new WebSocketServer(m_configuration->webSocketAddress(), m_configuration->webSocketPort(), m_configuration->sslEnabled(), this); - - m_bluetoothServer = new BluetoothServer(this); - - // Register transport interface in the JSON RPC server - m_serverManager->jsonServer()->registerTransportInterface(m_tcpServer); - m_serverManager->jsonServer()->registerTransportInterface(m_webSocketServer); - m_serverManager->jsonServer()->registerTransportInterface(m_bluetoothServer, m_configuration->bluetoothServerEnabled()); - - // Webserver setup - m_webServer = new WebServer(m_configuration->webServerAddress(), m_configuration->webServerPort(), m_configuration->webServerPublicFolder(), this); - m_serverManager->restServer()->registerWebserver(m_webServer); + m_serverManager = new ServerManager(m_configuration, this); // Create the NetworkManager m_networkManager = new NetworkManager(this); diff --git a/server/guhcore.h b/server/guhcore.h index 25be8d88..c7f89f23 100644 --- a/server/guhcore.h +++ b/server/guhcore.h @@ -33,17 +33,9 @@ #include "devicemanager.h" #include "ruleengine.h" #include "servermanager.h" -#include "websocketserver.h" -#include "bluetoothserver.h" #include "time/timemanager.h" -#ifndef TESTING_ENABLED -#include "tcpserver.h" -#else -#include "mocktcpserver.h" -#endif - #include class Device; @@ -51,6 +43,8 @@ class Device; namespace guhserver { class JsonRPCServer; +class WebSocketServer; +class TcpServer; class LogEngine; class NetworkManager; @@ -128,15 +122,6 @@ private: NetworkManager *m_networkManager; UserManager *m_userManager; -#ifdef TESTING_ENABLED - MockTcpServer *m_tcpServer; -#else - TcpServer *m_tcpServer; -#endif - WebSocketServer *m_webSocketServer; - WebServer *m_webServer; - BluetoothServer *m_bluetoothServer; - QHash m_pendingActions; private slots: diff --git a/server/servermanager.cpp b/server/servermanager.cpp index 52038d31..d09bfe57 100644 --- a/server/servermanager.cpp +++ b/server/servermanager.cpp @@ -42,7 +42,7 @@ namespace guhserver { /*! Constructs a \l{ServerManager} with the given \a parent. */ -ServerManager::ServerManager(QObject *parent) : +ServerManager::ServerManager(GuhConfiguration* configuration, QObject *parent) : QObject(parent), m_sslConfiguration(QSslConfiguration()) { @@ -56,7 +56,7 @@ ServerManager::ServerManager(QObject *parent) : GuhSettings settings(GuhSettings::SettingsRoleGlobal); qCDebug(dcConnection) << "Loading SSL-configuration from" << settings.fileName(); - settings.beginGroup("SSL-Configuration"); + settings.beginGroup("SSL"); QString certificateFileName = settings.value("certificate", QVariant("/etc/ssl/certs/guhd-certificate.crt")).toString(); QString keyFileName = settings.value("certificate-key", QVariant("/etc/ssl/private/guhd-certificate.key")).toString(); settings.endGroup(); @@ -70,9 +70,30 @@ ServerManager::ServerManager(QObject *parent) : } } + // Interfaces m_jsonServer = new JsonRPCServer(m_sslConfiguration, this); - m_restServer = new RestServer(m_sslConfiguration, this); + + + // Transports +#ifdef TESTING_ENABLED + m_tcpServer = new MockTcpServer(this); +#else + m_tcpServer = new TcpServer(configuration->tcpServerAddress(), configuration->tcpServerPort(), this); +#endif + + m_webSocketServer = new WebSocketServer(configuration->webSocketAddress(), configuration->webSocketPort(), configuration->sslEnabled(), m_sslConfiguration, this); + + m_bluetoothServer = new BluetoothServer(this); + + // Register transport interfaces for the JSON RPC server + m_jsonServer->registerTransportInterface(m_tcpServer); + m_jsonServer->registerTransportInterface(m_webSocketServer); + m_jsonServer->registerTransportInterface(m_bluetoothServer, configuration->bluetoothServerEnabled()); + + // Register transport itnerfaces for the Webserver + m_webServer = new WebServer(configuration->webServerAddress(), configuration->webServerPort(), configuration->webServerPublicFolder(), this); + m_restServer->registerWebserver(m_webServer); } /*! Returns the pointer to the created \l{JsonRPCServer} in this \l{ServerManager}. */ @@ -87,6 +108,31 @@ RestServer *ServerManager::restServer() const return m_restServer; } +WebServer *ServerManager::webServer() const +{ + return m_webServer; +} + +WebSocketServer *ServerManager::webSocketServer() const +{ + return m_webSocketServer; +} + +BluetoothServer *ServerManager::bluetoothServer() const +{ + return m_bluetoothServer; +} + +#ifdef TESTING_ENABLED +MockTcpServer +#else +TcpServer +#endif +*ServerManager::tcpServer() const +{ + return m_tcpServer; +} + bool ServerManager::loadCertificate(const QString &certificateKeyFileName, const QString &certificateFileName) { QFile certificateKeyFile(certificateKeyFileName); diff --git a/server/servermanager.h b/server/servermanager.h index 19b90579..401ef7a5 100644 --- a/server/servermanager.h +++ b/server/servermanager.h @@ -26,6 +26,14 @@ #include "loggingcategories.h" #include "jsonrpc/jsonrpcserver.h" #include "rest/restserver.h" +#include "websocketserver.h" +#include "bluetoothserver.h" + +#ifndef TESTING_ENABLED +#include "tcpserver.h" +#else +#include "mocktcpserver.h" +#endif class QSslConfiguration; class QSslCertificate; @@ -37,15 +45,39 @@ class ServerManager : public QObject { Q_OBJECT public: - explicit ServerManager(QObject *parent = 0); + explicit ServerManager(GuhConfiguration *configuration, QObject *parent = 0); + // Interfaces JsonRPCServer *jsonServer() const; RestServer *restServer() const; + // Transports + WebServer* webServer() const; + WebSocketServer* webSocketServer() const; + BluetoothServer* bluetoothServer() const; + +#ifdef TESTING_ENABLED + MockTcpServer *tcpServer() const; +#else + TcpServer *tcpServer() const; +#endif + private: + // Interfaces JsonRPCServer *m_jsonServer; RestServer *m_restServer; + // Transports +#ifdef TESTING_ENABLED + MockTcpServer *m_tcpServer; +#else + TcpServer *m_tcpServer; +#endif + WebSocketServer *m_webSocketServer; + WebServer *m_webServer; + BluetoothServer *m_bluetoothServer; + + // Encrytption and stuff QSslConfiguration m_sslConfiguration; QSslKey m_certificateKey; QSslCertificate m_certificate; diff --git a/server/websocketserver.cpp b/server/websocketserver.cpp index 64f4c1aa..601c8e1e 100644 --- a/server/websocketserver.cpp +++ b/server/websocketserver.cpp @@ -60,11 +60,12 @@ namespace guhserver { * * \sa ServerManager */ -WebSocketServer::WebSocketServer(const QHostAddress &address, const uint &port, const bool &sslEnabled, QObject *parent) : +WebSocketServer::WebSocketServer(const QHostAddress &address, const uint &port, const bool &sslEnabled, const QSslConfiguration &sslConfiguration, QObject *parent) : TransportInterface(parent), m_server(0), m_host(address), m_port(port), + m_sslConfiguration(sslConfiguration), m_useSsl(sslEnabled), m_enabled(false) { diff --git a/server/websocketserver.h b/server/websocketserver.h index a9e85161..bd0e7dc0 100644 --- a/server/websocketserver.h +++ b/server/websocketserver.h @@ -42,7 +42,7 @@ class WebSocketServer : public TransportInterface { Q_OBJECT public: - explicit WebSocketServer(const QHostAddress &address, const uint &port, const bool &sslEnabled, QObject *parent = 0); + explicit WebSocketServer(const QHostAddress &address, const uint &port, const bool &sslEnabled, const QSslConfiguration &sslConfiguration, QObject *parent = 0); ~WebSocketServer(); void sendData(const QUuid &clientId, const QByteArray &data) override;