Final comments.
[libguac-client-rdp.git] / include / client.h
1
2 /* ***** BEGIN LICENSE BLOCK *****
3  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4  *
5  * The contents of this file are subject to the Mozilla Public License Version
6  * 1.1 (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  * http://www.mozilla.org/MPL/
9  *
10  * Software distributed under the License is distributed on an "AS IS" basis,
11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12  * for the specific language governing rights and limitations under the
13  * License.
14  *
15  * The Original Code is libguac-client-rdp.
16  *
17  * The Initial Developer of the Original Code is
18  * Michael Jumper.
19  * Portions created by the Initial Developer are Copyright (C) 2011
20  * the Initial Developer. All Rights Reserved.
21  *
22  * Contributor(s):
23  *
24  * Alternatively, the contents of this file may be used under the terms of
25  * either the GNU General Public License Version 2 or later (the "GPL"), or
26  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27  * in which case the provisions of the GPL or the LGPL are applicable instead
28  * of those above. If you wish to allow use of your version of this file only
29  * under the terms of either the GPL or the LGPL, and not to allow others to
30  * use your version of this file under the terms of the MPL, indicate your
31  * decision by deleting the provisions above and replace them with the notice
32  * and other provisions required by the GPL or the LGPL. If you do not delete
33  * the provisions above, a recipient may use your version of this file under
34  * the terms of any one of the MPL, the GPL or the LGPL.
35  *
36  * ***** END LICENSE BLOCK ***** */
37
38 #ifndef _GUAC_RDP_CLIENT_H
39 #define _GUAC_RDP_CLIENT_H
40
41 #include <freerdp/freerdp.h>
42 #include <freerdp/codec/color.h>
43
44 #include <guacamole/client.h>
45
46 #include "rdp_keymap.h"
47
48 /**
49  * The default RDP port.
50  */
51 #define RDP_DEFAULT_PORT 3389
52
53 /**
54  * Client data that will remain accessible through the guac_client.
55  * This should generally include data commonly used by Guacamole handlers.
56  */
57 typedef struct rdp_guac_client_data {
58
59     /**
60      * Pointer to the FreeRDP client instance handling the current connection.
61      */
62     freerdp* rdp_inst;
63
64     /**
65      * The settings structure associated with the FreeRDP client instance
66      * handling the current connection.
67      */
68     rdpSettings* settings;
69
70     /**
71      * Button mask containing the OR'd value of all currently pressed buttons.
72      */
73     int mouse_button_mask;
74
75     /**
76      * Cairo surface which will receive all TRANSPARENT glyphs.
77      */
78     cairo_surface_t* trans_glyph_surface;
79
80     /**
81      * Cairo surface which will receive all OPAQUE glyphs.
82      */
83     cairo_surface_t* opaque_glyph_surface;
84
85     /**
86      * The current Cairo surface which will receive all drawn glyphs,
87      * depending on whether we are currently drawing transparent or
88      * opaque glyphs.
89      */
90     cairo_surface_t* glyph_surface;
91
92     /**
93      * Cairo instance for drawing to the current glyph surface.
94      */
95     cairo_t* glyph_cairo;
96
97     /**
98      * The Guacamole layer that GDI operations should draw to. RDP messages
99      * exist which change this surface to allow drawing to occur off-screen.
100      */
101     const guac_layer* current_surface;
102
103     /**
104      * The keymap to use when translating keysyms into scancodes or sequences
105      * of scancodes for RDP.
106      */
107     guac_rdp_static_keymap keymap;
108
109     /**
110      * The state of all keys, based on whether events for pressing/releasing
111      * particular keysyms have been received. This is necessary in order to
112      * determine which keys must be released/pressed when a particular
113      * keysym can only be typed through a sequence of scancodes (such as
114      * an Alt-code) because the server-side keymap does not support that
115      * keysym.
116      */
117     guac_rdp_keysym_state_map keysym_state;
118
119     /**
120      * The current text (NOT Unicode) clipboard contents.
121      */
122     char* clipboard;
123
124 } rdp_guac_client_data;
125
126 /**
127  * Client data that will remain accessible through the RDP context.
128  * This should generally include data commonly used by FreeRDP handlers.
129  */
130 typedef struct rdp_freerdp_context {
131
132     /**
133      * The parent context. THIS MUST BE THE FIRST ELEMENT.
134      */
135     rdpContext _p;
136
137     /**
138      * Pointer to the guac_client instance handling the RDP connection with
139      * this context.
140      */
141     guac_client* client;
142
143     /**
144      * Color conversion structure to be used to convert RDP images to PNGs.
145      */
146     CLRCONV* clrconv;
147
148 } rdp_freerdp_context;
149
150 #endif
151