ReactOS 0.4.17-dev-934-g091855f
dpnet_private.h File Reference
#include <wine/list.h>
#include "winsock2.h"
#include "dplay8.h"
#include "dplobby8.h"
Include dependency graph for dpnet_private.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  IDirectPlay8ClientImpl
 
struct  component
 
struct  IDirectPlay8AddressImpl
 
struct  IDirectPlay8LobbiedApplicationImpl
 
struct  IDirectPlay8ThreadPoolImpl
 
struct  flag_info
 
struct  guid_info
 

Macros

#define FE(x)   { x, #x }
 
#define GE(x)   { &x, #x }
 

Typedefs

typedef struct IDirectPlay8ClientImpl IDirectPlay8ClientImpl
 
typedef struct IDirectPlay8AddressImpl IDirectPlay8AddressImpl
 
typedef struct IDirectPlay8LobbiedApplicationImpl IDirectPlay8LobbiedApplicationImpl
 
typedef struct IDirectPlay8ThreadPoolImpl IDirectPlay8ThreadPoolImpl
 

Functions

HRESULT DPNET_CreateDirectPlay8Client (LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
 
HRESULT DPNET_CreateDirectPlay8Server (LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
 
HRESULT DPNET_CreateDirectPlay8Peer (LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
 
HRESULT DPNET_CreateDirectPlay8Address (LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
 
HRESULT DPNET_CreateDirectPlay8LobbiedApp (LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
 
HRESULT DPNET_CreateDirectPlay8ThreadPool (LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj)
 
HRESULT DPNET_CreateDirectPlay8LobbyClient (IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj)
 
void init_dpn_sp_caps (DPN_SP_CAPS *dpnspcaps)
 
void init_winsock (void)
 
HRESULT enum_services_providers (const GUID *const service, DPN_SERVICE_PROVIDER_INFO *const info_buffer, DWORD *const buf_size, DWORD *const returned)
 

Macro Definition Documentation

◆ FE

#define FE (   x)    { x, #x }

Definition at line 149 of file dpnet_private.h.

◆ GE

#define GE (   x)    { &x, #x }

Definition at line 150 of file dpnet_private.h.

Typedef Documentation

◆ IDirectPlay8AddressImpl

◆ IDirectPlay8ClientImpl

◆ IDirectPlay8LobbiedApplicationImpl

◆ IDirectPlay8ThreadPoolImpl

Function Documentation

◆ DPNET_CreateDirectPlay8Address()

HRESULT DPNET_CreateDirectPlay8Address ( LPCLASSFACTORY  iface,
LPUNKNOWN  punkOuter,
REFIID  riid,
LPVOID *  ppobj 
)

◆ DPNET_CreateDirectPlay8Client()

HRESULT DPNET_CreateDirectPlay8Client ( LPCLASSFACTORY  iface,
LPUNKNOWN  punkOuter,
REFIID  riid,
LPVOID *  ppobj 
)

factories

◆ DPNET_CreateDirectPlay8LobbiedApp()

HRESULT DPNET_CreateDirectPlay8LobbiedApp ( LPCLASSFACTORY  iface,
LPUNKNOWN  punkOuter,
REFIID  riid,
LPVOID *  ppobj 
)

Definition at line 188 of file lobbiedapp.c.

188 {
190
191 TRACE("(%p, %s, %p)\n", punkOuter, debugstr_guid(riid), ppobj);
192
194 if (NULL == app) {
195 *ppobj = NULL;
196 return E_OUTOFMEMORY;
197 }
199 app->ref = 0;
201 riid, ppobj);
202}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
static HRESULT WINAPI IDirectPlay8LobbiedApplicationImpl_QueryInterface(IDirectPlay8LobbiedApplication *iface, REFIID riid, void **ret_iface)
Definition: lobbiedapp.c:44
static const IDirectPlay8LobbiedApplicationVtbl DirectPlay8LobbiedApplication_Vtbl
Definition: lobbiedapp.c:170
#define TRACE(s)
Definition: solgame.cpp:4
IDirectPlay8LobbiedApplication IDirectPlay8LobbiedApplication_iface

◆ DPNET_CreateDirectPlay8LobbyClient()

HRESULT DPNET_CreateDirectPlay8LobbyClient ( IClassFactory *  iface,
IUnknown *  pUnkOuter,
REFIID  riid,
void **  ppobj 
)

Definition at line 560 of file client.c.

561{
563 HRESULT ret;
564
565 TRACE("%p (%p, %s, %p)\n", iface, outer, debugstr_guid(riid), obj);
566
567 client = calloc(1, sizeof(*client));
568 if (!client)
569 {
570 *obj = NULL;
571 return E_OUTOFMEMORY;
572 }
573
574 client->IDirectPlay8LobbyClient_iface.lpVtbl = &DirectPlay8LobbiedClient_Vtbl;
575 client->ref = 1;
576
577 ret = lobbyclient_QueryInterface(&client->IDirectPlay8LobbyClient_iface, riid, obj);
578 lobbyclient_Release(&client->IDirectPlay8LobbyClient_iface);
579
580 return ret;
581}
static ULONG WINAPI lobbyclient_Release(IDirectPlay8LobbyClient *iface)
Definition: client.c:442
static const IDirectPlay8LobbyClientVtbl DirectPlay8LobbiedClient_Vtbl
Definition: client.c:545
static HRESULT WINAPI lobbyclient_QueryInterface(IDirectPlay8LobbyClient *iface, REFIID riid, void **obj)
Definition: client.c:411
return ret
Definition: mutex.c:147
static IUnknown * outer
Definition: compobj.c:82
#define calloc
Definition: rosglue.h:14
static FILE * client
Definition: client.c:37

◆ DPNET_CreateDirectPlay8Peer()

HRESULT DPNET_CreateDirectPlay8Peer ( LPCLASSFACTORY  iface,
LPUNKNOWN  punkOuter,
REFIID  riid,
LPVOID *  ppobj 
)

◆ DPNET_CreateDirectPlay8Server()

HRESULT DPNET_CreateDirectPlay8Server ( LPCLASSFACTORY  iface,
LPUNKNOWN  punkOuter,
REFIID  riid,
LPVOID *  ppobj 
)

◆ DPNET_CreateDirectPlay8ThreadPool()

HRESULT DPNET_CreateDirectPlay8ThreadPool ( LPCLASSFACTORY  iface,
LPUNKNOWN  punkOuter,
REFIID  riid,
LPVOID *  ppobj 
)

Definition at line 157 of file threadpool.c.

158{
160
162
163 if(Client == NULL)
164 {
165 *ppobj = NULL;
166 WARN("Not enough memory\n");
167 return E_OUTOFMEMORY;
168 }
169
170 Client->IDirectPlay8ThreadPool_iface.lpVtbl = &DirectPlay8ThreadPool_Vtbl;
171 Client->ref = 0;
172
173 return IDirectPlay8ThreadPoolImpl_QueryInterface(&Client->IDirectPlay8ThreadPool_iface, riid,
174 ppobj);
175}
#define WARN(fmt,...)
Definition: precomp.h:61
static HRESULT WINAPI IDirectPlay8ThreadPoolImpl_QueryInterface(IDirectPlay8ThreadPool *iface, REFIID riid, void **ret_iface)
Definition: threadpool.c:48
static const IDirectPlay8ThreadPoolVtbl DirectPlay8ThreadPool_Vtbl
Definition: threadpool.c:145
Definition: client.c:31
LONG ref
Definition: client.c:37

◆ enum_services_providers()

HRESULT enum_services_providers ( const GUID *const  service,
DPN_SERVICE_PROVIDER_INFO *const  info_buffer,
DWORD *const  buf_size,
DWORD *const  returned 
)

Definition at line 125 of file peer.c.

127{
128 static const WCHAR serviceproviders[] = L"SOFTWARE\\Microsoft\\DirectPlay8\\Service Providers";
129 static const WCHAR friendly[] = L"Friendly Name";
130 static const WCHAR dp_adapterW[] = L"Local Area Connection - IPv4";
131 static const GUID adapter_guid = {0x4ce725f6, 0xd3c0, 0xdade, {0xba, 0x6f, 0x11, 0xf9, 0x65, 0xbc, 0x42, 0x99}};
132 DWORD req_size = 0;
133 LONG res;
134 HKEY key = NULL;
135 LONG next_key;
136 DWORD index = 0;
137 WCHAR provider[MAX_PATH];
138 DWORD size;
139
140 if(!returned || !buf_size)
141 return E_POINTER;
142
143 if(!service)
144 {
145 *returned = 0;
146
147 res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, serviceproviders, 0, KEY_READ, &key);
149 return DPNERR_DOESNOTEXIST;
150
151 next_key = RegEnumKeyW( key, index, provider, MAX_PATH);
152 while(next_key == ERROR_SUCCESS)
153 {
154 size = 0;
155 res = RegGetValueW(key, provider, friendly, RRF_RT_REG_SZ, NULL, NULL, &size);
156 if(res == ERROR_SUCCESS)
157 {
158 req_size += sizeof(DPN_SERVICE_PROVIDER_INFO) + size;
159
160 (*returned)++;
161 }
162
163 index++;
164 next_key = RegEnumKeyW( key, index, provider, MAX_PATH );
165 }
166
167 }
168 else if(IsEqualGUID(service, &CLSID_DP8SP_TCPIP))
169 {
170 req_size = sizeof(DPN_SERVICE_PROVIDER_INFO) + sizeof(dp_adapterW);
171 }
172 else
173 {
174 FIXME("Application requested a provider we don't handle (yet)\n");
175 return DPNERR_DOESNOTEXIST;
176 }
177
178 if(*buf_size < req_size)
179 {
181
182 *buf_size = req_size;
184 }
185
186 if(!service)
187 {
188 int offset = 0;
189 int count = 0;
190 char *infoend = ((char *)info_buffer + (sizeof(DPN_SERVICE_PROVIDER_INFO) * (*returned)));
191
192 index = 0;
193 next_key = RegEnumKeyW( key, index, provider, MAX_PATH);
194 while(next_key == ERROR_SUCCESS)
195 {
196 size = 0;
197 res = RegGetValueW(key, provider, friendly, RRF_RT_REG_SZ, NULL, NULL, &size);
198 if(res == ERROR_SUCCESS)
199 {
200 info_buffer[count].guid = CLSID_DP8SP_TCPIP;
201 info_buffer[count].pwszName = (LPWSTR)(infoend + offset);
202
203 RegGetValueW(key, provider, friendly, RRF_RT_REG_SZ, NULL, info_buffer[count].pwszName, &size);
204
205 offset += size;
206 count++;
207 }
208
209 index++;
210 next_key = RegEnumKeyW(key, index, provider, MAX_PATH);
211 }
212 }
213 else
214 {
215 info_buffer->pwszName = (LPWSTR)(info_buffer + 1);
216 lstrcpyW(info_buffer->pwszName, dp_adapterW);
217 info_buffer->guid = adapter_guid;
218 *returned = 1;
219 }
220
222
223 return DPN_OK;
224}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
#define MAX_PATH
Definition: compat.h:34
#define lstrcpyW
Definition: compat.h:749
#define DPN_OK
Definition: dplay8.h:75
#define DPNERR_DOESNOTEXIST
Definition: dplay8.h:99
#define DPNERR_BUFFERTOOSMALL
Definition: dplay8.h:90
struct _DPN_SERVICE_PROVIDER_INFO DPN_SERVICE_PROVIDER_INFO
#define L(x)
Definition: resources.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint res
Definition: glext.h:9613
GLsizeiptr size
Definition: glext.h:5919
GLintptr offset
Definition: glext.h:5920
GLuint index
Definition: glext.h:6031
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define KEY_READ
Definition: nt_native.h:1026
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
Definition: copy.c:22
uint16_t * LPWSTR
Definition: typedefs.h:56
#define E_POINTER
Definition: winerror.h:3480
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define RRF_RT_REG_SZ
Definition: winreg.h:58

Referenced by IDirectPlay8ClientImpl_EnumServiceProviders(), IDirectPlay8PeerImpl_EnumServiceProviders(), and IDirectPlay8ServerImpl_EnumServiceProviders().

◆ init_dpn_sp_caps()

void init_dpn_sp_caps ( DPN_SP_CAPS *  dpnspcaps)

Definition at line 622 of file peer.c.

623{
624 dpnspcaps->dwSize = sizeof(DPN_SP_CAPS);
627 dpnspcaps->dwNumThreads = 3;
628 dpnspcaps->dwDefaultEnumCount = 5;
629 dpnspcaps->dwDefaultEnumRetryInterval = 1500;
630 dpnspcaps->dwDefaultEnumTimeout = 1500;
631 dpnspcaps->dwMaxEnumPayloadSize = 983;
632 dpnspcaps->dwBuffersPerThread = 1;
633 dpnspcaps->dwSystemBufferSize = 0x10000;
634};
#define DPNSPCAPS_SUPPORTSTHREADPOOL
Definition: dplay8.h:227
#define DPNSPCAPS_SUPPORTSALLADAPTERS
Definition: dplay8.h:226
struct _DPN_SP_CAPS DPN_SP_CAPS
#define DPNSPCAPS_SUPPORTSDPNSRV
Definition: dplay8.h:224
#define DPNSPCAPS_SUPPORTSBROADCAST
Definition: dplay8.h:225
DWORD dwNumThreads
Definition: dplay8.h:333
DWORD dwDefaultEnumRetryInterval
Definition: dplay8.h:335
DWORD dwDefaultEnumCount
Definition: dplay8.h:334
DWORD dwDefaultEnumTimeout
Definition: dplay8.h:336
DWORD dwFlags
Definition: dplay8.h:332
DWORD dwSystemBufferSize
Definition: dplay8.h:339
DWORD dwMaxEnumPayloadSize
Definition: dplay8.h:337
DWORD dwBuffersPerThread
Definition: dplay8.h:338
DWORD dwSize
Definition: dplay8.h:331

Referenced by DPNET_CreateDirectPlay8Client(), and DPNET_CreateDirectPlay8Peer().

◆ init_winsock()

void init_winsock ( void  )

Definition at line 55 of file dpnet_main.c.

56{
59}
BOOL WINAPI InitOnceExecuteOnce(_Inout_ PINIT_ONCE InitOnce, _In_ __callback PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ LPVOID *Context)
Definition: InitOnce.c:12
static BOOL WINAPI winsock_startup(INIT_ONCE *once, void *param, void **context)
Definition: dpnet_main.c:42
static INIT_ONCE init_once
Definition: vfwcapture.c:981
RTL_RUN_ONCE INIT_ONCE
Definition: winbase.h:3654
#define INIT_ONCE_STATIC_INIT
Definition: winbase.h:591