2 #ifndef __WINE_DPLAYX_MESSAGES__
3 #define __WINE_DPLAYX_MESSAGES__
7 #include "rpc.h" /* For GUID */
9 #include "dplay_global.h"
11 DWORD
CreateLobbyMessageReceptionThread( HANDLE hNotifyEvent
, HANDLE hStart
,
12 HANDLE hDeath
, HANDLE hConnRead
);
14 HRESULT
DP_MSG_SendRequestPlayerId( IDirectPlay2AImpl
* This
, DWORD dwFlags
,
15 LPDPID lpdipidAllocatedId
);
16 HRESULT
DP_MSG_ForwardPlayerCreation( IDirectPlay2AImpl
* This
, DPID dpidServer
);
18 void DP_MSG_ReplyReceived( IDirectPlay2AImpl
* This
, WORD wCommandId
,
19 LPCVOID lpMsgBody
, DWORD dwMsgBodySize
);
20 void DP_MSG_ErrorReceived( IDirectPlay2AImpl
* This
, WORD wCommandId
,
21 LPCVOID lpMsgBody
, DWORD dwMsgBodySize
);
23 /* Timings -> 1000 ticks/sec */
24 #define DPMSG_WAIT_5_SECS 5000
25 #define DPMSG_WAIT_30_SECS 30000
26 #define DPMSG_WAIT_60_SECS 60000
27 #define DPMSG_DEFAULT_WAIT_TIME DPMSG_WAIT_30_SECS
29 /* Message types etc. */
32 /* Non provided messages for DPLAY - guess work which may be wrong :( */
33 #define DPMSGCMD_ENUMSESSIONSREPLY 1
34 #define DPMSGCMD_ENUMSESSIONSREQUEST 2
35 #define DPMSGCMD_GETNAMETABLEREPLY 3 /* Contains all existing players in session */
37 #define DPMSGCMD_REQUESTNEWPLAYERID 5
39 #define DPMSGCMD_NEWPLAYERIDREPLY 7
40 #define DPMSGCMD_CREATESESSION 8 /* Might be a create nameserver or new player msg */
41 #define DPMSGCMD_CREATENEWPLAYER 9
42 #define DPMSGCMD_SYSTEMMESSAGE 10
43 #define DPMSGCMD_DELETEPLAYER 11
44 #define DPMSGCMD_DELETEGROUP 12
46 #define DPMSGCMD_ENUMGROUPS 17
48 #define DPMSGCMD_FORWARDADDPLAYER 19
50 #define DPMSGCMD_FORWARDADDPLAYERNACK 36
52 /* This is what DP 6 defines it as. Don't know what it means. All messages
53 * defined below are DPMSGVER_DP6.
55 #define DPMSGVER_DP6 11
57 /* MAGIC number at the start of all dplay packets ("play" in ASCII) */
58 #define DPMSGMAGIC_DPLAYMSG 0x79616c70
60 /* All messages sent from the system are sent with this at the beginning of
64 typedef struct tagDPMSG_SENDENVELOPE
69 } DPMSG_SENDENVELOPE
, *LPDPMSG_SENDENVELOPE
;
70 typedef const DPMSG_SENDENVELOPE
* LPCDPMSG_SENDENVELOPE
;
72 /* System messages exchanged between players seems to have this
73 * payload envelope on top of the basic envelope
75 typedef struct tagDPMSG_SYSMSGENVELOPE
79 } DPMSG_SYSMSGENVELOPE
, *LPDPMSG_SYSMSGENVELOPE
;
80 typedef const DPMSG_SYSMSGENVELOPE
* LPCDPMSG_SYSMSGENVELOPE
;
82 /* Reply sent in response to an enumsession request */
83 typedef struct tagDPMSG_ENUMSESSIONSREPLY
85 DPMSG_SENDENVELOPE envelope
;
88 DWORD dwSize
; /* Size of DPSESSIONDESC2 struct */
89 DWORD dwFlags
; /* Sessions flags */
91 GUID guidInstance
; /* Not 100% sure this is what it is... */
96 DWORD dwCurrentPlayers
;
103 DWORD dwUnknown
; /* Seems to be equal to 0x5c which is a "\\" */
104 /* Encryption package string? */
106 /* At the end we have ... */
107 /* WCHAR wszSessionName[1]; Var length with NULL terminal */
109 } DPMSG_ENUMSESSIONSREPLY
, *LPDPMSG_ENUMSESSIONSREPLY
;
110 typedef const DPMSG_ENUMSESSIONSREPLY
* LPCDPMSG_ENUMSESSIONSREPLY
;
112 /* Msg sent to find out what sessions are available */
113 typedef struct tagDPMSG_ENUMSESSIONSREQUEST
115 DPMSG_SENDENVELOPE envelope
;
117 GUID guidApplication
;
119 DWORD dwPasswordSize
; /* A Guess. This is 0x00000000. */
120 /* This might be the name server DPID which
121 is needed for the reply */
123 DWORD dwFlags
; /* dwFlags from EnumSessions */
125 } DPMSG_ENUMSESSIONSREQUEST
, *LPDPMSG_ENUMSESSIONSREQUEST
;
126 typedef const DPMSG_ENUMSESSIONSREQUEST
* LPCDPMSG_ENUMSESSIONSREQUEST
;
128 /* Size is 146 received - with 18 or 20 bytes header = ~128 bytes */
129 typedef struct tagDPMSG_CREATESESSION
131 DPMSG_SENDENVELOPE envelope
;
132 } DPMSG_CREATESESSION
, *LPDPMSG_CREATESESSION
;
133 typedef const DPMSG_CREATESESSION
* LPCDPMSG_CREATESESSION
;
136 typedef struct tagDPMSG_REQUESTNEWPLAYERID
138 DPMSG_SENDENVELOPE envelope
;
140 DWORD dwFlags
; /* dwFlags used for CreatePlayer */
142 } DPMSG_REQUESTNEWPLAYERID
, *LPDPMSG_REQUESTNEWPLAYERID
;
143 typedef const DPMSG_REQUESTNEWPLAYERID
* LPCDPMSG_REQUESTNEWPLAYERID
;
146 typedef struct tagDPMSG_NEWPLAYERIDREPLY
148 DPMSG_SENDENVELOPE envelope
;
150 DPID dpidNewPlayerId
;
152 /* Assume that this is data that is tacked on to the end of the message
153 * that comes from the SP remote data stored that needs to be propagated.
155 BYTE unknown
[36]; /* This appears to always be 0 - not sure though */
156 } DPMSG_NEWPLAYERIDREPLY
, *LPDPMSG_NEWPLAYERIDREPLY
;
157 typedef const DPMSG_NEWPLAYERIDREPLY
* LPCDPMSG_NEWPLAYERIDREPLY
;
159 typedef struct tagDPMSG_FORWARDADDPLAYER
161 DPMSG_SENDENVELOPE envelope
;
163 DWORD unknown
; /* 0 */
165 DPID dpidAppServer
; /* Remote application server id */
166 DWORD unknown2
[5]; /* ??? */
167 #define FORWARDADDPLAYER_UNKNOWN2_INIT { 0x0, 0x1c, 0x6c, 0x50, 0x9 }
169 DPID dpidAppServer2
; /* Remote application server id again !? */
170 DWORD unknown3
[5]; /* ??? */
171 #define FORWARDADDPLAYER_UNKNOWN3_INIT { 0x0, 0x0, 0x20, 0x0, 0x0 }
173 DPID dpidAppServer3
; /* Remote application server id again !? */
175 DWORD unknown4
[12]; /* ??? - Is this a clump of 5 and then 8? */
176 /* NOTE: 1 byte infront of the two 0x??090002 entries changes! */
177 #define FORWARDADDPLAYER_UNKNOWN4_INIT { 0x30, 0xb, 0x0, 0x1e090002, 0x0, 0x0, 0x0, 0x32090002, 0x0, 0x0, 0x0, 0x0 }
179 BYTE unknown5
[2]; /* 2 bytes at the end. This may be a part of something! */
180 #define FORWARDADDPLAYER_UNKNOWN5_INIT { 0x0 }
182 } DPMSG_FORWARDADDPLAYER
, *LPDPMSG_FORWARDADDPLAYER
;
183 typedef const DPMSG_FORWARDADDPLAYER
* LPCDPMSG_FORWARDADDPLAYER
;
185 /* This is an error message that can be received. Not sure if this is
186 * specifically for a forward add player or for all errors
188 typedef struct tagDPMSG_FORWARDADDPLAYERNACK
190 DPMSG_SENDENVELOPE envelope
;
192 } DPMSG_FORWARDADDPLAYERNACK
, *LPDPMSG_FORWARDADDPLAYERNACK
;
193 typedef const DPMSG_FORWARDADDPLAYERNACK
* LPCDPMSG_FORWARDADDPLAYERNACK
;