diff options
Diffstat (limited to 'protocols/MSN/msn_commands.cpp')
| -rw-r--r-- | protocols/MSN/msn_commands.cpp | 30 | 
1 files changed, 10 insertions, 20 deletions
diff --git a/protocols/MSN/msn_commands.cpp b/protocols/MSN/msn_commands.cpp index 04d2ad7981..a85ff46fe4 100644 --- a/protocols/MSN/msn_commands.cpp +++ b/protocols/MSN/msn_commands.cpp @@ -30,30 +30,20 @@ void MSN_ConnectionProc(HANDLE hNewConnection, DWORD /* dwRemoteIP */, void* ext  	proto->MSN_DebugLog("File transfer connection accepted");
 -	WORD localPort = 0;
 -	SOCKET s = MSN_CallService(MS_NETLIB_GETSOCKET, (WPARAM)hNewConnection, 0);
 -	if (s != INVALID_SOCKET) 
 +	NETLIBCONNINFO connInfo = { sizeof(connInfo) }; 
 +	CallService(MS_NETLIB_GETCONNECTIONINFO, (WPARAM)hNewConnection, (LPARAM)&connInfo);
 +
 +	ThreadData* T = proto->MSN_GetThreadByPort(connInfo.wPort);
 +	if (T != NULL && T->s == NULL) 
  	{
 -		SOCKADDR_IN saddr;
 -		int len = sizeof(saddr);
 -		if (getsockname(s, (SOCKADDR*)&saddr, &len) != SOCKET_ERROR)
 -			localPort = ntohs(saddr.sin_port);
 +		T->s = hNewConnection;
 +		ReleaseSemaphore(T->hWaitEvent, 1, NULL);
  	}
 -
 -	if (localPort != 0) 
 +	else
  	{
 -		ThreadData* T = proto->MSN_GetThreadByPort(localPort);
 -		if (T != NULL && T->s == NULL) 
 -		{
 -			T->s = hNewConnection;
 -			ReleaseSemaphore(T->hWaitEvent, 1, NULL);
 -			return;
 -		}
 -		proto->MSN_DebugLog("There's no registered file transfers for incoming port #%d, connection closed", localPort);
 +		proto->MSN_DebugLog("There's no registered file transfers for incoming port #%u, connection closed", connInfo.wPort);
 +		Netlib_CloseHandle(hNewConnection);
  	}
 -	else proto->MSN_DebugLog("Unable to determine the local port, file server connection closed.");
 -
 -	Netlib_CloseHandle(hNewConnection);
  }
  | 
