diff --git a/src/libs/zeroconf/servicebrowser.cpp b/src/libs/zeroconf/servicebrowser.cpp
index dc0657bae4e..a8693520526 100644
--- a/src/libs/zeroconf/servicebrowser.cpp
+++ b/src/libs/zeroconf/servicebrowser.cpp
@@ -298,6 +298,41 @@ QNetworkInterface Service::networkInterface() const
return QNetworkInterface::interfaceFromIndex(m_interfaceNr);
}
+QStringList Service::addresses(Service::AddressStyle style) const
+{
+ QStringList res;
+ if (host() == 0)
+ return res;
+ foreach (const QHostAddress &addr, host()->addresses()){
+ QString addrStr;
+ if (addr.protocol() == QAbstractSocket::IPv6Protocol) {
+ // Add the interface to use to the address
%
+ //
+ // This is required only for link local addresses (like fe80:*)
+ // but as we have it we do it (and most likely addresses here are
+ // link local).
+ //
+ // on windows only addresses like fe80::42%22 work
+ // on OSX 10.5 only things like fe80::42%en4 work
+ // on later OSX versions and linux both %
+ // and % work, we use the interface name as
+ // it looks better
+#ifdef Q_OS_WIN
+ QString interfaceStr = QString::number(networkInterface().index());
+#else
+ QString interfaceStr = networkInterface().name();
+#endif
+ addrStr = QString::fromLatin1("%1%%2").arg(addr.toString()).arg(interfaceStr);
+ if (style == QuoteIPv6Adresses)
+ addrStr = QString::fromLatin1("[%1]").arg(addrStr);
+ } else {
+ addrStr = addr.toString();
+ }
+ res.append(addrStr);
+ }
+ return res;
+}
+
bool Service::operator==(const Service &o) const {
bool eq = m_fullName == o.m_fullName
&& m_name == o.m_name && m_type == o.m_type
diff --git a/src/libs/zeroconf/servicebrowser.h b/src/libs/zeroconf/servicebrowser.h
index 36667a4f342..f705a473f37 100644
--- a/src/libs/zeroconf/servicebrowser.h
+++ b/src/libs/zeroconf/servicebrowser.h
@@ -94,6 +94,12 @@ public:
typedef QSharedPointer ConstPtr;
typedef QSharedPointer Ptr;
+ enum AddressStyle
+ {
+ PlainAddresses,
+ QuoteIPv6Adresses
+ };
+
Service(const Service &o);
Service();
~Service();
@@ -109,6 +115,7 @@ public:
const QHostInfo *host() const { return m_host; }
int interfaceNr() const { return m_interfaceNr; }
QNetworkInterface networkInterface() const;
+ QStringList addresses(AddressStyle style = PlainAddresses) const;
bool operator==(const Service &o) const;
bool invalidate() { bool res = m_outdated; m_outdated = true; return res; }