59 lines
1.6 KiB
C#
59 lines
1.6 KiB
C#
using System.Net.NetworkInformation;
|
|
namespace Models.Experimental;
|
|
public struct MessageConstant
|
|
{
|
|
public static IPStatus MapV4TypeToIpStatus(int type, int code)
|
|
{
|
|
IPStatus ipStatus1;
|
|
switch ((IcmpV4MessageType) type)
|
|
{
|
|
case IcmpV4MessageType.EchoReply:
|
|
ipStatus1 = IPStatus.Success;
|
|
break;
|
|
case IcmpV4MessageType.DestinationUnreachable:
|
|
IPStatus ipStatus2;
|
|
switch ((byte) code)
|
|
{
|
|
case 0:
|
|
ipStatus2 = IPStatus.DestinationNetworkUnreachable;
|
|
break;
|
|
case 1:
|
|
ipStatus2 = IPStatus.DestinationHostUnreachable;
|
|
break;
|
|
case 2:
|
|
ipStatus2 = IPStatus.DestinationProtocolUnreachable;
|
|
break;
|
|
case 3:
|
|
ipStatus2 = IPStatus.DestinationPortUnreachable;
|
|
break;
|
|
default:
|
|
ipStatus2 = IPStatus.DestinationUnreachable;
|
|
break;
|
|
}
|
|
ipStatus1 = ipStatus2;
|
|
break;
|
|
case IcmpV4MessageType.SourceQuench:
|
|
ipStatus1 = IPStatus.SourceQuench;
|
|
break;
|
|
case IcmpV4MessageType.TimeExceeded:
|
|
ipStatus1 = IPStatus.TtlExpired;
|
|
break;
|
|
case IcmpV4MessageType.ParameterProblemBadIpHeader:
|
|
ipStatus1 = IPStatus.BadHeader;
|
|
break;
|
|
default:
|
|
ipStatus1 = IPStatus.Unknown;
|
|
break;
|
|
}
|
|
return ipStatus1;
|
|
}
|
|
}
|
|
|
|
internal enum IcmpV4MessageType : byte
|
|
{
|
|
EchoReply = 0,
|
|
DestinationUnreachable = 3,
|
|
SourceQuench = 4,
|
|
TimeExceeded = 11, // 0x0B
|
|
ParameterProblemBadIpHeader = 12, // 0x0C
|
|
} |