diff --git a/server/websocket.cpp b/server/websocket.cpp index 971d341..5fdd91f 100644 --- a/server/websocket.cpp +++ b/server/websocket.cpp @@ -1,11 +1,14 @@ #include "websocket.hpp" #include "QtWebSockets/qwebsocket.h" #include "QtWebSockets/qwebsocketserver.h" +#include +#include +#include #include Websocket::Websocket(uint16_t port, QObject *parent) : QObject(parent), - m_pWebSocketServer(new QWebSocketServer(QStringLiteral("sim_us Server"), QWebSocketServer::NonSecureMode, this)) + m_pWebSocketServer(new QWebSocketServer(QStringLiteral("sim_us Server"), QWebSocketServer::NonSecureMode, parent)) { if (m_pWebSocketServer->listen(QHostAddress::Any, port)) { @@ -15,6 +18,31 @@ Websocket::Websocket(uint16_t port, QObject *parent) } } +Websocket::Websocket(uint16_t port, QString key_file, QString cert_file, QObject *parent) + : QObject(parent), + m_pWebSocketServer(new QWebSocketServer(QStringLiteral("sim_us Server"), QWebSocketServer::SecureMode, parent)) +{ + QSslConfiguration sslConfiguration; + QFile certFile(cert_file); + QFile keyFile(key_file); + certFile.open(QIODevice::ReadOnly); + keyFile.open(QIODevice::ReadOnly); + QSslCertificate certificate(&certFile, QSsl::Pem); + QSslKey sslKey(&keyFile, QSsl::Rsa, QSsl::Pem); + certFile.close(); + keyFile.close(); + sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone); + sslConfiguration.setLocalCertificate(certificate); + sslConfiguration.setPrivateKey(sslKey); + m_pWebSocketServer->setSslConfiguration(sslConfiguration); + if (m_pWebSocketServer->listen(QHostAddress::Any, port)) + { + SPDLOG_DEBUG("Server listening on port {}", port); + connect(m_pWebSocketServer, &QWebSocketServer::newConnection, this, &Websocket::onNewConnection); + connect(m_pWebSocketServer, &QWebSocketServer::closed, this, &Websocket::closed); + } +} + Websocket::~Websocket() { m_pWebSocketServer->close(); diff --git a/server/websocket.hpp b/server/websocket.hpp index 879878d..7297732 100644 --- a/server/websocket.hpp +++ b/server/websocket.hpp @@ -13,6 +13,7 @@ class Websocket : public QObject public: Websocket(uint16_t port, QObject *parent = nullptr); + Websocket(uint16_t port, QString key_file, QString cert_file, QObject *parent = nullptr); ~Websocket(); void broadcast(QString message);