4 * Copyright 2004 Raphael Junqueira
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
32 #include "wine/debug.h"
35 #include "dpnet_private.h"
37 WINE_DEFAULT_DEBUG_CHANNEL(dpnet
);
39 static inline IDirectPlay8ClientImpl
*impl_from_IDirectPlay8Client(IDirectPlay8Client
*iface
)
41 return CONTAINING_RECORD(iface
, IDirectPlay8ClientImpl
, IDirectPlay8Client_iface
);
44 /* IDirectPlay8Client IUnknown parts follow: */
45 static HRESULT WINAPI
IDirectPlay8ClientImpl_QueryInterface(IDirectPlay8Client
*iface
, REFIID riid
,
48 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
50 if (IsEqualGUID(riid
, &IID_IUnknown
)
51 || IsEqualGUID(riid
, &IID_IDirectPlay8Client
)) {
52 IUnknown_AddRef(iface
);
57 WARN("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppobj
);
61 static ULONG WINAPI
IDirectPlay8ClientImpl_AddRef(IDirectPlay8Client
*iface
)
63 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
64 ULONG ref
= InterlockedIncrement(&This
->ref
);
66 TRACE("(%p) ref=%u\n", This
, ref
);
71 static ULONG WINAPI
IDirectPlay8ClientImpl_Release(IDirectPlay8Client
*iface
)
73 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
74 ULONG ref
= InterlockedDecrement(&This
->ref
);
76 TRACE("(%p) ref=%u\n", This
, ref
);
79 HeapFree(GetProcessHeap(), 0, This
);
84 /* IDirectPlay8Client Interface follow: */
86 static HRESULT WINAPI
IDirectPlay8ClientImpl_Initialize(IDirectPlay8Client
*iface
,
87 void * const pvUserContext
, const PFNDPNMESSAGEHANDLER pfn
, const DWORD dwFlags
)
89 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
91 TRACE("(%p):(%p,%p,%x)\n", This
, pvUserContext
, pfn
, dwFlags
);
94 return DPNERR_INVALIDPARAM
;
96 This
->usercontext
= pvUserContext
;
97 This
->msghandler
= pfn
;
98 This
->flags
= dwFlags
;
103 static HRESULT WINAPI
IDirectPlay8ClientImpl_EnumServiceProviders(IDirectPlay8Client
*iface
,
104 const GUID
* const pguidServiceProvider
, const GUID
* const pguidApplication
,
105 DPN_SERVICE_PROVIDER_INFO
* const pSPInfoBuffer
, PDWORD
const pcbEnumData
,
106 PDWORD
const pcReturned
, const DWORD dwFlags
)
108 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
109 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
113 static HRESULT WINAPI
IDirectPlay8ClientImpl_EnumHosts(IDirectPlay8Client
*iface
,
114 PDPN_APPLICATION_DESC
const pApplicationDesc
, IDirectPlay8Address
* const pAddrHost
,
115 IDirectPlay8Address
* const pDeviceInfo
, void * const pUserEnumData
,
116 const DWORD dwUserEnumDataSize
, const DWORD dwEnumCount
, const DWORD dwRetryInterval
,
117 const DWORD dwTimeOut
, void * const pvUserContext
, DPNHANDLE
* const pAsyncHandle
,
120 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
121 FIXME("(%p):(%p,%p,%x): Stub\n", This
, pvUserContext
, pAsyncHandle
, dwFlags
);
125 static HRESULT WINAPI
IDirectPlay8ClientImpl_CancelAsyncOperation(IDirectPlay8Client
*iface
,
126 const DPNHANDLE hAsyncHandle
, const DWORD dwFlags
)
128 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
129 FIXME("(%p):(%u,%x): Stub\n", This
, hAsyncHandle
, dwFlags
);
133 static HRESULT WINAPI
IDirectPlay8ClientImpl_Connect(IDirectPlay8Client
*iface
,
134 const DPN_APPLICATION_DESC
* const pdnAppDesc
, IDirectPlay8Address
* const pHostAddr
,
135 IDirectPlay8Address
* const pDeviceInfo
, const DPN_SECURITY_DESC
* const pdnSecurity
,
136 const DPN_SECURITY_CREDENTIALS
* const pdnCredentials
, const void * const pvUserConnectData
,
137 const DWORD dwUserConnectDataSize
, void * const pvAsyncContext
,
138 DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
140 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
141 FIXME("(%p):(%p,%p,%x): Stub\n", This
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
145 static HRESULT WINAPI
IDirectPlay8ClientImpl_Send(IDirectPlay8Client
*iface
,
146 const DPN_BUFFER_DESC
* const prgBufferDesc
, const DWORD cBufferDesc
, const DWORD dwTimeOut
,
147 void * const pvAsyncContext
, DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
149 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
150 FIXME("(%p):(%p,%p,%x): Stub\n", This
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
154 static HRESULT WINAPI
IDirectPlay8ClientImpl_GetSendQueueInfo(IDirectPlay8Client
*iface
,
155 DWORD
* const pdwNumMsgs
, DWORD
* const pdwNumBytes
, const DWORD dwFlags
)
157 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
158 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
162 static HRESULT WINAPI
IDirectPlay8ClientImpl_GetApplicationDesc(IDirectPlay8Client
*iface
,
163 DPN_APPLICATION_DESC
* const pAppDescBuffer
, DWORD
* const pcbDataSize
, const DWORD dwFlags
)
165 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
166 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
170 static HRESULT WINAPI
IDirectPlay8ClientImpl_SetClientInfo(IDirectPlay8Client
*iface
,
171 const DPN_PLAYER_INFO
* const pdpnPlayerInfo
, void * const pvAsyncContext
,
172 DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
174 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
175 FIXME("(%p):(%p,%p,%x): Stub\n", This
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
179 static HRESULT WINAPI
IDirectPlay8ClientImpl_GetServerInfo(IDirectPlay8Client
*iface
,
180 DPN_PLAYER_INFO
* const pdpnPlayerInfo
, DWORD
* const pdwSize
, const DWORD dwFlags
)
182 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
183 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
187 static HRESULT WINAPI
IDirectPlay8ClientImpl_GetServerAddress(IDirectPlay8Client
*iface
,
188 IDirectPlay8Address
** const pAddress
, const DWORD dwFlags
)
190 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
191 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
195 static HRESULT WINAPI
IDirectPlay8ClientImpl_Close(IDirectPlay8Client
*iface
, const DWORD dwFlags
)
197 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
198 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
202 static HRESULT WINAPI
IDirectPlay8ClientImpl_ReturnBuffer(IDirectPlay8Client
*iface
,
203 const DPNHANDLE hBufferHandle
, const DWORD dwFlags
)
205 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
206 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
210 static HRESULT WINAPI
IDirectPlay8ClientImpl_GetCaps(IDirectPlay8Client
*iface
,
211 DPN_CAPS
* const pdpCaps
, const DWORD dwFlags
)
213 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
214 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
218 static HRESULT WINAPI
IDirectPlay8ClientImpl_SetCaps(IDirectPlay8Client
*iface
,
219 const DPN_CAPS
* const pdpCaps
, const DWORD dwFlags
)
221 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
222 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
226 static HRESULT WINAPI
IDirectPlay8ClientImpl_SetSPCaps(IDirectPlay8Client
*iface
,
227 const GUID
* const pguidSP
, const DPN_SP_CAPS
* const pdpspCaps
, const DWORD dwFlags
)
229 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
230 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
234 static HRESULT WINAPI
IDirectPlay8ClientImpl_GetSPCaps(IDirectPlay8Client
*iface
,
235 const GUID
* const pguidSP
, DPN_SP_CAPS
* const pdpspCaps
, const DWORD dwFlags
)
237 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
239 TRACE("(%p)->(%p,%p,%x)\n", This
, pguidSP
, pdpspCaps
, dwFlags
);
241 if(!This
->msghandler
)
242 return DPNERR_UNINITIALIZED
;
244 if(pdpspCaps
->dwSize
!= sizeof(DPN_SP_CAPS
))
246 return DPNERR_INVALIDPARAM
;
249 *pdpspCaps
= This
->spcaps
;
254 static HRESULT WINAPI
IDirectPlay8ClientImpl_GetConnectionInfo(IDirectPlay8Client
*iface
,
255 DPN_CONNECTION_INFO
* const pdpConnectionInfo
, const DWORD dwFlags
)
257 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
258 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
262 static HRESULT WINAPI
IDirectPlay8ClientImpl_RegisterLobby(IDirectPlay8Client
*iface
,
263 const DPNHANDLE dpnHandle
,
264 struct IDirectPlay8LobbiedApplication
* const pIDP8LobbiedApplication
, const DWORD dwFlags
)
266 IDirectPlay8ClientImpl
*This
= impl_from_IDirectPlay8Client(iface
);
267 FIXME("(%p):(%x): Stub\n", This
, dwFlags
);
271 static const IDirectPlay8ClientVtbl DirectPlay8Client_Vtbl
=
273 IDirectPlay8ClientImpl_QueryInterface
,
274 IDirectPlay8ClientImpl_AddRef
,
275 IDirectPlay8ClientImpl_Release
,
276 IDirectPlay8ClientImpl_Initialize
,
277 IDirectPlay8ClientImpl_EnumServiceProviders
,
278 IDirectPlay8ClientImpl_EnumHosts
,
279 IDirectPlay8ClientImpl_CancelAsyncOperation
,
280 IDirectPlay8ClientImpl_Connect
,
281 IDirectPlay8ClientImpl_Send
,
282 IDirectPlay8ClientImpl_GetSendQueueInfo
,
283 IDirectPlay8ClientImpl_GetApplicationDesc
,
284 IDirectPlay8ClientImpl_SetClientInfo
,
285 IDirectPlay8ClientImpl_GetServerInfo
,
286 IDirectPlay8ClientImpl_GetServerAddress
,
287 IDirectPlay8ClientImpl_Close
,
288 IDirectPlay8ClientImpl_ReturnBuffer
,
289 IDirectPlay8ClientImpl_GetCaps
,
290 IDirectPlay8ClientImpl_SetCaps
,
291 IDirectPlay8ClientImpl_SetSPCaps
,
292 IDirectPlay8ClientImpl_GetSPCaps
,
293 IDirectPlay8ClientImpl_GetConnectionInfo
,
294 IDirectPlay8ClientImpl_RegisterLobby
297 HRESULT
DPNET_CreateDirectPlay8Client(IClassFactory
*iface
, IUnknown
*pUnkOuter
, REFIID riid
, void **ppv
)
299 IDirectPlay8ClientImpl
* client
;
302 TRACE("(%p, %s, %p)\n", pUnkOuter
, debugstr_guid(riid
), ppv
);
307 return CLASS_E_NOAGGREGATION
;
309 client
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectPlay8ClientImpl
));
311 return E_OUTOFMEMORY
;
313 client
->IDirectPlay8Client_iface
.lpVtbl
= &DirectPlay8Client_Vtbl
;
316 init_dpn_sp_caps(&client
->spcaps
);
318 hr
= IDirectPlay8ClientImpl_QueryInterface(&client
->IDirectPlay8Client_iface
, riid
, ppv
);
319 IDirectPlay8ClientImpl_Release(&client
->IDirectPlay8Client_iface
);