mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
- Unlock the address file before calling IPSendDatagram
- We don't need to be locked anymore at that point and it also causes problems with loopback packets - Use the TTL value stored in the address file for ICMP packets svn path=/branches/aicom-network-branch/; revision=45016
This commit is contained in:
parent
e8f652b985
commit
f22efa9fe8
3 changed files with 15 additions and 22 deletions
|
@ -48,6 +48,7 @@ VOID SendICMPComplete(
|
|||
|
||||
|
||||
BOOLEAN PrepareICMPPacket(
|
||||
PADDRESS_FILE AddrFile,
|
||||
PIP_INTERFACE Interface,
|
||||
PIP_PACKET IPPacket,
|
||||
PIP_ADDRESS Destination,
|
||||
|
@ -114,8 +115,11 @@ BOOLEAN PrepareICMPPacket(
|
|||
IPHeader->Id = (USHORT)Random();
|
||||
/* One fragment at offset 0 */
|
||||
IPHeader->FlagsFragOfs = 0;
|
||||
/* Time-to-Live is 128 */
|
||||
IPHeader->Ttl = 128;
|
||||
/* Set TTL */
|
||||
if (AddrFile)
|
||||
IPHeader->Ttl = AddrFile->TTL;
|
||||
else
|
||||
IPHeader->Ttl = 128;
|
||||
/* Internet Control Message Protocol */
|
||||
IPHeader->Protocol = IPPROTO_ICMP;
|
||||
/* Checksum is 0 (for later calculation of this) */
|
||||
|
@ -205,31 +209,28 @@ NTSTATUS ICMPSendDatagram(
|
|||
}
|
||||
}
|
||||
|
||||
Status = PrepareICMPPacket( NCE->Interface,
|
||||
Status = PrepareICMPPacket( AddrFile,
|
||||
NCE->Interface,
|
||||
&Packet,
|
||||
&RemoteAddress,
|
||||
BufferData,
|
||||
DataSize );
|
||||
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
|
||||
if( !NT_SUCCESS(Status) )
|
||||
{
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
return Status;
|
||||
}
|
||||
|
||||
TI_DbgPrint(MID_TRACE,("About to send datagram\n"));
|
||||
|
||||
if (!NT_SUCCESS(Status = IPSendDatagram( &Packet, NCE, ICMPSendPacketComplete, NULL )))
|
||||
{
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
FreeNdisPacket(Packet.NdisPacket);
|
||||
return Status;
|
||||
}
|
||||
|
||||
TI_DbgPrint(MID_TRACE,("Leaving\n"));
|
||||
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -352,7 +353,7 @@ VOID ICMPReply(
|
|||
|
||||
DataSize = IPPacket->TotalSize - IPPacket->HeaderSize;
|
||||
|
||||
if( !PrepareICMPPacket(Interface, &NewPacket, &IPPacket->SrcAddr,
|
||||
if( !PrepareICMPPacket(NULL, Interface, &NewPacket, &IPPacket->SrcAddr,
|
||||
IPPacket->Data, DataSize) ) return;
|
||||
|
||||
((PICMP_HEADER)NewPacket.Data)->Type = Type;
|
||||
|
|
|
@ -249,25 +249,21 @@ NTSTATUS RawIPSendDatagram(
|
|||
BufferData,
|
||||
DataSize );
|
||||
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
|
||||
if( !NT_SUCCESS(Status) )
|
||||
{
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
return Status;
|
||||
}
|
||||
|
||||
TI_DbgPrint(MID_TRACE,("About to send datagram\n"));
|
||||
|
||||
if (!NT_SUCCESS(Status = IPSendDatagram( &Packet, NCE, RawIpSendPacketComplete, NULL )))
|
||||
{
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
FreeNdisPacket(Packet.NdisPacket);
|
||||
return Status;
|
||||
}
|
||||
|
||||
TI_DbgPrint(MID_TRACE,("Leaving\n"));
|
||||
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -224,21 +224,17 @@ NTSTATUS UDPSendDatagram(
|
|||
BufferData,
|
||||
DataSize );
|
||||
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
|
||||
if( !NT_SUCCESS(Status) )
|
||||
{
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
return Status;
|
||||
}
|
||||
|
||||
if (!NT_SUCCESS(Status = IPSendDatagram( &Packet, NCE, UDPSendPacketComplete, NULL )))
|
||||
{
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
FreeNdisPacket(Packet.NdisPacket);
|
||||
return Status;
|
||||
}
|
||||
|
||||
UnlockObject(AddrFile, OldIrql);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue