Add optional parameter for binding service to specific interface

This commit is contained in:
Brian Kendall
2022-10-28 13:12:56 -04:00
parent 29be12c558
commit 16b50c700f
3 changed files with 12 additions and 8 deletions

View File

@ -72,7 +72,7 @@ public:
ref->ready = 1; ref->ready = 1;
if (ref->registerWaiting) { if (ref->registerWaiting) {
ref->registerWaiting = 0; ref->registerWaiting = 0;
ref->registerService(ref->name.toUtf8(), ref->type.toUtf8(), ref->domain.toUtf8(), ref->port); ref->registerService(ref->name.toUtf8(), ref->type.toUtf8(), ref->domain.toUtf8(), ref->port, 0);
} }
break; break;
case AVAHI_SERVER_COLLISION: case AVAHI_SERVER_COLLISION:
@ -230,7 +230,7 @@ public:
resolvers.clear(); resolvers.clear();
} }
void registerService(const char *name, const char *type, const char *domain, quint16 port) void registerService(const char *name, const char *type, const char *domain, quint16 port, quint32 interface)
{ {
qint32 ret; qint32 ret;
group = avahi_s_entry_group_new(server, QZeroConfPrivate::groupCallback, this); group = avahi_s_entry_group_new(server, QZeroConfPrivate::groupCallback, this);
@ -239,7 +239,11 @@ public:
return; return;
} }
ret = avahi_server_add_service_strlst(server, group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, AVAHI_PUBLISH_UPDATE, name, type, domain, NULL, port, txt); if (interface <= 0) {
interface = AVAHI_IF_UNSPEC;
}
ret = avahi_server_add_service_strlst(server, group, interface, AVAHI_PROTO_UNSPEC, AVAHI_PUBLISH_UPDATE, name, type, domain, NULL, port, txt);
if (ret < 0) { if (ret < 0) {
avahi_s_entry_group_free(group); avahi_s_entry_group_free(group);
group = NULL; group = NULL;
@ -290,14 +294,14 @@ QZeroConf::~QZeroConf()
delete pri; delete pri;
} }
void QZeroConf::startServicePublish(const char *name, const char *type, const char *domain, quint16 port) void QZeroConf::startServicePublish(const char *name, const char *type, const char *domain, quint16 port, quint32 interface)
{ {
if (pri->group) { if (pri->group) {
emit error(QZeroConf::serviceRegistrationFailed); emit error(QZeroConf::serviceRegistrationFailed);
return; return;
} }
if (pri->ready) if (pri->ready)
pri->registerService(name, type, domain, port); pri->registerService(name, type, domain, port, interface);
else { else {
pri->registerWaiting = 1; pri->registerWaiting = 1;
pri->name = name; pri->name = name;

View File

@ -268,7 +268,7 @@ QZeroConf::~QZeroConf()
delete pri; delete pri;
} }
void QZeroConf::startServicePublish(const char *name, const char *type, const char *domain, quint16 port) void QZeroConf::startServicePublish(const char *name, const char *type, const char *domain, quint16 port, quint32 interface)
{ {
DNSServiceErrorType err; DNSServiceErrorType err;
@ -277,7 +277,7 @@ void QZeroConf::startServicePublish(const char *name, const char *type, const ch
return; return;
} }
err = DNSServiceRegister(&pri->dnssRef, 0, 0, err = DNSServiceRegister(&pri->dnssRef, 0, interface,
name, name,
type, type,
domain, domain,

View File

@ -50,7 +50,7 @@ public:
}; };
QZeroConf(QObject *parent = Q_NULLPTR); QZeroConf(QObject *parent = Q_NULLPTR);
~QZeroConf(); ~QZeroConf();
void startServicePublish(const char *name, const char *type, const char *domain, quint16 port); void startServicePublish(const char *name, const char *type, const char *domain, quint16 port, quint32 interface = 0);
void stopServicePublish(void); void stopServicePublish(void);
bool publishExists(void); bool publishExists(void);
inline void startBrowser(QString type) inline void startBrowser(QString type)