-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 This patch adds stubs for the functions listed in Bug #416, SetService{A,W} and GetTypeByName{A,W}. License: LGPL - -- Andrew :-) Please avoid sending me Word or PowerPoint attachments. See http://www.fsf.org/philosophy/no-word-attachments.html -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) iD8DBQE94VftSE/kMce1ABARAipUAJ0ew9mD8eqn+2HrS1Yk72lvy+h4QACfaIeV uPloEX9A/xk4ptC6l0Xl5Z4= =K3YG -----END PGP SIGNATURE-----
/* * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "config.h" #include <assert.h> #include "nspapi.h" #include "winerror.h" #include "winsock2.h" #include "winbase.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winsock); /****************************************************************************** * GetTypeByNameA [WSOCK32.1113] * * Retrieves a service type GUID for a network service specified by name * * PARAMETERS * lpServiceName -- Pointer to a zero-terminated ASCII string that uniquely represents the name of the service * lpServiceType -- Pointer to a variable to receive a GUID that specifies the type of network service * * RETURNS * Zero on success, SOCKET_ERROR on failure. * 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] * * Retrieves a service type GUID for a network service specified by name * * PARAMETERS * lpServiceName -- Pointer to a zero-terminated Unicode string that uniquely represents the name of the service * lpServiceType -- Pointer to a variable to receive a GUID that specifies the type of network service * * RETURNS * Zero on success, SOCKET_ERROR on failure. * 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 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] * * Registers or unregisters a network service with one or more name spaces * * PARAMETERS * dwNameSpace -- Name space or set of name spaces within which the function will operate * dwOperation -- Specifies the operation that the function will perform * dwFlags -- Set of bit flags that modify the function's operation * lpServiceInfo -- Pointer to a ASCII SERVICE_INFO structure * lpServiceAsyncInfo -- Reserved for future use. Must be NULL. * lpdwStatusFlags -- Set of bit flags that receive function status information * * RETURNS * SOCKET_ERROR on failure. * 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) { /* lpServiceAsyncInfo must be null */ assert(lpServiceAsyncInfo == NULL); /* tell the user they've got a substandard implementation */ FIXME("wsock32: SetServiceA(%lu, %lu, %lu, %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] * * Registers or unregisters a network service with one or more name spaces * * PARAMETERS * dwNameSpace -- Name space or set of name spaces within which the function will operate * dwOperation -- Specifies the operation that the function will perform * dwFlags -- Set of bit flags that modify the function's operation * lpServiceInfo -- Pointer to a Unicode SERVICE_INFO structure * lpServiceAsyncInfo -- Reserved for future use. Must be NULL. * lpdwStatusFlags -- Set of bit flags that receive function status information * * RETURNS * SOCKET_ERROR on failure. * 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 SetServiceW(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOW lpServiceInfo, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags) { /* lpServiceAsyncInfo must be null */ assert(lpServiceAsyncInfo == NULL); /* tell the user they've got a substandard implementation */ FIXME("wsock32: SetServiceW(%lu, %lu, %lu, %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 */ }
? patch-ntdll ? patch-commdlg ? patch-commdlg2 ? colordlg-patch ? patch-wsock32 ? dlls/ntdll/warnings ? dlls/wsock32/service.c ? tools/missing Index: dlls/wsock32/Makefile.in =================================================================== RCS file: /home/wine/wine/dlls/wsock32/Makefile.in,v retrieving revision 1.8 diff -u -3 -p -u -r1.8 Makefile.in --- dlls/wsock32/Makefile.in 17 May 2002 03:37:15 -0000 1.8 +++ dlls/wsock32/Makefile.in 24 Nov 2002 22:04:23 -0000 @@ -10,7 +10,8 @@ SYMBOLFILE = $(MODULE).tmp.o C_SRCS = \ protocol.c \ - socket.c + socket.c \ + service.c @MAKE_DLL_RULES@ Index: dlls/wsock32/wsock32.spec =================================================================== RCS file: /home/wine/wine/dlls/wsock32/wsock32.spec,v retrieving revision 1.11 diff -u -3 -p -u -r1.11 wsock32.spec --- dlls/wsock32/wsock32.spec 21 Jun 2002 19:15:51 -0000 1.11 +++ dlls/wsock32/wsock32.spec 24 Nov 2002 22:04:23 -0000 @@ -64,12 +64,12 @@ 1110 stub GetAddressByNameW 1111 stdcall EnumProtocolsA(ptr ptr ptr) EnumProtocolsA 1112 stdcall EnumProtocolsW(ptr ptr ptr) EnumProtocolsW -#1113 stub GetTypeByNameA -#1114 stub GetTypeByNameW +1113 stdcall GetTypeByNameA(str ptr) GetTypeByNameA +1114 stdcall GetTypeByNameW(wstr ptr) GetTypeByNameW #1115 stub GetNameByTypeA #1116 stub GetNameByTypeW -#1117 stub SetServiceA -#1118 stub SetServiceW +1117 stdcall SetServiceA(long long long ptr ptr ptr) SetServiceA +1118 stdcall SetServiceW(long long long ptr ptr ptr) SetServiceW #1119 stub GetServiceA #1120 stub GetServiceW #1130 stub NPLoadNameSpaces Index: include/nspapi.h =================================================================== RCS file: /home/wine/wine/include/nspapi.h,v retrieving revision 1.3 diff -u -3 -p -u -r1.3 nspapi.h --- include/nspapi.h 31 May 2002 23:06:48 -0000 1.3 +++ include/nspapi.h 24 Nov 2002 22:04:24 -0000 @@ -22,6 +22,7 @@ #define _WINE_NSPAPI_ #include "windef.h" +#include "wtypes.h" #ifdef __cplusplus extern "C" { @@ -71,12 +72,103 @@ typedef struct _PROTOCOL_INFOW LPWSTR lpProtocol; } PROTOCOL_INFOW; +typedef struct _SERVICE_ADDRESS +{ + DWORD dwAddressType; + DWORD dwAddressFlags; + DWORD dwAddressLength; + DWORD dwPrincipalLength; + BYTE* lpAddress; + BYTE* lpPrincipal; +} SERVICE_ADDRESS; + +typedef struct _SERVICE_ADDRESSES +{ + DWORD dwAddressCount; + SERVICE_ADDRESS Addresses[1]; +} SERVICE_ADDRESSES, *LPSERVICE_ADDRESSES; + +typedef struct _SERVICE_INFOA +{ + LPGUID lpServiceType; + LPSTR lpServiceName; + LPSTR lpComment; + LPSTR lpLocale; + DWORD dwDisplayHint; + DWORD dwVersion; + DWORD dwTime; + LPSTR lpMachineName; + LPSERVICE_ADDRESSES lpServiceAddress; + BLOB ServiceSpecificInfo; +} SERVICE_INFOA, *LPSERVICE_INFOA; + +typedef struct _SERVICE_INFOW +{ + LPGUID lpServiceType; + LPWSTR lpServiceName; + LPWSTR lpComment; + LPWSTR lpLocale; + DWORD dwDisplayHint; + DWORD dwVersion; + DWORD dwTime; + LPSTR lpMachineName; + LPSERVICE_ADDRESSES lpServiceAddress; + BLOB ServiceSpecificInfo; /* May point to SERVICE_TYPE_INFO_ABS */ +} SERVICE_INFOW, *LPSERVICE_INFOW; + +DECL_WINELIB_TYPE_AW(SERVICE_INFO); + +typedef struct _SERVICE_TYPE_VALUE_ABSA +{ + DWORD dwNameSpace; /* Name space or set of name spaces */ + DWORD dwValueType; /* Type of the value data */ + DWORD dwValueSize; /* Size of the value data */ + LPSTR lpValueName; /* Name of the value */ + PVOID lpValue; /* Pointer to the value data */ +} SERVICE_TYPE_VALUE_ABSA; + +typedef struct _SERVICE_TYPE_VALUE_ABSW +{ + DWORD dwNameSpace; /* Name space or set of name spaces */ + DWORD dwValueType; /* Type of the value data */ + DWORD dwValueSize; /* Size of the value data */ + LPWSTR lpValueName; /* Name of the value */ + PVOID lpValue; /* Pointer to the value data */ +} SERVICE_TYPE_VALUE_ABSW; + +DECL_WINELIB_TYPE_AW(SERVICE_TYPE_VALUE_ABS); + +typedef struct _SERVICE_TYPE_INFO_ABSA +{ + LPSTR lpTypeName; /* Name of the network service type */ + DWORD dwValueCount; /* Number of SERVICE_TYPE_VALUE_ABS structures */ + SERVICE_TYPE_VALUE_ABSA Values[1]; /* Array of SERVICE_TYPE_VALUE_ABS structures */ +} SERVICE_TYPE_INFO_ABSA; + +typedef struct _SERVICE_TYPE_INFO_ABSW +{ + LPWSTR lpTypeName; /* Name of the network service type */ + DWORD dwValueCount; /* Number of SERVICE_TYPE_VALUE_ABS structures */ + SERVICE_TYPE_VALUE_ABSW Values[1]; /* Array of SERVICE_TYPE_VALUE_ABS structures */ +} SERVICE_TYPE_INFO_ABSW; + +DECL_WINELIB_TYPE_AW(SERVICE_TYPE_INFO_ABS); + +typedef struct _SERVICE_ASYNC_INFO +{ +} SERVICE_ASYNC_INFO, *LPSERVICE_ASYNC_INFO; /* Reserved for future use. Pointer must be set to NULL. */ /* * function prototypes */ - - +INT WINAPI GetTypeByNameA(LPSTR lpServiceName, LPGUID lpServiceType); +INT WINAPI GetTypeByNameW(LPWSTR lpServiceName, LPGUID lpServiceType); +#define GetTypeByName WINELIB_NAME_AW(GetTypeByName) +INT WINAPI SetServiceA(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOA lpServiceInfo, + LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags); +INT WINAPI SetServiceW(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOW lpServiceInfo, + LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags); +#define SetService WINELIB_NAME_AW(SetService) #ifdef __cplusplus } /* extern "C" */