Skip to content

Commit 63b74d4

Browse files
committed
make NetworkInterface working under XP
on >= Vista NetworkInterface works, but if you try under XP you have ifIndex always not setted: if you compile with XP SP1 defines you get code working on >=XP
1 parent 9bf743d commit 63b74d4

1 file changed

Lines changed: 32 additions & 8 deletions

File tree

Net/src/NetworkInterface.cpp

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,12 +1097,22 @@ NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly)
10971097
ifIndex = pAddress->Ipv6IfIndex;
10981098
#elif (_WIN32_WINNT >= 0x0501) && (NTDDI_VERSION >= 0x05010100) // Win XP SP1
10991099
#if defined (IP_ADAPTER_IPV6_ENABLED) // Vista
1100-
if ((pAddress->Flags & IP_ADAPTER_IPV6_ENABLED) &&
1101-
(osvi.dwMajorVersion >= 5) &&
1102-
(osvi.dwMinorVersion >= 1) &&
1103-
(osvi.dwBuildNumber >=1))
1100+
if(osvi.dwMajorVersion>=6)//vista
11041101
{
1105-
ifIndex = pAddress->Ipv6IfIndex;
1102+
if ((pAddress->Flags & IP_ADAPTER_IPV6_ENABLED) &&
1103+
(osvi.dwMajorVersion >= 5) &&
1104+
(osvi.dwMinorVersion >= 1) &&
1105+
(osvi.dwBuildNumber >=1))
1106+
{
1107+
ifIndex = pAddress->Ipv6IfIndex;
1108+
}
1109+
}
1110+
else if ((osvi.dwMajorVersion >= 5) &&
1111+
(osvi.dwMinorVersion >= 1) &&
1112+
(osvi.dwBuildNumber >= 1))
1113+
{
1114+
ifIndex = pAddress->Ipv6IfIndex;
1115+
}
11061116
}
11071117
#else // !defined(IP_ADAPTER_IPV6_ENABLED)
11081118
if ((osvi.dwMajorVersion >= 5) &&
@@ -1116,7 +1126,14 @@ NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly)
11161126
#endif // POCO_HAVE_IPv6
11171127

11181128
#if defined (IP_ADAPTER_IPV4_ENABLED)
1119-
if (pAddress->Flags & IP_ADAPTER_IPV4_ENABLED)
1129+
if(osvi.dwMajorVersion>=6)
1130+
{//vista
1131+
if (pAddress->Flags & IP_ADAPTER_IPV4_ENABLED)
1132+
{
1133+
ifIndex = pAddress->IfIndex;
1134+
}
1135+
}
1136+
else
11201137
{
11211138
ifIndex = pAddress->IfIndex;
11221139
}
@@ -1205,8 +1222,15 @@ NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly)
12051222
#elif (_WIN32_WINNT >= 0x0501) && (NTDDI_VERSION >= 0x05010100) // Win XP SP1
12061223
ULONG prefixLength = 0;
12071224
#if (_WIN32_WINNT >= 0x0600) // Vista and newer
1208-
prefixLength = pUniAddr->OnLinkPrefixLength;
1209-
broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address);
1225+
if (osvi.dwMajorVersion >= 6)
1226+
{
1227+
prefixLength = pUniAddr->OnLinkPrefixLength;
1228+
broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address);
1229+
}
1230+
else
1231+
{
1232+
broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address, &prefixLength);
1233+
}
12101234
#else
12111235
broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address, &prefixLength);
12121236
#endif

0 commit comments

Comments
 (0)