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	26 Jan 2003 00:39:56 -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.12
diff -u -3 -p -u -r1.12 wsock32.spec
--- dlls/wsock32/wsock32.spec	12 Dec 2002 02:20:47 -0000	1.12
+++ dlls/wsock32/wsock32.spec	26 Jan 2003 00:39:57 -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	26 Jan 2003 00:39:57 -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" */--- /dev/null	Thu Jan  1 01:00:00 1970

diff -u /dev/null /dlls/wsock32/service.c
+++ dlls/wsock32/service.c	Sun Nov 24 22:15:13 2002
@@ -0,0 +1,174 @@
+/*
+ * 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 */ 
+}     
