aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppStun.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/base/QXmppStun.cpp b/src/base/QXmppStun.cpp
index d41231ac..b8313881 100644
--- a/src/base/QXmppStun.cpp
+++ b/src/base/QXmppStun.cpp
@@ -118,6 +118,11 @@ static bool isIPv6LinkLocalAddress(const QHostAddress &addr)
return (((ipv6addr[0] << 8) + ipv6addr[1]) & 0xffc0) == 0xfe80;
}
+static bool isLoopbackAddress(const QHostAddress &addr)
+{
+ return (addr.toIPv4Address() & 0xff000000) == 0x7f000000;
+}
+
static bool decodeAddress(QDataStream &stream, quint16 a_length, QHostAddress &address, quint16 &port, const QByteArray &xorId = QByteArray())
{
if (a_length < 4)
@@ -2427,6 +2432,11 @@ QList<QHostAddress> QXmppIceComponent::discoverAddresses()
entry.netmask().isNull())
continue;
+ // FIXME: for some reason we can have loopback addresses
+ // even if the interface does not have the loopback flag
+ if (isLoopbackAddress(ip))
+ continue;
+
// FIXME: for now skip IPv6 link-local addresses, seems to upset
// clients such as empathy
if (isIPv6LinkLocalAddress(ip)) {