Bug #416: Missing Exports in Winsocks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



-----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" */

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux