Build and load import libraries directly from the dll directory where
[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 <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 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_BUILDPARENTALHEIRARCHY
74 {
75   DWORD       dwSize;
76   LPDPLOBBYSP lpISP;
77   DWORD       dwGroupID;
78   DWORD       dwMessage;
79   DWORD       dwParentID;
80 } SPDATA_BUILDPARENTALHEIRARCHY, *LPSPDATA_BUILDPARENTALHEIRARCHY;
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_BUILDPARENTALHEIRARCHY)(LPSPDATA_BUILDPARENTALHEIRARCHY);
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_BUILDPARENTALHEIRARCHY      BuildParentalHeirarchy;
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 HRESULT WINAPI DPLSPInit(LPSPDATA_INIT);
462
463 /* Define the COM interface */
464 #define INTERFACE IDPLobbySP
465 DECLARE_INTERFACE_(IDPLobbySP,IUnknown)
466 {
467     /*** IUnknown methods ***/
468     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
469     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
470     STDMETHOD_(ULONG,Release)(THIS) PURE;
471     /*** IDPLobbySP methods ***/
472     STDMETHOD(AddGroupToGroup)(THIS_ LPSPDATA_ADDREMOTEGROUPTOGROUP  argtg ) PURE;
473     STDMETHOD(AddPlayerToGroup)(THIS_ LPSPDATA_ADDREMOTEPLAYERTOGROUP  arptg ) PURE;
474     STDMETHOD(CreateGroup)(THIS_ LPSPDATA_CREATEREMOTEGROUP  crg ) PURE;
475     STDMETHOD(CreateGroupInGroup)(THIS_ LPSPDATA_CREATEREMOTEGROUPINGROUP  crgig ) PURE;
476     STDMETHOD(DeleteGroupFromGroup)(THIS_ LPSPDATA_DELETEREMOTEGROUPFROMGROUP  drgfg ) PURE;
477     STDMETHOD(DeletePlayerFromGroup)(THIS_ LPSPDATA_DELETEREMOTEPLAYERFROMGROUP  drpfg ) PURE;
478     STDMETHOD(DestroyGroup)(THIS_ LPSPDATA_DESTROYREMOTEGROUP  drg ) PURE;
479     STDMETHOD(EnumSessionsResponse)(THIS_ LPSPDATA_ENUMSESSIONSRESPONSE  er ) PURE;
480     STDMETHOD(GetSPDataPointer)(THIS_ LPVOID * lplpData ) PURE;
481     STDMETHOD(HandleMessage)(THIS_ LPSPDATA_HANDLEMESSAGE  hm ) PURE;
482     STDMETHOD(SendChatMessage)(THIS_ LPSPDATA_CHATMESSAGE  cm ) PURE;
483     STDMETHOD(SetGroupName)(THIS_ LPSPDATA_SETREMOTEGROUPNAME  srgn ) PURE;
484     STDMETHOD(SetPlayerName)(THIS_ LPSPDATA_SETREMOTEPLAYERNAME  srpn ) PURE;
485     STDMETHOD(SetSessionDesc)(THIS_ LPSPDATA_SETSESSIONDESC  ssd ) PURE;
486     STDMETHOD(SetSPDataPointer)(THIS_ LPVOID  lpData ) PURE;
487     STDMETHOD(StartSession)(THIS_ LPSPDATA_STARTSESSIONCOMMAND  ssc ) PURE;
488 };
489 #undef INTERFACE
490
491 #if !defined (__cplusplus) || defined(CINTERFACE)
492 /*** IUnknown methods ***/
493 #define IDPLobbySP_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)
494 #define IDPLobbySP_AddRef(p)                     (p)->lpVtbl->AddRef(p)
495 #define IDPLobbySP_Release(p)                    (p)->lpVtbl->Release(p)
496
497 /*** IDPLobbySP methods ***/
498 #define IDPLobbySP_AddGroupToGroup(p,a)          (p)->lpVtbl->AddGroupToGroup(p,a)
499 #define IDPLobbySP_AddPlayerToGroup(p,a)         (p)->lpVtbl->AddPlayerToGroup(p,a)
500 #define IDPLobbySP_CreateGroup(p,a)              (p)->lpVtbl->CreateGroup(p,a)
501 #define IDPLobbySP_CreateGroupInGroup(p,a)       (p)->lpVtbl->CreateGroupInGroup(p,a)
502 #define IDPLobbySP_DeleteGroupFromGroup(p,a)     (p)->lpVtbl->DeleteGroupFromGroup(p,a)
503 #define IDPLobbySP_DeletePlayerFromGroup(p,a)    (p)->lpVtbl->DeletePlayerFromGroup(p,a)
504 #define IDPLobbySP_DestroyGroup(p,a)             (p)->lpVtbl->DestroyGroup(p,a)
505 #define IDPLobbySP_EnumSessionsResponse(p,a)     (p)->lpVtbl->EnumSessionsResponse(p,a)
506 #define IDPLobbySP_GetSPDataPointer(p,a)         (p)->lpVtbl->GetSPDataPointer(p,a)
507 #define IDPLobbySP_HandleMessage(p,a)            (p)->lpVtbl->HandleMessage(p,a)
508 #define IDPLobbySP_SetGroupName(p,a)             (p)->lpVtbl->SetGroupName(p,a)
509 #define IDPLobbySP_SetPlayerName(p,a)            (p)->lpVtbl->SetPlayerName(p,a)
510 #define IDPLobbySP_SetSessionDesc(p,a)           (p)->lpVtbl->SetSessionDesc(p,a)
511 #define IDPLobbySP_StartSession(p,a)             (p)->lpVtbl->StartSession(p,a)
512 #define IDPLobbySP_SetSPDataPointer(p,a)         (p)->lpVtbl->SetSPDataPointer(p,a)
513 #endif
514
515 /* This variable is exported from the DLL at ordinal 6 to be accessed by the
516  * SP directly. This is the same variable that the DP SP will use.
517  */
518 extern DWORD gdwDPlaySPRefCount;
519
520 #endif