From f581e4cb377706055994ee83b6bccdca63ce5b4b Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 24 Jun 2011 03:35:30 +0000 Subject: [PATCH] [IP] - Fix copying of the remote address when satisfying an accept request - accept() and WSAAccept() no longer report strange peer addresses - Fixes a few ws2_32_winetest sock tests svn path=/trunk/; revision=52437 --- reactos/lib/drivers/ip/transport/tcp/accept.c | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/reactos/lib/drivers/ip/transport/tcp/accept.c b/reactos/lib/drivers/ip/transport/tcp/accept.c index b300fa350bb..0b66481e220 100644 --- a/reactos/lib/drivers/ip/transport/tcp/accept.c +++ b/reactos/lib/drivers/ip/transport/tcp/accept.c @@ -39,24 +39,19 @@ NTSTATUS TCPServiceListeningSocket( PCONNECTION_ENDPOINT Listener, TI_DbgPrint(DEBUG_TCP,("Status %x\n", Status)); if( NT_SUCCESS(Status) && Status != STATUS_PENDING ) { - RequestAddressReturn = WhoIsConnecting->RemoteAddress; + RequestAddressReturn = WhoIsConnecting->RemoteAddress; - TI_DbgPrint(DEBUG_TCP,("Copying address to %x (Who %x)\n", - RequestAddressReturn, WhoIsConnecting)); + TI_DbgPrint(DEBUG_TCP,("Copying address to %x (Who %x)\n", + RequestAddressReturn, WhoIsConnecting)); RequestAddressReturn->TAAddressCount = 1; - RequestAddressReturn->Address[0].AddressLength = OutAddrLen; + RequestAddressReturn->Address[0].AddressLength = TDI_ADDRESS_LENGTH_IP; + RequestAddressReturn->Address[0].AddressType = TDI_ADDRESS_TYPE_IP; + RequestAddressReturn->Address[0].Address[0].sin_port = OutAddr.sin_port; + RequestAddressReturn->Address[0].Address[0].in_addr = OutAddr.sin_addr.s_addr; + RtlZeroMemory(RequestAddressReturn->Address[0].Address[0].sin_zero, 8); - /* BSD uses the first byte of the sockaddr struct as a length. - * Since windows doesn't do that we strip it */ - RequestAddressReturn->Address[0].AddressType = - (OutAddr.sin_family >> 8) & 0xff; - - RtlCopyMemory( &RequestAddressReturn->Address[0].Address, - ((PCHAR)&OutAddr) + sizeof(USHORT), - sizeof(RequestAddressReturn->Address[0].Address[0]) ); - - TI_DbgPrint(DEBUG_TCP,("Done copying\n")); + TI_DbgPrint(DEBUG_TCP,("Done copying\n")); } TI_DbgPrint(DEBUG_TCP,("Status %x\n", Status));