1 /*
2 * Copyright 2001 Peter Hunnisett
3 *
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.
8 *
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.
13 *
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
17 */
18
19 #ifndef __WINE_LOBBY_SP_H
20 #define __WINE_LOBBY_SP_H
21
22 #include <stdarg.h>
23
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winuser.h"
27 #include "dplobby.h"
28
29 /* GUID for IDPLobbySP {5A4E5A20-2CED-11d0-A889-00A0C905433C} */
30 DEFINE_GUID(IID_IDPLobbySP, 0x5a4e5a20, 0x2ced, 0x11d0, 0xa8, 0x89, 0x0, 0xa0, 0xc9, 0x5, 0x43, 0x3c);
31 typedef struct IDPLobbySP *LPDPLOBBYSP;
32
33 /* For SP. Top 16 bits is dplay, bottom 16 is SP */
34 #define DPLSP_MAJORVERSION 0x00050000
35
36 typedef struct SPDATA_ADDGROUPTOGROUP
37 {
38 DWORD dwSize;
39 LPDPLOBBYSP lpISP;
40 DWORD dwParentID;
41 DWORD dwGroupID;
42 } SPDATA_ADDGROUPTOGROUP, *LPSPDATA_ADDGROUPTOGROUP;
43
44 typedef struct SPDATA_ADDPLAYERTOGROUP
45 {
46 DWORD dwSize;
47 LPDPLOBBYSP lpISP;
48 DWORD dwGroupID;
49 DWORD dwPlayerID;
50 } SPDATA_ADDPLAYERTOGROUP, *LPSPDATA_ADDPLAYERTOGROUP;
51
52 typedef struct SPDATA_ADDREMOTEGROUPTOGROUP
53 {
54 DWORD dwSize;
55 LPDPLOBBYSP lpISP;
56 DWORD dwAnchorID;
57 DWORD dwGroupID;
58 DWORD dwParentID;
59 LPDPNAME lpName;
60 DWORD dwGroupFlags;
61 } SPDATA_ADDREMOTEGROUPTOGROUP, *LPSPDATA_ADDREMOTEGROUPTOGROUP;
62
63 typedef struct SPDATA_ADDREMOTEPLAYERTOGROUP
64 {
65 DWORD dwSize;
66 LPDPLOBBYSP lpISP;
67 DWORD dwGroupID;
68 DWORD dwPlayerID;
69 DWORD dwPlayerFlags;
70 LPDPNAME lpName;
71 } SPDATA_ADDREMOTEPLAYERTOGROUP, *LPSPDATA_ADDREMOTEPLAYERTOGROUP;
72
73 typedef struct SPDATA_BUILDPARENTALHIERARCHY
74 {
75 DWORD dwSize;
76 LPDPLOBBYSP lpISP;
77 DWORD dwGroupID;
78 DWORD dwMessage;
79 DWORD dwParentID;
80 } SPDATA_BUILDPARENTALHIERARCHY, *LPSPDATA_BUILDPARENTALHIERARCHY;
81
82 typedef struct SPDATA_CLOSE
83 {
84 DWORD dwSize;
85 LPDPLOBBYSP lpISP;
86 } SPDATA_CLOSE, *LPSPDATA_CLOSE;
87
88 typedef struct SPDATA_CREATEGROUP
89 {
90 DWORD dwSize;
91 LPDPLOBBYSP lpISP;
92 DWORD dwGroupID;
93 LPDPNAME lpName;
94 LPVOID lpData;
95 DWORD dwDataSize;
96 DWORD dwFlags;
97 } SPDATA_CREATEGROUP, *LPSPDATA_CREATEGROUP;
98
99 typedef struct SPDATA_CREATEGROUPINGROUP
100 {
101 DWORD dwSize;
102 LPDPLOBBYSP lpISP;
103 DWORD dwParentID;
104 DWORD dwGroupID;
105 LPDPNAME lpName;
106 LPVOID lpData;
107 DWORD dwDataSize;
108 DWORD dwFlags;
109 } SPDATA_CREATEGROUPINGROUP, *LPSPDATA_CREATEGROUPINGROUP;
110
111 typedef struct SPDATA_CREATEREMOTEGROUP
112 {
113 DWORD dwSize;
114 LPDPLOBBYSP lpISP;
115 DWORD dwGroupID;
116 LPDPNAME lpName;
117 LPVOID lpData;
118 DWORD dwDataSize;
119 DWORD dwFlags;
120 } SPDATA_CREATEREMOTEGROUP, *LPSPDATA_CREATEREMOTEGROUP;
121
122 typedef struct SPDATA_CREATEREMOTEGROUPINGROUP
123 {
124 DWORD dwSize;
125 LPDPLOBBYSP lpISP;
126 DWORD dwParentID;
127 DWORD dwGroupID;
128 LPDPNAME lpName;
129 DWORD dwFlags;
130 } SPDATA_CREATEREMOTEGROUPINGROUP, *LPSPDATA_CREATEREMOTEGROUPINGROUP;
131
132 typedef struct SPDATA_CREATEPLAYER
133 {
134 DWORD dwSize;
135 LPDPLOBBYSP lpISP;
136 DWORD dwPlayerID;
137 LPDPNAME lpName;
138 LPVOID lpData;
139 DWORD dwDataSize;
140 DWORD dwFlags;
141 } SPDATA_CREATEPLAYER, *LPSPDATA_CREATEPLAYER;
142
143 typedef struct SPDATA_DELETEGROUPFROMGROUP
144 {
145 DWORD dwSize;
146 LPDPLOBBYSP lpISP;
147 DWORD dwParentID;
148 DWORD dwGroupID;
149 } SPDATA_DELETEGROUPFROMGROUP, *LPSPDATA_DELETEGROUPFROMGROUP;
150
151 typedef struct SPDATA_DELETEPLAYERFROMGROUP
152 {
153 DWORD dwSize;
154 LPDPLOBBYSP lpISP;
155 DWORD dwGroupID;
156 DWORD dwPlayerID;
157 } SPDATA_DELETEPLAYERFROMGROUP, *LPSPDATA_DELETEPLAYERFROMGROUP;
158
159 typedef struct SPDATA_DELETEREMOTEGROUPFROMGROUP
160 {
161 DWORD dwSize;
162 LPDPLOBBYSP lpISP;
163 DWORD dwParentID;
164 DWORD dwGroupID;
165 } SPDATA_DELETEREMOTEGROUPFROMGROUP, *LPSPDATA_DELETEREMOTEGROUPFROMGROUP;
166
167 typedef struct SPDATA_DELETEREMOTEPLAYERFROMGROUP
168 {
169 DWORD dwSize;
170 LPDPLOBBYSP lpISP;
171 DWORD dwGroupID;
172 DWORD dwPlayerID;
173 } SPDATA_DELETEREMOTEPLAYERFROMGROUP, *LPSPDATA_DELETEREMOTEPLAYERFROMGROUP;
174
175 typedef struct SPDATA_DESTROYGROUP
176 {
177 DWORD dwSize;
178 LPDPLOBBYSP lpISP;
179 DWORD dwGroupID;
180 } SPDATA_DESTROYGROUP, *LPSPDATA_DESTROYGROUP;
181
182 typedef struct SPDATA_DESTROYREMOTEGROUP
183 {
184 DWORD dwSize;
185 LPDPLOBBYSP lpISP;
186 DWORD dwGroupID;
187 } SPDATA_DESTROYREMOTEGROUP, *LPSPDATA_DESTROYREMOTEGROUP;
188
189 typedef struct SPDATA_DESTROYPLAYER
190 {
191 DWORD dwSize;
192 LPDPLOBBYSP lpISP;
193 DWORD dwPlayerID;
194 } SPDATA_DESTROYPLAYER, *LPSPDATA_DESTROYPLAYER;
195
196 typedef struct SPDATA_ENUMSESSIONS
197 {
198 DWORD dwSize;
199 LPDPLOBBYSP lpISP;
200 LPDPSESSIONDESC2 lpsd;
201 DWORD dwTimeout;
202 DWORD dwFlags;
203 } SPDATA_ENUMSESSIONS, *LPSPDATA_ENUMSESSIONS;
204
205 typedef struct SPDATA_ENUMSESSIONSRESPONSE
206 {
207 DWORD dwSize;
208 LPDPSESSIONDESC2 lpsd;
209 } SPDATA_ENUMSESSIONSRESPONSE, *LPSPDATA_ENUMSESSIONSRESPONSE;
210
211 typedef struct SPDATA_GETCAPS
212 {
213 DWORD dwSize;
214 LPDPLOBBYSP lpISP;
215 DWORD dwFlags;
216 LPDPCAPS lpcaps;
217 } SPDATA_GETCAPS, *LPSPDATA_GETCAPS;
218
219 typedef struct SPDATA_GETGROUPCONNECTIONSETTINGS
220 {
221 DWORD dwSize;
222 DWORD dwFlags;
223 LPDPLOBBYSP lpISP;
224 DWORD dwGroupID;
225 LPDWORD lpdwBufferSize;
226 LPVOID lpBuffer;
227 } SPDATA_GETGROUPCONNECTIONSETTINGS, *LPSPDATA_GETGROUPCONNECTIONSETTINGS;
228
229 typedef struct SPDATA_GETGROUPDATA
230 {
231 DWORD dwSize;
232 LPDPLOBBYSP lpISP;
233 DWORD dwGroupID;
234 LPDWORD lpdwDataSize;
235 LPVOID lpData;
236 } SPDATA_GETGROUPDATA, *LPSPDATA_GETGROUPDATA;
237
238 typedef struct SPDATA_GETPLAYERCAPS
239 {
240 DWORD dwSize;
241 LPDPLOBBYSP lpISP;
242 DWORD dwFlags;
243 DWORD dwPlayerID;
244 LPDPCAPS lpcaps;
245 } SPDATA_GETPLAYERCAPS, *LPSPDATA_GETPLAYERCAPS;
246
247 typedef struct SPDATA_GETPLAYERDATA
248 {
249 DWORD dwSize;
250 LPDPLOBBYSP lpISP;
251 DWORD dwPlayerID;
252 LPDWORD lpdwDataSize;
253 LPVOID lpData;
254 } SPDATA_GETPLAYERDATA, *LPSPDATA_GETPLAYERDATA;
255
256 typedef struct SPDATA_HANDLEMESSAGE
257 {
258 DWORD dwSize;
259 DWORD dwFromID;
260 DWORD dwToID;
261 LPVOID lpBuffer;
262 DWORD dwBufSize;
263 } SPDATA_HANDLEMESSAGE, *LPSPDATA_HANDLEMESSAGE;
264
265 typedef struct SPDATA_OPEN
266 {
267 DWORD dwSize;
268 LPDPLOBBYSP lpISP;
269 LPDPSESSIONDESC2 lpsd;
270 DWORD dwFlags;
271 LPCDPCREDENTIALS lpCredentials;
272 } SPDATA_OPEN, *LPSPDATA_OPEN;
273
274 typedef struct SPDATA_SEND
275 {
276 DWORD dwSize;
277 LPDPLOBBYSP lpISP;
278 DWORD dwFromID;
279 DWORD dwToID;
280 DWORD dwFlags;
281 LPVOID lpBuffer;
282 DWORD dwBufSize;
283 } SPDATA_SEND, *LPSPDATA_SEND;
284
285 typedef struct SPDATA_CHATMESSAGE
286 {
287 DWORD dwSize;
288 LPDPLOBBYSP lpISP;
289 DWORD dwFromID;
290 DWORD dwToID;
291 DWORD dwFlags;
292 LPDPCHAT lpChat;
293 } SPDATA_CHATMESSAGE, *LPSPDATA_CHATMESSAGE;
294
295 typedef struct SPDATA_SETGROUPCONNECTIONSETTINGS
296 {
297 DWORD dwSize;
298 DWORD dwFlags;
299 LPDPLOBBYSP lpISP;
300 DWORD dwGroupID;
301 LPDPLCONNECTION lpConn;
302 } SPDATA_SETGROUPCONNECTIONSETTINGS, *LPSPDATA_SETGROUPCONNECTIONSETTINGS;
303
304 typedef struct SPDATA_SETGROUPDATA
305 {
306 DWORD dwSize;
307 LPDPLOBBYSP lpISP;
308 DWORD dwGroupID;
309 LPVOID lpData;
310 DWORD dwDataSize;
311 DWORD dwFlags;
312 } SPDATA_SETGROUPDATA, *LPSPDATA_SETGROUPDATA;
313
314 typedef struct SPDATA_SETGROUPNAME
315 {
316 DWORD dwSize;
317 LPDPLOBBYSP lpISP;
318 DWORD dwGroupID;
319 LPDPNAME lpName;
320 DWORD dwFlags;
321 } SPDATA_SETGROUPNAME, *LPSPDATA_SETGROUPNAME;
322
323 typedef struct SPDATA_SETREMOTEGROUPNAME
324 {
325 DWORD dwSize;
326 LPDPLOBBYSP lpISP;
327 DWORD dwGroupID;
328 LPDPNAME lpName;
329 DWORD dwFlags;
330 } SPDATA_SETREMOTEGROUPNAME, *LPSPDATA_SETREMOTEGROUPNAME;
331
332 typedef struct SPDATA_SETPLAYERDATA
333 {
334 DWORD dwSize;
335 LPDPLOBBYSP lpISP;
336 DWORD dwPlayerID;
337 LPVOID lpData;
338 DWORD dwDataSize;
339 DWORD dwFlags;
340 } SPDATA_SETPLAYERDATA, *LPSPDATA_SETPLAYERDATA;
341
342 typedef struct SPDATA_SETPLAYERNAME
343 {
344 DWORD dwSize;
345 LPDPLOBBYSP lpISP;
346 DWORD dwPlayerID;
347 LPDPNAME lpName;
348 DWORD dwFlags;
349 } SPDATA_SETPLAYERNAME, *LPSPDATA_SETPLAYERNAME;
350
351 typedef struct SPDATA_SETREMOTEPLAYERNAME
352 {
353 DWORD dwSize;
354 LPDPLOBBYSP lpISP;
355 DWORD dwPlayerID;
356 LPDPNAME lpName;
357 DWORD dwFlags;
358 } SPDATA_SETREMOTEPLAYERNAME, *LPSPDATA_SETREMOTEPLAYERNAME;
359
360 typedef struct SPDATA_SETSESSIONDESC
361 {
362 DWORD dwSize;
363 LPDPSESSIONDESC2 lpsd;
364 } SPDATA_SETSESSIONDESC, *LPSPDATA_SETSESSIONDESC;
365
366 typedef struct SPDATA_SHUTDOWN
367 {
368 DWORD dwSize;
369 LPDPLOBBYSP lpISP;
370 } SPDATA_SHUTDOWN, *LPSPDATA_SHUTDOWN;
371
372 typedef struct SPDATA_STARTSESSION
373 {
374 DWORD dwSize;
375 LPDPLOBBYSP lpISP;
376 DWORD dwFlags;
377 DWORD dwGroupID;
378 } SPDATA_STARTSESSION, *LPSPDATA_STARTSESSION;
379
380 typedef struct SPDATA_STARTSESSIONCOMMAND
381 {
382 DWORD dwFlags;
383 DWORD dwGroupID;
384 DWORD dwHostID;
385 LPDPLCONNECTION lpConn;
386 } SPDATA_STARTSESSIONCOMMAND, *LPSPDATA_STARTSESSIONCOMMAND;
387
388 /* Prototypes for callbacks returned by DPLSPInit */
389 typedef HRESULT (WINAPI *LPSP_ADDGROUPTOGROUP)(LPSPDATA_ADDGROUPTOGROUP);
390 typedef HRESULT (WINAPI *LPSP_ADDPLAYERTOGROUP)(LPSPDATA_ADDPLAYERTOGROUP);
391 typedef HRESULT (WINAPI *LPSP_BUILDPARENTALHIERARCHY)(LPSPDATA_BUILDPARENTALHIERARCHY);
392 typedef HRESULT (WINAPI *LPSP_CLOSE)(LPSPDATA_CLOSE);
393 typedef HRESULT (WINAPI *LPSP_CREATEGROUP)(LPSPDATA_CREATEGROUP);
394 typedef HRESULT (WINAPI *LPSP_CREATEGROUPINGROUP)(LPSPDATA_CREATEGROUPINGROUP);
395 typedef HRESULT (WINAPI *LPSP_CREATEPLAYER)(LPSPDATA_CREATEPLAYER);
396 typedef HRESULT (WINAPI *LPSP_DELETEGROUPFROMGROUP)(LPSPDATA_DELETEGROUPFROMGROUP);
397 typedef HRESULT (WINAPI *LPSP_DELETEPLAYERFROMGROUP)(LPSPDATA_DELETEPLAYERFROMGROUP);
398 typedef HRESULT (WINAPI *LPSP_DESTROYGROUP)(LPSPDATA_DESTROYGROUP);
399 typedef HRESULT (WINAPI *LPSP_DESTROYPLAYER)(LPSPDATA_DESTROYPLAYER);
400 typedef HRESULT (WINAPI *LPSP_ENUMSESSIONS)(LPSPDATA_ENUMSESSIONS);
401 typedef HRESULT (WINAPI *LPSP_GETCAPS)(LPSPDATA_GETCAPS);
402 typedef HRESULT (WINAPI *LPSP_GETGROUPCONNECTIONSETTINGS)(LPSPDATA_GETGROUPCONNECTIONSETTINGS);
403 typedef HRESULT (WINAPI *LPSP_GETGROUPDATA)(LPSPDATA_GETGROUPDATA);
404 typedef HRESULT (WINAPI *LPSP_GETPLAYERCAPS)(LPSPDATA_GETPLAYERCAPS);
405 typedef HRESULT (WINAPI *LPSP_GETPLAYERDATA)(LPSPDATA_GETPLAYERDATA);
406 typedef HRESULT (WINAPI *LPSP_HANDLEMESSAGE)(LPSPDATA_HANDLEMESSAGE);
407 typedef HRESULT (WINAPI *LPSP_OPEN)(LPSPDATA_OPEN);
408 typedef HRESULT (WINAPI *LPSP_SEND)(LPSPDATA_SEND);
409 typedef HRESULT (WINAPI *LPSP_SENDCHATMESSAGE)(LPSPDATA_CHATMESSAGE);
410 typedef HRESULT (WINAPI *LPSP_SETGROUPCONNECTIONSETTINGS)(LPSPDATA_SETGROUPCONNECTIONSETTINGS);
411 typedef HRESULT (WINAPI *LPSP_SETGROUPDATA)(LPSPDATA_SETGROUPDATA);
412 typedef HRESULT (WINAPI *LPSP_SETGROUPNAME)(LPSPDATA_SETGROUPNAME);
413 typedef HRESULT (WINAPI *LPSP_SETPLAYERDATA)(LPSPDATA_SETPLAYERDATA);
414 typedef HRESULT (WINAPI *LPSP_SETPLAYERNAME)(LPSPDATA_SETPLAYERNAME);
415 typedef HRESULT (WINAPI *LPSP_SHUTDOWN)(LPSPDATA_SHUTDOWN);
416 typedef HRESULT (WINAPI *LPSP_STARTSESSION)(LPSPDATA_STARTSESSION);
417
418 /* Callback table for dplay to call into service provider */
419 typedef struct SP_CALLBACKS
420 {
421 DWORD dwSize;
422 DWORD dwFlags;
423 LPSP_ADDGROUPTOGROUP AddGroupToGroup;
424 LPSP_ADDPLAYERTOGROUP AddPlayerToGroup;
425 LPSP_BUILDPARENTALHIERARCHY BuildParentalHierarchy;
426 LPSP_CLOSE Close;
427 LPSP_CREATEGROUP CreateGroup;
428 LPSP_CREATEGROUPINGROUP CreateGroupInGroup;
429 LPSP_CREATEPLAYER CreatePlayer;
430 LPSP_DELETEGROUPFROMGROUP DeleteGroupFromGroup;
431 LPSP_DELETEPLAYERFROMGROUP DeletePlayerFromGroup;
432 LPSP_DESTROYGROUP DestroyGroup;
433 LPSP_DESTROYPLAYER DestroyPlayer;
434 LPSP_ENUMSESSIONS EnumSessions;
435 LPSP_GETCAPS GetCaps;
436 LPSP_GETGROUPCONNECTIONSETTINGS GetGroupConnectionSettings;
437 LPSP_GETGROUPDATA GetGroupData;
438 LPSP_GETPLAYERCAPS GetPlayerCaps;
439 LPSP_GETPLAYERDATA GetPlayerData;
440 LPSP_OPEN Open;
441 LPSP_SEND Send;
442 LPSP_SENDCHATMESSAGE SendChatMessage;
443 LPSP_SETGROUPCONNECTIONSETTINGS SetGroupConnectionSettings;
444 LPSP_SETGROUPDATA SetGroupData;
445 LPSP_SETGROUPNAME SetGroupName;
446 LPSP_SETPLAYERDATA SetPlayerData;
447 LPSP_SETPLAYERNAME SetPlayerName;
448 LPSP_SHUTDOWN Shutdown;
449 LPSP_STARTSESSION StartSession;
450 } SP_CALLBACKS, *LPSP_CALLBACKS;
451
452 typedef struct SPDATA_INIT
453 {
454 LPSP_CALLBACKS lpCB;
455 DWORD dwSPVersion;
456 LPDPLOBBYSP lpISP;
457 LPDPADDRESS lpAddress;
458 } SPDATA_INIT, *LPSPDATA_INIT;
459
460 typedef HRESULT (WINAPI *LPSP_INIT)(LPSPDATA_INIT);
461
462 /* Define the COM interface */
463 #define INTERFACE IDPLobbySP
DECLARE_INTERFACE_(IDPLobbySP,IUnknown)464 DECLARE_INTERFACE_(IDPLobbySP,IUnknown)
465 {
466 /*** IUnknown methods ***/
467 STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
468 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
469 STDMETHOD_(ULONG,Release)(THIS) PURE;
470 /*** IDPLobbySP methods ***/
471 STDMETHOD(AddGroupToGroup)(THIS_ LPSPDATA_ADDREMOTEGROUPTOGROUP argtg ) PURE;
472 STDMETHOD(AddPlayerToGroup)(THIS_ LPSPDATA_ADDREMOTEPLAYERTOGROUP arptg ) PURE;
473 STDMETHOD(CreateGroup)(THIS_ LPSPDATA_CREATEREMOTEGROUP crg ) PURE;
474 STDMETHOD(CreateGroupInGroup)(THIS_ LPSPDATA_CREATEREMOTEGROUPINGROUP crgig ) PURE;
475 STDMETHOD(DeleteGroupFromGroup)(THIS_ LPSPDATA_DELETEREMOTEGROUPFROMGROUP drgfg ) PURE;
476 STDMETHOD(DeletePlayerFromGroup)(THIS_ LPSPDATA_DELETEREMOTEPLAYERFROMGROUP drpfg ) PURE;
477 STDMETHOD(DestroyGroup)(THIS_ LPSPDATA_DESTROYREMOTEGROUP drg ) PURE;
478 STDMETHOD(EnumSessionsResponse)(THIS_ LPSPDATA_ENUMSESSIONSRESPONSE er ) PURE;
479 STDMETHOD(GetSPDataPointer)(THIS_ LPVOID * lplpData ) PURE;
480 STDMETHOD(HandleMessage)(THIS_ LPSPDATA_HANDLEMESSAGE hm ) PURE;
481 STDMETHOD(SendChatMessage)(THIS_ LPSPDATA_CHATMESSAGE cm ) PURE;
482 STDMETHOD(SetGroupName)(THIS_ LPSPDATA_SETREMOTEGROUPNAME srgn ) PURE;
483 STDMETHOD(SetPlayerName)(THIS_ LPSPDATA_SETREMOTEPLAYERNAME srpn ) PURE;
484 STDMETHOD(SetSessionDesc)(THIS_ LPSPDATA_SETSESSIONDESC ssd ) PURE;
485 STDMETHOD(SetSPDataPointer)(THIS_ LPVOID lpData ) PURE;
486 STDMETHOD(StartSession)(THIS_ LPSPDATA_STARTSESSIONCOMMAND ssc ) PURE;
487 };
488 #undef INTERFACE
489
490 #if !defined (__cplusplus) || defined(CINTERFACE)
491 /*** IUnknown methods ***/
492 #define IDPLobbySP_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
493 #define IDPLobbySP_AddRef(p) (p)->lpVtbl->AddRef(p)
494 #define IDPLobbySP_Release(p) (p)->lpVtbl->Release(p)
495
496 /*** IDPLobbySP methods ***/
497 #define IDPLobbySP_AddGroupToGroup(p,a) (p)->lpVtbl->AddGroupToGroup(p,a)
498 #define IDPLobbySP_AddPlayerToGroup(p,a) (p)->lpVtbl->AddPlayerToGroup(p,a)
499 #define IDPLobbySP_CreateGroup(p,a) (p)->lpVtbl->CreateGroup(p,a)
500 #define IDPLobbySP_CreateGroupInGroup(p,a) (p)->lpVtbl->CreateGroupInGroup(p,a)
501 #define IDPLobbySP_DeleteGroupFromGroup(p,a) (p)->lpVtbl->DeleteGroupFromGroup(p,a)
502 #define IDPLobbySP_DeletePlayerFromGroup(p,a) (p)->lpVtbl->DeletePlayerFromGroup(p,a)
503 #define IDPLobbySP_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
504 #define IDPLobbySP_EnumSessionsResponse(p,a) (p)->lpVtbl->EnumSessionsResponse(p,a)
505 #define IDPLobbySP_GetSPDataPointer(p,a) (p)->lpVtbl->GetSPDataPointer(p,a)
506 #define IDPLobbySP_HandleMessage(p,a) (p)->lpVtbl->HandleMessage(p,a)
507 #define IDPLobbySP_SetGroupName(p,a) (p)->lpVtbl->SetGroupName(p,a)
508 #define IDPLobbySP_SetPlayerName(p,a) (p)->lpVtbl->SetPlayerName(p,a)
509 #define IDPLobbySP_SetSessionDesc(p,a) (p)->lpVtbl->SetSessionDesc(p,a)
510 #define IDPLobbySP_StartSession(p,a) (p)->lpVtbl->StartSession(p,a)
511 #define IDPLobbySP_SetSPDataPointer(p,a) (p)->lpVtbl->SetSPDataPointer(p,a)
512 #endif
513
514 /* This variable is exported from the DLL at ordinal 6 to be accessed by the
515 * SP directly. This is the same variable that the DP SP will use.
516 */
517 extern DWORD gdwDPlaySPRefCount DECLSPEC_HIDDEN;
518
519 #endif
520