7#if QT_VERSION >= QT_VERSION_CHECK(6,5,0)
8#include <QtEnvironmentVariables>
10#include <QSocketNotifier>
16#define LOC QString("Bonjour: ")
23 qputenv(
"AVAHI_COMPAT_NOWARN",
"1");
36 LOG(VB_GENERAL, LOG_INFO,
LOC +
37 QString(
"De-registering service '%1' on '%2'")
48 const QByteArray &name,
const QByteArray &txt)
52 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"Service already registered.");
60 DNSServiceErrorType res =
61 DNSServiceRegister(&
m_dnssref, 0, 0, name.data(),
type.data(),
62 nullptr,
nullptr, qport, txt.size(), (
void*)txt.data(),
65 if (kDNSServiceErr_NoError != res)
67 LOG(VB_GENERAL, LOG_ERR,
LOC + QString(
"Error: %1").arg(res));
74 m_socket =
new QSocketNotifier(fd, QSocketNotifier::Read,
this);
76 connect(
m_socket, &QSocketNotifier::activated,
84 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Failed to register service.");
94 DNSServiceErrorType res = DNSServiceProcessResult(
m_dnssref);
95 if (kDNSServiceErr_NoError != res)
96 LOG(VB_GENERAL, LOG_ERR,
LOC + QString(
"Read Error: %1").arg(res));
101 [[maybe_unused]] DNSServiceFlags flags,
102 DNSServiceErrorType errorcode,
103 const char *name,
const char *
type,
104 const char *domain,
void *
object)
110 bonjour->m_lock =
nullptr;
113 if (kDNSServiceErr_NoError != errorcode)
115 LOG(VB_GENERAL, LOG_ERR,
LOC + QString(
"Callback Error: %1")
120 LOG(VB_GENERAL, LOG_INFO,
LOC +
121 QString(
"Service registration complete: name '%1' type '%2' domain: '%3'")
122 .arg(QString::fromUtf8(name), QString::fromUtf8(
type),
123 QString::fromUtf8(domain)));
124 bonjour->m_name = name;
125 bonjour->m_type =
type;
129 LOG(VB_GENERAL, LOG_ERR,
LOC +
130 QString(
"BonjourCallback for unknown object."));
140 data.append(
"_rnd=");
142 data.append(rnd.toHex());
157 DNSServiceErrorType res =
165 if (kDNSServiceErr_NoError != res)
167 LOG(VB_GENERAL, LOG_ERR,
LOC +
168 QString(
"Error ReAnnounceService(%1): %2")
169 .arg(
m_name.data()).arg(res));
171 return kDNSServiceErr_NoError != res;
174#include "moc_bonjourregister.cpp"
QMutexLocker< QMutex > * m_lock
QByteArray RandomizeData(void)
QSocketNotifier * m_socket
BonjourRegister(QObject *parent=nullptr)
static void DNSSD_API BonjourCallback(DNSServiceRef ref, DNSServiceFlags flags, DNSServiceErrorType errorcode, const char *name, const char *type, const char *domain, void *object)
~BonjourRegister() override
bool ReAnnounceService(void)
bool Register(uint16_t port, const QByteArray &type, const QByteArray &name, const QByteArray &txt)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Convenience inline random number generator functions.
uint32_t MythRandom()
generate 32 random bits