Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

702 lines
30 KiB

/*==========================================================================;
*
* Copyright (C) 1996-1997 Microsoft Corporation. All Rights Reserved.
*
* File: lobbysp.h
* Content: DirectPlayLobby data structures for Service Providers
*@@BEGIN_MSINTERNAL
* History:
* Date By Reason
* ==== == ======
* 7/23/96 myronth Created it
* 10/23/96 myronth Added IDPLobbySP interface stuff
* 10/28/96 myronth Changed to DX5 methods
* 11/20/96 myronth Added DPLOGONINFO to LogonServer data
* 2/12/97 myronth Mass DX5 changes
* 2/18/97 myronth Implemented GetObjectCaps
* 3/12/97 myronth Implemented EnumSessions, Removed Open & Close Responses
* 3/13/97 myronth Added link to global DPlay SP count (imported)
* 3/17/97 myronth Create/DestroyGroup/Player, Removed unnecessary
* Enum functions & structures
* 3/21/97 myronth SetGroup/PlayerName, Get/SetGroup/PlayerData, Removed
* more unnecessary response functions
* 3/31/97 myronth Removed dead code, Added new IDPLobbySP method structs
* 4/4/97 myronth Added new IDPLobbySP method structures
* 4/9/97 myronth Cleaned up SPINIT structure elements, Added
* GetCaps and GetPlayerCaps
* 5/8/97 myronth Subgroup methods, GroupConnSettings, StartSession
* 5/13/97 myronth Added Credentials to Open data struct
* 5/17/97 myronth SendChatMessage callback functions, structs, etc.
* 5/23/97 myronth Removed dwPlayerToID from the SPDATA structs
* 6/3/97 myronth Added dwPlayerFlags to SPDATA_ADDREMOTEPLAYERTOGROUP
* 6/5/97 myronth Added parent to SPDATA_ADDREMOTEPLAYERTOGROUP and
* added SPDATA_BUILDPARENTALHEIRARCHY message & structs
* 7/30/97 myronth Added dwFlags member to SPDATA_HANDLEMESSAGE
* 10/3/97 myronth Added dwDPlayVersion to DPLSPInit data struct
* Added player & group data to several remote structs
* Bumped version to DX6 (#12667)
* 10/8/97 myronth Rolled back the fix to #10961 which added lpData and
* dwDataSize to all remote structs -- It's not needed
* 10/29/97 myronth Added support for group owner and it's methods
* 11/6/97 myronth Added version existence flag and dwReserved values
* to SPDATA_INIT (#12916, #12917)
* 12/29/97 myronth Fixed DX6 macros (#15739)
*@@END_MSINTERNAL
***************************************************************************/
#ifndef __LOBBYSP_INCLUDED__
#define __LOBBYSP_INCLUDED__
#include "dplobby.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/*
* gdwDPlaySPRefCount
*
* To ensure that the DPLAYX.DLL will not be unloaded before the lobby
* provider, the lobby provider should statically link to DPLAYX.LIB and
* increment this global during the DPLSPInit call and decrement this global
* during Shutdown.
*/
extern __declspec(dllimport) DWORD gdwDPlaySPRefCount;
// A few forward declarations
typedef struct SPDATA_ADDGROUPTOGROUP * LPSPDATA_ADDGROUPTOGROUP;
typedef struct SPDATA_ADDPLAYERTOGROUP *LPSPDATA_ADDPLAYERTOGROUP;
typedef struct SPDATA_ADDREMOTEGROUPTOGROUP *LPSPDATA_ADDREMOTEGROUPTOGROUP;
typedef struct SPDATA_ADDREMOTEPLAYERTOGROUP *LPSPDATA_ADDREMOTEPLAYERTOGROUP;
typedef struct SPDATA_BUILDPARENTALHEIRARCHY *LPSPDATA_BUILDPARENTALHEIRARCHY;
typedef struct SPDATA_CHATMESSAGE *LPSPDATA_CHATMESSAGE;
typedef struct SPDATA_CLOSE *LPSPDATA_CLOSE;
typedef struct SPDATA_CREATEGROUP *LPSPDATA_CREATEGROUP;
typedef struct SPDATA_CREATEGROUPINGROUP *LPSPDATA_CREATEGROUPINGROUP;
typedef struct SPDATA_CREATEREMOTEGROUP *LPSPDATA_CREATEREMOTEGROUP;
typedef struct SPDATA_CREATEREMOTEGROUPINGROUP *LPSPDATA_CREATEREMOTEGROUPINGROUP;
typedef struct SPDATA_CREATEPLAYER *LPSPDATA_CREATEPLAYER;
typedef struct SPDATA_DELETEGROUPFROMGROUP * LPSPDATA_DELETEGROUPFROMGROUP;
typedef struct SPDATA_DELETEPLAYERFROMGROUP *LPSPDATA_DELETEPLAYERFROMGROUP;
typedef struct SPDATA_DELETEREMOTEGROUPFROMGROUP *LPSPDATA_DELETEREMOTEGROUPFROMGROUP;
typedef struct SPDATA_DELETEREMOTEPLAYERFROMGROUP *LPSPDATA_DELETEREMOTEPLAYERFROMGROUP;
typedef struct SPDATA_DESTROYGROUP *LPSPDATA_DESTROYGROUP;
typedef struct SPDATA_DESTROYREMOTEGROUP *LPSPDATA_DESTROYREMOTEGROUP;
typedef struct SPDATA_DESTROYPLAYER *LPSPDATA_DESTROYPLAYER;
typedef struct SPDATA_ENUMSESSIONS *LPSPDATA_ENUMSESSIONS;
typedef struct SPDATA_ENUMSESSIONSRESPONSE * LPSPDATA_ENUMSESSIONSRESPONSE;
typedef struct SPDATA_GETCAPS *LPSPDATA_GETCAPS;
typedef struct SPDATA_GETGROUPCONNECTIONSETTINGS *LPSPDATA_GETGROUPCONNECTIONSETTINGS;
typedef struct SPDATA_GETGROUPDATA *LPSPDATA_GETGROUPDATA;
typedef struct SPDATA_GETPLAYERCAPS *LPSPDATA_GETPLAYERCAPS;
typedef struct SPDATA_GETPLAYERDATA *LPSPDATA_GETPLAYERDATA;
typedef struct SPDATA_HANDLEMESSAGE *LPSPDATA_HANDLEMESSAGE;
typedef struct SPDATA_OPEN *LPSPDATA_OPEN;
typedef struct SPDATA_SEND *LPSPDATA_SEND;
typedef struct SPDATA_SETGROUPDATA *LPSPDATA_SETGROUPDATA;
typedef struct SPDATA_SETGROUPNAME *LPSPDATA_SETGROUPNAME;
typedef struct SPDATA_SETGROUPOWNER *LPSPDATA_SETGROUPOWNER;
typedef struct SPDATA_SETREMOTEGROUPNAME *LPSPDATA_SETREMOTEGROUPNAME;
typedef struct SPDATA_SETREMOTEGROUPOWNER *LPSPDATA_SETREMOTEGROUPOWNER;
typedef struct SPDATA_SETGROUPCONNECTIONSETTINGS *LPSPDATA_SETGROUPCONNECTIONSETTINGS;
typedef struct SPDATA_SETPLAYERDATA *LPSPDATA_SETPLAYERDATA;
typedef struct SPDATA_SETPLAYERNAME *LPSPDATA_SETPLAYERNAME;
typedef struct SPDATA_SETREMOTEPLAYERNAME *LPSPDATA_SETREMOTEPLAYERNAME;
typedef struct SPDATA_SETSESSIONDESC *LPSPDATA_SETSESSIONDESC;
typedef struct SPDATA_SHUTDOWN *LPSPDATA_SHUTDOWN;
typedef struct SPDATA_STARTSESSION *LPSPDATA_STARTSESSION;
typedef struct SPDATA_STARTSESSIONCOMMAND *LPSPDATA_STARTSESSIONCOMMAND;
/*
* IDPLobbySP
*
* Lobby Service Providers are passed an IDPLobbySP interface
* in the LobbySPInit method. This interface is used to call
* back into DirectPlayLobby.
*/
struct IDPLobbySP;
typedef struct IDPLobbySP FAR* LPDPLOBBYSP;
#undef INTERFACE
#define INTERFACE IDPLobbySP
DECLARE_INTERFACE_( IDPLobbySP, IUnknown )
{
/*** IUnknown methods ***/
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/*** IDPLobbySP methods ***/
STDMETHOD(AddGroupToGroup) (THIS_ LPSPDATA_ADDREMOTEGROUPTOGROUP) PURE;
STDMETHOD(AddPlayerToGroup) (THIS_ LPSPDATA_ADDREMOTEPLAYERTOGROUP) PURE;
STDMETHOD(CreateGroup) (THIS_ LPSPDATA_CREATEREMOTEGROUP) PURE;
STDMETHOD(CreateGroupInGroup) (THIS_ LPSPDATA_CREATEREMOTEGROUPINGROUP) PURE;
STDMETHOD(DeleteGroupFromGroup) (THIS_ LPSPDATA_DELETEREMOTEGROUPFROMGROUP) PURE;
STDMETHOD(DeletePlayerFromGroup) (THIS_ LPSPDATA_DELETEREMOTEPLAYERFROMGROUP) PURE;
STDMETHOD(DestroyGroup) (THIS_ LPSPDATA_DESTROYREMOTEGROUP) PURE;
STDMETHOD(EnumSessionsResponse) (THIS_ LPSPDATA_ENUMSESSIONSRESPONSE) PURE;
STDMETHOD(GetSPDataPointer) (THIS_ LPVOID *) PURE;
STDMETHOD(HandleMessage) (THIS_ LPSPDATA_HANDLEMESSAGE) PURE;
STDMETHOD(SendChatMessage) (THIS_ LPSPDATA_CHATMESSAGE) PURE;
STDMETHOD(SetGroupName) (THIS_ LPSPDATA_SETREMOTEGROUPNAME) PURE;
STDMETHOD(SetPlayerName) (THIS_ LPSPDATA_SETREMOTEPLAYERNAME) PURE;
STDMETHOD(SetSessionDesc) (THIS_ LPSPDATA_SETSESSIONDESC) PURE;
STDMETHOD(SetSPDataPointer) (THIS_ LPVOID) PURE;
STDMETHOD(StartSession) (THIS_ LPSPDATA_STARTSESSIONCOMMAND) PURE;
/*** Methods added for DX6 ***/
STDMETHOD(CreateCompoundAddress) (THIS_ LPCDPCOMPOUNDADDRESSELEMENT,DWORD,LPVOID,LPDWORD) PURE;
STDMETHOD(EnumAddress) (THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
STDMETHOD(SetGroupOwner) (THIS_ LPSPDATA_SETREMOTEGROUPOWNER) PURE;
};
/*
* GUID for IDPLobbySP
*/
// IID_IDPLobbySP {5A4E5A20-2CED-11d0-A889-00A0C905433C}
DEFINE_GUID(IID_IDPLobbySP, 0x5a4e5a20, 0x2ced, 0x11d0, 0xa8, 0x89, 0x0, 0xa0, 0xc9, 0x5, 0x43, 0x3c);
/*
* Major version number for service provider.
*
* The most-significant 16 bits are reserved for the DirectPlay
* major version number. The least-significant 16 bits are for
* use by the service provider.
*/
#define DPLSP_MAJORVERSION 0x00060000
// Major version used by DX5
#define DPLSP_DX5VERSION 0x00050000
// Size of the SPDATA_INIT structure in DX5
#define DPLSP_SIZE_DX5_INIT_STRUCT (16)
//--------------------------------------------------------------------------
//
// Service Provider Callback Stuff
//
//--------------------------------------------------------------------------
// Callback prototypes
typedef HRESULT (WINAPI *LPSP_ADDGROUPTOGROUP)(LPSPDATA_ADDGROUPTOGROUP);
typedef HRESULT (WINAPI *LPSP_ADDPLAYERTOGROUP)(LPSPDATA_ADDPLAYERTOGROUP);
typedef HRESULT (WINAPI *LPSP_BUILDPARENTALHEIRARCHY)(LPSPDATA_BUILDPARENTALHEIRARCHY);
typedef HRESULT (WINAPI *LPSP_CLOSE)(LPSPDATA_CLOSE);
typedef HRESULT (WINAPI *LPSP_CREATEGROUP)(LPSPDATA_CREATEGROUP);
typedef HRESULT (WINAPI *LPSP_CREATEGROUPINGROUP)(LPSPDATA_CREATEGROUPINGROUP);
typedef HRESULT (WINAPI *LPSP_CREATEPLAYER)(LPSPDATA_CREATEPLAYER);
typedef HRESULT (WINAPI *LPSP_DELETEGROUPFROMGROUP)(LPSPDATA_DELETEGROUPFROMGROUP);
typedef HRESULT (WINAPI *LPSP_DELETEPLAYERFROMGROUP)(LPSPDATA_DELETEPLAYERFROMGROUP);
typedef HRESULT (WINAPI *LPSP_DESTROYGROUP)(LPSPDATA_DESTROYGROUP);
typedef HRESULT (WINAPI *LPSP_DESTROYPLAYER)(LPSPDATA_DESTROYPLAYER);
typedef HRESULT (WINAPI *LPSP_ENUMSESSIONS)(LPSPDATA_ENUMSESSIONS);
typedef HRESULT (WINAPI *LPSP_GETCAPS)(LPSPDATA_GETCAPS);
typedef HRESULT (WINAPI *LPSP_GETGROUPCONNECTIONSETTINGS)(LPSPDATA_GETGROUPCONNECTIONSETTINGS);
typedef HRESULT (WINAPI *LPSP_GETGROUPDATA)(LPSPDATA_GETGROUPDATA);
typedef HRESULT (WINAPI *LPSP_GETPLAYERCAPS)(LPSPDATA_GETPLAYERCAPS);
typedef HRESULT (WINAPI *LPSP_GETPLAYERDATA)(LPSPDATA_GETPLAYERDATA);
typedef HRESULT (WINAPI *LPSP_HANDLEMESSAGE)(LPSPDATA_HANDLEMESSAGE);
typedef HRESULT (WINAPI *LPSP_OPEN)(LPSPDATA_OPEN);
typedef HRESULT (WINAPI *LPSP_SEND)(LPSPDATA_SEND);
typedef HRESULT (WINAPI *LPSP_SENDCHATMESSAGE)(LPSPDATA_CHATMESSAGE);
typedef HRESULT (WINAPI *LPSP_SETGROUPCONNECTIONSETTINGS)(LPSPDATA_SETGROUPCONNECTIONSETTINGS);
typedef HRESULT (WINAPI *LPSP_SETGROUPDATA)(LPSPDATA_SETGROUPDATA);
typedef HRESULT (WINAPI *LPSP_SETGROUPNAME)(LPSPDATA_SETGROUPNAME);
typedef HRESULT (WINAPI *LPSP_SETGROUPOWNER)(LPSPDATA_SETGROUPOWNER);
typedef HRESULT (WINAPI *LPSP_SETPLAYERDATA)(LPSPDATA_SETPLAYERDATA);
typedef HRESULT (WINAPI *LPSP_SETPLAYERNAME)(LPSPDATA_SETPLAYERNAME);
typedef HRESULT (WINAPI *LPSP_SHUTDOWN)(LPSPDATA_SHUTDOWN);
typedef HRESULT (WINAPI *LPSP_STARTSESSION)(LPSPDATA_STARTSESSION);
// Callback table for dplay to call into service provider
typedef struct SP_CALLBACKS
{
DWORD dwSize;
DWORD dwDPlayVersion;
LPSP_ADDGROUPTOGROUP AddGroupToGroup;
LPSP_ADDPLAYERTOGROUP AddPlayerToGroup;
LPSP_BUILDPARENTALHEIRARCHY BuildParentalHeirarchy;
LPSP_CLOSE Close;
LPSP_CREATEGROUP CreateGroup;
LPSP_CREATEGROUPINGROUP CreateGroupInGroup;
LPSP_CREATEPLAYER CreatePlayer;
LPSP_DELETEGROUPFROMGROUP DeleteGroupFromGroup;
LPSP_DELETEPLAYERFROMGROUP DeletePlayerFromGroup;
LPSP_DESTROYGROUP DestroyGroup;
LPSP_DESTROYPLAYER DestroyPlayer;
LPSP_ENUMSESSIONS EnumSessions;
LPSP_GETCAPS GetCaps;
LPSP_GETGROUPCONNECTIONSETTINGS GetGroupConnectionSettings;
LPSP_GETGROUPDATA GetGroupData;
LPSP_GETPLAYERCAPS GetPlayerCaps;
LPSP_GETPLAYERDATA GetPlayerData;
LPSP_OPEN Open;
LPSP_SEND Send;
LPSP_SENDCHATMESSAGE SendChatMessage;
LPSP_SETGROUPCONNECTIONSETTINGS SetGroupConnectionSettings;
LPSP_SETGROUPDATA SetGroupData;
LPSP_SETGROUPNAME SetGroupName;
LPSP_SETPLAYERDATA SetPlayerData;
LPSP_SETPLAYERNAME SetPlayerName;
LPSP_SHUTDOWN Shutdown;
LPSP_STARTSESSION StartSession;
LPSP_SETGROUPOWNER SetGroupOwner;
} SP_CALLBACKS, * LPSP_CALLBACKS;
// CALLBACK DATA STRUCTURES. These are passed by DPLAY to the sp when
// the callback is invoked
typedef struct SPDATA_ADDGROUPTOGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwParentID; // ID of the parent group
DWORD dwGroupID; // ID of the new group to be created (output param)
} SPDATA_ADDGROUPTOGROUP;
typedef struct SPDATA_ADDPLAYERTOGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group
DWORD dwPlayerID; // ID of the player
} SPDATA_ADDPLAYERTOGROUP;
typedef struct SPDATA_ADDREMOTEGROUPTOGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwAnchorID; // ID of the anchor group (group the shortcut is added to)
DWORD dwGroupID; // ID of the group the shortcut references
DWORD dwParentID; // ID of the group's parent (not the group being added to)
LPDPNAME lpName; // Pointer to DPNAME struct for group name
DWORD dwGroupFlags; // Group flags for the group the shortcut references
DWORD dwGroupOwnerID; // ID of the owner of the group the shortcut references
} SPDATA_ADDREMOTEGROUPTOGROUP;
typedef struct SPDATA_ADDREMOTEPLAYERTOGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group
DWORD dwPlayerID; // ID of the player
DWORD dwPlayerFlags; // Player flags
LPDPNAME lpName; // Name of the player
} SPDATA_ADDREMOTEPLAYERTOGROUP;
typedef struct SPDATA_BUILDPARENTALHEIRARCHY
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group to build the heirarchy for
DWORD dwMessage; // Message type the lobby errored on
DWORD dwParentID; // ID of the parent (for an AddGroupToGroup call)
} SPDATA_BUILDPARENTALHEIRARCHY;
typedef struct SPDATA_CLOSE
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
} SPDATA_CLOSE;
typedef struct SPDATA_CREATEGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group (output parameter)
LPDPNAME lpName; // Pointer to DPNAME struct for group name
LPVOID lpData; // Pointer to group data
DWORD dwDataSize; // Size of the group data
DWORD dwFlags; // CreateGroup flags
DWORD dwGroupOwnerID; // ID of the group's owner
} SPDATA_CREATEGROUP;
typedef struct SPDATA_CREATEGROUPINGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwParentID; // ID of the parent group
DWORD dwGroupID; // ID of the new group to be created (output param)
LPDPNAME lpName; // Pointer to DPNAME struct for group name
LPVOID lpData; // Pointer to group data
DWORD dwDataSize; // Size of the group data
DWORD dwFlags; // CreateGroup flags
DWORD dwGroupOwnerID; // ID of the group's owner
} SPDATA_CREATEGROUPINGROUP;
typedef struct SPDATA_CREATEREMOTEGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group (output parameter)
LPDPNAME lpName; // Pointer to DPNAME struct for group name
LPVOID lpData; // Pointer to group data
DWORD dwDataSize; // Size of the group data
DWORD dwFlags; // CreateGroup flags
DWORD dwGroupOwnerID; // ID of the group's owner
} SPDATA_CREATEREMOTEGROUP;
typedef struct SPDATA_CREATEREMOTEGROUPINGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwParentID; // ID of the parent group
DWORD dwGroupID; // ID of the new group to be created (output param)
LPDPNAME lpName; // Pointer to DPNAME struct for group name
DWORD dwFlags; // CreateGroupInGroup flags
DWORD dwGroupOwnerID; // ID of the group's owner
} SPDATA_CREATEREMOTEGROUPINGROUP;
typedef struct SPDATA_CREATEPLAYER
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwPlayerID; // ID of the group (output parameter)
LPDPNAME lpName; // Pointer to DPNAME struct for group name
LPVOID lpData; // Pointer to group data
DWORD dwDataSize; // Size of the group data
DWORD dwFlags; // CreatePlayer flags
} SPDATA_CREATEPLAYER;
typedef struct SPDATA_DELETEGROUPFROMGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwParentID; // ID of the Parent Group
DWORD dwGroupID; // ID of the Group to be deleted
} SPDATA_DELETEGROUPFROMGROUP;
typedef struct SPDATA_DELETEPLAYERFROMGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the Group
DWORD dwPlayerID; // ID of the Player
} SPDATA_DELETEPLAYERFROMGROUP;
typedef struct SPDATA_DELETEREMOTEGROUPFROMGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwParentID; // ID of the Parent Group
DWORD dwGroupID; // ID of the Group to be deleted
} SPDATA_DELETEREMOTEGROUPFROMGROUP;
typedef struct SPDATA_DELETEREMOTEPLAYERFROMGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the Group
DWORD dwPlayerID; // ID of the Player
} SPDATA_DELETEREMOTEPLAYERFROMGROUP;
typedef struct SPDATA_DESTROYGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the player on the lobby
} SPDATA_DESTROYGROUP;
typedef struct SPDATA_DESTROYREMOTEGROUP
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the player on the lobby
} SPDATA_DESTROYREMOTEGROUP;
typedef struct SPDATA_DESTROYPLAYER
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwPlayerID; // ID of the player on the lobby
} SPDATA_DESTROYPLAYER;
typedef struct SPDATA_ENUMSESSIONS
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
LPDPSESSIONDESC2 lpsd; // SessionDesc to enumerate on
DWORD dwTimeout; // Timeout value
DWORD dwFlags; // Flags
} SPDATA_ENUMSESSIONS;
typedef struct SPDATA_ENUMSESSIONSRESPONSE
{
DWORD dwSize; // Size of this structure
LPDPSESSIONDESC2 lpsd; // SessionDesc returned by server
} SPDATA_ENUMSESSIONSRESPONSE;
typedef struct SPDATA_GETCAPS
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwFlags; // Flags
LPDPCAPS lpcaps; // Pointer to DPCAPS structure
} SPDATA_GETCAPS;
typedef struct SPDATA_GETGROUPCONNECTIONSETTINGS
{
DWORD dwSize; // Size of this structure
DWORD dwFlags; // Flags
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the Group
LPDWORD lpdwBufferSize; // Pointer to the size of the buffer
LPVOID lpBuffer; // Pointer to a buffer
} SPDATA_GETGROUPCONNECTIONSETTINGS;
typedef struct SPDATA_GETGROUPDATA
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the Group
LPDWORD lpdwDataSize; // Pointer to the size of the lpData buffer
LPVOID lpData; // Pointer to a data buffer
} SPDATA_GETGROUPDATA;
typedef struct SPDATA_GETPLAYERCAPS
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwFlags; // Flags
DWORD dwPlayerID; // ID of the Player
LPDPCAPS lpcaps; // Pointer to DPCAPS structure
} SPDATA_GETPLAYERCAPS;
typedef struct SPDATA_GETPLAYERDATA
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwPlayerID; // ID of the Player
LPDWORD lpdwDataSize; // Pointer to the size of the lpData buffer
LPVOID lpData; // Pointer to a data buffer
} SPDATA_GETPLAYERDATA;
typedef struct SPDATA_HANDLEMESSAGE
{
DWORD dwSize; // Size of this structure
DWORD dwFromID; // ID of the player from
DWORD dwToID; // ID of the player to
LPVOID lpBuffer; // Message buffer
DWORD dwBufSize; // Size of the message buffer
DWORD dwFlags; // Message flags
} SPDATA_HANDLEMESSAGE;
typedef struct SPDATA_OPEN
{
DWORD dwSize; // Size of this structure (including data)
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
LPDPSESSIONDESC2 lpsd; // Pointer to SessionDesc of the Lobby to open
DWORD dwFlags; // Flags
LPCDPCREDENTIALS lpCredentials; // Pointer to a Credentials structure
} SPDATA_OPEN;
typedef struct SPDATA_SEND
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwFromID; // ID of the player from
DWORD dwToID; // ID of the player to
DWORD dwFlags; // Flags
LPVOID lpBuffer; // Message buffer
DWORD dwBufSize; // Size of the message buffer
} SPDATA_SEND;
typedef struct SPDATA_CHATMESSAGE
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwFromID; // ID of the player from
DWORD dwToID; // ID of the player to
DWORD dwFlags; // Send Flags
LPDPCHAT lpChat; // Pointer to a DPCHAT structure
} SPDATA_CHATMESSAGE;
typedef struct SPDATA_SETGROUPCONNECTIONSETTINGS
{
DWORD dwSize; // Size of this structure
DWORD dwFlags; // Flags
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group
LPDPLCONNECTION lpConn; // Pointer to a DPLCONNECTION structure
} SPDATA_SETGROUPCONNECTIONSETTINGS;
typedef struct SPDATA_SETGROUPDATA
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group
LPVOID lpData; // Pointer to the new group data
DWORD dwDataSize; // Size of lpData
DWORD dwFlags; // Flags
} SPDATA_SETGROUPDATA;
typedef struct SPDATA_SETGROUPNAME
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group
LPDPNAME lpName; // Pointer to the new DPNAME struct
DWORD dwFlags; // Flags
} SPDATA_SETGROUPNAME;
typedef struct SPDATA_SETREMOTEGROUPNAME
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group
LPDPNAME lpName; // Pointer to the new DPNAME struct
DWORD dwFlags; // Flags
} SPDATA_SETREMOTEGROUPNAME;
typedef struct SPDATA_SETGROUPOWNER
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwGroupID; // ID of the group
DWORD dwOwnerID; // ID of the group's owner
} SPDATA_SETGROUPOWNER;
typedef struct SPDATA_SETREMOTEGROUPOWNER
{
DWORD dwSize; // Size of this structure
DWORD dwGroupID; // ID of the group
DWORD dwOwnerID; // ID of the group's owner
} SPDATA_SETREMOTEGROUPOWNER;
typedef struct SPDATA_SETPLAYERDATA
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwPlayerID; // ID of the player
LPVOID lpData; // Pointer to the new player data
DWORD dwDataSize; // Size of lpData
DWORD dwFlags; // Flags
} SPDATA_SETPLAYERDATA;
typedef struct SPDATA_SETPLAYERNAME
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwPlayerID; // ID of the player
LPDPNAME lpName; // Pointer to the new DPNAME struct
DWORD dwFlags; // Flags
} SPDATA_SETPLAYERNAME;
typedef struct SPDATA_SETREMOTEPLAYERNAME
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwPlayerID; // ID of the player
LPDPNAME lpName; // Pointer to the new DPNAME struct
DWORD dwFlags; // Flags
} SPDATA_SETREMOTEPLAYERNAME;
typedef struct SPDATA_SETSESSIONDESC
{
DWORD dwSize; // Size of this structure
LPDPSESSIONDESC2 lpsd; // Pointer to a SessionDesc struct
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
} SPDATA_SETSESSIONDESC;
typedef struct SPDATA_SHUTDOWN
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
} SPDATA_SHUTDOWN;
typedef struct SPDATA_STARTSESSION
{
DWORD dwSize; // Size of this structure
LPDPLOBBYSP lpISP; // Pointer to an IDPLobbySP interface
DWORD dwFlags; // Flags
DWORD dwGroupID; // ID of the group who's session to start
} SPDATA_STARTSESSION;
typedef struct SPDATA_STARTSESSIONCOMMAND
{
DWORD dwFlags; // Flags
DWORD dwGroupID; // Group ID of the group to start the session on
DWORD dwHostID; // ID of the host player for the session
LPDPLCONNECTION lpConn; // Pointer to a DPLCONNECTION struct for the session information
} SPDATA_STARTSESSIONCOMMAND;
// Data structure passed to the service provider at DPLSPInit
typedef struct SPDATA_INIT
{
LPSP_CALLBACKS lpCB; // Lobby Provider fills in entry points
DWORD dwSPVersion; // Lobby provider fills in version number 16 | 16 , major | minor version
LPDPLOBBYSP lpISP; // DPLobbySP interface pointer
LPDPADDRESS lpAddress; // DPADDRESS of the Lobby (partial or complete)
DWORD dwReserved1; // Reserved DWORD from the registry entry for the LP
DWORD dwReserved2; // Reserved DWORD from the registry entry for the LP
} SPDATA_INIT, * LPSPDATA_INIT;
// This is the function that DPLobby calls to
// get the SP to fill in callbacks
typedef HRESULT (WINAPI *LPSP_INIT)(LPSPDATA_INIT);
HRESULT WINAPI DPLSPInit(LPSPDATA_INIT);
/****************************************************************************
*
* IDirectPlayLobby interface macros
*
****************************************************************************/
#if !defined(__cplusplus) || defined(CINTERFACE)
#define IDPLobbySP_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IDPLobbySP_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IDPLobbySP_Release(p) (p)->lpVtbl->Release(p)
#define IDPLobbySP_AddGroupToGroup(p,a) (p)->lpVtbl->AddGroupToGroup(p,a)
#define IDPLobbySP_AddPlayerToGroup(p,a) (p)->lpVtbl->AddPlayerToGroup(p,a)
#define IDPLobbySP_CreateCompoundAddress(p,a,b,c,d) (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d)
#define IDPLobbySP_CreateGroup(p,a) (p)->lpVtbl->CreateGroup(p,a)
#define IDPLobbySP_CreateGroupInGroup(p,a) (p)->lpVtbl->CreateGroupInGroup(p,a)
#define IDPLobbySP_DeleteGroupFromGroup(p,a) (p)->lpVtbl->DeleteGroupFromGroup(p,a)
#define IDPLobbySP_DeletePlayerFromGroup(p,a) (p)->lpVtbl->DeletePlayerFromGroup(p,a)
#define IDPLobbySP_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
#define IDPLobbySP_EnumAddress(p,a,b,c,d) (p)->lpVtbl->EnumAddress(p,a,b,c,d)
#define IDPLobbySP_EnumSessionsResponse(p,a) (p)->lpVtbl->EnumSessionsResponse(p,a)
#define IDPLobbySP_GetSPDataPointer(p,a) (p)->lpVtbl->GetSPDataPointer(p,a)
#define IDPLobbySP_HandleMessage(p,a) (p)->lpVtbl->HandleMessage(p,a)
#define IDPLobbySP_SetGroupName(p,a) (p)->lpVtbl->SetGroupName(p,a)
#define IDPLobbySP_SetPlayerName(p,a) (p)->lpVtbl->SetPlayerName(p,a)
#define IDPLobbySP_SetSessionDesc(p,a) (p)->lpVtbl->SetSessionDesc(p,a)
#define IDPLobbySP_StartSession(p,a) (p)->lpVtbl->StartSession(p,a)
#define IDPLobbySP_SetGroupOwner(p,a) (p)->lpVtbl->SetGroupOwner(p,a)
#define IDPLobbySP_SetSPDataPointer(p,a) (p)->lpVtbl->SetSPDataPointer(p,a)
#else /* C++ */
#define IDPLobbySP_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
#define IDPLobbySP_AddRef(p) (p)->AddRef()
#define IDPLobbySP_Release(p) (p)->Release()
#define IDPLobbySP_AddGroupToGroup(p,a) (p)->AddGroupToGroup(a)
#define IDPLobbySP_AddPlayerToGroup(p,a) (p)->AddPlayerToGroup(a)
#define IDPLobbySP_CreateCompoundAddress(p,a,b,c,d) (p)->CreateCompoundAddress(a,b,c,d)
#define IDPLobbySP_CreateGroup(p,a) (p)->CreateGroup(a)
#define IDPLobbySP_CreateGroupInGroup(p,a) (p)->CreateGroupInGroup(a)
#define IDPLobbySP_DeleteGroupFromGroup(p,a) (p)->DeleteGroupFromGroup(a)
#define IDPLobbySP_DeletePlayerFromGroup(p,a) (p)->DeletePlayerFromGroup(a)
#define IDPLobbySP_DestroyGroup(p,a) (p)->DestroyGroup(a)
#define IDPLobbySP_EnumAddress(p,a,b,c,d) (p)->EnumAddress(a,b,c,d)
#define IDPLobbySP_EnumSessionsResponse(p,a) (p)->EnumSessionsResponse(a)
#define IDPLobbySP_GetSPDataPointer(p,a) (p)->GetSPDataPointer(a)
#define IDPLobbySP_HandleMessage(p,a) (p)->HandleMessage(a)
#define IDPLobbySP_SetGroupName(p,a) (p)->SetGroupName(a)
#define IDPLobbySP_SetPlayerName(p,a) (p)->SetPlayerName(a)
#define IDPLobbySP_SetSessionDesc(p,a) (p)->SetSessionDesc(a)
#define IDPLobbySP_StartSession(p,a) (p)->StartSession(a)
#define IDPLobbySP_SetGroupOwner(p,a) (p)->SetGroupOwner(a)
#define IDPLobbySP_SetSPDataPointer(p,a) (p)->SetSPDataPointer(a)
#endif /* C or C++ */
#ifdef __cplusplus
};
#endif // __cplusplus
#endif // __LOBBYSP_INCLUDED__