hyperion.ng/libsrc/mdns/MdnsProvider.cpp
LordGrey 05d24b99c4
Fix Memory leaks (#1678)
* 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

* Revert "Move main non Thread Objects to Smart Pointers"

This reverts commit 26102ca963982e2fbc4ffb8d4db6139f0128a3cc.

* Add missing deletes

* Revert MdnsBrowser chnage

* Revert MdnsBrowser change

* Fix memory leaks related standalone grabber

* Address CodeQL finding

* delete pointer OsxFrameGrabber

---------

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2024-01-13 17:04:45 +01:00

87 lines
2.5 KiB
C++

#include <mdns/MdnsProvider.h>
#include <mdns/MdnsServiceRegister.h>
// Qt includes
#include <QHostInfo>
#include <QThread>
// Utility includes
#include <utils/Logger.h>
#include <HyperionConfig.h>
#include <hyperion/AuthManager.h>
namespace {
const bool verboseProvider = false;
} // End of constants
MdnsProvider::MdnsProvider(QObject* parent)
: QObject(parent)
, _log(Logger::getInstance("MDNS"))
, _server(nullptr)
, _hostname(nullptr)
{
}
void MdnsProvider::init()
{
_server.reset(new QMdnsEngine::Server());
_hostname.reset(new QMdnsEngine::Hostname(_server.data()));
connect(_hostname.data(), &QMdnsEngine::Hostname::hostnameChanged, this, &MdnsProvider::onHostnameChanged);
DebugIf(verboseProvider, _log, "Hostname [%s], isRegistered [%d]", _hostname->hostname().constData(), _hostname->isRegistered());
}
MdnsProvider::~MdnsProvider()
{
_providedServiceTypes.clear();
}
void MdnsProvider::publishService(const QString& serviceType, quint16 servicePort, const QByteArray& serviceName)
{
QByteArray type = MdnsServiceRegister::getServiceType(serviceType);
if (!type.isEmpty())
{
DebugIf(verboseProvider, _log, "Publish new mDNS serviceType [%s], Thread: %s", type.constData(), QSTRING_CSTR(QThread::currentThread()->objectName()));
if (!_providedServiceTypes.contains(type))
{
QSharedPointer<QMdnsEngine::Provider> newProvider = QSharedPointer<QMdnsEngine::Provider>::create(_server.data(), _hostname.data());
_providedServiceTypes.insert(type, newProvider);
}
QSharedPointer<QMdnsEngine::Provider> provider = _providedServiceTypes.value(type);
if (!provider.isNull())
{
QMdnsEngine::Service service;
service.setType(type);
service.setPort(servicePort);
QByteArray name(QHostInfo::localHostName().toUtf8());
if (!serviceName.isEmpty())
{
name.prepend(serviceName + "@");
}
service.setName(name);
QByteArray uuid = AuthManager::getInstance()->getID().toUtf8();
const QMap<QByteArray, QByteArray> attributes = {{"id", uuid}, {"version", HYPERION_VERSION}};
service.setAttributes(attributes);
DebugIf(verboseProvider, _log, "[%s], Name: [%s], Port: [%u] ", service.type().constData(), service.name().constData(), service.port());
provider->update(service);
}
else
{
Error(_log, "Not able to get hold of mDNS serviceType [%s]", type.constData());
}
}
}
void MdnsProvider::onHostnameChanged(const QByteArray& hostname)
{
DebugIf(verboseProvider, _log, "mDNS-hostname changed to hostname [%s]", hostname.constData());
}