forked from jbagg/QtZeroConf
Change browser protocol options so it can only be IPv4 or IPv6, not both.
This commit is contained in:
@ -97,7 +97,7 @@ public:
|
|||||||
break;
|
break;
|
||||||
case AVAHI_BROWSER_NEW:
|
case AVAHI_BROWSER_NEW:
|
||||||
if (!ref->resolvers.contains(key))
|
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;
|
break;
|
||||||
case AVAHI_BROWSER_REMOVE:
|
case AVAHI_BROWSER_REMOVE:
|
||||||
if (!ref->resolvers.contains(key))
|
if (!ref->resolvers.contains(key))
|
||||||
@ -166,10 +166,7 @@ public:
|
|||||||
char a[AVAHI_ADDRESS_STR_MAX];
|
char a[AVAHI_ADDRESS_STR_MAX];
|
||||||
avahi_address_snprint(a, sizeof(a), address);
|
avahi_address_snprint(a, sizeof(a), address);
|
||||||
QHostAddress addr(a);
|
QHostAddress addr(a);
|
||||||
if (protocol == AVAHI_PROTO_INET6)
|
zcs->setIp(addr);
|
||||||
zcs->setIpv6(addr);
|
|
||||||
else if (protocol == AVAHI_PROTO_INET)
|
|
||||||
zcs->setIp(addr);
|
|
||||||
|
|
||||||
if (newRecord)
|
if (newRecord)
|
||||||
emit ref->pub->serviceAdded(zcs);
|
emit ref->pub->serviceAdded(zcs);
|
||||||
@ -208,6 +205,7 @@ public:
|
|||||||
AvahiClient *client;
|
AvahiClient *client;
|
||||||
AvahiEntryGroup *group;
|
AvahiEntryGroup *group;
|
||||||
AvahiServiceBrowser *browser;
|
AvahiServiceBrowser *browser;
|
||||||
|
AvahiProtocol aProtocol;
|
||||||
QMap <QString, AvahiServiceResolver *> resolvers;
|
QMap <QString, AvahiServiceResolver *> resolvers;
|
||||||
AvahiStringList *txt;
|
AvahiStringList *txt;
|
||||||
};
|
};
|
||||||
@ -294,19 +292,19 @@ void QZeroConf::clearServiceTxtRecords()
|
|||||||
|
|
||||||
void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol protocol)
|
void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol protocol)
|
||||||
{
|
{
|
||||||
AvahiProtocol avahiProtocol;
|
|
||||||
|
|
||||||
if (pri->browser)
|
if (pri->browser)
|
||||||
emit error(QZeroConf::browserFailed);
|
emit error(QZeroConf::browserFailed);
|
||||||
|
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case QAbstractSocket::IPv4Protocol: avahiProtocol = AVAHI_PROTO_INET; break;
|
case QAbstractSocket::IPv4Protocol: pri->aProtocol = AVAHI_PROTO_INET; break;
|
||||||
case QAbstractSocket::IPv6Protocol: avahiProtocol = AVAHI_PROTO_INET6; break;
|
case QAbstractSocket::IPv6Protocol: pri->aProtocol = AVAHI_PROTO_INET6; break;
|
||||||
case QAbstractSocket::AnyIPProtocol: avahiProtocol = AVAHI_PROTO_UNSPEC; break;
|
default:
|
||||||
default: avahiProtocol = AVAHI_PROTO_INET; break;
|
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)
|
if (!pri->browser)
|
||||||
emit error(QZeroConf::browserFailed);
|
emit error(QZeroConf::browserFailed);
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ public:
|
|||||||
break;
|
break;
|
||||||
case AVAHI_BROWSER_NEW:
|
case AVAHI_BROWSER_NEW:
|
||||||
if (!ref->resolvers.contains(key))
|
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;
|
break;
|
||||||
case AVAHI_BROWSER_REMOVE:
|
case AVAHI_BROWSER_REMOVE:
|
||||||
if (!ref->resolvers.contains(key))
|
if (!ref->resolvers.contains(key))
|
||||||
@ -196,10 +196,7 @@ public:
|
|||||||
char a[AVAHI_ADDRESS_STR_MAX];
|
char a[AVAHI_ADDRESS_STR_MAX];
|
||||||
avahi_address_snprint(a, sizeof(a), address);
|
avahi_address_snprint(a, sizeof(a), address);
|
||||||
QHostAddress addr(a);
|
QHostAddress addr(a);
|
||||||
if (protocol == AVAHI_PROTO_INET6)
|
zcs->setIp(addr);
|
||||||
zcs->setIpv6(addr);
|
|
||||||
else if (protocol == AVAHI_PROTO_INET)
|
|
||||||
zcs->setIp(addr);
|
|
||||||
|
|
||||||
if (newRecord)
|
if (newRecord)
|
||||||
emit ref->pub->serviceAdded(zcs);
|
emit ref->pub->serviceAdded(zcs);
|
||||||
@ -265,6 +262,7 @@ public:
|
|||||||
AvahiServerConfig config;
|
AvahiServerConfig config;
|
||||||
AvahiSEntryGroup *group;
|
AvahiSEntryGroup *group;
|
||||||
AvahiSServiceBrowser *browser;
|
AvahiSServiceBrowser *browser;
|
||||||
|
AvahiProtocol aProtocol;
|
||||||
QMap <QString, AvahiSServiceResolver *> resolvers;
|
QMap <QString, AvahiSServiceResolver *> resolvers;
|
||||||
AvahiStringList *txt;
|
AvahiStringList *txt;
|
||||||
bool ready, registerWaiting;
|
bool ready, registerWaiting;
|
||||||
@ -347,19 +345,19 @@ void QZeroConf::clearServiceTxtRecords()
|
|||||||
|
|
||||||
void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol protocol)
|
void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol protocol)
|
||||||
{
|
{
|
||||||
AvahiProtocol avahiProtocol;
|
|
||||||
|
|
||||||
if (pri->browser)
|
if (pri->browser)
|
||||||
emit error(QZeroConf::browserFailed);
|
emit error(QZeroConf::browserFailed);
|
||||||
|
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case QAbstractSocket::IPv4Protocol: avahiProtocol = AVAHI_PROTO_INET; break;
|
case QAbstractSocket::IPv4Protocol: pri->aProtocol = AVAHI_PROTO_INET; break;
|
||||||
case QAbstractSocket::IPv6Protocol: avahiProtocol = AVAHI_PROTO_INET6; break;
|
case QAbstractSocket::IPv6Protocol: pri->aProtocol = AVAHI_PROTO_INET6; break;
|
||||||
case QAbstractSocket::AnyIPProtocol: avahiProtocol = AVAHI_PROTO_UNSPEC; break;
|
default:
|
||||||
default: avahiProtocol = AVAHI_PROTO_INET; break;
|
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)
|
if (!pri->browser)
|
||||||
emit error(QZeroConf::browserFailed);
|
emit error(QZeroConf::browserFailed);
|
||||||
}
|
}
|
||||||
|
11
bonjour.cpp
11
bonjour.cpp
@ -195,10 +195,7 @@ void DNSSD_API QZeroConfPrivate::addressReply(DNSServiceRef sdRef,
|
|||||||
if (err == kDNSServiceErr_NoError) {
|
if (err == kDNSServiceErr_NoError) {
|
||||||
if ((flags & kDNSServiceFlagsAdd) != 0) {
|
if ((flags & kDNSServiceFlagsAdd) != 0) {
|
||||||
QHostAddress hAddress(address);
|
QHostAddress hAddress(address);
|
||||||
if (hAddress.protocol() == QAbstractSocket::IPv6Protocol)
|
ref->work.head()->setIp(hAddress);
|
||||||
ref->work.head()->setIpv6(hAddress);
|
|
||||||
else
|
|
||||||
ref->work.head()->setIp(hAddress);
|
|
||||||
|
|
||||||
QString key = ref->work.head()->name() + QString::number(interfaceIndex);
|
QString key = ref->work.head()->name() + QString::number(interfaceIndex);
|
||||||
if (!ref->pub->services.contains(key)) {
|
if (!ref->pub->services.contains(key)) {
|
||||||
@ -349,8 +346,10 @@ void QZeroConf::startBrowser(QString type, QAbstractSocket::NetworkLayerProtocol
|
|||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case QAbstractSocket::IPv4Protocol: pri->protocol = kDNSServiceProtocol_IPv4; break;
|
case QAbstractSocket::IPv4Protocol: pri->protocol = kDNSServiceProtocol_IPv4; break;
|
||||||
case QAbstractSocket::IPv6Protocol: pri->protocol = kDNSServiceProtocol_IPv6; break;
|
case QAbstractSocket::IPv6Protocol: pri->protocol = kDNSServiceProtocol_IPv6; break;
|
||||||
case QAbstractSocket::AnyIPProtocol: pri->protocol = kDNSServiceProtocol_IPv4 | kDNSServiceProtocol_IPv6; break;
|
default:
|
||||||
default: pri->protocol = kDNSServiceProtocol_IPv4; break;
|
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);
|
err = DNSServiceBrowse(&pri->browser, 0, 0, type.toUtf8(), 0, (DNSServiceBrowseReply) QZeroConfPrivate::browseCallback, pri);
|
||||||
|
@ -28,11 +28,6 @@ public:
|
|||||||
QMutexLocker locker(&m_lock);
|
QMutexLocker locker(&m_lock);
|
||||||
return m_ip;
|
return m_ip;
|
||||||
}
|
}
|
||||||
QHostAddress ipv6()
|
|
||||||
{
|
|
||||||
QMutexLocker locker(&m_lock);
|
|
||||||
return m_ipv6;
|
|
||||||
}
|
|
||||||
inline quint32 interfaceIndex() const {return m_interfaceIndex;}
|
inline quint32 interfaceIndex() const {return m_interfaceIndex;}
|
||||||
quint16 port() const {return m_port;}
|
quint16 port() const {return m_port;}
|
||||||
QMap <QByteArray, QByteArray> txt() const {return m_txt;}
|
QMap <QByteArray, QByteArray> txt() const {return m_txt;}
|
||||||
@ -43,17 +38,11 @@ private:
|
|||||||
QMutexLocker locker(&m_lock);
|
QMutexLocker locker(&m_lock);
|
||||||
m_ip = ip;
|
m_ip = ip;
|
||||||
}
|
}
|
||||||
void setIpv6(const QHostAddress &ipv6)
|
|
||||||
{
|
|
||||||
QMutexLocker locker(&m_lock);
|
|
||||||
m_ipv6 = ipv6;
|
|
||||||
}
|
|
||||||
QString m_name;
|
QString m_name;
|
||||||
QString m_type;
|
QString m_type;
|
||||||
QString m_domain;
|
QString m_domain;
|
||||||
QString m_host;
|
QString m_host;
|
||||||
QHostAddress m_ip;
|
QHostAddress m_ip;
|
||||||
QHostAddress m_ipv6;
|
|
||||||
quint32 m_interfaceIndex;
|
quint32 m_interfaceIndex;
|
||||||
quint16 m_port;
|
quint16 m_port;
|
||||||
QMap <QByteArray, QByteArray> m_txt;
|
QMap <QByteArray, QByteArray> m_txt;
|
||||||
|
Reference in New Issue
Block a user