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