--- /dev/null
+/*\r
+ * COPYRIGHT: See COPYING in the top level directory\r
+ * PROJECT: ReactOS traceroute utility\r
+ * FILE: apps/utils/net/tracert/tracert.h\r
+ * PURPOSE: trace a packets route through a network\r
+ * PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)\r
+ * REVISIONS:\r
+ * GM 03/05/05 Created\r
+ */\r
+\r
+#define ECHO_REPLY 0\r
+#define DEST_UNREACHABLE 3\r
+#define ECHO_REQUEST 8\r
+#define TTL_EXCEEDED 11\r
+\r
+#define ICMP_MIN_SIZE 8\r
+#define ICMP_MAX_SIZE 65535\r
+#define PACKET_SIZE 32\r
+/* we need this for packets which have the 'dont fragment' \r
+ * bit set, as they can get quite large otherwise \r
+ * (I've seen some reach 182 bytes */\r
+#define MAX_REC_SIZE 200 \r
+\r
+/* pack the structures */\r
+#pragma pack(1) \r
+\r
+/* IPv4 Header, 20 bytes */\r
+typedef struct IPv4Header {\r
+ BYTE h_len:4;\r
+ BYTE version:4;\r
+ BYTE tos;\r
+ USHORT length;\r
+ USHORT id;\r
+ USHORT flag_frag;\r
+ BYTE ttl;\r
+ BYTE proto;\r
+ USHORT checksum;\r
+ ULONG source;\r
+ ULONG dest;\r
+} IPv4_HEADER, *PIPv4_HEADER;\r
+\r
+/* ICMP Header, 8 bytes */\r
+typedef struct ICMPHeader {\r
+ BYTE type;\r
+ BYTE code;\r
+ USHORT checksum;\r
+ USHORT id; // not used in time exceeded\r
+ USHORT seq; // not used in time exceeded\r
+} ICMP_HEADER, *PICMP_HEADER;\r
+\r
+/* ICMP Echo Reply Header, 12 bytes */\r
+typedef struct EchoReplyHeader {\r
+ struct ICMPHeader icmpheader;\r
+ struct timeval timestamp; \r
+} ECHO_REPLY_HEADER, *PECHO_REPLY_HEADER;\r
+\r
+/* ICMP Echo Reply Header, 12 bytes */\r
+typedef struct TTLExceedHeader {\r
+ struct ICMPHeader icmpheader;\r
+ struct IPv4Header ipheader;\r
+ struct ICMPHeader OrigIcmpHeader;\r
+} TTL_EXCEED_HEADER, *PTTL_EXCEED_HEADER;\r
+\r
+/* return to normal */\r
+#pragma pack()\r
+\r
+\r
+/* function definitions */\r
+//BOOL ParseCmdline(int argc, char* argv[]);\r
+INT Driver(void);\r
+INT Setup(INT ttl);\r
+VOID SetupTimingMethod(void);\r
+VOID ResolveHostname(void);\r
+VOID PreparePacket(INT packetSize, INT seqNum);\r
+INT SendPacket(INT datasize);\r
+INT ReceivePacket(INT datasize);\r
+INT DecodeResponse(INT packetSize, INT seqNum);\r
+LONG GetTime(void);\r
+WORD CheckSum(PUSHORT data, UINT size);\r
+VOID Usage(void);\r