Added ICMPv6 support to Windows.
This commit is contained in:
@@ -39,9 +39,11 @@ namespace ehs
|
||||
|
||||
BaseICMP &operator=(const BaseICMP &icmp);
|
||||
|
||||
virtual UInt_64 Send(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
|
||||
virtual void Release();
|
||||
|
||||
virtual UInt_64 Receive(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data);
|
||||
UInt_64 Send(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
|
||||
|
||||
UInt_64 Receive(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data);
|
||||
|
||||
void SendEchoRequest(const Str_8 &address, ICMP_EchoRequest er, const Byte *data, UInt_64 size);
|
||||
|
||||
@@ -53,5 +55,14 @@ namespace ehs
|
||||
|
||||
protected:
|
||||
static UInt_16 ComputeChecksumV4(UInt_16 *buffer, Size length);
|
||||
|
||||
private:
|
||||
virtual UInt_64 SendV6(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
|
||||
|
||||
virtual UInt_64 SendV4(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
|
||||
|
||||
virtual UInt_64 ReceiveV6(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const;
|
||||
|
||||
virtual UInt_64 ReceiveV4(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const;
|
||||
};
|
||||
}
|
||||
|
@@ -20,7 +20,7 @@ namespace ehs
|
||||
sockaddr_in6 src;
|
||||
|
||||
public:
|
||||
~ICMP();
|
||||
~ICMP() override;
|
||||
|
||||
ICMP();
|
||||
|
||||
@@ -34,9 +34,7 @@ namespace ehs
|
||||
|
||||
ICMP &operator=(const ICMP &icmp);
|
||||
|
||||
UInt_64 Send(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
|
||||
|
||||
UInt_64 Receive(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) override;
|
||||
void Release() override;
|
||||
|
||||
void SetReceiveTimeout(UInt_64 timeout) override;
|
||||
|
||||
@@ -51,12 +49,12 @@ namespace ehs
|
||||
|
||||
UInt_16 ComputeChecksumV6(UInt_16* buffer, Size length, const sockaddr_in6& dst);
|
||||
|
||||
UInt_64 SendV6(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
|
||||
UInt_64 SendV6(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
|
||||
|
||||
UInt_64 SendV4(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
|
||||
UInt_64 SendV4(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
|
||||
|
||||
UInt_64 ReceiveV6(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const;
|
||||
UInt_64 ReceiveV6(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const override;
|
||||
|
||||
UInt_64 ReceiveV4(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const;
|
||||
UInt_64 ReceiveV4(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const override;
|
||||
};
|
||||
}
|
@@ -1,6 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BaseICMP.h"
|
||||
#include "ehs/System/OS.h"
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <WS2tcpip.h>
|
||||
#include <iphlpapi.h>
|
||||
|
||||
namespace ehs
|
||||
{
|
||||
@@ -8,8 +13,11 @@ namespace ehs
|
||||
{
|
||||
private:
|
||||
Int_32 hdl;
|
||||
sockaddr_in6 src;
|
||||
|
||||
public:
|
||||
~ICMP() override;
|
||||
|
||||
ICMP();
|
||||
|
||||
ICMP(IP version);
|
||||
@@ -22,12 +30,27 @@ namespace ehs
|
||||
|
||||
ICMP &operator=(const ICMP &icmp);
|
||||
|
||||
UInt_64 Send(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
|
||||
|
||||
UInt_64 Receive(Str_8 &address, ICMP_Header header, Serializer<UInt_64> &data) override;
|
||||
void Release() override;
|
||||
|
||||
void SetReceiveTimeout(UInt_64 timeout) override;
|
||||
|
||||
bool IsValid() const override;
|
||||
|
||||
private:
|
||||
static bool IsLinkLocal(const in6_addr &addr);
|
||||
|
||||
static sockaddr_in6 RetrieveSrcAddress();
|
||||
|
||||
static UInt_32 CalculatePseudoHeaderChecksum(const PseudoICMPv6_Header &header);
|
||||
|
||||
UInt_16 ComputeChecksumV6(UInt_16* buffer, Size length, const sockaddr_in6& dst);
|
||||
|
||||
UInt_64 SendV6(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
|
||||
|
||||
UInt_64 SendV4(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
|
||||
|
||||
UInt_64 ReceiveV6(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const override;
|
||||
|
||||
UInt_64 ReceiveV4(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const override;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user