Start SmartPointers (#1679)

* Refactor to fix #1671

* Add GUI/NonGUI mode to info page

* Do not show lock config, if in non-UI mode

* Updae Changelog

* Correct includes

* Ensure key member initialization - RGB Channels

* Ensure key member initialization - WebServer

* Update RGBChannels

* Fix initialization order

* Fix key when inserting new logger in LoggerMap,
Prepare logBuffer-JSON snapshot view in LoggerManager,
Increase buffered loglines to 500

* Fix Memory leak in GrabberWrapper

* Fix Memory leak in BlackBorderProcessor

* Fix Memory leak in BlackBorderProcessor

* use ninja generator under macos

* Fix BGEffectHandler destruction

* Fix Mdns code

* Clear list after applying qDeleteAll

* Fix deletion of CecHandler

* Fix memory leak caused by wrong buffer allocation

* Remove extra pixel consistently

* Change mDNS to Qt SmartPointers

* Correct removal

* Fix usage of _width/_height (they are the output resolution, not the screen resolution)
That avoids unnecessary resizing of the output image with every transferFrame call

* Move main non Thread Objects to Smart Pointers

* Refactor Hyperion Daemon unsing smartpointers

* Correction

* Correct typos/ align text

* Fix startGrabberDispmanx

* Fix startGrabberDispmanx

* Address CodeQL finding

* Create Screen grabbers via Template

* Fix typo

* Change way of logging

* Revert change

* Address deprecation warning

* Correct auto screen grabber evaluation

---------

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
LordGrey
2024-02-25 17:35:39 +01:00
committed by GitHub
parent bb40778a3d
commit 31df065c0f
65 changed files with 818 additions and 927 deletions

View File

@@ -31,7 +31,6 @@ WebServer::WebServer(const QJsonDocument& config, bool useSsl, QObject* parent)
, _useSsl(useSsl)
, _log(Logger::getInstance("WEBSERVER"))
, _port(WEBSERVER_DEFAULT_PORT)
, _server()
{
}
@@ -43,7 +42,7 @@ WebServer::~WebServer()
void WebServer::initServer()
{
Debug(_log, "Initialize %s-Webserver", _useSsl ? "https" : "http");
_server = new QtHttpServer(this);
_server.reset(new QtHttpServer(this));
_server->setServerName(QStringLiteral("Hyperion %1-Webserver").arg(_useSsl ? "https" : "http"));
if (_useSsl)
@@ -51,13 +50,13 @@ void WebServer::initServer()
_server->setUseSecure();
}
connect(_server, &QtHttpServer::started, this, &WebServer::onServerStarted);
connect(_server, &QtHttpServer::stopped, this, &WebServer::onServerStopped);
connect(_server, &QtHttpServer::error, this, &WebServer::onServerError);
connect(_server.get(), &QtHttpServer::started, this, &WebServer::onServerStarted);
connect(_server.get(), &QtHttpServer::stopped, this, &WebServer::onServerStopped);
connect(_server.get(), &QtHttpServer::error, this, &WebServer::onServerError);
// create StaticFileServing
_staticFileServing = new StaticFileServing(this);
connect(_server, &QtHttpServer::requestNeedsReply, _staticFileServing, &StaticFileServing::onRequestNeedsReply);
connect(_server.get(), &QtHttpServer::requestNeedsReply, _staticFileServing, &StaticFileServing::onRequestNeedsReply);
// init
handleSettingsUpdate(settings::WEBSERVER, _config);
@@ -83,11 +82,11 @@ void WebServer::onServerStarted(quint16 port)
void WebServer::onServerStopped()
{
Info(_log, "Stopped %s", _server->getServerName().toStdString().c_str());
Info(_log, "%s stopped", _server->getServerName().toStdString().c_str());
emit stateChange(false);
}
void WebServer::onServerError(QString msg)
void WebServer::onServerError(const QString& msg)
{
Error(_log, "%s", msg.toStdString().c_str());
}
@@ -112,7 +111,9 @@ void WebServer::handleSettingsUpdate(settings::type type, const QJsonDocument& c
}
}
else
{
_baseUrl = WEBSERVER_DEFAULT_PATH;
}
Debug(_log, "Set document root to: %s", _baseUrl.toUtf8().constData());
_staticFileServing->setBaseUrl(_baseUrl);
@@ -127,7 +128,9 @@ void WebServer::handleSettingsUpdate(settings::type type, const QJsonDocument& c
// eval if the port is available, will be incremented if not
if (!_server->isListening())
{
NetUtils::portAvailable(_port, _log);
}
// on ssl we want .key .cert and probably key password
if (_useSsl)
@@ -149,7 +152,9 @@ void WebServer::handleSettingsUpdate(settings::type type, const QJsonDocument& c
}
}
else
{
keyPath = WEBSERVER_DEFAULT_KEY_PATH;
}
// check crtPath
if ((crtPath != WEBSERVER_DEFAULT_CRT_PATH) && !crtPath.trimmed().isEmpty())
@@ -162,7 +167,9 @@ void WebServer::handleSettingsUpdate(settings::type type, const QJsonDocument& c
}
}
else
{
crtPath = WEBSERVER_DEFAULT_CRT_PATH;
}
// load and verify crt
QFile cfile(crtPath);
@@ -174,9 +181,13 @@ void WebServer::handleSettingsUpdate(settings::type type, const QJsonDocument& c
// Filter for valid certs
for (const auto& entry : cList) {
if (!entry.isNull() && QDateTime::currentDateTime().daysTo(entry.expiryDate()) > 0)
{
validList.append(entry);
}
else
{
Error(_log, "The provided SSL certificate is invalid/not supported/reached expiry date ('%s')", crtPath.toUtf8().constData());
}
}
if (!validList.isEmpty()) {

View File

@@ -23,9 +23,11 @@ WebSocketClient::WebSocketClient(QtHttpRequest* request, QTcpSocket* sock, bool
const QString client = request->getClientInfo().clientAddress.toString();
// Json processor
_jsonAPI = new JsonAPI(client, _log, localConnection, this);
connect(_jsonAPI, &JsonAPI::callbackMessage, this, &WebSocketClient::sendMessage);
connect(_jsonAPI, &JsonAPI::forceClose, this,[this]() { this->sendClose(CLOSECODE::NORMAL); });
_jsonAPI.reset(new JsonAPI(client, _log, localConnection, this));
connect(_jsonAPI.get(), &JsonAPI::callbackMessage, this, &WebSocketClient::sendMessage);
connect(_jsonAPI.get(), &JsonAPI::forceClose, this,[this]() { this->sendClose(CLOSECODE::NORMAL); });
connect(this, &WebSocketClient::handleMessage, _jsonAPI.get(), &JsonAPI::handleMessage);
Debug(_log, "New connection from %s", QSTRING_CSTR(client));
@@ -129,7 +131,7 @@ void WebSocketClient::handleWebSocketFrame()
if (_frameOpCode == OPCODE::TEXT)
{
_jsonAPI->handleMessage(QString(_wsReceiveBuffer));
emit handleMessage(QString(_wsReceiveBuffer),"");
}
else
{

View File

@@ -2,6 +2,9 @@
#include <utils/Logger.h>
#include "WebSocketUtils.h"
#include <api/JsonAPI.h>
#include <QScopedPointer>
class QTcpSocket;
@@ -28,7 +31,7 @@ private:
QTcpSocket* _socket;
Logger* _log;
Hyperion* _hyperion;
JsonAPI* _jsonAPI;
QScopedPointer<JsonAPI> _jsonAPI;
void getWsFrameHeader(WebSocketHeader* header);
void sendClose(int status, const QString& reason = "");
@@ -73,4 +76,7 @@ private:
private slots:
void handleWebSocketFrame();
qint64 sendMessage(QJsonObject obj);
signals:
void handleMessage(const QString &message, const QString &httpAuthHeader);
};