|  | /* | 
|  | * 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; | 
|  | } |