From 0fc0e5cd0f5ee83f72ab657ec8552f8fdd55d682 Mon Sep 17 00:00:00 2001 From: Sander Speetjens Date: Wed, 5 Feb 2025 21:13:12 +0100 Subject: [PATCH] websocket server add wss possibility --- server/websocket.cpp | 30 +++++++++++++++++++++++++++++- server/websocket.hpp | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) 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);