| /* | 
 |  * WSOCK32 specific functions | 
 |  * | 
 |  * Copyright (C) 2002 Andrew Hughes | 
 |  * | 
 |  * This library is free software; you can redistribute it and/or | 
 |  * modify it under the terms of the GNU Lesser General Public | 
 |  * License as published by the Free Software Foundation; either | 
 |  * version 2.1 of the License, or (at your option) any later version. | 
 |  * | 
 |  * This library is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 |  * Lesser General Public License for more details. | 
 |  * | 
 |  * You should have received a copy of the GNU Lesser General Public | 
 |  * License along with this library; if not, write to the Free Software | 
 |  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
 |  */ | 
 |  | 
 | #include "config.h" | 
 |  | 
 | #include <stdarg.h> | 
 |  | 
 | #include "windef.h" | 
 | #include "winbase.h" | 
 | #include "winerror.h" | 
 | #include "winsock2.h" | 
 | #include "wtypes.h" | 
 | #include "nspapi.h" | 
 |  | 
 | #include "wine/debug.h" | 
 |  | 
 | WINE_DEFAULT_DEBUG_CHANNEL(winsock); | 
 |  | 
 | INT WINAPI GetAddressByNameA(DWORD dwNameSpace, LPGUID lpServiceType, LPSTR lpServiceName, | 
 |     LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, | 
 |     LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPSTR lpAliasBuffer, | 
 |     LPDWORD lpdwAliasBufferLength) | 
 | { | 
 |     FIXME("(0x%08x, %s, %s, %p, 0x%08x, %p, %p, %p, %p, %p) stub\n", dwNameSpace, | 
 |           debugstr_guid(lpServiceType), debugstr_a(lpServiceName), lpiProtocols, | 
 |           dwResolution, lpServiceAsyncInfo, lpCsaddrBuffer, lpdwBufferLength, | 
 |           lpAliasBuffer, lpdwAliasBufferLength); | 
 |   | 
 |     SetLastError(ERROR_CALL_NOT_IMPLEMENTED); | 
 |     return SOCKET_ERROR; | 
 | } | 
 |  | 
 | INT WINAPI GetAddressByNameW(DWORD dwNameSpace, LPGUID lpServiceType, LPWSTR lpServiceName, | 
 |     LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, | 
 |     LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPWSTR lpAliasBuffer, | 
 |     LPDWORD lpdwAliasBufferLength) | 
 | { | 
 |     FIXME("(0x%08x, %s, %s, %p, 0x%08x, %p, %p, %p, %p, %p) stub\n", dwNameSpace, | 
 |           debugstr_guid(lpServiceType), debugstr_w(lpServiceName), lpiProtocols, | 
 |           dwResolution, lpServiceAsyncInfo, lpCsaddrBuffer, lpdwBufferLength, | 
 |           lpAliasBuffer, lpdwAliasBufferLength); | 
 |  | 
 |     SetLastError(ERROR_CALL_NOT_IMPLEMENTED); | 
 |     return SOCKET_ERROR; | 
 | } | 
 |  | 
 | /****************************************************************************** | 
 |  *          GetTypeByNameA     [WSOCK32.1113] | 
 |  * | 
 |  * Retrieve a service type GUID for a network service specified by name. | 
 |  * | 
 |  * PARAMETERS | 
 |  *      lpServiceName [I] NUL-terminated ASCII string that uniquely represents the name of the service | 
 |  *      lpServiceType [O] Destination for the service type GUID | 
 |  * | 
 |  * RETURNS | 
 |  *      Success: 0. lpServiceType contains the requested GUID | 
 |  *      Failure: SOCKET_ERROR. GetLastError() can return ERROR_SERVICE_DOES_NOT_EXIST | 
 |  * | 
 |  * NOTES | 
 |  *      Obsolete Microsoft-specific extension to Winsock 1.1. | 
 |  *      Protocol-independent name resolution provides equivalent functionality in Winsock 2. | 
 |  * | 
 |  * BUGS | 
 |  *      Unimplemented | 
 |  */ | 
 | INT WINAPI GetTypeByNameA(LPSTR lpServiceName, LPGUID lpServiceType) | 
 | { | 
 |    /* tell the user they've got a substandard implementation */ | 
 |    FIXME("wsock32: GetTypeByNameA(%p, %p): stub\n", lpServiceName, lpServiceType); | 
 |     | 
 |    /* some programs may be able to compensate if they know what happened */ | 
 |    SetLastError(ERROR_CALL_NOT_IMPLEMENTED); | 
 |    return SOCKET_ERROR; /* error value */ | 
 | } | 
 |  | 
 |  | 
 | /****************************************************************************** | 
 |  *          GetTypeByNameW     [WSOCK32.1114] | 
 |  * | 
 |  * See GetTypeByNameA. | 
 |  */ | 
 | INT WINAPI GetTypeByNameW(LPWSTR lpServiceName, LPGUID lpServiceType) | 
 | { | 
 |     /* tell the user they've got a substandard implementation */ | 
 |     FIXME("wsock32: GetTypeByNameW(%p, %p): stub\n", lpServiceName, lpServiceType); | 
 |      | 
 |     /* some programs may be able to compensate if they know what happened */ | 
 |     SetLastError(ERROR_CALL_NOT_IMPLEMENTED); | 
 |     return SOCKET_ERROR; /* error value */ | 
 | } | 
 |  | 
 | /****************************************************************************** | 
 |  *          SetServiceA     [WSOCK32.1117] | 
 |  * | 
 |  * Register or unregister a network service with one or more namespaces. | 
 |  * | 
 |  * PARAMETERS | 
 |  *      dwNameSpace        [I] Name space or set of name spaces within which the function will operate | 
 |  *      dwOperation        [I] Operation to perform | 
 |  *      dwFlags            [I] Flags to modify the function's operation | 
 |  *      lpServiceInfo      [I] Pointer to a ASCII SERVICE_INFO structure | 
 |  *      lpServiceAsyncInfo [I] Reserved for future use.  Must be NULL. | 
 |  *      lpdwStatusFlags    [O] Destination for function status information | 
 |  * | 
 |  * RETURNS | 
 |  *      Success: 0. | 
 |  *      Failure: SOCKET_ERROR. GetLastError() can return ERROR_ALREADY_REGISTERED | 
 |  * | 
 |  * NOTES | 
 |  *      Obsolete Microsoft-specific extension to Winsock 1.1, | 
 |  *      Protocol-independent name resolution provides equivalent functionality in Winsock 2. | 
 |  * | 
 |  * BUGS | 
 |  *      Unimplemented. | 
 |  */ | 
 | INT WINAPI SetServiceA(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOA lpServiceInfo, | 
 |                        LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags) | 
 | { | 
 |    /* tell the user they've got a substandard implementation */ | 
 |    FIXME("wsock32: SetServiceA(%u, %u, %u, %p, %p, %p): stub\n", dwNameSpace, dwOperation, dwFlags, | 
 |            lpServiceInfo, lpServiceAsyncInfo, lpdwStatusFlags); | 
 |      | 
 |    /* some programs may be able to compensate if they know what happened */ | 
 |    SetLastError(ERROR_CALL_NOT_IMPLEMENTED); | 
 |    return SOCKET_ERROR; /* error value */  | 
 | } | 
 |  | 
 | /****************************************************************************** | 
 |  *          SetServiceW     [WSOCK32.1118] | 
 |  * | 
 |  * See SetServiceA. | 
 |  */ | 
 | INT WINAPI SetServiceW(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOW lpServiceInfo, | 
 |                        LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags) | 
 | { | 
 |    /* tell the user they've got a substandard implementation */ | 
 |    FIXME("wsock32: SetServiceW(%u, %u, %u, %p, %p, %p): stub\n", dwNameSpace, dwOperation, dwFlags, | 
 |            lpServiceInfo, lpServiceAsyncInfo, lpdwStatusFlags); | 
 |      | 
 |    /* some programs may be able to compensate if they know what happened */ | 
 |    SetLastError(ERROR_CALL_NOT_IMPLEMENTED); | 
 |    return SOCKET_ERROR; /* error value */  | 
 | } | 
 |  | 
 | /****************************************************************************** | 
 |  *          GetServiceA     [WSOCK32.1119] | 
 |  * | 
 |  * Get information about a network service. | 
 |  * | 
 |  * PARAMETERS | 
 |  *      dwNameSpace        [I] Name space or set of name spaces within which the function  | 
 |  *                             will operate. | 
 |  *      lpGuid             [I] Pointer to GUID of network service type. | 
 |  *      lpServiceName      [I] NUL-terminated ASCII string that uniquely represents the name  | 
 |  *                             of the service. | 
 |  *      dwProperties       [I] Flags specifying which information to return in lpBuffer. | 
 |  *      lpBuffer           [O] Pointer to buffer where the function returns an array | 
 |  *                             of NS_SERVICE_INFO. | 
 |  *      lpdwBufferSize     [I/O] Size of lpBuffer.  A greater number on output | 
 |  *                               indicates an error. | 
 |  *      lpServiceAsyncInfo [O] Reserved.  Set to NULL. | 
 |  * | 
 |  * RETURNS | 
 |  *      Success: 0. | 
 |  *      Failure: SOCKET_ERROR. GetLastError() returns ERROR_INSUFFICIENT_BUFFER | 
 |  *               or ERROR_SERVICE_NOT_FOUND. | 
 |  * | 
 |  * NOTES | 
 |  *      Obsolete Microsoft-specific extension to Winsock 1.1, | 
 |  *      Protocol-independent name resolution provides equivalent functionality in Winsock 2. | 
 |  * | 
 |  * BUGS | 
 |  *      Unimplemented. | 
 |  */ | 
 | INT WINAPI GetServiceA(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName, | 
 |                        DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize, | 
 |                        LPSERVICE_ASYNC_INFO lpServiceAsyncInfo) | 
 | { | 
 |    FIXME("(%u, %p, %s, %u, %p, %p, %p): stub\n", dwNameSpace, | 
 |          lpGuid, lpServiceName, dwProperties, lpBuffer, lpdwBufferSize, lpServiceAsyncInfo); | 
 |  | 
 |    /* some programs may be able to compensate if they know what happened */ | 
 |    SetLastError(ERROR_CALL_NOT_IMPLEMENTED); | 
 |    return SOCKET_ERROR; | 
 | } | 
 |  | 
 | /****************************************************************************** | 
 |  *          GetServiceW     [WSOCK32.1120] | 
 |  * | 
 |  * See GetServiceA. | 
 |  */ | 
 | INT WINAPI GetServiceW(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName, | 
 |                        DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize, | 
 |                        LPSERVICE_ASYNC_INFO lpServiceAsyncInfo) | 
 | { | 
 |    FIXME("(%u, %p, %s, %u, %p, %p, %p): stub\n", dwNameSpace, | 
 |          lpGuid, lpServiceName, dwProperties, lpBuffer, lpdwBufferSize, lpServiceAsyncInfo); | 
 |  | 
 |    /* some programs may be able to compensate if they know what happened */ | 
 |    SetLastError(ERROR_CALL_NOT_IMPLEMENTED); | 
 |    return SOCKET_ERROR; | 
 | } |