/* * Copyright 2001 Peter Hunnisett * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LOBBY_SP_H #define __WINE_LOBBY_SP_H #include <stdarg.h> #include "windef.h" #include "winbase.h" #include "winuser.h" #include "dplobby.h" /* GUID for IDPLobbySP {5A4E5A20-2CED-11d0-A889-00A0C905433C} */ DEFINE_GUID(IID_IDPLobbySP, 0x5a4e5a20, 0x2ced, 0x11d0, 0xa8, 0x89, 0x0, 0xa0, 0xc9, 0x5, 0x43, 0x3c); typedef struct IDPLobbySP *LPDPLOBBYSP; /* For SP. Top 16 bits is dplay, bottom 16 is SP */ #define DPLSP_MAJORVERSION 0x00050000 typedef struct SPDATA_ADDGROUPTOGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwParentID; DWORD dwGroupID; } SPDATA_ADDGROUPTOGROUP, *LPSPDATA_ADDGROUPTOGROUP; typedef struct SPDATA_ADDPLAYERTOGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; DWORD dwPlayerID; } SPDATA_ADDPLAYERTOGROUP, *LPSPDATA_ADDPLAYERTOGROUP; typedef struct SPDATA_ADDREMOTEGROUPTOGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwAnchorID; DWORD dwGroupID; DWORD dwParentID; LPDPNAME lpName; DWORD dwGroupFlags; } SPDATA_ADDREMOTEGROUPTOGROUP, *LPSPDATA_ADDREMOTEGROUPTOGROUP; typedef struct SPDATA_ADDREMOTEPLAYERTOGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; DWORD dwPlayerID; DWORD dwPlayerFlags; LPDPNAME lpName; } SPDATA_ADDREMOTEPLAYERTOGROUP, *LPSPDATA_ADDREMOTEPLAYERTOGROUP; typedef struct SPDATA_BUILDPARENTALHEIRARCHY { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; DWORD dwMessage; DWORD dwParentID; } SPDATA_BUILDPARENTALHEIRARCHY, *LPSPDATA_BUILDPARENTALHEIRARCHY; typedef struct SPDATA_CLOSE { DWORD dwSize; LPDPLOBBYSP lpISP; } SPDATA_CLOSE, *LPSPDATA_CLOSE; typedef struct SPDATA_CREATEGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; LPDPNAME lpName; LPVOID lpData; DWORD dwDataSize; DWORD dwFlags; } SPDATA_CREATEGROUP, *LPSPDATA_CREATEGROUP; typedef struct SPDATA_CREATEGROUPINGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwParentID; DWORD dwGroupID; LPDPNAME lpName; LPVOID lpData; DWORD dwDataSize; DWORD dwFlags; } SPDATA_CREATEGROUPINGROUP, *LPSPDATA_CREATEGROUPINGROUP; typedef struct SPDATA_CREATEREMOTEGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; LPDPNAME lpName; LPVOID lpData; DWORD dwDataSize; DWORD dwFlags; } SPDATA_CREATEREMOTEGROUP, *LPSPDATA_CREATEREMOTEGROUP; typedef struct SPDATA_CREATEREMOTEGROUPINGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwParentID; DWORD dwGroupID; LPDPNAME lpName; DWORD dwFlags; } SPDATA_CREATEREMOTEGROUPINGROUP, *LPSPDATA_CREATEREMOTEGROUPINGROUP; typedef struct SPDATA_CREATEPLAYER { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwPlayerID; LPDPNAME lpName; LPVOID lpData; DWORD dwDataSize; DWORD dwFlags; } SPDATA_CREATEPLAYER, *LPSPDATA_CREATEPLAYER; typedef struct SPDATA_DELETEGROUPFROMGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwParentID; DWORD dwGroupID; } SPDATA_DELETEGROUPFROMGROUP, *LPSPDATA_DELETEGROUPFROMGROUP; typedef struct SPDATA_DELETEPLAYERFROMGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; DWORD dwPlayerID; } SPDATA_DELETEPLAYERFROMGROUP, *LPSPDATA_DELETEPLAYERFROMGROUP; typedef struct SPDATA_DELETEREMOTEGROUPFROMGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwParentID; DWORD dwGroupID; } SPDATA_DELETEREMOTEGROUPFROMGROUP, *LPSPDATA_DELETEREMOTEGROUPFROMGROUP; typedef struct SPDATA_DELETEREMOTEPLAYERFROMGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; DWORD dwPlayerID; } SPDATA_DELETEREMOTEPLAYERFROMGROUP, *LPSPDATA_DELETEREMOTEPLAYERFROMGROUP; typedef struct SPDATA_DESTROYGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; } SPDATA_DESTROYGROUP, *LPSPDATA_DESTROYGROUP; typedef struct SPDATA_DESTROYREMOTEGROUP { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; } SPDATA_DESTROYREMOTEGROUP, *LPSPDATA_DESTROYREMOTEGROUP; typedef struct SPDATA_DESTROYPLAYER { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwPlayerID; } SPDATA_DESTROYPLAYER, *LPSPDATA_DESTROYPLAYER; typedef struct SPDATA_ENUMSESSIONS { DWORD dwSize; LPDPLOBBYSP lpISP; LPDPSESSIONDESC2 lpsd; DWORD dwTimeout; DWORD dwFlags; } SPDATA_ENUMSESSIONS, *LPSPDATA_ENUMSESSIONS; typedef struct SPDATA_ENUMSESSIONSRESPONSE { DWORD dwSize; LPDPSESSIONDESC2 lpsd; } SPDATA_ENUMSESSIONSRESPONSE, *LPSPDATA_ENUMSESSIONSRESPONSE; typedef struct SPDATA_GETCAPS { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwFlags; LPDPCAPS lpcaps; } SPDATA_GETCAPS, *LPSPDATA_GETCAPS; typedef struct SPDATA_GETGROUPCONNECTIONSETTINGS { DWORD dwSize; DWORD dwFlags; LPDPLOBBYSP lpISP; DWORD dwGroupID; LPDWORD lpdwBufferSize; LPVOID lpBuffer; } SPDATA_GETGROUPCONNECTIONSETTINGS, *LPSPDATA_GETGROUPCONNECTIONSETTINGS; typedef struct SPDATA_GETGROUPDATA { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; LPDWORD lpdwDataSize; LPVOID lpData; } SPDATA_GETGROUPDATA, *LPSPDATA_GETGROUPDATA; typedef struct SPDATA_GETPLAYERCAPS { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwFlags; DWORD dwPlayerID; LPDPCAPS lpcaps; } SPDATA_GETPLAYERCAPS, *LPSPDATA_GETPLAYERCAPS; typedef struct SPDATA_GETPLAYERDATA { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwPlayerID; LPDWORD lpdwDataSize; LPVOID lpData; } SPDATA_GETPLAYERDATA, *LPSPDATA_GETPLAYERDATA; typedef struct SPDATA_HANDLEMESSAGE { DWORD dwSize; DWORD dwFromID; DWORD dwToID; LPVOID lpBuffer; DWORD dwBufSize; } SPDATA_HANDLEMESSAGE, *LPSPDATA_HANDLEMESSAGE; typedef struct SPDATA_OPEN { DWORD dwSize; LPDPLOBBYSP lpISP; LPDPSESSIONDESC2 lpsd; DWORD dwFlags; LPCDPCREDENTIALS lpCredentials; } SPDATA_OPEN, *LPSPDATA_OPEN; typedef struct SPDATA_SEND { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwFromID; DWORD dwToID; DWORD dwFlags; LPVOID lpBuffer; DWORD dwBufSize; } SPDATA_SEND, *LPSPDATA_SEND; typedef struct SPDATA_CHATMESSAGE { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwFromID; DWORD dwToID; DWORD dwFlags; LPDPCHAT lpChat; } SPDATA_CHATMESSAGE, *LPSPDATA_CHATMESSAGE; typedef struct SPDATA_SETGROUPCONNECTIONSETTINGS { DWORD dwSize; DWORD dwFlags; LPDPLOBBYSP lpISP; DWORD dwGroupID; LPDPLCONNECTION lpConn; } SPDATA_SETGROUPCONNECTIONSETTINGS, *LPSPDATA_SETGROUPCONNECTIONSETTINGS; typedef struct SPDATA_SETGROUPDATA { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; LPVOID lpData; DWORD dwDataSize; DWORD dwFlags; } SPDATA_SETGROUPDATA, *LPSPDATA_SETGROUPDATA; typedef struct SPDATA_SETGROUPNAME { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; LPDPNAME lpName; DWORD dwFlags; } SPDATA_SETGROUPNAME, *LPSPDATA_SETGROUPNAME; typedef struct SPDATA_SETREMOTEGROUPNAME { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwGroupID; LPDPNAME lpName; DWORD dwFlags; } SPDATA_SETREMOTEGROUPNAME, *LPSPDATA_SETREMOTEGROUPNAME; typedef struct SPDATA_SETPLAYERDATA { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwPlayerID; LPVOID lpData; DWORD dwDataSize; DWORD dwFlags; } SPDATA_SETPLAYERDATA, *LPSPDATA_SETPLAYERDATA; typedef struct SPDATA_SETPLAYERNAME { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwPlayerID; LPDPNAME lpName; DWORD dwFlags; } SPDATA_SETPLAYERNAME, *LPSPDATA_SETPLAYERNAME; typedef struct SPDATA_SETREMOTEPLAYERNAME { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwPlayerID; LPDPNAME lpName; DWORD dwFlags; } SPDATA_SETREMOTEPLAYERNAME, *LPSPDATA_SETREMOTEPLAYERNAME; typedef struct SPDATA_SETSESSIONDESC { DWORD dwSize; LPDPSESSIONDESC2 lpsd; } SPDATA_SETSESSIONDESC, *LPSPDATA_SETSESSIONDESC; typedef struct SPDATA_SHUTDOWN { DWORD dwSize; LPDPLOBBYSP lpISP; } SPDATA_SHUTDOWN, *LPSPDATA_SHUTDOWN; typedef struct SPDATA_STARTSESSION { DWORD dwSize; LPDPLOBBYSP lpISP; DWORD dwFlags; DWORD dwGroupID; } SPDATA_STARTSESSION, *LPSPDATA_STARTSESSION; typedef struct SPDATA_STARTSESSIONCOMMAND { DWORD dwFlags; DWORD dwGroupID; DWORD dwHostID; LPDPLCONNECTION lpConn; } SPDATA_STARTSESSIONCOMMAND, *LPSPDATA_STARTSESSIONCOMMAND; /* Prototypes for callbacks returned by DPLSPInit */ 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_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 dwFlags; 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; } SP_CALLBACKS, *LPSP_CALLBACKS; typedef struct SPDATA_INIT { LPSP_CALLBACKS lpCB; DWORD dwSPVersion; LPDPLOBBYSP lpISP; LPDPADDRESS lpAddress; } SPDATA_INIT, *LPSPDATA_INIT; typedef HRESULT (WINAPI *LPSP_INIT)(LPSPDATA_INIT); HRESULT WINAPI DPLSPInit(LPSPDATA_INIT); /* Define the COM interface */ #define INTERFACE IDPLobbySP DECLARE_INTERFACE_(IDPLobbySP,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDPLobbySP methods ***/ STDMETHOD(AddGroupToGroup)(THIS_ LPSPDATA_ADDREMOTEGROUPTOGROUP argtg ) PURE; STDMETHOD(AddPlayerToGroup)(THIS_ LPSPDATA_ADDREMOTEPLAYERTOGROUP arptg ) PURE; STDMETHOD(CreateGroup)(THIS_ LPSPDATA_CREATEREMOTEGROUP crg ) PURE; STDMETHOD(CreateGroupInGroup)(THIS_ LPSPDATA_CREATEREMOTEGROUPINGROUP crgig ) PURE; STDMETHOD(DeleteGroupFromGroup)(THIS_ LPSPDATA_DELETEREMOTEGROUPFROMGROUP drgfg ) PURE; STDMETHOD(DeletePlayerFromGroup)(THIS_ LPSPDATA_DELETEREMOTEPLAYERFROMGROUP drpfg ) PURE; STDMETHOD(DestroyGroup)(THIS_ LPSPDATA_DESTROYREMOTEGROUP drg ) PURE; STDMETHOD(EnumSessionsResponse)(THIS_ LPSPDATA_ENUMSESSIONSRESPONSE er ) PURE; STDMETHOD(GetSPDataPointer)(THIS_ LPVOID * lplpData ) PURE; STDMETHOD(HandleMessage)(THIS_ LPSPDATA_HANDLEMESSAGE hm ) PURE; STDMETHOD(SendChatMessage)(THIS_ LPSPDATA_CHATMESSAGE cm ) PURE; STDMETHOD(SetGroupName)(THIS_ LPSPDATA_SETREMOTEGROUPNAME srgn ) PURE; STDMETHOD(SetPlayerName)(THIS_ LPSPDATA_SETREMOTEPLAYERNAME srpn ) PURE; STDMETHOD(SetSessionDesc)(THIS_ LPSPDATA_SETSESSIONDESC ssd ) PURE; STDMETHOD(SetSPDataPointer)(THIS_ LPVOID lpData ) PURE; STDMETHOD(StartSession)(THIS_ LPSPDATA_STARTSESSIONCOMMAND ssc ) PURE; }; #undef INTERFACE #if !defined (__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #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) /*** IDPLobbySP methods ***/ #define IDPLobbySP_AddGroupToGroup(p,a) (p)->lpVtbl->AddGroupToGroup(p,a) #define IDPLobbySP_AddPlayerToGroup(p,a) (p)->lpVtbl->AddPlayerToGroup(p,a) #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_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_SetSPDataPointer(p,a) (p)->lpVtbl->SetSPDataPointer(p,a) #endif /* This variable is exported from the DLL at ordinal 6 to be accessed by the * SP directly. This is the same variable that the DP SP will use. */ extern DWORD gdwDPlaySPRefCount; #endif