libguac  0.8.4
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
client.h
Go to the documentation of this file.
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.
16  *
17  * The Initial Developer of the Original Code is
18  * Michael Jumper.
19  * Portions created by the Initial Developer are Copyright (C) 2010
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 
39 #ifndef _GUAC_CLIENT_H
40 #define _GUAC_CLIENT_H
41 
42 #include <stdarg.h>
43 
44 #include "instruction.h"
45 #include "layer.h"
46 #include "pool.h"
47 #include "socket.h"
48 #include "stream.h"
49 #include "timestamp.h"
50 
57 typedef struct guac_client guac_client;
58 
64 
68 typedef int guac_client_mouse_handler(guac_client* client, int x, int y, int button_mask);
69 
73 typedef int guac_client_key_handler(guac_client* client, int keysym, int pressed);
74 
78 typedef int guac_client_clipboard_handler(guac_client* client, char* copied);
79 
84  int width, int height);
85 
89 typedef int guac_client_audio_handler(guac_client* client, char* mimetype);
90 
94 typedef int guac_client_video_handler(guac_client* client, char* mimetype);
95 
101 
105 typedef void guac_client_log_handler(guac_client* client, const char* format, va_list args);
106 
110 typedef int guac_client_init_handler(guac_client* client, int argc, char** argv);
111 
115 #define GUAC_CLIENT_MOUSE_LEFT 0x01
116 
120 #define GUAC_CLIENT_MOUSE_MIDDLE 0x02
121 
125 #define GUAC_CLIENT_MOUSE_RIGHT 0x04
126 
134 #define GUAC_CLIENT_MOUSE_SCROLL_UP 0x08
135 
143 #define GUAC_CLIENT_MOUSE_SCROLL_DOWN 0x10
144 
151 #define GUAC_BUFFER_POOL_INITIAL_SIZE 1024
152 
157 typedef enum guac_client_state {
158 
164 
170 
172 
177 typedef struct guac_client_info {
178 
186 
194 
199  const char** audio_mimetypes;
200 
205  const char** video_mimetypes;
206 
208 
215 struct guac_client {
216 
225 
233 
239 
245 
251 
257  void* data;
258 
274 
301 
319 
340 
357 
380 
404 
405 
429 
435  guac_pool* __buffer_pool;
436 
442  guac_pool* __layer_pool;
443 
447  guac_pool* __stream_pool;
448 
449 };
450 
458 
464 void guac_client_free(guac_client* client);
465 
477 
488 void guac_client_log_info(guac_client* client, const char* format, ...);
489 
500 void guac_client_log_error(guac_client* client, const char* format, ...);
501 
513 void vguac_client_log_info(guac_client* client, const char* format, va_list ap);
514 
526 void vguac_client_log_error(guac_client* client, const char* format, va_list ap);
527 
535 void guac_client_stop(guac_client* client);
536 
545 
554 
562 void guac_client_free_buffer(guac_client* client, guac_layer* layer);
563 
571 void guac_client_free_layer(guac_client* client, guac_layer* layer);
572 
581 
589 void guac_client_free_stream(guac_client* client, guac_stream* stream);
590 
591 
595 extern const guac_layer* GUAC_DEFAULT_LAYER;
596 
597 #endif
int guac_client_key_handler(guac_client *client, int keysym, int pressed)
Handler for Guacamole key events.
Definition: client.h:73
guac_client_state
Possible current states of the Guacamole client.
Definition: client.h:157
const guac_layer * GUAC_DEFAULT_LAYER
The default Guacamole client layer, layer 0.
Provides functions and structures required for allocating and using layers.
Provides functions and structures for maintaining dynamically allocated and freed pools of integers...
guac_socket * socket
The guac_socket structure to be used to communicate with the web-client.
Definition: client.h:224
guac_client_log_handler * log_error_handler
Handler for logging error messages.
Definition: client.h:428
The state of the client when a stop has been requested, signalling the I/O threads to shutdown...
Definition: client.h:169
guac_timestamp last_sent_timestamp
The time (in milliseconds) that the last sync message was sent to the client.
Definition: client.h:244
The core I/O object of Guacamole.
Definition: socket.h:111
void guac_client_log_error(guac_client *client, const char *format,...)
Logs an error message in the log used by the given client.
guac_stream * guac_client_alloc_stream(guac_client *client)
Allocates a new stream.
guac_client_log_handler * log_info_handler
Handler for logging informational messages.
Definition: client.h:403
Provides functions and structures for creating timestamps.
void vguac_client_log_error(guac_client *client, const char *format, va_list ap)
Logs an error message in the log used by the given client.
void * data
Arbitrary reference to proxy client-specific data.
Definition: client.h:257
Provides functions and structures for reading, writing, and manipulating Guacamole instructions...
const char ** audio_mimetypes
NULL-terminated array of client-supported audio mimetypes.
Definition: client.h:199
void guac_client_free_layer(guac_client *client, guac_layer *layer)
Returns the given layer to the pool of available layers, such that it can be reused by any subsequent...
void guac_client_log_handler(guac_client *client, const char *format, va_list args)
Handler for logging messages.
Definition: client.h:105
guac_layer * guac_client_alloc_buffer(guac_client *client)
Allocates a new buffer (invisible layer).
int guac_client_size_handler(guac_client *client, int width, int height)
Handler for Guacamole screen size events.
Definition: client.h:83
guac_client_info info
Information structure containing properties exposed by the remote client during the initial handshake...
Definition: client.h:250
Provides functions and structures required for allocating and using nested streams.
const char ** video_mimetypes
NULL-terminated array of client-supported video mimetypes.
Definition: client.h:205
guac_client_size_handler * size_handler
Handler for size events sent by the Guacamole web-client.
Definition: client.h:356
void guac_client_free_buffer(guac_client *client, guac_layer *layer)
Returns the given buffer to the pool of available buffers, such that it can be reused by any subseque...
int guac_client_clipboard_handler(guac_client *client, char *copied)
Handler for Guacamole clipboard events.
Definition: client.h:78
Information exposed by the remote client during the connection handshake which can be used by a clien...
Definition: client.h:177
guac_client_clipboard_handler * clipboard_handler
Handler for clipboard events sent by the Guacamole web-client.
Definition: client.h:339
int guac_client_handle_messages(guac_client *client)
Handler for server messages (where "server" refers to the server that the proxy client is connected t...
Definition: client.h:63
The state of the client from when it has been allocated by the main daemon until it is killed or disc...
Definition: client.h:163
guac_client_mouse_handler * mouse_handler
Handler for mouse events sent by the Gaucamole web-client.
Definition: client.h:300
guac_client_state state
The current state of the client.
Definition: client.h:232
int guac_client_handle_instruction(guac_client *client, guac_instruction *instruction)
Call the appropriate handler defined by the given client for the given instruction.
Guacamole proxy client.
Definition: client.h:215
A pool of integers.
Definition: pool.h:56
guac_client * guac_client_alloc()
Returns a new, barebones guac_client.
int optimal_width
The number of pixels the remote client requests for the display width.
Definition: client.h:185
void guac_client_free(guac_client *client)
Free all resources associated with the given client.
guac_layer * guac_client_alloc_layer(guac_client *client)
Allocates a new layer.
int64_t guac_timestamp
An arbitrary timestamp denoting a relative time value in milliseconds.
Definition: timestamp.h:52
guac_client_free_handler * free_handler
Handler for freeing data when the client is being unloaded.
Definition: client.h:379
Represents a single layer within the Guacamole protocol.
Definition: layer.h:52
void guac_client_stop(guac_client *client)
Signals the given client to stop gracefully.
Represents a single nested stream within the Guacamole protocol.
Definition: stream.h:53
guac_client_key_handler * key_handler
Handler for key events sent by the Guacamole web-client.
Definition: client.h:318
int guac_client_video_handler(guac_client *client, char *mimetype)
Handler for Guacamole video format events.
Definition: client.h:94
void guac_client_log_info(guac_client *client, const char *format,...)
Logs an informational message in the log used by the given client.
guac_client_handle_messages * handle_messages
Handler for server messages.
Definition: client.h:273
int guac_client_init_handler(guac_client *client, int argc, char **argv)
Handler which should initialize the given guac_client.
Definition: client.h:110
Represents a single instruction within the Guacamole protocol.
Definition: instruction.h:53
int guac_client_free_handler(guac_client *client)
Handler for freeing up any extra data allocated by the client implementation.
Definition: client.h:100
int optimal_height
The number of pixels the remote client requests for the display height.
Definition: client.h:193
Defines the guac_socket object and functionss for using and manipulating it.
void guac_client_free_stream(guac_client *client, guac_stream *stream)
Returns the given stream to the pool of available streams, such that it can be reused by any subseque...
void vguac_client_log_info(guac_client *client, const char *format, va_list ap)
Logs an informational message in the log used by the given client.
int guac_client_audio_handler(guac_client *client, char *mimetype)
Handler for Guacamole audio format events.
Definition: client.h:89
guac_timestamp last_received_timestamp
The time (in milliseconds) of receipt of the last sync message from the client.
Definition: client.h:238
int guac_client_mouse_handler(guac_client *client, int x, int y, int button_mask)
Handler for Guacamole mouse events.
Definition: client.h:68