Sync to trunk head (r42241)
[reactos.git] / reactos / dll / win32 / ws2_32 / misc / stubs.c
index f035f57..c8c3b08 100644 (file)
@@ -31,7 +31,7 @@ getpeername(IN     SOCKET s,
         return SOCKET_ERROR;
     }
 
-    if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
+    if (!ReferenceProviderByHandle((HANDLE)(ULONG_PTR)(s), &Provider))
     {
         WSASetLastError(WSAENOTSOCK);
         return SOCKET_ERROR;
@@ -163,6 +163,12 @@ setsockopt(IN  SOCKET s,
         return SOCKET_ERROR;
     }
 
+    if(IS_INTRESOURCE(optval))
+    {
+        SetLastError(WSAEFAULT);
+        return SOCKET_ERROR;
+    }
+
     if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
     {
         WSASetLastError(WSAENOTSOCK);
@@ -307,7 +313,8 @@ WSACancelBlockingCall(VOID)
 
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -340,7 +347,8 @@ WSADuplicateSocketA(IN  SOCKET s,
 
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -396,7 +404,8 @@ WSAEnumProtocolsA(IN      LPINT lpiProtocols,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -411,7 +420,8 @@ WSAEnumProtocolsW(IN      LPINT lpiProtocols,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -470,6 +480,7 @@ WSAGetQOSByName(IN      SOCKET s,
 {
     UNIMPLEMENTED
 
+    WSASetLastError(WSASYSCALLFAILURE);
     return FALSE;
 }
 
@@ -485,7 +496,8 @@ WSAHtonl(IN  SOCKET s,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -498,8 +510,32 @@ WSAHtons(IN  SOCKET s,
          IN  USHORT hostshort,
          OUT USHORT FAR* lpnetshort)
 {
-    UNIMPLEMENTED
+    if (!WSAINITIALIZED)
+    {
+        WSASetLastError(WSANOTINITIALISED);
+        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;
 }
 
@@ -533,6 +569,7 @@ WSAJoinLeaf(IN  SOCKET s,
 {
     UNIMPLEMENTED
 
+    WSASetLastError(WSASYSCALLFAILURE);
     return INVALID_SOCKET;
 }
 
@@ -548,7 +585,8 @@ WSANtohl(IN  SOCKET s,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -561,8 +599,32 @@ WSANtohs(IN  SOCKET s,
          IN  USHORT netshort,
          OUT USHORT FAR* lphostshort)
 {
-    UNIMPLEMENTED
+    if (!WSAINITIALIZED)
+    {
+        WSASetLastError(WSANOTINITIALISED);
+        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;
 }
 
@@ -604,7 +666,8 @@ WSAProviderConfigChange(IN OUT  LPHANDLE lpNotificationHandle,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -617,7 +680,8 @@ WSACancelAsyncRequest(IN  HANDLE hAsyncTaskHandle)
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 /* WinSock Service Provider support functions */
@@ -635,7 +699,8 @@ WPUCompleteOverlappedRequest(IN  SOCKET s,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -652,7 +717,7 @@ WSPStartup(IN  WORD wVersionRequested,
 {
     UNIMPLEMENTED
 
-    return 0;
+    return WSASYSCALLFAILURE;
 }
 
 
@@ -666,7 +731,8 @@ WSCDeinstallProvider(IN  LPGUID lpProviderId,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -682,7 +748,8 @@ WSCEnumProtocols(IN      LPINT lpiProtocols,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -698,7 +765,8 @@ WSCGetProviderPath(IN      LPGUID lpProviderId,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -707,15 +775,16 @@ WSCGetProviderPath(IN      LPGUID lpProviderId,
  */
 INT
 EXPORT
-WSCInstallProvider(IN  CONST LPGUID lpProviderId,
-                   IN  CONST LPWSTR lpszProviderDllPath,
+WSCInstallProvider(IN  LPGUID lpProviderId,
+                   IN  CONST WCHAR* lpszProviderDllPath,
                    IN  CONST LPWSAPROTOCOL_INFOW lpProtocolInfoList,
                    IN  DWORD dwNumberOfEntries,
                    OUT LPINT lpErrno)
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -729,7 +798,8 @@ WSCEnableNSProvider(IN  LPGUID lpProviderId,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -746,7 +816,8 @@ WSCInstallNameSpace(IN  LPWSTR lpszIdentifier,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -759,7 +830,8 @@ WSCUnInstallNameSpace(IN  LPGUID lpProviderId)
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -773,7 +845,7 @@ WSCWriteProviderOrder(IN  LPDWORD lpwdCatalogEntryId,
 {
     UNIMPLEMENTED
 
-    return 0;
+    return WSASYSCALLFAILURE;
 }
 
 /*
@@ -790,9 +862,10 @@ WSANSPIoctl(HANDLE           hLookup,
             LPDWORD          lpcbBytesReturned,
             LPWSACOMPLETION  lpCompletion)
 {
-    //UNIMPLEMENTED
+    UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 
@@ -809,7 +882,8 @@ WSCUpdateProvider(LPGUID lpProviderId,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 /*
@@ -822,32 +896,7 @@ WSCWriteNameSpaceOrder(LPGUID lpProviderId,
 {
     UNIMPLEMENTED
 
-    return 0;
-}
-
-/*
- * @unimplemented
- */
-VOID
-EXPORT
-freeaddrinfo(struct addrinfo *pAddrInfo)
-{
-    UNIMPLEMENTED
-}
-
-/*
- * @unimplemented
- */
-INT
-EXPORT
-getaddrinfo(const char FAR * nodename,
-            const char FAR * servname,
-            const struct addrinfo FAR * hints,
-            struct addrinfo FAR * FAR * res)
-{
-    UNIMPLEMENTED
-
-    return 0;
+    return WSASYSCALLFAILURE;
 }
 
 /*
@@ -865,7 +914,8 @@ getnameinfo(const struct sockaddr FAR * sa,
 {
     UNIMPLEMENTED
 
-    return 0;
+    WSASetLastError(WSASYSCALLFAILURE);
+    return SOCKET_ERROR;
 }
 
 /*
@@ -883,7 +933,7 @@ BOOL EXPORT WSApSetPostRoutine(PVOID Routine)
 {
     UNIMPLEMENTED
 
-    return 0;
+    return FALSE;
 }
 
 /* EOF */