Add size/video/audio instruction handlers.

This commit is contained in:
Michael Jumper 2012-10-21 14:52:00 -07:00
parent fe30cd3073
commit 875c2108e8
3 changed files with 119 additions and 0 deletions

View File

@ -99,6 +99,27 @@ int __guac_handle_key(guac_client* client, guac_instruction* instruction);
*/
int __guac_handle_clipboard(guac_client* client, guac_instruction* instruction);
/**
* Internal initial handler for the size instruction. When a size instruction
* is received, this handler will be called. The client's size handler will
* be invoked if defined.
*/
int __guac_handle_size(guac_client* client, guac_instruction* instruction);
/**
* Internal initial handler for the video instruction. When a video instruction
* is received, this handler will be called. The client's video handler will
* be invoked if defined.
*/
int __guac_handle_video(guac_client* client, guac_instruction* instruction);
/**
* Internal initial handler for the audio instruction. When a audio instruction
* is received, this handler will be called. The client's audio handler will
* be invoked if defined.
*/
int __guac_handle_audio(guac_client* client, guac_instruction* instruction);
/**
* Internal initial handler for the disconnect instruction. When a disconnect instruction
* is received, this handler will be called. Disconnect instructions are automatically

View File

@ -77,6 +77,22 @@ typedef int guac_client_key_handler(guac_client* client, int keysym, int pressed
*/
typedef int guac_client_clipboard_handler(guac_client* client, char* copied);
/**
* Handler for Guacamole screen size events.
*/
typedef int guac_client_size_handler(guac_client* client,
int width, int height);
/**
* Handler for Guacamole audio format events.
*/
typedef int guac_client_audio_handler(guac_client* client, char* mimetype);
/**
* Handler for Guacamole video format events.
*/
typedef int guac_client_video_handler(guac_client* client, char* mimetype);
/**
* Handler for freeing up any extra data allocated by the client
* implementation.
@ -280,6 +296,57 @@ struct guac_client {
*/
guac_client_clipboard_handler* clipboard_handler;
/**
* Handler for size events sent by the Guacamole web-client.
*
* The handler takes an integer width and integer height, representing
* the current visible screen area of the client.
*
* Example:
* @code
* int size_handler(guac_client* client, int width, int height);
*
* int guac_client_init(guac_client* client, int argc, char** argv) {
* client->size_handler = size_handler;
* }
* @endcode
*/
guac_client_size_handler* size_handler;
/**
* Handler for audio format events sent by the Guacamole web-client.
*
* The handler takes the mimetype of the audio format being advertised
* as supported by the client.
*
* Example:
* @code
* int audio_handler(guac_client* client, char* mimetype);
*
* int guac_client_init(guac_client* client, int argc, char** argv) {
* client->audio_handler = audio_handler;
* }
* @endcode
*/
guac_client_audio_handler* audio_handler;
/**
* Handler for video format events sent by the Guacamole web-client.
*
* The handler takes the mimetype of the video format being advertised
* as supported by the client.
*
* Example:
* @code
* int video_handler(guac_client* client, char* mimetype);
*
* int guac_client_init(guac_client* client, int argc, char** argv) {
* client->video_handler = video_handler;
* }
* @endcode
*/
guac_client_video_handler* video_handler;
/**
* Handler for freeing data when the client is being unloaded.
*

View File

@ -50,6 +50,9 @@ __guac_instruction_handler_mapping __guac_instruction_handler_map[] = {
{"key", __guac_handle_key},
{"clipboard", __guac_handle_clipboard},
{"disconnect", __guac_handle_disconnect},
{"size", __guac_handle_size},
{"audio", __guac_handle_audio},
{"video", __guac_handle_video},
{NULL, NULL}
};
@ -115,6 +118,34 @@ int __guac_handle_clipboard(guac_client* client, guac_instruction* instruction)
return 0;
}
int __guac_handle_size(guac_client* client, guac_instruction* instruction) {
if (client->size_handler)
return client->size_handler(
client,
atoi(instruction->argv[0]), /* width */
atoi(instruction->argv[1]) /* height */
);
return 0;
}
int __guac_handle_video(guac_client* client, guac_instruction* instruction) {
if (client->video_handler)
return client->video_handler(
client,
instruction->argv[0] /* mimetype */
);
return 0;
}
int __guac_handle_audio(guac_client* client, guac_instruction* instruction) {
if (client->audio_handler)
return client->audio_handler(
client,
instruction->argv[0] /* mimetype */
);
return 0;
}
int __guac_handle_disconnect(guac_client* client, guac_instruction* instruction) {
/* Return error code to force disconnect */
return -1;