From c286fcd2c090b2b9bace0874b0e42e7084d15b4d Mon Sep 17 00:00:00 2001 From: Jonathan Bagg Date: Tue, 5 Mar 2019 21:26:41 -0500 Subject: [PATCH] Change browser protocol options so it can only be IPv4 or IPv6, not both. --- avahiclient.cpp | 22 ++++++++++------------ avahicore.cpp | 22 ++++++++++------------ bonjour.cpp | 11 +++++------ qzeroconfservice.h | 11 ----------- 4 files changed, 25 insertions(+), 41 deletions(-) diff --git a/avahiclient.cpp b/avahiclient.cpp index 3b32e2b..81d5436 100644 --- a/avahiclient.cpp +++ b/avahiclient.cpp @@ -97,7 +97,7 @@ public: break; case AVAHI_BROWSER_NEW: if (!ref->resolvers.contains(key)) - ref->resolvers.insert(key, avahi_service_resolver_new(ref->client, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, AVAHI_LOOKUP_USE_MULTICAST, resolveCallback, ref)); + ref->resolvers.insert(key, avahi_service_resolver_new(ref->client, interface, protocol, name, type, domain, ref->aProtocol, AVAHI_LOOKUP_USE_MULTICAST, resolveCallback, ref)); break; case AVAHI_BROWSER_REMOVE: if (!ref->resolvers.contains(key)) @@ -166,10 +166,7 @@ public: char a[AVAHI_ADDRESS_STR_MAX]; avahi_address_snprint(a, sizeof(a), address); QHostAddress addr(a); - if (protocol == AVAHI_PROTO_INET6) - zcs->setIpv6(addr); - else if (protocol == AVAHI_PROTO_INET) - zcs->setIp(addr); + zcs->setIp(addr); if (newRecord) emit ref->pub->serviceAdded(zcs); @@ -208,6 +205,7 @@ public: AvahiClient *client; AvahiEntryGroup *group; AvahiServiceBrowser *browser; + AvahiProtocol aProtocol; QMap resolvers; AvahiStringList *txt; }; @@ -294,19 +292,19 @@ void QZeroConf::clearServiceTxtRecords() void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol protocol) { - AvahiProtocol avahiProtocol; - if (pri->browser) emit error(QZeroConf::browserFailed); switch (protocol) { - case QAbstractSocket::IPv4Protocol: avahiProtocol = AVAHI_PROTO_INET; break; - case QAbstractSocket::IPv6Protocol: avahiProtocol = AVAHI_PROTO_INET6; break; - case QAbstractSocket::AnyIPProtocol: avahiProtocol = AVAHI_PROTO_UNSPEC; break; - default: avahiProtocol = AVAHI_PROTO_INET; break; + case QAbstractSocket::IPv4Protocol: pri->aProtocol = AVAHI_PROTO_INET; break; + case QAbstractSocket::IPv6Protocol: pri->aProtocol = AVAHI_PROTO_INET6; break; + default: + qDebug("QZeroConf::startBrowser() - unsupported protocol, using IPv4"); + pri->aProtocol = AVAHI_PROTO_INET; + break; }; - pri->browser = avahi_service_browser_new(pri->client, AVAHI_IF_UNSPEC, avahiProtocol, type.toUtf8(), NULL, AVAHI_LOOKUP_USE_MULTICAST, QZeroConfPrivate::browseCallback, pri); + pri->browser = avahi_service_browser_new(pri->client, AVAHI_IF_UNSPEC, pri->aProtocol, type.toUtf8(), NULL, AVAHI_LOOKUP_USE_MULTICAST, QZeroConfPrivate::browseCallback, pri); if (!pri->browser) emit error(QZeroConf::browserFailed); } diff --git a/avahicore.cpp b/avahicore.cpp index c02579e..3f47013 100644 --- a/avahicore.cpp +++ b/avahicore.cpp @@ -128,7 +128,7 @@ public: break; case AVAHI_BROWSER_NEW: if (!ref->resolvers.contains(key)) - ref->resolvers.insert(key, avahi_s_service_resolver_new(ref->server, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, AVAHI_LOOKUP_USE_MULTICAST, resolveCallback, ref)); + ref->resolvers.insert(key, avahi_s_service_resolver_new(ref->server, interface, protocol, name, type, domain, ref->aProtocol, AVAHI_LOOKUP_USE_MULTICAST, resolveCallback, ref)); break; case AVAHI_BROWSER_REMOVE: if (!ref->resolvers.contains(key)) @@ -196,10 +196,7 @@ public: char a[AVAHI_ADDRESS_STR_MAX]; avahi_address_snprint(a, sizeof(a), address); QHostAddress addr(a); - if (protocol == AVAHI_PROTO_INET6) - zcs->setIpv6(addr); - else if (protocol == AVAHI_PROTO_INET) - zcs->setIp(addr); + zcs->setIp(addr); if (newRecord) emit ref->pub->serviceAdded(zcs); @@ -265,6 +262,7 @@ public: AvahiServerConfig config; AvahiSEntryGroup *group; AvahiSServiceBrowser *browser; + AvahiProtocol aProtocol; QMap resolvers; AvahiStringList *txt; bool ready, registerWaiting; @@ -347,19 +345,19 @@ void QZeroConf::clearServiceTxtRecords() void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol protocol) { - AvahiProtocol avahiProtocol; - if (pri->browser) emit error(QZeroConf::browserFailed); switch (protocol) { - case QAbstractSocket::IPv4Protocol: avahiProtocol = AVAHI_PROTO_INET; break; - case QAbstractSocket::IPv6Protocol: avahiProtocol = AVAHI_PROTO_INET6; break; - case QAbstractSocket::AnyIPProtocol: avahiProtocol = AVAHI_PROTO_UNSPEC; break; - default: avahiProtocol = AVAHI_PROTO_INET; break; + case QAbstractSocket::IPv4Protocol: pri->aProtocol = AVAHI_PROTO_INET; break; + case QAbstractSocket::IPv6Protocol: pri->aProtocol = AVAHI_PROTO_INET6; break; + default: + qDebug("QZeroConf::startBrowser() - unsupported protocol, using IPv4"); + pri->aProtocol = AVAHI_PROTO_INET; + break; }; - pri->browser = avahi_s_service_browser_new(pri->server, AVAHI_IF_UNSPEC, avahiProtocol, type.toUtf8(), NULL, AVAHI_LOOKUP_USE_MULTICAST, QZeroConfPrivate::browseCallback, pri); + pri->browser = avahi_s_service_browser_new(pri->server, AVAHI_IF_UNSPEC, pri->aProtocol, type.toUtf8(), NULL, AVAHI_LOOKUP_USE_MULTICAST, QZeroConfPrivate::browseCallback, pri); if (!pri->browser) emit error(QZeroConf::browserFailed); } diff --git a/bonjour.cpp b/bonjour.cpp index 548ea4b..bce2b8a 100644 --- a/bonjour.cpp +++ b/bonjour.cpp @@ -195,10 +195,7 @@ void DNSSD_API QZeroConfPrivate::addressReply(DNSServiceRef sdRef, if (err == kDNSServiceErr_NoError) { if ((flags & kDNSServiceFlagsAdd) != 0) { QHostAddress hAddress(address); - if (hAddress.protocol() == QAbstractSocket::IPv6Protocol) - ref->work.head()->setIpv6(hAddress); - else - ref->work.head()->setIp(hAddress); + ref->work.head()->setIp(hAddress); QString key = ref->work.head()->name() + QString::number(interfaceIndex); if (!ref->pub->services.contains(key)) { @@ -349,8 +346,10 @@ void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol switch (protocol) { case QAbstractSocket::IPv4Protocol: pri->protocol = kDNSServiceProtocol_IPv4; break; case QAbstractSocket::IPv6Protocol: pri->protocol = kDNSServiceProtocol_IPv6; break; - case QAbstractSocket::AnyIPProtocol: pri->protocol = kDNSServiceProtocol_IPv4 | kDNSServiceProtocol_IPv6; break; - default: pri->protocol = kDNSServiceProtocol_IPv4; break; + default: + qDebug("QZeroConf::startBrowser() - unsupported protocol, using IPv4"); + pri->protocol = kDNSServiceProtocol_IPv4; + break; }; err = DNSServiceBrowse(&pri->browser, 0, 0, type.toUtf8(), 0, (DNSServiceBrowseReply) QZeroConfPrivate::browseCallback, pri); diff --git a/qzeroconfservice.h b/qzeroconfservice.h index 5a5792f..c855e60 100644 --- a/qzeroconfservice.h +++ b/qzeroconfservice.h @@ -28,11 +28,6 @@ public: QMutexLocker locker(&m_lock); return m_ip; } - QHostAddress ipv6() - { - QMutexLocker locker(&m_lock); - return m_ipv6; - } inline quint32 interfaceIndex() const {return m_interfaceIndex;} quint16 port() const {return m_port;} QMap txt() const {return m_txt;} @@ -43,17 +38,11 @@ private: QMutexLocker locker(&m_lock); m_ip = ip; } - void setIpv6(const QHostAddress &ipv6) - { - QMutexLocker locker(&m_lock); - m_ipv6 = ipv6; - } QString m_name; QString m_type; QString m_domain; QString m_host; QHostAddress m_ip; - QHostAddress m_ipv6; quint32 m_interfaceIndex; quint16 m_port; QMap m_txt;