- Fix broken implementation of WinDivertHelperParseIPv6Address().
- Fix IPv6 address word/byte ordering between DLL and SYS.
This commit is contained in:
@@ -52,6 +52,9 @@ WinDivert 1.1.6
|
||||
- WinDivert now searches for the driver files in the application's
|
||||
directory (as opposed to the current directory).
|
||||
WinDivert 1.1.7
|
||||
- Fixed incorrect IPV6 TCP/UDP checksum calculation in
|
||||
WinDivertHelperCalcChecksums().
|
||||
- Driver now calculates checksums for IPV6 packets.
|
||||
- Improved IPv6 support:
|
||||
* Fixed incorrect IPV6 TCP/UDP checksum calculation in
|
||||
WinDivertHelperCalcChecksums().
|
||||
* WinDivert driver now calculates checksums for IPV6 packets.
|
||||
* WinDivert can now handle IPV6 extension headers.
|
||||
* Fixed WinDivertHelperParseIPv6Address().
|
||||
|
||||
+4
-3
@@ -1891,11 +1891,11 @@ extern BOOL WinDivertHelperParseIPv6Address(const char *str, UINT32 *addr_ptr)
|
||||
WinDivertAToX(part_str, NULL, &part);
|
||||
if (!end)
|
||||
{
|
||||
addr[i] = (UINT16)ntohs(part);
|
||||
addr[i] = (UINT16)part;
|
||||
}
|
||||
else
|
||||
{
|
||||
addr[j--] = (UINT16)ntohs(part);
|
||||
addr[j--] = (UINT16)part;
|
||||
}
|
||||
if (*str == '\0')
|
||||
{
|
||||
@@ -1933,7 +1933,8 @@ extern BOOL WinDivertHelperParseIPv6Address(const char *str, UINT32 *addr_ptr)
|
||||
{
|
||||
for (i = 0; i < sizeof(addr) / sizeof(UINT32); i++)
|
||||
{
|
||||
addr_ptr[i] = addr[i];
|
||||
addr_ptr[i] = (UINT32)addr[2 * i + 1] |
|
||||
(UINT32)addr[2 * i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -3049,23 +3049,23 @@ static BOOL windivert_filter(PNET_BUFFER buffer, UINT32 if_idx,
|
||||
break;
|
||||
case WINDIVERT_FILTER_FIELD_IPV6_SRCADDR:
|
||||
field[0] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->SrcAddr[3]);
|
||||
field[1] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->SrcAddr[2]);
|
||||
field[2] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->SrcAddr[1]);
|
||||
field[3] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->SrcAddr[0]);
|
||||
field[1] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->SrcAddr[1]);
|
||||
field[2] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->SrcAddr[2]);
|
||||
field[3] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->SrcAddr[3]);
|
||||
break;
|
||||
case WINDIVERT_FILTER_FIELD_IPV6_DSTADDR:
|
||||
field[0] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->DstAddr[3]);
|
||||
field[1] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->DstAddr[2]);
|
||||
field[2] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->DstAddr[1]);
|
||||
field[3] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->DstAddr[0]);
|
||||
field[1] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->DstAddr[1]);
|
||||
field[2] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->DstAddr[2]);
|
||||
field[3] =
|
||||
(UINT32)RtlUlongByteSwap(ipv6_header->DstAddr[3]);
|
||||
break;
|
||||
case WINDIVERT_FILTER_FIELD_ICMP_TYPE:
|
||||
field[0] = (UINT32)icmp_header->Type;
|
||||
|
||||
Reference in New Issue
Block a user