return qMakePair(QHostAddress(addr), netmask);
}
+/*!
+ \since 5.0
+
+ returns true if the address is the IPv6 loopback address, or any
+ of the IPv4 loopback addresses.
+*/
+bool QHostAddress::isLoopback() const
+{
+ QT_ENSURE_PARSED(this);
+ if ((d->a & 0xFF000000) == 0x7F000000)
+ return true; // v4 range (including IPv6 wrapped IPv4 addresses)
+ if (d->protocol == QAbstractSocket::IPv6Protocol) {
+ if (d->a6.c[15] != 1)
+ return false;
+ for (int i = 0; i < 15; i++)
+ if (d->a6[i] != 0)
+ return false;
+ return true;
+ }
+ return false;
+}
+
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug d, const QHostAddress &address)
{
void parseSubnet();
void isInSubnet_data();
void isInSubnet();
+ void isLoopback_data();
+ void isLoopback();
};
QT_BEGIN_NAMESPACE
QTEST(address.isInSubnet(prefix, prefixLength), "result");
}
+void tst_QHostAddress::isLoopback_data()
+{
+ QTest::addColumn<QHostAddress>("address");
+ QTest::addColumn<bool>("result");
+
+ QTest::newRow("ipv6_loop") << QHostAddress(QHostAddress::LocalHostIPv6) << true;
+ QTest::newRow("::1") << QHostAddress("::1") << true;
+
+ QTest::newRow("ipv4_loop") << QHostAddress(QHostAddress::LocalHost) << true;
+ QTest::newRow("127.0.0.1") << QHostAddress("127.0.0.1") << true;
+ QTest::newRow("127.0.0.2") << QHostAddress("127.0.0.2") << true;
+ QTest::newRow("127.3.2.1") << QHostAddress("127.3.2.1") << true;
+
+ QTest::newRow("default") << QHostAddress() << false;
+ QTest::newRow("1.2.3.4") << QHostAddress("1.2.3.4") << false;
+ QTest::newRow("10.0.0.4") << QHostAddress("10.0.0.4") << false;
+ QTest::newRow("192.168.3.4") << QHostAddress("192.168.3.4") << false;
+
+ QTest::newRow("::") << QHostAddress("::") << false;
+ QTest::newRow("Any") << QHostAddress(QHostAddress::Any) << false;
+ QTest::newRow("AnyIPv4") << QHostAddress(QHostAddress::AnyIPv4) << false;
+ QTest::newRow("AnyIPv6") << QHostAddress(QHostAddress::AnyIPv6) << false;
+ QTest::newRow("Broadcast") << QHostAddress(QHostAddress::Broadcast) << false;
+ QTest::newRow("Null") << QHostAddress(QHostAddress::Null) << false;
+
+ QTest::newRow("::ffff:127.0.0.1") << QHostAddress("::ffff:127.0.0.1") << true;
+ QTest::newRow("::ffff:127.0.0.2") << QHostAddress("::ffff:127.0.0.2") << true;
+ QTest::newRow("::ffff:127.3.2.1") << QHostAddress("::ffff:127.3.2.1") << true;
+}
+
+void tst_QHostAddress::isLoopback()
+{
+ QFETCH(QHostAddress, address);
+ QFETCH(bool, result);
+
+ QCOMPARE(address.isLoopback(), result);
+}
+
QTEST_MAIN(tst_QHostAddress)
#include "tst_qhostaddress.moc"