mirror of
https://github.com/reactos/reactos.git
synced 2025-07-04 23:41:22 +00:00
Fix some issues with peer names being reported. There may be other problems
too. My read of MSDN is that queries that return addresses in queries other than TDI_QUERY_ADDRESS_INFO return a TRANSPORT_ADDRESS, so we plumb that through for GetPeerName. Note that this isn't user-facing functionality, so it's unlikely, though not impossible, that we've got it wrong and it'll affect something. Likely, this is an improvement. svn path=/trunk/; revision=40067
This commit is contained in:
parent
455369fa90
commit
1c4400b8ae
1 changed files with 9 additions and 14 deletions
|
@ -1507,9 +1507,8 @@ WSPGetSockName(IN SOCKET Handle,
|
||||||
Socket = GetSocketStructure(Handle);
|
Socket = GetSocketStructure(Handle);
|
||||||
|
|
||||||
/* Allocate a buffer for the address */
|
/* Allocate a buffer for the address */
|
||||||
TdiAddressSize = FIELD_OFFSET(TDI_ADDRESS_INFO, Address.Address[0].Address) +
|
TdiAddressSize =
|
||||||
Socket->SharedData.SizeOfLocalAddress;
|
sizeof(TRANSPORT_ADDRESS) + Socket->SharedData.SizeOfLocalAddress;
|
||||||
|
|
||||||
TdiAddress = HeapAlloc(GlobalHeap, 0, TdiAddressSize);
|
TdiAddress = HeapAlloc(GlobalHeap, 0, TdiAddressSize);
|
||||||
|
|
||||||
if ( TdiAddress == NULL )
|
if ( TdiAddress == NULL )
|
||||||
|
@ -1578,7 +1577,6 @@ WSPGetPeerName(IN SOCKET s,
|
||||||
{
|
{
|
||||||
IO_STATUS_BLOCK IOSB;
|
IO_STATUS_BLOCK IOSB;
|
||||||
ULONG TdiAddressSize;
|
ULONG TdiAddressSize;
|
||||||
PTDI_ADDRESS_INFO TdiAddress;
|
|
||||||
PTRANSPORT_ADDRESS SocketAddress;
|
PTRANSPORT_ADDRESS SocketAddress;
|
||||||
PSOCKET_INFORMATION Socket = NULL;
|
PSOCKET_INFORMATION Socket = NULL;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -1597,19 +1595,16 @@ WSPGetPeerName(IN SOCKET s,
|
||||||
Socket = GetSocketStructure(s);
|
Socket = GetSocketStructure(s);
|
||||||
|
|
||||||
/* Allocate a buffer for the address */
|
/* Allocate a buffer for the address */
|
||||||
TdiAddressSize = FIELD_OFFSET(TDI_ADDRESS_INFO, Address.Address[0].Address) +
|
TdiAddressSize = sizeof(TRANSPORT_ADDRESS) + *NameLength;
|
||||||
Socket->SharedData.SizeOfLocalAddress;
|
SocketAddress = HeapAlloc(GlobalHeap, 0, TdiAddressSize);
|
||||||
TdiAddress = HeapAlloc(GlobalHeap, 0, TdiAddressSize);
|
|
||||||
|
|
||||||
if ( TdiAddress == NULL )
|
if ( SocketAddress == NULL )
|
||||||
{
|
{
|
||||||
NtClose( SockEvent );
|
NtClose( SockEvent );
|
||||||
*lpErrno = WSAENOBUFS;
|
*lpErrno = WSAENOBUFS;
|
||||||
return SOCKET_ERROR;
|
return SOCKET_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketAddress = &TdiAddress->Address;
|
|
||||||
|
|
||||||
/* Send IOCTL */
|
/* Send IOCTL */
|
||||||
Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
|
Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
|
||||||
SockEvent,
|
SockEvent,
|
||||||
|
@ -1619,7 +1614,7 @@ WSPGetPeerName(IN SOCKET s,
|
||||||
IOCTL_AFD_GET_PEER_NAME,
|
IOCTL_AFD_GET_PEER_NAME,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
TdiAddress,
|
SocketAddress,
|
||||||
TdiAddressSize);
|
TdiAddressSize);
|
||||||
|
|
||||||
/* Wait for return */
|
/* Wait for return */
|
||||||
|
@ -1643,12 +1638,12 @@ WSPGetPeerName(IN SOCKET s,
|
||||||
AFD_DbgPrint (MID_TRACE, ("NameLength %d Address: %s Port %x\n",
|
AFD_DbgPrint (MID_TRACE, ("NameLength %d Address: %s Port %x\n",
|
||||||
*NameLength, ((struct sockaddr_in *)Name)->sin_addr.s_addr,
|
*NameLength, ((struct sockaddr_in *)Name)->sin_addr.s_addr,
|
||||||
((struct sockaddr_in *)Name)->sin_port));
|
((struct sockaddr_in *)Name)->sin_port));
|
||||||
HeapFree(GlobalHeap, 0, TdiAddress);
|
HeapFree(GlobalHeap, 0, SocketAddress);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
HeapFree(GlobalHeap, 0, TdiAddress);
|
HeapFree(GlobalHeap, 0, SocketAddress);
|
||||||
*lpErrno = WSAEFAULT;
|
*lpErrno = WSAEFAULT;
|
||||||
return SOCKET_ERROR;
|
return SOCKET_ERROR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue