QNetworkInterface: complete removing pre-Vista support
Commit 2589111dc0
removed the dynamic
function search, but did not remove the offsetof checks.
Change-Id: Ibd2b5263f7de551f47fe137dbe1a1b7b7cd71934
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
parent
bad4205250
commit
59e0b6d40c
@ -142,7 +142,7 @@ static QHash<QHostAddress, QHostAddress> ipv4Netmasks()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static QList<QNetworkInterfacePrivate *> interfaceListingWinXP()
|
static QList<QNetworkInterfacePrivate *> interfaceListing()
|
||||||
{
|
{
|
||||||
QList<QNetworkInterfacePrivate *> interfaces;
|
QList<QNetworkInterfacePrivate *> interfaces;
|
||||||
IP_ADAPTER_ADDRESSES staticBuf[2]; // 2 is arbitrary
|
IP_ADAPTER_ADDRESSES staticBuf[2]; // 2 is arbitrary
|
||||||
@ -171,11 +171,18 @@ static QList<QNetworkInterfacePrivate *> interfaceListingWinXP()
|
|||||||
|
|
||||||
// iterate over the list and add the entries to our listing
|
// iterate over the list and add the entries to our listing
|
||||||
for (PIP_ADAPTER_ADDRESSES ptr = pAdapter; ptr; ptr = ptr->Next) {
|
for (PIP_ADAPTER_ADDRESSES ptr = pAdapter; ptr; ptr = ptr->Next) {
|
||||||
|
// the structure grows over time, so let's make sure the fields
|
||||||
|
// introduced in Windows Vista are present (Luid is the furthest
|
||||||
|
// field we access from IP_ADAPTER_ADDRESSES_LH)
|
||||||
|
Q_ASSERT(ptr->Length >= offsetof(IP_ADAPTER_ADDRESSES, Luid));
|
||||||
|
Q_ASSERT(ptr->Length >= offsetof(IP_ADAPTER_ADDRESSES, Ipv6IfIndex));
|
||||||
|
Q_ASSERT(ptr->Length >= offsetof(IP_ADAPTER_ADDRESSES, FirstPrefix));
|
||||||
|
|
||||||
QNetworkInterfacePrivate *iface = new QNetworkInterfacePrivate;
|
QNetworkInterfacePrivate *iface = new QNetworkInterfacePrivate;
|
||||||
interfaces << iface;
|
interfaces << iface;
|
||||||
|
|
||||||
iface->index = 0;
|
iface->index = 0;
|
||||||
if (ptr->Length >= offsetof(IP_ADAPTER_ADDRESSES, Ipv6IfIndex) && ptr->Ipv6IfIndex != 0)
|
if (ptr->Ipv6IfIndex != 0)
|
||||||
iface->index = ptr->Ipv6IfIndex;
|
iface->index = ptr->Ipv6IfIndex;
|
||||||
else if (ptr->IfIndex != 0)
|
else if (ptr->IfIndex != 0)
|
||||||
iface->index = ptr->IfIndex;
|
iface->index = ptr->IfIndex;
|
||||||
@ -188,13 +195,11 @@ static QList<QNetworkInterfacePrivate *> interfaceListingWinXP()
|
|||||||
if (ptr->IfType == IF_TYPE_PPP)
|
if (ptr->IfType == IF_TYPE_PPP)
|
||||||
iface->flags |= QNetworkInterface::IsPointToPoint;
|
iface->flags |= QNetworkInterface::IsPointToPoint;
|
||||||
|
|
||||||
if (ptr->Length >= offsetof(IP_ADAPTER_ADDRESSES, Luid)) {
|
// use ConvertInterfaceLuidToNameW because that returns a friendlier name, though not
|
||||||
// use ConvertInterfaceLuidToNameW because that returns a friendlier name, though not
|
// as "friendly" as FriendlyName below
|
||||||
// as friendly as FriendlyName below
|
WCHAR buf[IF_MAX_STRING_SIZE + 1];
|
||||||
WCHAR buf[IF_MAX_STRING_SIZE + 1];
|
if (ConvertInterfaceLuidToNameW(&ptr->Luid, buf, sizeof(buf)/sizeof(buf[0])) == NO_ERROR)
|
||||||
if (ConvertInterfaceLuidToNameW(&ptr->Luid, buf, sizeof(buf)/sizeof(buf[0])) == NO_ERROR)
|
iface->name = QString::fromWCharArray(buf);
|
||||||
iface->name = QString::fromWCharArray(buf);
|
|
||||||
}
|
|
||||||
if (iface->name.isEmpty())
|
if (iface->name.isEmpty())
|
||||||
iface->name = QString::fromLocal8Bit(ptr->AdapterName);
|
iface->name = QString::fromLocal8Bit(ptr->AdapterName);
|
||||||
|
|
||||||
@ -213,8 +218,7 @@ static QList<QNetworkInterfacePrivate *> interfaceListingWinXP()
|
|||||||
// the iteration at the last Prefix entry and assume that it applies to all addresses
|
// the iteration at the last Prefix entry and assume that it applies to all addresses
|
||||||
// from that point on.
|
// from that point on.
|
||||||
PIP_ADAPTER_PREFIX pprefix = 0;
|
PIP_ADAPTER_PREFIX pprefix = 0;
|
||||||
if (ptr->Length >= offsetof(IP_ADAPTER_ADDRESSES, FirstPrefix))
|
pprefix = ptr->FirstPrefix;
|
||||||
pprefix = ptr->FirstPrefix;
|
|
||||||
for (PIP_ADAPTER_UNICAST_ADDRESS addr = ptr->FirstUnicastAddress; addr; addr = addr->Next) {
|
for (PIP_ADAPTER_UNICAST_ADDRESS addr = ptr->FirstUnicastAddress; addr; addr = addr->Next) {
|
||||||
QNetworkAddressEntry entry;
|
QNetworkAddressEntry entry;
|
||||||
entry.setIp(addressFromSockaddr(addr->Address.lpSockaddr));
|
entry.setIp(addressFromSockaddr(addr->Address.lpSockaddr));
|
||||||
@ -240,7 +244,7 @@ static QList<QNetworkInterfacePrivate *> interfaceListingWinXP()
|
|||||||
|
|
||||||
QList<QNetworkInterfacePrivate *> QNetworkInterfaceManager::scan()
|
QList<QNetworkInterfacePrivate *> QNetworkInterfaceManager::scan()
|
||||||
{
|
{
|
||||||
return interfaceListingWinXP();
|
return interfaceListing();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QHostInfo::localDomainName()
|
QString QHostInfo::localDomainName()
|
||||||
|
Loading…
Reference in New Issue
Block a user