m***@gmail.com
2007-09-13 17:08:30 UTC
I am having a hard time trying to get the local and remote addresses
in my LSP which intercepts AcceptEx. When I call GetAcceptExSockaddrs
with the parameters passed to my AcceptEx function I get NULLs for all
the addresses. Does anyone have any ideas?
This is the basic jist of the code.
BOOL PASCAL FAR
ExtAcceptEx(
IN SOCKET sListenSocket,
IN SOCKET sAcceptSocket,
IN PVOID lpOutputBuffer,
IN DWORD dwReceiveDataLength,
IN DWORD dwLocalAddressLength,
IN DWORD dwRemoteAddressLength,
OUT LPDWORD lpdwBytesReceived,
IN LPOVERLAPPED lpOverlapped)
{
SOCKET_CONTEXT *ListenSocketContext = NULL;
SOCKET_CONTEXT *AcceptSocketContext = NULL;
sockaddr_in * localAddr = 0;
sockaddr_in * remoteAddr = 0;
int remote_addr_len = sizeof(sockaddr_in);
int local_addr_len = sizeof(sockaddr_in);
int rc = FALSE;
ListenSocketContext = FindSocketContext( sListenSocket );
...
AcceptSocketContext = FindSocketContext( sAcceptSocket );
...
GetAcceptExSockaddrs(lpOutputBuffer, dwReceiveDataLength,
dwLocalAddressLength, dwRemoteAddressLength, (sockaddr **) &localAddr,
&local_addr_len, (sockaddr **) &remoteAddr, &remote_addr_len);
//PROBLEM
//localAddr = 0
//remoteAddr = 0
....
rc = ListenSocketContext->Provider->NextProcTableExt.lpfnAcceptEx(
ListenSocketContext->Socket,
AcceptSocketContext->Socket,
lpOutputBuffer,
dwReceiveDataLength,
dwLocalAddressLength,
dwRemoteAddressLength,
lpdwBytesReceived,
lpOverlapped
);
...
return rc;
}
in my LSP which intercepts AcceptEx. When I call GetAcceptExSockaddrs
with the parameters passed to my AcceptEx function I get NULLs for all
the addresses. Does anyone have any ideas?
This is the basic jist of the code.
BOOL PASCAL FAR
ExtAcceptEx(
IN SOCKET sListenSocket,
IN SOCKET sAcceptSocket,
IN PVOID lpOutputBuffer,
IN DWORD dwReceiveDataLength,
IN DWORD dwLocalAddressLength,
IN DWORD dwRemoteAddressLength,
OUT LPDWORD lpdwBytesReceived,
IN LPOVERLAPPED lpOverlapped)
{
SOCKET_CONTEXT *ListenSocketContext = NULL;
SOCKET_CONTEXT *AcceptSocketContext = NULL;
sockaddr_in * localAddr = 0;
sockaddr_in * remoteAddr = 0;
int remote_addr_len = sizeof(sockaddr_in);
int local_addr_len = sizeof(sockaddr_in);
int rc = FALSE;
ListenSocketContext = FindSocketContext( sListenSocket );
...
AcceptSocketContext = FindSocketContext( sAcceptSocket );
...
GetAcceptExSockaddrs(lpOutputBuffer, dwReceiveDataLength,
dwLocalAddressLength, dwRemoteAddressLength, (sockaddr **) &localAddr,
&local_addr_len, (sockaddr **) &remoteAddr, &remote_addr_len);
//PROBLEM
//localAddr = 0
//remoteAddr = 0
....
rc = ListenSocketContext->Provider->NextProcTableExt.lpfnAcceptEx(
ListenSocketContext->Socket,
AcceptSocketContext->Socket,
lpOutputBuffer,
dwReceiveDataLength,
dwLocalAddressLength,
dwRemoteAddressLength,
lpdwBytesReceived,
lpOverlapped
);
...
return rc;
}