1 /* -*- c-basic-offset: 8 -*-
2 rdesktop: A Remote Desktop Protocol client.
3 Copyright (C) Matthew Chapman 1999-2005
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #ifndef RDESKTOP_PROTO_H
21 #define RDESKTOP_PROTO_H
29 BOOL
bitmap_decompress(uint8
* output
, int width
, int height
, uint8
* input
, int size
, int Bpp
);
31 void cache_rebuild_bmpcache_linked_list(RDPCLIENT
* This
, uint8 id
, sint16
* idx
, int count
);
32 void cache_bump_bitmap(RDPCLIENT
* This
, uint8 id
, uint16 idx
, int bump
);
33 void cache_evict_bitmap(RDPCLIENT
* This
, uint8 id
);
34 HBITMAP
cache_get_bitmap(RDPCLIENT
* This
, uint8 id
, uint16 idx
);
35 void cache_put_bitmap(RDPCLIENT
* This
, uint8 id
, uint16 idx
, HBITMAP bitmap
);
36 void cache_save_state(RDPCLIENT
* This
);
37 FONTGLYPH
*cache_get_font(RDPCLIENT
* This
, uint8 font
, uint16 character
);
38 void cache_put_font(RDPCLIENT
* This
, uint8 font
, uint16 character
, uint16 offset
, uint16 baseline
, uint16 width
,
39 uint16 height
, HGLYPH pixmap
);
40 DATABLOB
*cache_get_text(RDPCLIENT
* This
, uint8 cache_id
);
41 void cache_put_text(RDPCLIENT
* This
, uint8 cache_id
, void *data
, int length
);
42 uint8
*cache_get_desktop(RDPCLIENT
* This
, uint32 offset
, int cx
, int cy
, int bytes_per_pixel
);
43 void cache_put_desktop(RDPCLIENT
* This
, uint32 offset
, int cx
, int cy
, int scanline
, int bytes_per_pixel
,
45 HCURSOR
cache_get_cursor(RDPCLIENT
* This
, uint16 cache_idx
);
46 void cache_put_cursor(RDPCLIENT
* This
, uint16 cache_idx
, HCURSOR cursor
);
48 VCHANNEL
*channel_register(RDPCLIENT
* This
, char *name
, uint32 flags
, void (*callback
) (RDPCLIENT
*, STREAM
));
49 STREAM
channel_init(RDPCLIENT
* This
, VCHANNEL
* channel
, uint32 length
);
50 void channel_send(RDPCLIENT
* This
, STREAM s
, VCHANNEL
* channel
);
51 void channel_process(RDPCLIENT
* This
, STREAM s
, uint16 mcs_channel
);
53 void cliprdr_send_simple_native_format_announce(RDPCLIENT
* This
, uint32 format
);
54 void cliprdr_send_native_format_announce(RDPCLIENT
* This
, uint8
* formats_data
, uint32 formats_data_length
);
55 void cliprdr_send_data_request(RDPCLIENT
* This
, uint32 format
);
56 void cliprdr_send_data(RDPCLIENT
* This
, uint8
* data
, uint32 length
);
57 void cliprdr_set_mode(RDPCLIENT
* This
, const char *optarg
);
58 BOOL
cliprdr_init(RDPCLIENT
* This
);
61 int disk_enum_devices(RDPCLIENT
* This
, uint32
* id
, char *optarg
);
62 NTSTATUS
disk_query_information(RDPCLIENT
* This
, NTHANDLE handle
, uint32 info_class
, STREAM out
);
63 NTSTATUS
disk_set_information(RDPCLIENT
* This
, NTHANDLE handle
, uint32 info_class
, STREAM in
, STREAM out
);
64 NTSTATUS
disk_check_notify(RDPCLIENT
* This
, NTHANDLE handle
);
65 NTSTATUS
disk_create_notify(RDPCLIENT
* This
, NTHANDLE handle
, uint32 info_class
);
66 NTSTATUS
disk_query_volume_information(RDPCLIENT
* This
, NTHANDLE handle
, uint32 info_class
, STREAM out
);
67 NTSTATUS
disk_query_directory(RDPCLIENT
* This
, NTHANDLE handle
, uint32 info_class
, char *pattern
, STREAM out
);
70 int mppc_expand(RDPCLIENT
* This
, uint8
* data
, uint32 clen
, uint8 ctype
, uint32
* roff
, uint32
* rlen
);
72 int get_current_workarea(RDPCLIENT
* This
, uint32
* x
, uint32
* y
, uint32
* width
, uint32
* height
);
73 void ewmh_init(RDPCLIENT
* This
);
75 STREAM
iso_init(RDPCLIENT
* This
, int length
);
76 BOOL
iso_send(RDPCLIENT
* This
, STREAM s
);
77 STREAM
iso_recv(RDPCLIENT
* This
, uint8
* rdpver
);
78 BOOL
iso_connect(RDPCLIENT
* This
, char *server
, char *cookie
);
79 BOOL
iso_reconnect(RDPCLIENT
* This
, char *server
, char *cookie
);
80 BOOL
iso_disconnect(RDPCLIENT
* This
);
81 void iso_reset_state(RDPCLIENT
* This
);
83 void licence_process(RDPCLIENT
* This
, STREAM s
);
85 STREAM
mcs_init(RDPCLIENT
* This
, int length
);
86 BOOL
mcs_send_to_channel(RDPCLIENT
* This
, STREAM s
, uint16 channel
);
87 BOOL
mcs_send(RDPCLIENT
* This
, STREAM s
);
88 STREAM
mcs_recv(RDPCLIENT
* This
, uint16
* channel
, uint8
* rdpver
);
89 BOOL
mcs_connect(RDPCLIENT
* This
, char *server
, char *cookie
, STREAM mcs_data
);
90 BOOL
mcs_reconnect(RDPCLIENT
* This
, char *server
, char *cookie
, STREAM mcs_data
);
91 void mcs_disconnect(RDPCLIENT
* This
);
92 void mcs_reset_state(RDPCLIENT
* This
);
94 void process_orders(RDPCLIENT
* This
, STREAM s
, uint16 num_orders
);
95 void reset_order_state(RDPCLIENT
* This
);
97 int parallel_enum_devices(RDPCLIENT
* This
, uint32
* id
, char *optarg
);
99 int printer_enum_devices(RDPCLIENT
* This
, uint32
* id
, char *optarg
);
101 int printercache_load_blob(char *printer_name
, uint8
** data
);
102 void printercache_process(RDPCLIENT
* This
, STREAM s
);
104 void pstcache_touch_bitmap(RDPCLIENT
* This
, uint8 cache_id
, uint16 cache_idx
, uint32 stamp
);
105 BOOL
pstcache_load_bitmap(RDPCLIENT
* This
, uint8 cache_id
, uint16 cache_idx
);
106 BOOL
pstcache_save_bitmap(RDPCLIENT
* This
, uint8 cache_id
, uint16 cache_idx
, uint8
* key
, uint8 width
, uint8 height
,
107 uint16 length
, uint8
* data
);
108 int pstcache_enumerate(RDPCLIENT
* This
, uint8 id
, HASH_KEY
* keylist
);
109 BOOL
pstcache_init(RDPCLIENT
* This
, uint8 cache_id
);
111 int main(int argc
, char *argv
[]);
112 void generate_random(uint8
* random
);
113 void error(char *format
, ...);
114 void warning(char *format
, ...);
115 void unimpl(char *format
, ...);
116 void hexdump(unsigned char *p
, unsigned int len
);
117 char *next_arg(char *src
, char needle
);
118 void toupper_str(char *p
);
119 BOOL
str_startswith(const char *s
, const char *prefix
);
120 BOOL
str_handle_lines(RDPCLIENT
* This
, const char *input
, char **rest
, str_handle_lines_t linehandler
, void *data
);
121 BOOL
subprocess(RDPCLIENT
* This
, char *const argv
[], str_handle_lines_t linehandler
, void *data
);
122 char *l_to_a(long N
, int base
);
123 int load_licence(RDPCLIENT
* This
, unsigned char **data
);
124 void save_licence(RDPCLIENT
* This
, unsigned char *data
, int length
);
125 BOOL
rd_pstcache_mkdir(void);
126 int rd_open_file(char *filename
);
127 void rd_close_file(int fd
);
128 int rd_read_file(int fd
, void *ptr
, int len
);
129 int rd_write_file(int fd
, void *ptr
, int len
);
130 int rd_lseek_file(int fd
, int offset
);
131 BOOL
rd_lock_file(int fd
, int start
, int len
);
133 BOOL
rdp5_process(RDPCLIENT
* This
, STREAM s
);
135 void rdp_out_unistr(RDPCLIENT
* This
, STREAM s
, wchar_t *string
, int len
);
136 int rdp_in_unistr(RDPCLIENT
* This
, STREAM s
, wchar_t *string
, int uni_len
);
137 BOOL
rdp_send_input(RDPCLIENT
* This
, uint32 time
, uint16 message_type
, uint16 device_flags
, uint16 param1
,
139 BOOL
rdp_send_client_window_status(RDPCLIENT
* This
, int status
);
140 void process_colour_pointer_pdu(RDPCLIENT
* This
, STREAM s
);
141 void process_cached_pointer_pdu(RDPCLIENT
* This
, STREAM s
);
142 void process_system_pointer_pdu(RDPCLIENT
* This
, STREAM s
);
143 void process_bitmap_updates(RDPCLIENT
* This
, STREAM s
);
144 void process_palette(RDPCLIENT
* This
, STREAM s
);
145 void process_disconnect_pdu(STREAM s
, uint32
* ext_disc_reason
);
146 void rdp_main_loop(RDPCLIENT
* This
, BOOL
* deactivated
, uint32
* ext_disc_reason
);
147 BOOL
rdp_loop(RDPCLIENT
* This
, BOOL
* deactivated
, uint32
* ext_disc_reason
);
148 BOOL
rdp_connect(RDPCLIENT
* This
, char *server
, uint32 flags
, wchar_t *username
, wchar_t *domain
, wchar_t *password
, wchar_t *command
,
149 wchar_t *directory
, wchar_t *hostname
, char *cookie
);
150 BOOL
rdp_reconnect(RDPCLIENT
* This
, char *server
, uint32 flags
, wchar_t *username
, wchar_t *domain
, wchar_t *password
, wchar_t *command
,
151 wchar_t *directory
, wchar_t *hostname
, char *cookie
);
152 void rdp_reset_state(RDPCLIENT
* This
);
153 void rdp_disconnect(RDPCLIENT
* This
);
156 int get_device_index(RDPCLIENT
* This
, NTHANDLE handle
);
157 void convert_to_unix_filename(char *filename
);
158 BOOL
rdpdr_init(RDPCLIENT
* This
);
159 void rdpdr_add_fds(RDPCLIENT
* This
, int *n
, fd_set
* rfds
, fd_set
* wfds
, struct timeval
*tv
, BOOL
* timeout
);
160 struct async_iorequest
*rdpdr_remove_iorequest(RDPCLIENT
* This
, struct async_iorequest
*prev
,
161 struct async_iorequest
*iorq
);
162 void rdpdr_check_fds(RDPCLIENT
* This
, fd_set
* rfds
, fd_set
* wfds
, BOOL timed_out
);
163 BOOL
rdpdr_abort_io(RDPCLIENT
* This
, uint32 fd
, uint32 major
, NTSTATUS status
);
167 void rdpsnd_send_completion(RDPCLIENT
* This
, uint16 tick
, uint8 packet_index
);
168 BOOL
rdpsnd_init(RDPCLIENT
* This
);
170 BOOL
wave_out_open(void);
171 void wave_out_close(void);
172 BOOL
wave_out_format_supported(WAVEFORMATEX
* pwfx
);
173 BOOL
wave_out_set_format(WAVEFORMATEX
* pwfx
);
174 void wave_out_volume(uint16 left
, uint16 right
);
175 void wave_out_write(STREAM s
, uint16 tick
, uint8 index
);
176 void wave_out_play(void);
179 void sec_hash_48(uint8
* out
, uint8
* in
, uint8
* salt1
, uint8
* salt2
, uint8 salt
);
180 void sec_hash_16(uint8
* out
, uint8
* in
, uint8
* salt1
, uint8
* salt2
);
181 void buf_out_uint32(uint8
* buffer
, uint32 value
);
182 void sec_sign(uint8
* signature
, int siglen
, uint8
* session_key
, int keylen
, uint8
* data
,
184 void sec_decrypt(RDPCLIENT
* This
, uint8
* data
, int length
);
185 STREAM
sec_init(RDPCLIENT
* This
, uint32 flags
, int maxlen
);
186 BOOL
sec_send_to_channel(RDPCLIENT
* This
, STREAM s
, uint32 flags
, uint16 channel
);
187 BOOL
sec_send(RDPCLIENT
* This
, STREAM s
, uint32 flags
);
188 void sec_process_mcs_data(RDPCLIENT
* This
, STREAM s
);
189 STREAM
sec_recv(RDPCLIENT
* This
, uint8
* rdpver
);
190 BOOL
sec_connect(RDPCLIENT
* This
, char *server
, wchar_t *hostname
, char *cookie
);
191 BOOL
sec_reconnect(RDPCLIENT
* This
, char *server
, wchar_t *hostname
, char *cookie
);
192 void sec_disconnect(RDPCLIENT
* This
);
193 void sec_reset_state(RDPCLIENT
* This
);
196 int serial_enum_devices(RDPCLIENT
* This
, uint32
* id
, char *optarg
);
197 BOOL
serial_get_event(RDPCLIENT
* This
, NTHANDLE handle
, uint32
* result
);
198 BOOL
serial_get_timeout(RDPCLIENT
* This
, NTHANDLE handle
, uint32 length
, uint32
* timeout
, uint32
* itv_timeout
);
201 STREAM
tcp_init(RDPCLIENT
* This
, uint32 maxlen
);
202 BOOL
tcp_send(RDPCLIENT
* This
, STREAM s
);
203 STREAM
tcp_recv(RDPCLIENT
* This
, STREAM s
, uint32 length
);
204 BOOL
tcp_connect(RDPCLIENT
* This
, char *server
);
205 BOOL
tcp_disconnect(RDPCLIENT
* This
);
206 wchar_t *tcp_get_address(RDPCLIENT
* This
);
207 void tcp_reset_state(RDPCLIENT
* This
);
209 void ui_clip_format_announce(RDPCLIENT
* This
, uint8
* data
, uint32 length
);
210 void ui_clip_handle_data(RDPCLIENT
* This
, uint8
* data
, uint32 length
);
211 void ui_clip_request_failed(RDPCLIENT
* This
);
212 void ui_clip_request_data(RDPCLIENT
* This
, uint32 format
);
213 void ui_clip_sync(RDPCLIENT
* This
);
214 void ui_clip_set_mode(RDPCLIENT
* This
, const char *optarg
);
215 void xclip_init(RDPCLIENT
* This
);
216 void xclip_deinit(RDPCLIENT
* This
);
219 BOOL
xkeymap_from_locale(RDPCLIENT
* This
, const char *locale
);
220 FILE *xkeymap_open(const char *filename
);
221 void xkeymap_init(RDPCLIENT
* This
);
222 BOOL
handle_special_keys(RDPCLIENT
* This
, uint32 keysym
, unsigned int state
, uint32 ev_time
, BOOL pressed
);
223 key_translation
xkeymap_translate_key(RDPCLIENT
* This
, uint32 keysym
, unsigned int keycode
, unsigned int state
);
224 void xkeymap_send_keys(RDPCLIENT
* This
, uint32 keysym
, unsigned int keycode
, unsigned int state
, uint32 ev_time
,
225 BOOL pressed
, uint8 nesting
);
226 uint16
xkeymap_translate_button(unsigned int button
);
227 char *get_ksname(uint32 keysym
);
228 void save_remote_modifiers(RDPCLIENT
* This
, uint8 scancode
);
229 void restore_remote_modifiers(RDPCLIENT
* This
, uint32 ev_time
, uint8 scancode
);
230 void ensure_remote_modifiers(RDPCLIENT
* This
, uint32 ev_time
, key_translation tr
);
231 unsigned int read_keyboard_state(RDPCLIENT
* This
);
232 uint16
ui_get_numlock_state(RDPCLIENT
* This
, unsigned int state
);
233 void reset_modifier_keys(RDPCLIENT
* This
);
234 void rdp_send_scancode(RDPCLIENT
* This
, uint32 time
, uint16 flags
, uint8 scancode
);
237 BOOL
get_key_state(RDPCLIENT
* This
, unsigned int state
, uint32 keysym
);
238 BOOL
ui_init(RDPCLIENT
* This
);
239 void ui_deinit(RDPCLIENT
* This
);
240 BOOL
ui_create_window(RDPCLIENT
* This
);
241 void ui_resize_window(RDPCLIENT
* This
);
242 void ui_destroy_window(RDPCLIENT
* This
);
243 void xwin_toggle_fullscreen(RDPCLIENT
* This
);
244 int ui_select(RDPCLIENT
* This
, SOCKET rdp_socket
);
245 void ui_move_pointer(RDPCLIENT
* This
, int x
, int y
);
246 HBITMAP
ui_create_bitmap(RDPCLIENT
* This
, int width
, int height
, uint8
* data
);
247 void ui_paint_bitmap(RDPCLIENT
* This
, int x
, int y
, int cx
, int cy
, int width
, int height
, uint8
* data
);
248 void ui_destroy_bitmap(RDPCLIENT
* This
, HBITMAP bmp
);
249 HGLYPH
ui_create_glyph(RDPCLIENT
* This
, int width
, int height
, const uint8
* data
);
250 void ui_destroy_glyph(RDPCLIENT
* This
, HGLYPH glyph
);
251 HCURSOR
ui_create_cursor(RDPCLIENT
* This
, unsigned int x
, unsigned int y
, int width
, int height
, uint8
* andmask
,
253 void ui_set_cursor(RDPCLIENT
* This
, HCURSOR cursor
);
254 void ui_destroy_cursor(RDPCLIENT
* This
, HCURSOR cursor
);
255 void ui_set_null_cursor(RDPCLIENT
* This
);
256 HCOLOURMAP
ui_create_colourmap(RDPCLIENT
* This
, COLOURMAP
* colours
);
257 void ui_destroy_colourmap(RDPCLIENT
* This
, HCOLOURMAP map
);
258 void ui_set_colourmap(RDPCLIENT
* This
, HCOLOURMAP map
);
259 void ui_set_clip(RDPCLIENT
* This
, int x
, int y
, int cx
, int cy
);
260 void ui_reset_clip(RDPCLIENT
* This
);
261 void ui_bell(RDPCLIENT
* This
);
262 void ui_destblt(RDPCLIENT
* This
, uint8 opcode
, int x
, int y
, int cx
, int cy
);
263 void ui_patblt(RDPCLIENT
* This
, uint8 opcode
, int x
, int y
, int cx
, int cy
, BRUSH
* brush
, int bgcolour
,
265 void ui_screenblt(RDPCLIENT
* This
, uint8 opcode
, int x
, int y
, int cx
, int cy
, int srcx
, int srcy
);
266 void ui_memblt(RDPCLIENT
* This
, uint8 opcode
, int x
, int y
, int cx
, int cy
, HBITMAP src
, int srcx
, int srcy
);
267 void ui_triblt(RDPCLIENT
* This
, uint8 opcode
, int x
, int y
, int cx
, int cy
, HBITMAP src
, int srcx
, int srcy
,
268 BRUSH
* brush
, int bgcolour
, int fgcolour
);
269 void ui_line(RDPCLIENT
* This
, uint8 opcode
, int startx
, int starty
, int endx
, int endy
, PEN
* pen
);
270 void ui_rect(RDPCLIENT
* This
, int x
, int y
, int cx
, int cy
, int colour
);
271 void ui_polygon(RDPCLIENT
* This
, uint8 opcode
, uint8 fillmode
, POINT
* point
, int npoints
, BRUSH
* brush
,
272 int bgcolour
, int fgcolour
);
273 void ui_polyline(RDPCLIENT
* This
, uint8 opcode
, POINT
* points
, int npoints
, PEN
* pen
);
274 void ui_ellipse(RDPCLIENT
* This
, uint8 opcode
, uint8 fillmode
, int x
, int y
, int cx
, int cy
, BRUSH
* brush
,
275 int bgcolour
, int fgcolour
);
276 void ui_draw_glyph(RDPCLIENT
* This
, int mixmode
, int x
, int y
, int cx
, int cy
, HGLYPH glyph
, int srcx
, int srcy
,
277 int bgcolour
, int fgcolour
);
278 void ui_draw_text(RDPCLIENT
* This
, uint8 font
, uint8 flags
, uint8 opcode
, int mixmode
, int x
, int y
, int clipx
,
279 int clipy
, int clipcx
, int clipcy
, int boxx
, int boxy
, int boxcx
, int boxcy
,
280 BRUSH
* brush
, int bgcolour
, int fgcolour
, uint8
* text
, uint8 length
);
281 void ui_desktop_save(RDPCLIENT
* This
, uint32 offset
, int x
, int y
, int cx
, int cy
);
282 void ui_desktop_restore(RDPCLIENT
* This
, uint32 offset
, int x
, int y
, int cx
, int cy
);
283 void ui_begin_update(RDPCLIENT
* This
);
284 void ui_end_update(RDPCLIENT
* This
);
285 void ui_seamless_begin(RDPCLIENT
* This
, BOOL hidden
);
286 void ui_seamless_hide_desktop(RDPCLIENT
* This
);
287 void ui_seamless_unhide_desktop(RDPCLIENT
* This
);
288 void ui_seamless_toggle(RDPCLIENT
* This
);
289 void ui_seamless_create_window(RDPCLIENT
* This
, unsigned long id
, unsigned long group
, unsigned long parent
,
290 unsigned long flags
);
291 void ui_seamless_destroy_window(RDPCLIENT
* This
, unsigned long id
, unsigned long flags
);
292 void ui_seamless_destroy_group(RDPCLIENT
* This
, unsigned long id
, unsigned long flags
);
293 void ui_seamless_move_window(RDPCLIENT
* This
, unsigned long id
, int x
, int y
, int width
, int height
,
294 unsigned long flags
);
295 void ui_seamless_restack_window(RDPCLIENT
* This
, unsigned long id
, unsigned long behind
, unsigned long flags
);
296 void ui_seamless_settitle(RDPCLIENT
* This
, unsigned long id
, const char *title
, unsigned long flags
);
297 void ui_seamless_setstate(RDPCLIENT
* This
, unsigned long id
, unsigned int state
, unsigned long flags
);
298 void ui_seamless_syncbegin(RDPCLIENT
* This
, unsigned long flags
);
299 void ui_seamless_ack(RDPCLIENT
* This
, unsigned int serial
);
301 BOOL
lspci_init(RDPCLIENT
* This
);
303 BOOL
seamless_init(RDPCLIENT
* This
);
304 unsigned int seamless_send_sync(RDPCLIENT
* This
);
305 unsigned int seamless_send_state(RDPCLIENT
* This
, unsigned long id
, unsigned int state
, unsigned long flags
);
306 unsigned int seamless_send_position(RDPCLIENT
* This
, unsigned long id
, int x
, int y
, int width
, int height
,
307 unsigned long flags
);
308 void seamless_select_timeout(RDPCLIENT
* This
, struct timeval
*tv
);
309 unsigned int seamless_send_zchange(RDPCLIENT
* This
, unsigned long id
, unsigned long below
, unsigned long flags
);
310 unsigned int seamless_send_focus(RDPCLIENT
* This
, unsigned long id
, unsigned long flags
);
313 BOOL
event_pubkey(RDPCLIENT
* This
, unsigned char * key
, unsigned int key_size
);
314 void event_logon(RDPCLIENT
* This
);
315 BOOL
event_redirect(RDPCLIENT
* This
, uint32 flags
, uint32 server_len
, wchar_t * server
, uint32 cookie_len
, char * cookie
, uint32 username_len
, wchar_t * username
, uint32 domain_len
, wchar_t * domain
, uint32 password_len
, wchar_t * password
);