4 * Copyright 2004 Raphael Junqueira
5 * Copyright 2008 Alexander N. Sørnes <alex@thehandofagony.com>
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
33 #include "wine/debug.h"
36 #include "dpnet_private.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(dpnet
);
40 static inline IDirectPlay8PeerImpl
*impl_from_IDirectPlay8Peer(IDirectPlay8Peer
*iface
)
42 return CONTAINING_RECORD(iface
, IDirectPlay8PeerImpl
, IDirectPlay8Peer_iface
);
45 /* IUnknown interface follows */
46 static HRESULT WINAPI
IDirectPlay8PeerImpl_QueryInterface(IDirectPlay8Peer
*iface
, REFIID riid
,
49 IDirectPlay8PeerImpl
* This
= impl_from_IDirectPlay8Peer(iface
);
51 if(IsEqualGUID(riid
, &IID_IUnknown
) ||
52 IsEqualGUID(riid
, &IID_IDirectPlay8Peer
))
54 IUnknown_AddRef(iface
);
59 WARN("(%p)->(%s,%p): not found\n", This
, debugstr_guid(riid
), ppobj
);
63 static ULONG WINAPI
IDirectPlay8PeerImpl_AddRef(IDirectPlay8Peer
*iface
)
65 IDirectPlay8PeerImpl
* This
= impl_from_IDirectPlay8Peer(iface
);
66 ULONG RefCount
= InterlockedIncrement(&This
->ref
);
71 static ULONG WINAPI
IDirectPlay8PeerImpl_Release(IDirectPlay8Peer
*iface
)
73 IDirectPlay8PeerImpl
* This
= impl_from_IDirectPlay8Peer(iface
);
74 ULONG RefCount
= InterlockedDecrement(&This
->ref
);
77 HeapFree(GetProcessHeap(), 0, This
);
82 /* IDirectPlay8Peer interface follows */
84 static HRESULT WINAPI
IDirectPlay8PeerImpl_Initialize(IDirectPlay8Peer
*iface
,
85 void * const pvUserContext
, const PFNDPNMESSAGEHANDLER pfn
, const DWORD dwFlags
)
87 FIXME("(%p)->(%p,%p,%x): stub\n", iface
, pvUserContext
, pfn
, dwFlags
);
89 return DPNERR_GENERIC
;
92 static HRESULT WINAPI
IDirectPlay8PeerImpl_EnumServiceProviders(IDirectPlay8Peer
*iface
,
93 const GUID
* const pguidServiceProvider
, const GUID
* const pguidApplication
,
94 DPN_SERVICE_PROVIDER_INFO
* const pSPInfoBuffer
, DWORD
* const pcbEnumData
,
95 DWORD
* const pcReturned
, const DWORD dwFlags
)
97 FIXME("(%p)->(%p,%p,%p,%p,%p,%x): stub\n", iface
, pguidServiceProvider
, pguidApplication
, pSPInfoBuffer
, pcbEnumData
, pcReturned
, dwFlags
);
98 return DPNERR_GENERIC
;
101 static HRESULT WINAPI
IDirectPlay8PeerImpl_CancelAsyncOperation(IDirectPlay8Peer
*iface
,
102 const DPNHANDLE hAsyncHandle
, const DWORD dwFlags
)
104 FIXME("(%p)->(%x,%x): stub\n", iface
, hAsyncHandle
, dwFlags
);
106 return DPNERR_GENERIC
;
109 static HRESULT WINAPI
IDirectPlay8PeerImpl_Connect(IDirectPlay8Peer
*iface
,
110 const DPN_APPLICATION_DESC
* const pdnAppDesc
, IDirectPlay8Address
* const pHostAddr
,
111 IDirectPlay8Address
* const pDeviceInfo
, const DPN_SECURITY_DESC
* const pdnSecurity
,
112 const DPN_SECURITY_CREDENTIALS
* const pdnCredentials
, const void * const pvUserConnectData
,
113 const DWORD dwUserConnectDataSize
, void * const pvPlayerContext
,
114 void * const pvAsyncContext
, DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
116 FIXME("(%p)->(%p,%p,%p,%p,%p,%p,%x,%p,%p,%p,%x): stub\n", iface
, pdnAppDesc
, pHostAddr
, pDeviceInfo
, pdnSecurity
, pdnCredentials
, pvUserConnectData
, dwUserConnectDataSize
, pvPlayerContext
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
118 return DPNERR_GENERIC
;
121 static HRESULT WINAPI
IDirectPlay8PeerImpl_SendTo(IDirectPlay8Peer
*iface
, const DPNID dpnId
,
122 const DPN_BUFFER_DESC
*pBufferDesc
, const DWORD cBufferDesc
, const DWORD dwTimeOut
,
123 void * const pvAsyncContext
, DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
125 FIXME("(%p)->(%x,%p,%x,%x,%p,%p,%x): stub\n", iface
, dpnId
, pBufferDesc
, cBufferDesc
, dwTimeOut
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
127 return DPNERR_GENERIC
;
130 static HRESULT WINAPI
IDirectPlay8PeerImpl_GetSendQueueInfo(IDirectPlay8Peer
*iface
,
131 const DPNID dpnid
, DWORD
* const pdwNumMsgs
, DWORD
* const pdwNumBytes
, const DWORD dwFlags
)
133 FIXME("(%p)->(%x,%p,%p,%x): stub\n", iface
, dpnid
, pdwNumMsgs
, pdwNumBytes
, dwFlags
);
135 return DPNERR_GENERIC
;
138 static HRESULT WINAPI
IDirectPlay8PeerImpl_Host(IDirectPlay8Peer
*iface
,
139 const DPN_APPLICATION_DESC
* const pdnAppDesc
, IDirectPlay8Address
** const prgpDeviceInfo
,
140 const DWORD cDeviceInfo
, const DPN_SECURITY_DESC
* const pdpSecurity
,
141 const DPN_SECURITY_CREDENTIALS
* const pdpCredentials
, void * const pvPlayerContext
,
144 FIXME("(%p)->(%p,%p,%x,%p,%p,%p,%x): stub\n", iface
, pdnAppDesc
, prgpDeviceInfo
, cDeviceInfo
, pdpSecurity
, pdpCredentials
, pvPlayerContext
, dwFlags
);
146 return DPNERR_GENERIC
;
149 static HRESULT WINAPI
IDirectPlay8PeerImpl_GetApplicationDesc(IDirectPlay8Peer
*iface
,
150 DPN_APPLICATION_DESC
* const pAppDescBuffer
, DWORD
* const pcbDataSize
, const DWORD dwFlags
)
152 FIXME("(%p)->(%p,%p,%x): stub\n", iface
, pAppDescBuffer
, pcbDataSize
, dwFlags
);
154 return DPNERR_GENERIC
;
157 static HRESULT WINAPI
IDirectPlay8PeerImpl_SetApplicationDesc(IDirectPlay8Peer
*iface
,
158 const DPN_APPLICATION_DESC
* const pad
, const DWORD dwFlags
)
160 FIXME("(%p)->(%p,%x): stub\n", iface
, pad
, dwFlags
);
162 return DPNERR_GENERIC
;
165 static HRESULT WINAPI
IDirectPlay8PeerImpl_CreateGroup(IDirectPlay8Peer
*iface
,
166 const DPN_GROUP_INFO
* const pdpnGroupInfo
, void * const pvGroupContext
,
167 void * const pvAsyncContext
, DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
169 FIXME("(%p)->(%p,%p,%p,%p,%x): stub\n", iface
, pdpnGroupInfo
, pvGroupContext
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
171 return DPNERR_GENERIC
;
174 static HRESULT WINAPI
IDirectPlay8PeerImpl_DestroyGroup(IDirectPlay8Peer
*iface
,
175 const DPNID idGroup
, void * const pvAsyncContext
, DPNHANDLE
* const phAsyncHandle
,
178 FIXME("(%p)->(%x,%p,%p,%x): stub\n", iface
, idGroup
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
180 return DPNERR_GENERIC
;
183 static HRESULT WINAPI
IDirectPlay8PeerImpl_AddPlayerToGroup(IDirectPlay8Peer
*iface
,
184 const DPNID idGroup
, const DPNID idClient
, void * const pvAsyncContext
,
185 DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
187 FIXME("(%p)->(%x,%x,%p,%p,%x): stub\n", iface
, idGroup
, idClient
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
189 return DPNERR_GENERIC
;
192 static HRESULT WINAPI
IDirectPlay8PeerImpl_RemovePlayerFromGroup(IDirectPlay8Peer
*iface
,
193 const DPNID idGroup
, const DPNID idClient
, void * const pvAsyncContext
,
194 DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
196 FIXME("(%p)->(%x,%x,%p,%p,%x): stub\n", iface
, idGroup
, idClient
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
198 return DPNERR_GENERIC
;
201 static HRESULT WINAPI
IDirectPlay8PeerImpl_SetGroupInfo(IDirectPlay8Peer
*iface
, const DPNID dpnid
,
202 DPN_GROUP_INFO
* const pdpnGroupInfo
, void * const pvAsyncContext
,
203 DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
205 FIXME("(%p)->(%x,%p,%p,%p,%x): stub\n", iface
, dpnid
, pdpnGroupInfo
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
207 return DPNERR_GENERIC
;
210 static HRESULT WINAPI
IDirectPlay8PeerImpl_GetGroupInfo(IDirectPlay8Peer
*iface
, const DPNID dpnid
,
211 DPN_GROUP_INFO
* const pdpnGroupInfo
, DWORD
* const pdwSize
, const DWORD dwFlags
)
213 FIXME("(%p)->(%x,%p,%p,%x): stub\n", iface
, dpnid
, pdpnGroupInfo
, pdwSize
, dwFlags
);
215 return DPNERR_GENERIC
;
218 static HRESULT WINAPI
IDirectPlay8PeerImpl_EnumPlayersAndGroups(IDirectPlay8Peer
*iface
,
219 DPNID
* const prgdpnid
, DWORD
* const pcdpnid
, const DWORD dwFlags
)
221 FIXME("(%p)->(%p,%p,%x): stub\n", iface
, prgdpnid
, pcdpnid
, dwFlags
);
223 return DPNERR_GENERIC
;
226 static HRESULT WINAPI
IDirectPlay8PeerImpl_EnumGroupMembers(IDirectPlay8Peer
*iface
,
227 const DPNID dpnid
, DPNID
* const prgdpnid
, DWORD
* const pcdpnid
, const DWORD dwFlags
)
229 FIXME("(%p)->(%x,%p,%p,%x): stub\n", iface
, dpnid
, prgdpnid
, pcdpnid
, dwFlags
);
231 return DPNERR_GENERIC
;
234 static HRESULT WINAPI
IDirectPlay8PeerImpl_SetPeerInfo(IDirectPlay8Peer
*iface
,
235 const DPN_PLAYER_INFO
* const pdpnPlayerInfo
, void * const pvAsyncContext
,
236 DPNHANDLE
* const phAsyncHandle
, const DWORD dwFlags
)
238 FIXME("(%p)->(%p,%p,%p,%x): stub\n", iface
, pdpnPlayerInfo
, pvAsyncContext
, phAsyncHandle
, dwFlags
);
240 return DPNERR_GENERIC
;
243 static HRESULT WINAPI
IDirectPlay8PeerImpl_GetPeerInfo(IDirectPlay8Peer
*iface
, const DPNID dpnid
,
244 DPN_PLAYER_INFO
* const pdpnPlayerInfo
, DWORD
* const pdwSize
, const DWORD dwFlags
)
246 FIXME("(%p)->(%x,%p,%p,%x): stub\n", iface
, dpnid
, pdpnPlayerInfo
, pdwSize
, dwFlags
);
248 return DPNERR_GENERIC
;
251 static HRESULT WINAPI
IDirectPlay8PeerImpl_GetPeerAddress(IDirectPlay8Peer
*iface
,
252 const DPNID dpnid
, IDirectPlay8Address
** const pAddress
, const DWORD dwFlags
)
254 FIXME("(%p)->(%x,%p,%x): stub\n", iface
, dpnid
, pAddress
, dwFlags
);
256 return DPNERR_GENERIC
;
259 static HRESULT WINAPI
IDirectPlay8PeerImpl_GetLocalHostAddresses(IDirectPlay8Peer
*iface
,
260 IDirectPlay8Address
** const prgpAddress
, DWORD
* const pcAddress
, const DWORD dwFlags
)
262 FIXME("(%p)->(%p,%p,%x): stub\n", iface
, prgpAddress
, pcAddress
, dwFlags
);
264 return DPNERR_GENERIC
;
267 static HRESULT WINAPI
IDirectPlay8PeerImpl_Close(IDirectPlay8Peer
*iface
, const DWORD dwFlags
)
269 FIXME("(%p)->(%x): stub\n", iface
, dwFlags
);
274 static const IDirectPlay8PeerVtbl DirectPlay8Peer_Vtbl
=
276 IDirectPlay8PeerImpl_QueryInterface
,
277 IDirectPlay8PeerImpl_AddRef
,
278 IDirectPlay8PeerImpl_Release
,
279 IDirectPlay8PeerImpl_Initialize
,
280 IDirectPlay8PeerImpl_EnumServiceProviders
,
281 IDirectPlay8PeerImpl_CancelAsyncOperation
,
282 IDirectPlay8PeerImpl_Connect
,
283 IDirectPlay8PeerImpl_SendTo
,
284 IDirectPlay8PeerImpl_GetSendQueueInfo
,
285 IDirectPlay8PeerImpl_Host
,
286 IDirectPlay8PeerImpl_GetApplicationDesc
,
287 IDirectPlay8PeerImpl_SetApplicationDesc
,
288 IDirectPlay8PeerImpl_CreateGroup
,
289 IDirectPlay8PeerImpl_DestroyGroup
,
290 IDirectPlay8PeerImpl_AddPlayerToGroup
,
291 IDirectPlay8PeerImpl_RemovePlayerFromGroup
,
292 IDirectPlay8PeerImpl_SetGroupInfo
,
293 IDirectPlay8PeerImpl_GetGroupInfo
,
294 IDirectPlay8PeerImpl_EnumPlayersAndGroups
,
295 IDirectPlay8PeerImpl_EnumGroupMembers
,
296 IDirectPlay8PeerImpl_SetPeerInfo
,
297 IDirectPlay8PeerImpl_GetPeerInfo
,
298 IDirectPlay8PeerImpl_GetPeerAddress
,
299 IDirectPlay8PeerImpl_GetLocalHostAddresses
,
300 IDirectPlay8PeerImpl_Close
303 HRESULT
DPNET_CreateDirectPlay8Peer(LPCLASSFACTORY iface
, LPUNKNOWN punkOuter
, REFIID riid
, LPVOID
*ppobj
) {
304 IDirectPlay8PeerImpl
* Client
;
307 Client
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectPlay8PeerImpl
));
312 WARN("Not enough memory\n");
313 return E_OUTOFMEMORY
;
316 Client
->IDirectPlay8Peer_iface
.lpVtbl
= &DirectPlay8Peer_Vtbl
;
317 ret
= IDirectPlay8PeerImpl_QueryInterface(&Client
->IDirectPlay8Peer_iface
, riid
, ppobj
);
319 HeapFree(GetProcessHeap(), 0, Client
);