Author: cgutman
Date: Sat Jan 16 04:30:10 2010
New Revision: 45094
URL:
http://svn.reactos.org/svn/reactos?rev=45094&view=rev
Log:
- Fix ECHO_REPLY_HEADER which was corrupting incoming packets (fixes displaying reply
time)
- Fix a bug in the packet waiting code
- Display the IP address if getnameinfo fails
- tracert is actually useful now
Modified:
branches/aicom-network-branch/base/applications/network/tracert/tracert.c
branches/aicom-network-branch/base/applications/network/tracert/tracert.h
Modified: branches/aicom-network-branch/base/applications/network/tracert/tracert.c
URL:
http://svn.reactos.org/svn/reactos/branches/aicom-network-branch/base/appli…
==============================================================================
--- branches/aicom-network-branch/base/applications/network/tracert/tracert.c [iso-8859-1]
(original)
+++ branches/aicom-network-branch/base/applications/network/tracert/tracert.c [iso-8859-1]
Sat Jan 16 04:30:10 2010
@@ -377,7 +377,6 @@
/* cast the recieved packet into an ECHO reply and a TTL Exceed and check the ID*/
ECHO_REPLY_HEADER *IcmpHdr = (ECHO_REPLY_HEADER *)((char*)pInfo->RecvPacket +
header_len);
- TTL_EXCEED_HEADER *TTLExceedHdr = (TTL_EXCEED_HEADER *)((char *)pInfo->RecvPacket
+ header_len);
/* Make sure the reply is ok */
if (PACKET_SIZE < header_len + ICMP_MIN_SIZE)
@@ -389,13 +388,6 @@
switch (IcmpHdr->icmpheader.type)
{
case TTL_EXCEEDED :
- if (TTLExceedHdr->OrigIcmpHeader.id != (USHORT)GetCurrentProcessId())
- {
- /* FIXME: our network stack shouldn't allow this... */
- /* we've picked up a packet not related to this process probably from
another local program. We ignore it */
- DebugPrint(_T("Rouge packet: header id, process id %d"),
TTLExceedHdr->OrigIcmpHeader.id, GetCurrentProcessId());
- return -1;
- }
_tprintf(_T("%3ld ms"), (ULONG)((pInfo->lTimeEnd -
pInfo->lTimeStart) / pInfo->TicksPerMs.QuadPart));
return 0;
@@ -415,7 +407,7 @@
return 2;
}
- return 0;
+ return -3;
}
@@ -513,11 +505,9 @@
if (iRecieveReturn)
{
- DecodeResponse(pInfo);
+ if (DecodeResponse(pInfo) < 0)
+ bAwaitPacket = TRUE;
}
- else
- /* packet timed out. Don't wait for it again */
- bAwaitPacket = FALSE;
} while (bAwaitPacket);
}
@@ -559,6 +549,7 @@
{
DebugPrint(_T("error: %d"), WSAGetLastError());
DebugPrint(_T(" getnameinfo failed: %d"), iNameInfoRet);
+ _tprintf(_T("%s"),
inet_ntoa(pInfo->source.sin_addr));
}
}
Modified: branches/aicom-network-branch/base/applications/network/tracert/tracert.h
URL:
http://svn.reactos.org/svn/reactos/branches/aicom-network-branch/base/appli…
==============================================================================
--- branches/aicom-network-branch/base/applications/network/tracert/tracert.h [iso-8859-1]
(original)
+++ branches/aicom-network-branch/base/applications/network/tracert/tracert.h [iso-8859-1]
Sat Jan 16 04:30:10 2010
@@ -50,20 +50,11 @@
USHORT seq; // not used in time exceeded
} ICMP_HEADER, *PICMP_HEADER;
-/* ICMP Echo Reply Header, 12 bytes */
+/* ICMP Echo Reply Header */
typedef struct EchoReplyHeader
{
- struct timeval timestamp;
struct ICMPHeader icmpheader;
} ECHO_REPLY_HEADER, *PECHO_REPLY_HEADER;
-
-/* ICMP Echo Reply Header, 12 bytes */
-typedef struct TTLExceedHeader
-{
- struct ICMPHeader icmpheader;
- struct IPv4Header ipheader;
- struct ICMPHeader OrigIcmpHeader;
-} TTL_EXCEED_HEADER, *PTTL_EXCEED_HEADER;
#include <poppack.h>