4e2933c620 2015-04-21 kinaba: /***********************************************************************\ 4e2933c620 2015-04-21 kinaba: * ipexport.d * 4e2933c620 2015-04-21 kinaba: * * 4e2933c620 2015-04-21 kinaba: * Windows API header module * 4e2933c620 2015-04-21 kinaba: * * 4e2933c620 2015-04-21 kinaba: * Translated from MinGW Windows headers * 4e2933c620 2015-04-21 kinaba: * by Stewart Gordon * 4e2933c620 2015-04-21 kinaba: * * 4e2933c620 2015-04-21 kinaba: * Placed into public domain * 4e2933c620 2015-04-21 kinaba: \***********************************************************************/ 4e2933c620 2015-04-21 kinaba: module win32.ipexport; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: private import win32.windef; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: const size_t MAX_ADAPTER_NAME = 128; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: // IP STATUS flags 4e2933c620 2015-04-21 kinaba: enum : IP_STATUS { 4e2933c620 2015-04-21 kinaba: IP_SUCCESS = 0, 4e2933c620 2015-04-21 kinaba: IP_STATUS_BASE = 11000, 4e2933c620 2015-04-21 kinaba: IP_BUF_TOO_SMALL, 4e2933c620 2015-04-21 kinaba: IP_DEST_NET_UNREACHABLE, 4e2933c620 2015-04-21 kinaba: IP_DEST_HOST_UNREACHABLE, 4e2933c620 2015-04-21 kinaba: IP_DEST_PROT_UNREACHABLE, 4e2933c620 2015-04-21 kinaba: IP_DEST_PORT_UNREACHABLE, 4e2933c620 2015-04-21 kinaba: IP_NO_RESOURCES, 4e2933c620 2015-04-21 kinaba: IP_BAD_OPTION, 4e2933c620 2015-04-21 kinaba: IP_HW_ERROR, 4e2933c620 2015-04-21 kinaba: IP_PACKET_TOO_BIG, 4e2933c620 2015-04-21 kinaba: IP_REQ_TIMED_OUT, 4e2933c620 2015-04-21 kinaba: IP_BAD_REQ, 4e2933c620 2015-04-21 kinaba: IP_BAD_ROUTE, 4e2933c620 2015-04-21 kinaba: IP_TTL_EXPIRED_TRANSIT, 4e2933c620 2015-04-21 kinaba: IP_TTL_EXPIRED_REASSEM, 4e2933c620 2015-04-21 kinaba: IP_PARAM_PROBLEM, 4e2933c620 2015-04-21 kinaba: IP_SOURCE_QUENCH, 4e2933c620 2015-04-21 kinaba: IP_OPTION_TOO_BIG, 4e2933c620 2015-04-21 kinaba: IP_BAD_DESTINATION, 4e2933c620 2015-04-21 kinaba: IP_ADDR_DELETED, 4e2933c620 2015-04-21 kinaba: IP_SPEC_MTU_CHANGE, 4e2933c620 2015-04-21 kinaba: IP_MTU_CHANGE, 4e2933c620 2015-04-21 kinaba: IP_UNLOAD, // = IP_STATUS_BASE + 22 4e2933c620 2015-04-21 kinaba: IP_GENERAL_FAILURE = IP_STATUS_BASE + 50, 4e2933c620 2015-04-21 kinaba: MAX_IP_STATUS = IP_GENERAL_FAILURE, 4e2933c620 2015-04-21 kinaba: IP_PENDING = IP_STATUS_BASE + 255 4e2933c620 2015-04-21 kinaba: } 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: // IP header Flags values 4e2933c620 2015-04-21 kinaba: const byte IP_FLAG_DF = 2; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: // IP Option types 4e2933c620 2015-04-21 kinaba: enum : ubyte { 4e2933c620 2015-04-21 kinaba: IP_OPT_EOL = 0, 4e2933c620 2015-04-21 kinaba: IP_OPT_NOP = 0x01, 4e2933c620 2015-04-21 kinaba: IP_OPT_RR = 0x07, 4e2933c620 2015-04-21 kinaba: IP_OPT_SECURITY = 0x82, 4e2933c620 2015-04-21 kinaba: IP_OPT_LSRR = 0x83, 4e2933c620 2015-04-21 kinaba: IP_OPT_SSRR = 0x89, 4e2933c620 2015-04-21 kinaba: IP_OPT_TS = 0x44, 4e2933c620 2015-04-21 kinaba: IP_OPT_SID = 0x88, 4e2933c620 2015-04-21 kinaba: IP_OPT_ROUTER_ALERT = 0x94 4e2933c620 2015-04-21 kinaba: } 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: const ubyte MAX_OPT_SIZE = 40; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: alias uint IPAddr, IPMask, IP_STATUS; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: struct IP_OPTION_INFORMATION { 4e2933c620 2015-04-21 kinaba: ubyte Ttl; 4e2933c620 2015-04-21 kinaba: ubyte Tos; 4e2933c620 2015-04-21 kinaba: ubyte Flags; 4e2933c620 2015-04-21 kinaba: ubyte OptionsSize; 4e2933c620 2015-04-21 kinaba: ubyte* OptionsData; 4e2933c620 2015-04-21 kinaba: } 4e2933c620 2015-04-21 kinaba: alias IP_OPTION_INFORMATION* PIP_OPTION_INFORMATION; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: struct ICMP_ECHO_REPLY { 4e2933c620 2015-04-21 kinaba: IPAddr Address; 4e2933c620 2015-04-21 kinaba: uint Status; 4e2933c620 2015-04-21 kinaba: uint RoundTripTime; 4e2933c620 2015-04-21 kinaba: ushort DataSize; 4e2933c620 2015-04-21 kinaba: ushort Reserved; 4e2933c620 2015-04-21 kinaba: void* Data; 4e2933c620 2015-04-21 kinaba: IP_OPTION_INFORMATION Options; 4e2933c620 2015-04-21 kinaba: } 4e2933c620 2015-04-21 kinaba: alias ICMP_ECHO_REPLY* PICMP_ECHO_REPLY; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: struct IP_ADAPTER_INDEX_MAP { 4e2933c620 2015-04-21 kinaba: ULONG Index; 4e2933c620 2015-04-21 kinaba: WCHAR[MAX_ADAPTER_NAME] Name; 4e2933c620 2015-04-21 kinaba: } 4e2933c620 2015-04-21 kinaba: alias IP_ADAPTER_INDEX_MAP* PIP_ADAPTER_INDEX_MAP; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: struct IP_INTERFACE_INFO { 4e2933c620 2015-04-21 kinaba: LONG NumAdapters; 4e2933c620 2015-04-21 kinaba: IP_ADAPTER_INDEX_MAP[1] _Adapter; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: IP_ADAPTER_INDEX_MAP* Adapter() { return _Adapter.ptr; } 4e2933c620 2015-04-21 kinaba: } 4e2933c620 2015-04-21 kinaba: alias IP_INTERFACE_INFO* PIP_INTERFACE_INFO; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: struct IP_UNIDIRECTIONAL_ADAPTER_ADDRESS { 4e2933c620 2015-04-21 kinaba: ULONG NumAdapters; 4e2933c620 2015-04-21 kinaba: IPAddr[1] _Address; 4e2933c620 2015-04-21 kinaba: 4e2933c620 2015-04-21 kinaba: IPAddr* Address() { return _Address.ptr; } 4e2933c620 2015-04-21 kinaba: } 4e2933c620 2015-04-21 kinaba: alias IP_UNIDIRECTIONAL_ADAPTER_ADDRESS* PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS;