| /* |
| * Copyright 2000 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| |
| #ifndef __WINE_DIRECT_PLAY_SP_H |
| #define __WINE_DIRECT_PLAY_SP_H |
| |
| #include "dplay.h" |
| #include "dplobby.h" |
| |
| /* GUID for IDirectPlaySP {0C9F6360-CC61-11cf-ACEC-00AA006886E3} */ |
| DEFINE_GUID(IID_IDirectPlaySP, 0xc9f6360, 0xcc61, 0x11cf, 0xac, 0xec, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3); |
| typedef struct IDirectPlaySP IDirectPlaySP, *LPDIRECTPLAYSP; |
| |
| |
| typedef BOOL (CALLBACK *LPENUMMRUCALLBACK)( LPCVOID lpData, |
| DWORD dwDataSize, |
| LPVOID lpContext ); |
| |
| /* For SP. Top 16 bits is dplay, bottom 16 is SP */ |
| #define DPSP_MAJORVERSION 0x00060000 |
| #define DPSP_DX5VERSION 0x00050000 |
| #define DPSP_DX3VERSION 0x00040000 |
| |
| #define DPSP_MAJORVERSIONMASK 0xFFFF0000 |
| #define DPSP_MINORVERSIONMASK 0x0000FFFF |
| |
| |
| /* Some flags */ |
| #define DPLAYI_PLAYER_SYSPLAYER 0x00000001 |
| #define DPLAYI_PLAYER_NAMESRVR 0x00000002 |
| #define DPLAYI_PLAYER_PLAYERINGROUP 0x00000004 |
| #define DPLAYI_PLAYER_PLAYERLOCAL 0x00000008 |
| #define DPLAYI_GROUP_SYSGROUP 0x00000020 |
| #define DPLAYI_GROUP_DPLAYOWNS 0x00000040 |
| #define DPLAYI_PLAYER_APPSERVER 0x00000080 |
| #define DPLAYI_GROUP_HIDDEN 0x00000400 |
| |
| /* Define the COM interface */ |
| #define INTERFACE IDirectPlaySP |
| #define IDirectPlaySP_METHODS \ |
| IUnknown_METHODS \ |
| STDMETHOD(AddMRUEntry)(THIS_ LPCWSTR lpSection, LPCWSTR lpKey, LPCVOID lpData, DWORD dwDataSize, DWORD dwMaxEntries ) PURE; \ |
| STDMETHOD(CreateAddress)(THIS_ REFGUID guidSP, REFGUID guidDataType, LPCVOID lpData, DWORD dwDataSize, LPVOID lpAddress,LPDWORD lpdwAddressSize) PURE; \ |
| STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK lpEnumAddressCallback, LPCVOID lpAddress, DWORD dwAddressSize, LPVOID lpContext ) PURE; \ |
| STDMETHOD(EnumMRUEntries)(THIS_ LPCWSTR lpSection, LPCWSTR lpKey, LPENUMMRUCALLBACK lpEnumMRUCallback, LPVOID lpContext ) PURE; \ |
| STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwPlayerFlags ) PURE; \ |
| STDMETHOD(GetSPPlayerData)(THIS_ DPID idPlayer, LPVOID *lplpData, LPDWORD lpdwDataSize, DWORD dwFlags ) PURE; \ |
| STDMETHOD(HandleMessage)(THIS_ LPVOID lpMessageBody, DWORD dwMessageBodySize, LPVOID lpMessageHeader ) PURE; \ |
| STDMETHOD(SetSPPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags ) PURE; \ |
| STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT lpElements, DWORD dwElementCount, LPVOID lpAddress, LPDWORD lpdwAddressSize ) PURE; \ |
| STDMETHOD(GetSPData)(THIS_ LPVOID *lplpData, LPDWORD dwDataSize, DWORD dwFlags ) PURE; \ |
| STDMETHOD(SetSPData)(THIS_ LPVOID lpData, DWORD dwDataSize, DWORD dwFlags ) PURE; \ |
| STDMETHOD_(VOID,SendComplete)(THIS_ LPVOID , DWORD ) PURE; |
| ICOM_DEFINE(IDirectPlaySP,IUnknown) |
| #undef INTERFACE |
| |
| |
| /* NOTE: The microsoft provided header file doesn't have these access |
| * functions |
| */ |
| #ifdef COBJMACROS |
| /*** IUnknown methods ***/ |
| #define IDirectPlaySP_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) |
| #define IDirectPlaySP_AddRef(p) (p)->lpVtbl->AddRef(p) |
| #define IDirectPlaySP_Release(p) (p)->lpVtbl->Release(p) |
| /*** IDirectPlaySP methods ***/ |
| #define IDirectPlaySP_AddMRUEntry(p,a,b,c,d,e) (p)->lpVtbl->AddMRUEntry(p,a,b,c,d,e) |
| #define IDirectPlaySP_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f) |
| #define IDirectPlaySP_EnumAddress(p,a,b,c,d) (p)->lpVtbl->EnumAddress(p,a,b,c,d) |
| #define IDirectPlaySP_EnumMRUEntries(p,a,b,c,d) (p)->lpVtbl->EnumMRUEntries(p,a,b,c,d) |
| #define IDirectPlaySP_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b) |
| #define IDirectPlaySP_GetSPPlayerData(p,a,b,c,d) (p)->lpVtbl->GetSPPlayerData(p,a,b,c,d) |
| #define IDirectPlaySP_HandleMessage(p,a,b,c) (p)->lpVtbl->HandleMessage(p,a,b,c) |
| #define IDirectPlaySP_SetSPPlayerData(p,a,b,c,d) (p)->lpVtbl->SetSPPlayerData(p,a,b,c,d) |
| #define IDirectPlaySP_CreateCompoundAddress(p,a,b,c,d) (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d) |
| #define IDirectPlaySP_GetSPData(p,a,b,c) (p)->lpVtbl->GetSPData(p,a,b,c) |
| #define IDirectPlaySP_SetSPData(p,a,b,c) (p)->lpVtbl->SetSPData(p,a,b,c) |
| #define IDirectPlaySP_SendComplete(p,a,b) (p)->lpVtbl->SendComplete(p,a,b) |
| #endif |
| |
| /* SP Callback stuff */ |
| |
| typedef struct tagDPSP_ADDPLAYERTOGROUPDATA |
| { |
| DPID idPlayer; |
| DPID idGroup; |
| IDirectPlaySP* lpISP; |
| } DPSP_ADDPLAYERTOGROUPDATA, *LPDPSP_ADDPLAYERTOGROUPDATA; |
| |
| typedef struct tagDPSP_CLOSEDATA |
| { |
| IDirectPlaySP* lpISP; |
| } DPSP_CLOSEDATA, *LPDPSP_CLOSEDATA; |
| |
| typedef struct tagDPSP_CREATEGROUPDATA |
| { |
| DPID idGroup; |
| DWORD dwFlags; |
| LPVOID lpSPMessageHeader; |
| IDirectPlaySP* lpISP; |
| } DPSP_CREATEGROUPDATA, *LPDPSP_CREATEGROUPDATA; |
| |
| typedef struct tagDPSP_CREATEPLAYERDATA |
| { |
| DPID idPlayer; |
| DWORD dwFlags; |
| LPVOID lpSPMessageHeader; |
| IDirectPlaySP* lpISP; |
| } DPSP_CREATEPLAYERDATA, *LPDPSP_CREATEPLAYERDATA; |
| |
| typedef struct tagDPSP_DELETEGROUPDATA |
| { |
| DPID idGroup; |
| DWORD dwFlags; |
| IDirectPlaySP* lpISP; |
| } DPSP_DELETEGROUPDATA, *LPDPSP_DELETEGROUPDATA; |
| |
| typedef struct tagDPSP_DELETEPLAYERDATA |
| { |
| DPID idPlayer; |
| DWORD dwFlags; |
| IDirectPlaySP* lpISP; |
| } DPSP_DELETEPLAYERDATA, *LPDPSP_DELETEPLAYERDATA; |
| |
| typedef struct tagDPSP_ENUMSESSIONSDATA |
| { |
| LPVOID lpMessage; |
| DWORD dwMessageSize; |
| IDirectPlaySP* lpISP; |
| BOOL bReturnStatus; |
| } DPSP_ENUMSESSIONSDATA, *LPDPSP_ENUMSESSIONSDATA; |
| |
| typedef struct _DPSP_GETADDRESSDATA |
| { |
| DPID idPlayer; |
| DWORD dwFlags; |
| LPDPADDRESS lpAddress; |
| LPDWORD lpdwAddressSize; |
| IDirectPlaySP* lpISP; |
| } DPSP_GETADDRESSDATA, *LPDPSP_GETADDRESSDATA; |
| |
| typedef struct tagDPSP_GETADDRESSCHOICESDATA |
| { |
| LPDPADDRESS lpAddress; |
| LPDWORD lpdwAddressSize; |
| IDirectPlaySP* lpISP; |
| } DPSP_GETADDRESSCHOICESDATA, *LPDPSP_GETADDRESSCHOICESDATA; |
| |
| typedef struct tagDPSP_GETCAPSDATA |
| { |
| DPID idPlayer; |
| LPDPCAPS lpCaps; |
| DWORD dwFlags; |
| IDirectPlaySP* lpISP; |
| } DPSP_GETCAPSDATA, *LPDPSP_GETCAPSDATA; |
| |
| typedef struct tagDPSP_OPENDATA |
| { |
| BOOL bCreate; |
| LPVOID lpSPMessageHeader; |
| IDirectPlaySP* lpISP; |
| BOOL bReturnStatus; |
| DWORD dwOpenFlags; |
| DWORD dwSessionFlags; |
| } DPSP_OPENDATA, *LPDPSP_OPENDATA; |
| |
| typedef struct tagDPSP_REMOVEPLAYERFROMGROUPDATA |
| { |
| DPID idPlayer; |
| DPID idGroup; |
| IDirectPlaySP* lpISP; |
| } DPSP_REMOVEPLAYERFROMGROUPDATA, *LPDPSP_REMOVEPLAYERFROMGROUPDATA; |
| |
| typedef struct tagDPSP_REPLYDATA |
| { |
| LPVOID lpSPMessageHeader; |
| LPVOID lpMessage; |
| DWORD dwMessageSize; |
| DPID idNameServer; |
| IDirectPlaySP* lpISP; |
| } DPSP_REPLYDATA, *LPDPSP_REPLYDATA; |
| |
| typedef struct tagDPSP_SENDDATA |
| { |
| DWORD dwFlags; |
| DPID idPlayerTo; |
| DPID idPlayerFrom; |
| LPVOID lpMessage; |
| DWORD dwMessageSize; |
| BOOL bSystemMessage; |
| IDirectPlaySP* lpISP; |
| } DPSP_SENDDATA, *LPDPSP_SENDDATA; |
| |
| typedef struct tagDPSP_SENDTOGROUPDATA |
| { |
| DWORD dwFlags; |
| DPID idGroupTo; |
| DPID idPlayerFrom; |
| LPVOID lpMessage; |
| DWORD dwMessageSize; |
| IDirectPlaySP* lpISP; |
| } DPSP_SENDTOGROUPDATA, *LPDPSP_SENDTOGROUPDATA; |
| |
| typedef struct tagDPSP_SENDEXDATA |
| { |
| IDirectPlaySP* lpISP; |
| DWORD dwFlags; |
| DPID idPlayerTo; |
| DPID idPlayerFrom; |
| LPSGBUFFER lpSendBuffers; |
| DWORD cBuffers; |
| DWORD dwMessageSize; |
| DWORD dwPriority; |
| DWORD dwTimeout; |
| LPVOID lpDPContext; |
| LPDWORD lpdwSPMsgID; |
| BOOL bSystemMessage; |
| } DPSP_SENDEXDATA, *LPDPSP_SENDEXDATA; |
| |
| typedef struct tagDPSP_SENDTOGROUPEXDATA |
| { |
| IDirectPlaySP* lpISP; |
| DWORD dwFlags; |
| DPID idGroupTo; |
| DPID idPlayerFrom; |
| LPSGBUFFER lpSendBuffers; |
| DWORD cBuffers; |
| DWORD dwMessageSize; |
| DWORD dwPriority; |
| DWORD dwTimeout; |
| LPVOID lpDPContext; |
| LPDWORD lpdwSPMsgID; |
| } DPSP_SENDTOGROUPEXDATA, *LPDPSP_SENDTOGROUPEXDATA; |
| |
| typedef struct tagDPSP_GETMESSAGEQUEUEDATA |
| { |
| IDirectPlaySP* lpISP; |
| DWORD dwFlags; |
| DPID idFrom; |
| DPID idTo; |
| LPDWORD lpdwNumMsgs; |
| LPDWORD lpdwNumBytes; |
| } DPSP_GETMESSAGEQUEUEDATA, *LPDPSP_GETMESSAGEQUEUEDATA; |
| |
| #define DPCANCELSEND_PRIORITY 0x00000001 |
| #define DPCANCELSEND_ALL 0x00000002 |
| |
| typedef struct tagDPSP_CANCELDATA |
| { |
| IDirectPlaySP* lpISP; |
| DWORD dwFlags; |
| LPRGLPVOID lprglpvSPMsgID; |
| DWORD cSPMsgID; |
| DWORD dwMinPriority; |
| DWORD dwMaxPriority; |
| } DPSP_CANCELDATA, *LPDPSP_CANCELDATA; |
| |
| typedef struct tagDPSP_SHUTDOWNDATA |
| { |
| IDirectPlaySP* lpISP; |
| } DPSP_SHUTDOWNDATA, *LPDPSP_SHUTDOWNDATA; |
| |
| |
| /* Prototypes returned by SPInit */ |
| typedef HRESULT (WINAPI *LPDPSP_CREATEPLAYER)(LPDPSP_CREATEPLAYERDATA); |
| typedef HRESULT (WINAPI *LPDPSP_DELETEPLAYER)(LPDPSP_DELETEPLAYERDATA); |
| typedef HRESULT (WINAPI *LPDPSP_SEND)(LPDPSP_SENDDATA); |
| typedef HRESULT (WINAPI *LPDPSP_ENUMSESSIONS)(LPDPSP_ENUMSESSIONSDATA); |
| typedef HRESULT (WINAPI *LPDPSP_REPLY)(LPDPSP_REPLYDATA); |
| typedef HRESULT (WINAPI *LPDPSP_SHUTDOWN)(void); |
| typedef HRESULT (WINAPI *LPDPSP_CREATEGROUP)(LPDPSP_CREATEGROUPDATA); |
| typedef HRESULT (WINAPI *LPDPSP_DELETEGROUP)(LPDPSP_DELETEGROUPDATA); |
| typedef HRESULT (WINAPI *LPDPSP_ADDPLAYERTOGROUP)(LPDPSP_ADDPLAYERTOGROUPDATA); |
| typedef HRESULT (WINAPI *LPDPSP_REMOVEPLAYERFROMGROUP)(LPDPSP_REMOVEPLAYERFROMGROUPDATA); |
| typedef HRESULT (WINAPI *LPDPSP_GETCAPS)(LPDPSP_GETCAPSDATA); |
| typedef HRESULT (WINAPI *LPDPSP_GETADDRESS)(LPDPSP_GETADDRESSDATA); |
| typedef HRESULT (WINAPI *LPDPSP_GETADDRESSCHOICES)(LPDPSP_GETADDRESSCHOICESDATA); |
| typedef HRESULT (WINAPI *LPDPSP_OPEN)(LPDPSP_OPENDATA); |
| typedef HRESULT (WINAPI *LPDPSP_CLOSE)(void); |
| typedef HRESULT (WINAPI *LPDPSP_SENDTOGROUP)(LPDPSP_SENDTOGROUPDATA); |
| typedef HRESULT (WINAPI *LPDPSP_SHUTDOWNEX)(LPDPSP_SHUTDOWNDATA); |
| typedef HRESULT (WINAPI *LPDPSP_CLOSEEX)(LPDPSP_CLOSEDATA); |
| typedef HRESULT (WINAPI *LPDPSP_SENDEX)(LPDPSP_SENDEXDATA); |
| typedef HRESULT (WINAPI *LPDPSP_SENDTOGROUPEX)(LPDPSP_SENDTOGROUPEXDATA); |
| typedef HRESULT (WINAPI *LPDPSP_CANCEL)(LPDPSP_CANCELDATA); |
| typedef HRESULT (WINAPI *LPDPSP_GETMESSAGEQUEUE)(LPDPSP_GETMESSAGEQUEUEDATA); |
| |
| |
| typedef struct tagDPSP_SPCALLBACKS |
| { |
| DWORD dwSize; |
| DWORD dwVersion; |
| |
| LPDPSP_ENUMSESSIONS EnumSessions; /* Must be provided */ |
| LPDPSP_REPLY Reply; /* Must be provided */ |
| LPDPSP_SEND Send; /* Must be provided */ |
| LPDPSP_ADDPLAYERTOGROUP AddPlayerToGroup; /* Optional */ |
| LPDPSP_CLOSE Close; /* Optional */ |
| LPDPSP_CREATEGROUP CreateGroup; /* Optional */ |
| LPDPSP_CREATEPLAYER CreatePlayer; /* Optional */ |
| LPDPSP_DELETEGROUP DeleteGroup; /* Optional */ |
| LPDPSP_DELETEPLAYER DeletePlayer; /* Optional */ |
| LPDPSP_GETADDRESS GetAddress; /* Optional */ |
| LPDPSP_GETCAPS GetCaps; /* Optional */ |
| LPDPSP_OPEN Open; /* Optional */ |
| LPDPSP_REMOVEPLAYERFROMGROUP RemovePlayerFromGroup; /* Optional */ |
| LPDPSP_SENDTOGROUP SendToGroup; /* Optional */ |
| LPDPSP_SHUTDOWN Shutdown; /* Optional */ |
| |
| LPDPSP_CLOSEEX CloseEx; /* Optional */ |
| LPDPSP_SHUTDOWNEX ShutdownEx; /* Optional */ |
| LPDPSP_GETADDRESSCHOICES GetAddressChoices; /* Optional */ |
| |
| LPDPSP_SENDEX SendEx; /* Optional */ |
| LPDPSP_SENDTOGROUPEX SendToGroupEx; /* Optional */ |
| LPDPSP_CANCEL Cancel; /* Optional */ |
| LPDPSP_GETMESSAGEQUEUE GetMessageQueue; /* Optional */ |
| } DPSP_SPCALLBACKS, *LPDPSP_SPCALLBACKS; |
| |
| typedef struct tagSPINITDATA |
| { |
| LPDPSP_SPCALLBACKS lpCB; |
| IDirectPlaySP* lpISP; |
| LPWSTR lpszName; |
| LPGUID lpGuid; |
| DWORD dwReserved1; |
| DWORD dwReserved2; |
| DWORD dwSPHeaderSize; |
| LPDPADDRESS lpAddress; |
| DWORD dwAddressSize; |
| DWORD dwSPVersion; |
| } SPINITDATA, *LPSPINITDATA; |
| |
| typedef HRESULT (WINAPI *LPDPSP_SPINIT)(LPSPINITDATA); |
| |
| /* This variable is exported from the DLL at ordinal 6 to be accessed by the |
| * SP directly |
| */ |
| extern DWORD gdwDPlaySPRefCount; |
| |
| #endif |