2 * Copyright 2000 Peter Hunnisett
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #ifndef __WINE_DPLAY_GLOBAL_INCLUDED
20 #define __WINE_DPLAY_GLOBAL_INCLUDED
22 extern HRESULT
DPL_EnumAddress( LPDPENUMADDRESSCALLBACK lpEnumAddressCallback
,
23 LPCVOID lpAddress
, DWORD dwAddressSize
,
24 LPVOID lpContext
) DECLSPEC_HIDDEN
;
26 typedef struct tagEnumSessionAsyncCallbackData
28 LPSPINITDATA lpSpData
;
30 DWORD dwEnumSessionFlags
;
32 HANDLE hSuicideRequest
;
33 } EnumSessionAsyncCallbackData
;
35 typedef struct tagDP_MSG_REPLY_STRUCT
41 /* FIXME: Is the message header required as well? */
42 } DP_MSG_REPLY_STRUCT
, *LPDP_MSG_REPLY_STRUCT
;
44 typedef struct tagDP_MSG_REPLY_STRUCT_LIST
46 DPQ_ENTRY(tagDP_MSG_REPLY_STRUCT_LIST
) repliesExpected
;
47 DP_MSG_REPLY_STRUCT replyExpected
;
48 } DP_MSG_REPLY_STRUCT_LIST
, *LPDP_MSG_REPLY_STRUCT_LIST
;
52 /* Individual player information */
58 ULONG uRef
; /* What is the reference count on this data? */
60 /* View of local data */
62 DWORD dwLocalDataSize
;
64 /* View of remote data */
66 DWORD dwRemoteDataSize
;
68 /* SP data on a per player basis */
69 LPVOID lpSPPlayerData
;
71 DWORD dwFlags
; /* Special remarks about the type of player */
73 typedef struct PlayerData
* lpPlayerData
;
77 DPQ_ENTRY(PlayerList
) players
;
81 typedef struct PlayerList
* lpPlayerList
;
85 /* Internal information */
86 DPID parent
; /* If parent == 0 it's a top level group */
88 ULONG uRef
; /* Reference count */
90 DPQ_HEAD(GroupList
) groups
; /* A group has [0..n] groups */
91 DPQ_HEAD(PlayerList
) players
; /* A group has [0..n] players */
93 DPID idGroupOwner
; /* ID of player who owns the group */
95 DWORD dwFlags
; /* Flags describing anything special about the group */
100 /* View of local data */
102 DWORD dwLocalDataSize
;
104 /* View of remote data */
106 DWORD dwRemoteDataSize
;
108 typedef struct GroupData GroupData
;
109 typedef struct GroupData
* lpGroupData
;
113 DPQ_ENTRY(GroupList
) groups
;
117 typedef struct GroupList
* lpGroupList
;
121 DPQ_ENTRY( DPMSG
) msgs
;
124 typedef struct DPMSG
* LPDPMSG
;
129 DP_SERVICE_PROVIDER
= 1,
130 DP_LOBBY_PROVIDER
= 2
133 /* Contains all data members. FIXME: Rename me */
134 typedef struct tagDirectPlay2Data
136 BOOL bConnectionOpen
;
138 /* For async EnumSessions requests */
139 HANDLE hEnumSessionThread
;
140 HANDLE hKillEnumSessionThreadEvent
;
141 DWORD dwEnumSessionLock
;
143 LPVOID lpNameServerData
; /* DPlay interface doesn't know contents */
145 BOOL bHostInterface
; /* Did this interface create the session */
147 lpGroupData lpSysGroup
; /* System group with _everything_ in it */
149 LPDPSESSIONDESC2 lpSessionDesc
;
152 DPQ_HEAD( DPMSG
) receiveMsgs
; /* Msg receive queue */
153 DPQ_HEAD( DPMSG
) sendMsgs
; /* Msg send pending queue */
155 /* Information about the service provider active on this connection */
159 /* Information about the lobby server that's attached to this DP object */
160 SPDATA_INIT dplspData
;
161 BOOL bDPLSPInitialized
;
163 /* Our service provider */
164 HMODULE hServiceProvider
;
166 /* Our DP lobby provider */
167 HMODULE hDPLobbyProvider
;
169 enum SPSTATE connectionInitialized
;
171 /* Expected messages queue */
172 DPQ_HEAD( tagDP_MSG_REPLY_STRUCT_LIST
) repliesExpected
;
175 typedef struct IDirectPlayImpl
177 IDirectPlay IDirectPlay_iface
;
178 IDirectPlay2A IDirectPlay2A_iface
;
179 IDirectPlay2 IDirectPlay2_iface
;
180 IDirectPlay3A IDirectPlay3A_iface
;
181 IDirectPlay3 IDirectPlay3_iface
;
182 IDirectPlay4A IDirectPlay4A_iface
;
183 IDirectPlay4 IDirectPlay4_iface
;
184 LONG numIfaces
; /* "in use interfaces" refcount */
185 LONG ref
, ref2A
, ref2
, ref3A
, ref3
, ref4A
, ref4
;
186 CRITICAL_SECTION lock
;
187 DirectPlay2Data
*dp2
;
190 HRESULT
DP_HandleMessage( IDirectPlayImpl
*This
, const void *lpMessageBody
,
191 DWORD dwMessageBodySize
, const void *lpMessageHeader
, WORD wCommandId
, WORD wVersion
,
192 void **lplpReply
, DWORD
*lpdwMsgSize
) DECLSPEC_HIDDEN
;
194 /* DP SP external interfaces into DirectPlay */
195 extern HRESULT
DP_GetSPPlayerData( IDirectPlayImpl
*lpDP
, DPID idPlayer
, void **lplpData
) DECLSPEC_HIDDEN
;
196 extern HRESULT
DP_SetSPPlayerData( IDirectPlayImpl
*lpDP
, DPID idPlayer
, void *lpData
) DECLSPEC_HIDDEN
;
198 /* DP external interfaces to call into DPSP interface */
199 extern LPVOID
DPSP_CreateSPPlayerData(void) DECLSPEC_HIDDEN
;
201 extern HRESULT
dplay_create( REFIID riid
, void **ppv
) DECLSPEC_HIDDEN
;
202 extern HRESULT
dplobby_create( REFIID riid
, void **ppv
) DECLSPEC_HIDDEN
;
203 extern HRESULT
DPSP_CreateInterface( REFIID riid
, void **ppvObj
, IDirectPlayImpl
*dp
) DECLSPEC_HIDDEN
;
204 extern HRESULT
DPLSP_CreateInterface( REFIID riid
, void **ppvObj
, IDirectPlayImpl
*dp
) DECLSPEC_HIDDEN
;
206 #endif /* __WINE_DPLAY_GLOBAL_INCLUDED */