- Implement WSAHtons, WSANtohs

- Add some cases to MsafdReturnWithErrno, SockAsyncSelectCompletionRoutine
Opera loads pages now, but the keyboard does not work.
Patch by Mikhail Denisenko ([email protected])
See issue #4151 for more details.

svn path=/trunk/; revision=42102
This commit is contained in:
Dmitry Chapyshev
2009-07-20 18:30:30 +00:00
parent b46f7e4773
commit 9545bd7992
2 changed files with 57 additions and 6 deletions
+5
View File
@@ -341,6 +341,10 @@ DWORD MsafdReturnWithErrno(NTSTATUS Status,
DbgPrint("MSAFD: STATUS_INVALID_CONNECTION\n");
*Errno = WSAEAFNOSUPPORT;
break;
case STATUS_INVALID_ADDRESS:
DbgPrint("MSAFD: STATUS_INVALID_ADDRESS\n");
*Errno = WSAEADDRNOTAVAIL;
break;
case STATUS_REMOTE_NOT_LISTENING:
DbgPrint("MSAFD: STATUS_REMOTE_NOT_LISTENING\n");
*Errno = WSAECONNREFUSED;
@@ -2289,6 +2293,7 @@ VOID SockAsyncSelectCompletionRoutine(PVOID Context, PIO_STATUS_BLOCK IoStatusBl
/* FIXME: THIS IS NOT RIGHT!!! HACK HACK HACK! */
case AFD_EVENT_CONNECT:
case AFD_EVENT_CONNECT_FAIL:
if (0 != (Socket->SharedData.AsyncEvents & FD_CONNECT) &&
0 == (Socket->SharedData.AsyncDisabledEvents & FD_CONNECT))
{
+52 -6
View File
@@ -510,10 +510,33 @@ WSAHtons(IN SOCKET s,
IN USHORT hostshort,
OUT USHORT FAR* lpnetshort)
{
UNIMPLEMENTED
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
WSASetLastError(WSASYSCALLFAILURE);
return SOCKET_ERROR;
PCATALOG_ENTRY provider;
if (!ReferenceProviderByHandle((HANDLE)s, &provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
switch (provider->ProtocolInfo.iNetworkByteOrder)
{
case BIGENDIAN:
*lpnetshort = htons(hostshort);
break;
case LITTLEENDIAN:
#ifdef LE
*lpnetshort = hostshort;
#else
*lpnetshort = (((hostshort & 0xFF00) >> 8) | ((hostshort & 0x00FF) << 8));
#endif
break;
}
return 0;
}
@@ -576,10 +599,33 @@ WSANtohs(IN SOCKET s,
IN USHORT netshort,
OUT USHORT FAR* lphostshort)
{
UNIMPLEMENTED
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
WSASetLastError(WSASYSCALLFAILURE);
return SOCKET_ERROR;
PCATALOG_ENTRY provider;
if (!ReferenceProviderByHandle((HANDLE)s, &provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
switch (provider->ProtocolInfo.iNetworkByteOrder)
{
case BIGENDIAN:
*lphostshort = ntohs(netshort);
break;
case LITTLEENDIAN:
#ifdef LE
*lphostshort = netshort;
#else
*lphostshort = (((netshort & 0xFF00) >> 8) | ((netshort & 0x00FF) << 8));
#endif
break;
}
return 0;
}