Pull in even more rdesktop source.
[rdpsrv] / constants.h
1 /*
2    rdesktop: A Remote Desktop Protocol client.
3    Miscellaneous protocol constants
4    Copyright (C) Matthew Chapman 1999-2002
5    
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10    
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15    
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 /* TCP port for Remote Desktop Protocol */
22 #define TCP_PORT_RDP 3389
23
24 /* ISO PDU codes */
25 enum ISO_PDU_CODE
26 {
27         ISO_PDU_CR = 0xE0,      /* Connection Request */
28         ISO_PDU_CC = 0xD0,      /* Connection Confirm */
29         ISO_PDU_DR = 0x80,      /* Disconnect Request */
30         ISO_PDU_DT = 0xF0,      /* Data */
31         ISO_PDU_ER = 0x70       /* Error */
32 };
33
34 /* MCS PDU codes */
35 enum MCS_PDU_TYPE
36 {
37         MCS_EDRQ = 1,           /* Erect Domain Request */
38         MCS_DPUM = 8,           /* Disconnect Provider Ultimatum */
39         MCS_AURQ = 10,          /* Attach User Request */
40         MCS_AUCF = 11,          /* Attach User Confirm */
41         MCS_CJRQ = 14,          /* Channel Join Request */
42         MCS_CJCF = 15,          /* Channel Join Confirm */
43         MCS_SDRQ = 25,          /* Send Data Request */
44         MCS_SDIN = 26           /* Send Data Indication */
45 };
46
47 #define MCS_CONNECT_INITIAL     0x7f65
48 #define MCS_CONNECT_RESPONSE    0x7f66
49
50 #define BER_TAG_BOOLEAN         1
51 #define BER_TAG_INTEGER         2
52 #define BER_TAG_OCTET_STRING    4
53 #define BER_TAG_RESULT          10
54 #define MCS_TAG_DOMAIN_PARAMS   0x30
55
56 #define MCS_GLOBAL_CHANNEL      1003
57 #define MCS_USERCHANNEL_BASE    1001
58
59 /* RDP secure transport constants */
60 #define SEC_RANDOM_SIZE         32
61 #define SEC_MODULUS_SIZE        64
62 #define SEC_PADDING_SIZE        8
63 #define SEC_EXPONENT_SIZE       4
64
65 #define SEC_CLIENT_RANDOM       0x0001
66 #define SEC_ENCRYPT             0x0008
67 #define SEC_LOGON_INFO          0x0040
68 #define SEC_LICENCE_NEG         0x0080
69
70 #define SEC_TAG_SRV_INFO        0x0c01
71 #define SEC_TAG_SRV_CRYPT       0x0c02
72 #define SEC_TAG_SRV_CHANNELS    0x0c03
73
74 #define SEC_TAG_CLI_INFO        0xc001
75 #define SEC_TAG_CLI_CRYPT       0xc002
76 #define SEC_TAG_CLI_CHANNELS    0xc003
77 #define SEC_TAG_CLI_4           0xc004
78
79 #define SEC_TAG_PUBKEY          0x0006
80 #define SEC_TAG_KEYSIG          0x0008
81
82 #define SEC_RSA_MAGIC           0x31415352      /* RSA1 */
83
84 /* RDP licensing constants */
85 #define LICENCE_TOKEN_SIZE      10
86 #define LICENCE_HWID_SIZE       20
87 #define LICENCE_SIGNATURE_SIZE  16
88
89 #define LICENCE_TAG_DEMAND      0x01
90 #define LICENCE_TAG_AUTHREQ     0x02
91 #define LICENCE_TAG_ISSUE       0x03
92 #define LICENCE_TAG_REISSUE     0x04
93 #define LICENCE_TAG_PRESENT     0x12
94 #define LICENCE_TAG_REQUEST     0x13
95 #define LICENCE_TAG_AUTHRESP    0x15
96 #define LICENCE_TAG_RESULT      0xff
97
98 #define LICENCE_TAG_USER        0x000f
99 #define LICENCE_TAG_HOST        0x0010
100
101 /* RDP PDU codes */
102 enum RDP_PDU_TYPE
103 {
104         RDP_PDU_DEMAND_ACTIVE = 1,
105         RDP_PDU_CONFIRM_ACTIVE = 3,
106         RDP_PDU_DEACTIVATE = 6,
107         RDP_PDU_DATA = 7
108 };
109
110 enum RDP_DATA_PDU_TYPE
111 {
112         RDP_DATA_PDU_UPDATE = 2,
113         RDP_DATA_PDU_CONTROL = 20,
114         RDP_DATA_PDU_POINTER = 27,
115         RDP_DATA_PDU_INPUT = 28,
116         RDP_DATA_PDU_SYNCHRONISE = 31,
117         RDP_DATA_PDU_BELL = 34,
118         RDP_DATA_PDU_LOGON = 38,
119         RDP_DATA_PDU_FONT2 = 39,
120         RDP_DATA_PDU_DISCONNECT = 47
121 };
122
123 enum RDP_CONTROL_PDU_TYPE
124 {
125         RDP_CTL_REQUEST_CONTROL = 1,
126         RDP_CTL_GRANT_CONTROL = 2,
127         RDP_CTL_DETACH = 3,
128         RDP_CTL_COOPERATE = 4
129 };
130
131 enum RDP_UPDATE_PDU_TYPE
132 {
133         RDP_UPDATE_ORDERS = 0,
134         RDP_UPDATE_BITMAP = 1,
135         RDP_UPDATE_PALETTE = 2,
136         RDP_UPDATE_SYNCHRONIZE = 3
137 };
138
139 enum RDP_POINTER_PDU_TYPE
140 {
141         RDP_POINTER_SYSTEM = 1,
142         RDP_POINTER_MOVE = 3,
143         RDP_POINTER_COLOR = 6,
144         RDP_POINTER_CACHED = 7
145 };
146
147 enum RDP_SYSTEM_POINTER_TYPE
148 {
149         RDP_NULL_POINTER = 0,
150         RDP_DEFAULT_POINTER = 0x7F00
151 };
152
153 enum RDP_INPUT_DEVICE
154 {
155         RDP_INPUT_SYNCHRONIZE = 0,
156         RDP_INPUT_CODEPOINT = 1,
157         RDP_INPUT_VIRTKEY = 2,
158         RDP_INPUT_SCANCODE = 4,
159         RDP_INPUT_MOUSE = 0x8001
160 };
161
162 /* Device flags */
163 #define KBD_FLAG_RIGHT          0x0001
164 #define KBD_FLAG_EXT            0x0100
165 #define KBD_FLAG_QUIET          0x1000
166 #define KBD_FLAG_DOWN           0x4000
167 #define KBD_FLAG_UP             0x8000
168
169 /* These are for synchronization; not for keystrokes */
170 #define KBD_FLAG_SCROLL   0x0001
171 #define KBD_FLAG_NUMLOCK  0x0002
172 #define KBD_FLAG_CAPITAL  0x0004
173
174 /* See T.128 */
175 #define RDP_KEYPRESS 0
176 #define RDP_KEYRELEASE (KBD_FLAG_DOWN | KBD_FLAG_UP)
177
178 #define MOUSE_FLAG_MOVE         0x0800
179 #define MOUSE_FLAG_BUTTON1      0x1000
180 #define MOUSE_FLAG_BUTTON2      0x2000
181 #define MOUSE_FLAG_BUTTON3      0x4000
182 #define MOUSE_FLAG_BUTTON4      0x0280
183 #define MOUSE_FLAG_BUTTON5      0x0380
184 #define MOUSE_FLAG_DOWN         0x8000
185
186 /* Raster operation masks */
187 #define ROP2_S(rop3) (rop3 & 0xf)
188 #define ROP2_P(rop3) ((rop3 & 0x3) | ((rop3 & 0x30) >> 2))
189
190 #define ROP2_COPY       0xc
191 #define ROP2_XOR        0x6
192 #define ROP2_AND        0x8
193 #define ROP2_NXOR       0x9
194 #define ROP2_OR         0xe
195
196 #define MIX_TRANSPARENT 0
197 #define MIX_OPAQUE      1
198
199 #define TEXT2_VERTICAL          0x04
200 #define TEXT2_IMPLICIT_X        0x20
201
202 /* RDP capabilities */
203 #define RDP_CAPSET_GENERAL      1       /* Maps to generalCapabilitySet in T.128 page 138 */
204 #define RDP_CAPLEN_GENERAL      0x18
205 #define OS_MAJOR_TYPE_UNIX      4
206 #define OS_MINOR_TYPE_XSERVER   7
207
208 #define RDP_CAPSET_BITMAP       2
209 #define RDP_CAPLEN_BITMAP       0x1C
210
211 #define RDP_CAPSET_ORDER        3
212 #define RDP_CAPLEN_ORDER        0x58
213 #define ORDER_CAP_NEGOTIATE     2
214 #define ORDER_CAP_NOSUPPORT     4
215
216 #define RDP_CAPSET_BMPCACHE     4
217 #define RDP_CAPLEN_BMPCACHE     0x28
218
219 #define RDP_CAPSET_CONTROL      5
220 #define RDP_CAPLEN_CONTROL      0x0C
221
222 #define RDP_CAPSET_ACTIVATE     7
223 #define RDP_CAPLEN_ACTIVATE     0x0C
224
225 #define RDP_CAPSET_POINTER      8
226 #define RDP_CAPLEN_POINTER      0x08
227
228 #define RDP_CAPSET_SHARE        9
229 #define RDP_CAPLEN_SHARE        0x08
230
231 #define RDP_CAPSET_COLCACHE     10
232 #define RDP_CAPLEN_COLCACHE     0x08
233
234 #define RDP_CAPSET_UNKNOWN      13
235 #define RDP_CAPLEN_UNKNOWN      0x9C
236
237 #define RDP_SOURCE              "MSTSC"
238
239 /* Logon flags */
240 #define RDP_LOGON_NORMAL        0x33
241 #define RDP_LOGON_AUTO          0x8
242 #define RDP_LOGON_BLOB          0x100
243
244 /* Keymap flags */
245 #define MapRightShiftMask   (1<<0)
246 #define MapLeftShiftMask    (1<<1)
247 #define MapShiftMask (MapRightShiftMask | MapLeftShiftMask)
248
249 #define MapRightAltMask     (1<<2)
250 #define MapLeftAltMask      (1<<3)
251 #define MapAltGrMask MapRightAltMask
252
253 #define MapRightCtrlMask    (1<<4)
254 #define MapLeftCtrlMask     (1<<5)
255 #define MapCtrlMask (MapRightCtrlMask | MapLeftCtrlMask)
256
257 #define MapRightWinMask     (1<<6)
258 #define MapLeftWinMask      (1<<7)
259 #define MapWinMask (MapRightWinMask | MapLeftWinMask)
260
261 #define MapNumLockMask      (1<<8)
262 #define MapCapsLockMask     (1<<9)
263
264 #define MapLocalStateMask   (1<<10)
265
266 #define MapInhibitMask      (1<<11)
267
268 #define MASK_ADD_BITS(var, mask) (var |= mask)
269 #define MASK_REMOVE_BITS(var, mask) (var &= ~mask)
270 #define MASK_HAS_BITS(var, mask) ((var & mask)>0)
271 #define MASK_CHANGE_BIT(var, mask, active) (var = ((var & ~mask) | (active ? mask : 0)))
272
273 /* Clipboard constants, "borrowed" from GCC system headers in 
274    the w32 cross compiler */
275
276 #define CF_TEXT         1
277 #define CF_BITMAP       2
278 #define CF_METAFILEPICT 3
279 #define CF_SYLK         4
280 #define CF_DIF          5
281 #define CF_TIFF         6
282 #define CF_OEMTEXT      7
283 #define CF_DIB          8
284 #define CF_PALETTE      9
285 #define CF_PENDATA      10
286 #define CF_RIFF         11
287 #define CF_WAVE         12
288 #define CF_UNICODETEXT  13
289 #define CF_ENHMETAFILE  14
290 #define CF_HDROP        15
291 #define CF_LOCALE       16
292 #define CF_MAX          17
293 #define CF_OWNERDISPLAY 128
294 #define CF_DSPTEXT      129
295 #define CF_DSPBITMAP    130
296 #define CF_DSPMETAFILEPICT      131
297 #define CF_DSPENHMETAFILE       142
298 #define CF_PRIVATEFIRST 512
299 #define CF_PRIVATELAST  767
300 #define CF_GDIOBJFIRST  768
301 #define CF_GDIOBJLAST   1023
302
303 /* Sound format constants */
304 #define WAVE_FORMAT_PCM         1
305 #define WAVE_FORMAT_ADPCM       2
306 #define WAVE_FORMAT_ALAW        6
307 #define WAVE_FORMAT_MULAW       7
308
309 /* Virtual channel options */
310 #define CHANNEL_OPTION_INITIALIZED      0x80000000
311 #define CHANNEL_OPTION_ENCRYPT_RDP      0x40000000
312 #define CHANNEL_OPTION_COMPRESS_RDP     0x00800000
313 #define CHANNEL_OPTION_SHOW_PROTOCOL    0x00200000
314
315 /* NT status codes for RDPDR */
316 #define STATUS_SUCCESS                  0x00000000
317 #define STATUS_INVALID_PARAMETER        0xc000000d
318 #define STATUS_INVALID_DEVICE_REQUEST   0xc0000010
319 #define STATUS_ACCESS_DENIED            0xc0000022