[WIP]: Code cleanup

This commit is contained in:
Virtually Nick 2022-09-19 16:03:53 -04:00
parent 4dae4fe5c1
commit 2268df76a9
26 changed files with 306 additions and 262 deletions

View File

@ -33,13 +33,13 @@ guac_argv_callback guac_spice_argv_callback;
/**
* The name of the parameter Guacamole will use to specify/update the username
* for the SPICE connection.
* for the Spice connection.
*/
#define GUAC_SPICE_ARGV_USERNAME "username"
/**
* The name of the parameter Guacamole will use to specify/update the password
* for the SPICE connection.
* for the Spice connection.
*/
#define GUAC_SPICE_ARGV_PASSWORD "password"

View File

@ -27,14 +27,14 @@
#include <glib-unix.h>
/**
* Handler invoked when an authentication error is received from the SPICE
* Handler invoked when an authentication error is received from the Spice
* server, which retrieves the credentials from the Guacamole Client accessing
* the connection, if those credentials have not been explicitly set in the
* configuration. Returns TRUE if credentials are successfully retrieved, or
* FALSE otherwise.
*
* @param client
* The guac_client that is attempting to connect to the SPICE server and
* The guac_client that is attempting to connect to the Spice server and
* that will be asked for the credentials.
*
* @return

View File

@ -32,9 +32,7 @@ void guac_spice_client_audio_playback_data_handler(
SpicePlaybackChannel* channel, gpointer data, gint size,
guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Calling audio playback data handler.");
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_audio_stream_write_pcm(spice_client->audio_playback, data, size);
}
@ -42,7 +40,8 @@ void guac_spice_client_audio_playback_data_handler(
void guac_spice_client_audio_playback_delay_handler(
SpicePlaybackChannel* channel, guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Calling audio playback delay handler.");
guac_client_log(client, GUAC_LOG_WARNING,
"Delay handler for audio playback is not currently implemented.");
}
@ -50,31 +49,30 @@ void guac_spice_client_audio_playback_start_handler(
SpicePlaybackChannel* channel, gint format, gint channels, gint rate,
guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Calling audio playback start handler.");
guac_client_log(client, GUAC_LOG_DEBUG, "Starting audio playback.");
guac_client_log(client, GUAC_LOG_DEBUG, "Format: %d", format);
guac_client_log(client, GUAC_LOG_DEBUG, "Channels: %d", channels);
guac_client_log(client, GUAC_LOG_DEBUG, "Rate: %d", rate);
guac_spice_client* spice_client = (guac_spice_client*) client->data;
int bps = 16;
/* Spice only supports a single audio format. */
if (format != SPICE_AUDIO_FMT_S16) {
guac_client_log(client, GUAC_LOG_WARNING, "Unknown Spice audio format: %d", format);
return;
}
spice_client->audio_playback = guac_audio_stream_alloc(client, NULL, rate, channels, bps);
/* Allocate the stream. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
spice_client->audio_playback = guac_audio_stream_alloc(client, NULL, rate, channels, 16);
}
void guac_spice_client_audio_playback_stop_handler(
SpicePlaybackChannel* channel, guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Calling audio playback stop handler.");
guac_client_log(client, GUAC_LOG_DEBUG, "Stoppig audio playback..");
/* Free the audio stream. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_audio_stream_free(spice_client->audio_playback);
}
@ -110,14 +108,8 @@ static int guac_spice_audio_parse_mimetype(const char* mimetype, int* rate,
int parsed_channels = 1;
int parsed_bps;
/* PCM audio with one byte per sample */
if (strncmp(mimetype, "audio/L8;", 9) == 0) {
mimetype += 8; /* Advance to semicolon ONLY */
parsed_bps = 1;
}
/* PCM audio with two bytes per sample */
else if (strncmp(mimetype, "audio/L16;", 10) == 0) {
if (strncmp(mimetype, "audio/L16;", 10) == 0) {
mimetype += 9; /* Advance to semicolon ONLY */
parsed_bps = 2;
}
@ -175,6 +167,27 @@ static int guac_spice_audio_parse_mimetype(const char* mimetype, int* rate,
}
/**
* A callback function that is invoked to send audio data from the given
* stream to the Spice server.
*
* @param user
* The user who owns the connection and the stream. This is unused by
* this function.
*
* @param stream
* The stream where the audio data originated. This is unused by this
* function.
*
* @param data
* The audio data to send.
*
* @param length
* The number of bytes of audio data to send.
*
* @return
* Zero on success, non-zero on error.
*/
static int guac_spice_audio_blob_handler(guac_user* user, guac_stream* stream,
void* data, int length) {
@ -188,6 +201,19 @@ static int guac_spice_audio_blob_handler(guac_user* user, guac_stream* stream,
}
/**
* A callback function that is called when the audio stream ends sending data
* to the Spice server.
*
* @param user
* The user who owns the connection and the stream.
*
* @param stream
* The stream that was sending the audio data.
*
* @return
* Zero on success, non-zero on failure.
*/
static int guac_spice_audio_end_handler(guac_user* user, guac_stream* stream) {
/* Ignore - the RECORD_CHANNEL channel will simply not receive anything */
@ -218,7 +244,7 @@ int guac_spice_client_audio_record_handler(guac_user* user, guac_stream* stream,
return 0;
}
/* Init stream data */
/* Initialize stream handlers */
stream->blob_handler = guac_spice_audio_blob_handler;
stream->end_handler = guac_spice_audio_end_handler;
@ -253,7 +279,7 @@ int guac_spice_client_audio_record_handler(guac_user* user, guac_stream* stream,
static void guac_spice_audio_stream_ack(guac_user* user, guac_stream* stream,
const char* message, guac_protocol_status status) {
/* Do not send ack unless both sides of the audio stream are ready */
/* Do not send if the connection owner or stream is null. */
if (user == NULL || stream == NULL)
return;
@ -263,6 +289,20 @@ static void guac_spice_audio_stream_ack(guac_user* user, guac_stream* stream,
}
/**
* A callback that is invoked for the connection owner when audio recording
* starts, which will notify the client the owner is connected from to start
* sending audio data.
*
* @param owner
* The owner of the connection.
*
* @param data
* A pointer to the guac_client associated with this connection.
*
* @return
* Always NULL;
*/
static void* spice_client_record_start_callback(guac_user* owner, void* data) {
guac_spice_client* spice_client = (guac_spice_client*) data;
@ -274,6 +314,19 @@ static void* spice_client_record_start_callback(guac_user* owner, void* data) {
}
/**
* A callback that is invoked for the connection owner when audio recording
* is stopped, telling the client to stop sending audio data.
*
* @param owner
* The user who owns this connection.
*
* @param data
* A pointer to the guac_client associated with this connection.
*
* @return
* Always NULL;
*/
static void* spice_client_record_stop_callback(guac_user* owner, void* data) {
guac_spice_client* spice_client = (guac_spice_client*) data;

View File

@ -28,7 +28,7 @@
/**
* A callback function invoked with the SPICE client receives audio playback
* data from the SPICE server.
* data from the Spice server.
*
* @param channel
* The SpicePlaybackChannel on which the data was sent.
@ -47,7 +47,7 @@ void guac_spice_client_audio_playback_data_handler(
guac_client* client);
/**
* A callback function invoked when the SPICE server requests the audio playback
* A callback function invoked when the Spice server requests the audio playback
* delay value from the client.
*
* @param channel
@ -60,7 +60,7 @@ void guac_spice_client_audio_playback_delay_handler(
SpicePlaybackChannel* channel, guac_client* client);
/**
* A callback function invoked by the client when the SPICE server sends a
* A callback function invoked by the client when the Spice server sends a
* signal indicating that it is starting an audio transmission.
*
* @param channel
@ -101,8 +101,8 @@ void guac_spice_client_audio_playback_stop_handler(
guac_user_audio_handler guac_spice_client_audio_record_handler;
/**
* The callback function invoked by the client when the SPICE server requests
* that the client begin recording audio data to send to the server.
* The callback function invoked by the Spice client when the Spice server
* requests that the client begin recording audio data to send to the server.
*
* @param channel
* The SpiceRecordChannel on which the record event is being requested.
@ -123,7 +123,7 @@ void guac_spice_client_audio_record_start_handler(SpiceRecordChannel* channel,
gint format, gint channels, gint rate, guac_client* client);
/**
* The callback function invoked by the client when the SPICE server sends
* The callback function invoked by the Spice client when the Spice server sends
* an event requesting that recording be stopped.
*
* @param channel

View File

@ -39,8 +39,8 @@ int guac_spice_clipboard_handler(guac_user* user, guac_stream* stream,
/* Some versions of VDAgent do not support sending clipboard data. */
if (!spice_main_channel_agent_test_capability(spice_client->main_channel, VD_AGENT_CAP_CLIPBOARD_BY_DEMAND)) {
guac_client_log(user->client, GUAC_LOG_WARNING, "SPICE Agent does not "
" support sending clipboard data on demend.");
guac_client_log(user->client, GUAC_LOG_WARNING, "Spice guest agent does"
" not support sending clipboard data on demand.");
return 0;
}
@ -71,17 +71,13 @@ int guac_spice_clipboard_end_handler(guac_user* user, guac_stream* stream) {
guac_spice_client* spice_client = (guac_spice_client*) user->client->data;
/* Send via VNC only if finished connecting */
/* Send via Spice only if finished connecting */
if (spice_client->main_channel != NULL) {
spice_main_channel_clipboard_selection_notify(spice_client->main_channel,
VD_AGENT_CLIPBOARD_SELECTION_CLIPBOARD,
VD_AGENT_CLIPBOARD_UTF8_TEXT,
(const unsigned char*) spice_client->clipboard->buffer,
spice_client->clipboard->length);
/* Release the grab on the agent clipboard. */
// spice_main_channel_clipboard_selection_release(spice_client->main_channel,
// VD_AGENT_CLIPBOARD_SELECTION_CLIPBOARD);
}
return 0;
@ -93,6 +89,7 @@ void guac_spice_clipboard_selection_handler(SpiceMainChannel* channel,
guac_spice_client* spice_client = (guac_spice_client*) client->data;
/* Loop through clipboard types - currently Guacamole only supports text. */
switch (type) {
case VD_AGENT_CLIPBOARD_UTF8_TEXT:
guac_client_log(client, GUAC_LOG_DEBUG, "Notifying client of text "
@ -125,15 +122,16 @@ void guac_spice_clipboard_selection_grab_handler(SpiceMainChannel* channel,
return;
}
/* Loop through the data types sent by the SPICE server and process them. */
/* Loop through the data types sent by the Spice server and process them. */
for (int i = 0; i < ntypes; i++) {
/* At present, Guacamole only supports text. */
/* Currently Guacamole only supports text. */
if (types[i] != VD_AGENT_CLIPBOARD_UTF8_TEXT) {
guac_client_log(client, GUAC_LOG_WARNING, "Unsupported clipboard data type: %d", types[i]);
continue;
}
/* Reset our clipboard and request the data from the SPICE serer. */
/* Reset our clipboard and request the data from the Spice serer. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_common_clipboard_reset(spice_client->clipboard, "text/plain");
spice_main_channel_clipboard_selection_request(channel, selection, types[i]);
@ -149,6 +147,7 @@ void guac_spice_clipboard_selection_release_handler(SpiceMainChannel* channel,
guac_client_log(client, GUAC_LOG_DEBUG, "Notifying client of clipboard"
" release in the guest.");
/* Transfer data from guest to Guacamole clipboard. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_common_clipboard_send(spice_client->clipboard, client);
@ -160,11 +159,13 @@ void guac_spice_clipboard_selection_request_handler(SpiceMainChannel* channel,
guac_client_log(client, GUAC_LOG_DEBUG, "Requesting clipboard data from"
" the client.");
/* Guacamole only supports one clipboard selection type. */
if (selection != VD_AGENT_CLIPBOARD_SELECTION_CLIPBOARD) {
guac_client_log(client, GUAC_LOG_WARNING, "Unsupported selection type: %d", selection);
return;
}
/* Currently Guacamole only implements text support - other types are images. */
if (type != VD_AGENT_CLIPBOARD_UTF8_TEXT) {
guac_client_log(client, GUAC_LOG_WARNING, "Unsupported clipboard data type: %d", type);
return;
@ -173,6 +174,7 @@ void guac_spice_clipboard_selection_request_handler(SpiceMainChannel* channel,
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_client_log(client, GUAC_LOG_DEBUG, "Sending clipboard data to server: %s", spice_client->clipboard->buffer);
/* Send the clipboard data to the guest. */
spice_main_channel_clipboard_selection_notify(channel,
selection,
type,

View File

@ -43,11 +43,11 @@ guac_user_blob_handler guac_spice_clipboard_blob_handler;
guac_user_end_handler guac_spice_clipboard_end_handler;
/**
* A handler that will be registered with the SPICE client to handle clipboard
* data sent from the SPICE server to the client.
* A handler that will be registered with the Spice client to handle clipboard
* data sent from the Spice server to the client.
*
* @param channel
* The main SPICE channel on which this event was fired.
* The main Spice channel on which this event was fired.
*
* @param selection
* The clipboard on which the selection occurred.
@ -70,15 +70,15 @@ void guac_spice_clipboard_selection_handler(SpiceMainChannel* channel,
guac_client* client);
/**
* A handler that will be registered with the SPICE client to handle clipboard
* events where the guest (vdagent) within the SPICE server notifies the client
* A handler that will be registered with the Spice client to handle clipboard
* events where the guest (vdagent) within the Spice server notifies the client
* that data is available on the clipboard.
*
* @param channel
* The main SpiceChannel on which this event is fired.
*
* @param selection
* The SPICE clipboard from which the event is fired.
* The Spice clipboard from which the event is fired.
*
* @param types
* The type of data being sent by the agent.
@ -93,14 +93,14 @@ void guac_spice_clipboard_selection_grab_handler(SpiceMainChannel* channel,
guint selection, guint32* types, guint ntypes, guac_client* client);
/**
* A handler that will be called by the SPICE client when the SPICE server
* A handler that will be called by the Spice client when the Spice server
* is done with the clipboard and releases control of it.
*
* @param chennl
* The main SPICE channel on which this event is fired.
* The main Spice channel on which this event is fired.
*
* @param selection
* The SPICE server clipboard releasing control.
* The Spice server clipboard releasing control.
*
* @param client
* The guac_client that was registered with the callback.
@ -109,17 +109,17 @@ void guac_spice_clipboard_selection_release_handler(SpiceMainChannel* channel,
guint selection, guac_client* client);
/**
* A handler that will be called by the SPICE client when the SPICE server
* A handler that will be called by the Spice client when the Spice server
* would like to check and receive the contents of the client's clipboard.
*
* @param channel
* The main SPICE channel on which this event is fired.
* The main Spice channel on which this event is fired.
*
* @param selection
* The SPICE server clipboard that is requesting data.
* The Spice server clipboard that is requesting data.
*
* @param type
* The type of data to be sent to the SPICE server.
* The type of data to be sent to the Spice server.
*
* @param client
* The guac_client object that was registered with the callback.

View File

@ -33,11 +33,6 @@
#include <guacamole/socket.h>
#include <spice-client-glib-2.0/spice-client.h>
/* Define cairo_format_stride_for_width() if missing */
#ifndef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH
#define cairo_format_stride_for_width(format, width) (width*4)
#endif
#include <stdarg.h>
#include <stdio.h>
#include <stdint.h>
@ -46,8 +41,9 @@
void guac_spice_cursor_hide(SpiceChannel* channel, guac_client* client) {
guac_client_log(client, GUAC_LOG_TRACE, "Cursor hide signal received.");
guac_client_log(client, GUAC_LOG_TRACE, "Hiding the cursor.");
/* Set the cursor to a blank image, hiding it. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_common_cursor_set_blank(spice_client->display->cursor);
}
@ -55,14 +51,16 @@ void guac_spice_cursor_hide(SpiceChannel* channel, guac_client* client) {
void guac_spice_cursor_move(SpiceChannel* channel, int x, int y,
guac_client* client) {
guac_client_log(client, GUAC_LOG_TRACE, "Cursor move signal received.");
guac_client_log(client, GUAC_LOG_TRACE, "Cursor move signal received: %d, %d", x, y);
/* Update the cursor with the new coordinates. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_common_cursor_update(spice_client->display->cursor, client->__owner, x, y, spice_client->display->cursor->button_mask);
}
void guac_spice_cursor_reset(SpiceChannel* channel, guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Cursor reset signal received, not yet implemented");
guac_client_log(client, GUAC_LOG_DEBUG,
"Cursor reset signal received, not yet implemented");
}
void guac_spice_cursor_set(SpiceChannel* channel, int width, int height,

View File

@ -25,20 +25,20 @@
#include <spice-client-glib-2.0/spice-client.h>
/**
* The callback function that is executed when the cursor hide signal is received
* from the SPICE server.
* The callback function that is executed when the cursor hide signal is
* received from the Spice server.
*
* @param channel
* The channel which received the cursor hide event.
*
* @param client
* The guac_client associated with this session.
* The guac_client associated with this Spice session.
*/
void guac_spice_cursor_hide(SpiceCursorChannel* channel, guac_client* client);
/**
* The callback function that is executed when the cursor move signal is
* received from the server.
* received from the Spice server.
*
* @param channel
* The channel that received the cursor move event.
@ -50,7 +50,7 @@ void guac_spice_cursor_hide(SpiceCursorChannel* channel, guac_client* client);
* The y position of the cursor.
*
* @param client
* The guac_client associated with this SPICE session.
* The guac_client associated with this Spice session.
*/
void guac_spice_cursor_move(SpiceCursorChannel* channel, int x, int y,
guac_client* client);
@ -63,13 +63,13 @@ void guac_spice_cursor_move(SpiceCursorChannel* channel, int x, int y,
* The channel that received the cursor reset signal.
*
* @param client
* The guac_client associated with this SPICE session.
* The guac_client associated with this Spice session.
*/
void guac_spice_cursor_reset(SpiceCursorChannel* channel, guac_client* client);
/**
* The callback function that is executed in response to receiving the cursor
* set signal from the SPICE server, which sets the width, height, and image
* set signal from the Spice server, which sets the width, height, and image
* of the cursor, and the x and y coordinates of the cursor hotspot.
*
* @param channel
@ -92,7 +92,7 @@ void guac_spice_cursor_reset(SpiceCursorChannel* channel, guac_client* client);
* or NULL if the default cursor image should be used.
*
* @param client
* The guac_client associated with this SPICE session.
* The guac_client associated with this Spice session.
*/
void guac_spice_cursor_set(SpiceCursorChannel* channel, int width, int height,
int x, int y, gpointer* rgba, guac_client* client);

View File

@ -32,11 +32,6 @@
#include <guacamole/socket.h>
#include <spice-client-glib-2.0/spice-client.h>
/* Define cairo_format_stride_for_width() if missing */
#ifndef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH
#define cairo_format_stride_for_width(format, width) (width*4)
#endif
#include <stdarg.h>
#include <stdio.h>
#include <stdint.h>
@ -46,7 +41,9 @@
void guac_spice_client_display_update(SpiceChannel* channel, int x,
int y, int w, int h, guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Received request to update Spice display: %d, %d, %d, %d", x, y, w, h);
guac_client_log(client, GUAC_LOG_TRACE,
"Received request to update Spice display: %d, %d, %d, %d",
x, y, w, h);
guac_spice_client* spice_client = (guac_spice_client*) client->data;
/* Retrieve the primary display buffer */
@ -94,7 +91,7 @@ void guac_spice_client_display_update(SpiceChannel* channel, int x,
void guac_spice_client_display_gl_draw(SpiceChannel* channel, int x,
int y, int w, int h, guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Received gl draw request.");
guac_client_log(client, GUAC_LOG_TRACE, "Received GL draw request.");
guac_spice_client* spice_client = (guac_spice_client*) client->data;
@ -109,13 +106,8 @@ void guac_spice_client_display_gl_draw(SpiceChannel* channel, int x,
void guac_spice_client_display_mark(SpiceChannel* channel, gint mark,
guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Received signal to mark display.");
int channelId;
g_object_get(channel, "channel-id", &channelId, NULL);
guac_client_log(client, GUAC_LOG_DEBUG, "Channel %i marked as available.", channelId);
guac_client_log(client, GUAC_LOG_DEBUG,
"Received signal to mark display, which currently has no effect.");
}
@ -125,10 +117,12 @@ void guac_spice_client_display_primary_create(SpiceChannel* channel,
guac_client_log(client, GUAC_LOG_DEBUG, "Received request to create primary display.");
/* Allocate the Guacamole display. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
spice_client->display = guac_common_display_alloc(client,
width, height);
/* Create a matching Cairo image surface. */
guac_client_log(client, GUAC_LOG_TRACE, "Creating Cairo image surface.");
cairo_surface_t* surface = cairo_image_surface_create_for_data(imgdata, CAIRO_FORMAT_RGB24,
width, height, stride);
@ -138,9 +132,11 @@ void guac_spice_client_display_primary_create(SpiceChannel* channel,
guac_common_surface_draw(spice_client->display->default_surface,
0, 0, surface);
/* Flush the default surface. */
guac_client_log(client, GUAC_LOG_TRACE, "Flushing the default surface.");
guac_common_surface_flush(spice_client->display->default_surface);
/* Mark the end of the frame and flush the socket. */
guac_client_end_frame(client);
guac_socket_flush(client->socket);
@ -152,6 +148,7 @@ void guac_spice_client_display_primary_destroy(SpiceChannel* channel,
guac_client_log(client, GUAC_LOG_DEBUG, "Received request to destroy the primary display.");
/* Free the Guacamole display. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_common_display_free(spice_client->display);

View File

@ -24,9 +24,14 @@
#include <spice-client-glib-2.0/spice-client.h>
/* Define cairo_format_stride_for_width() if missing */
#ifndef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH
#define cairo_format_stride_for_width(format, width) (width*4)
#endif
/**
* Callback invoked by the SPICE library when it receives a new binary image
* data from the SPICE server. The image itself will be stored in the designated
* Callback invoked by the Spice library when it receives a new binary image
* data from the Spice server. The image itself will be stored in the designated
* sub-rectangle of client->framebuffer.
*
* @param channel
@ -54,7 +59,7 @@ void guac_spice_client_display_update(SpiceDisplayChannel* channel, int x,
/**
* The callback function invoked when the RED_DISPLAY_MARK command is received
* from the SPICE server and the display should be exposed.
* from the Spice server and the display should be exposed.
*
* @param channel
* The SpiceDisplayChannel on which the event was received.
@ -70,13 +75,13 @@ void guac_spice_client_display_mark(SpiceDisplayChannel* channel, gint mark,
/**
* The callback function invoked when primary display buffer data is sent from
* the SPICE server to the client.
* the Spice server to the client.
*
* @param channel
* The SpiceDisplayChannel on which this event was received.
*
* @param format
* The SPICE format of the received data.
* The Spice format of the received data.
*
* @param width
* The total width of the display.
@ -132,7 +137,7 @@ void guac_spice_client_display_mark(SpiceDisplayChannel* channel,
gboolean marked, guac_client* client);
/**
* Callback invoked by the SPICE client when it receives a CopyRect message.
* Callback invoked by the Spice client when it receives a CopyRect message.
* CopyRect specified a rectangle of source data within the display and a
* set of X/Y coordinates to which that rectangle should be copied.
*

View File

@ -46,7 +46,7 @@ typedef struct guac_spice_file_download_status {
} guac_spice_file_download_status;
/**
* Function which uses Linux's fanotify facility to monitor the "Download"
* Function which uses Linux's inotify facility to monitor the "Download"
* directory of a shared folder for changes and trigger the automatic download
* of that data to the Guacamole user who has access to the shared folder.
*

View File

@ -48,7 +48,7 @@
#include <string.h>
/**
* Handle events for the main SPICE channel, taking the appropriate action
* Handle events for the main Spice channel, taking the appropriate action
* for known events, and logging warnings for unknowns and non-fatal events.
*
* @param channel
@ -72,7 +72,7 @@ static void guac_spice_client_main_channel_handler(SpiceChannel *channel,
/* Channel has been closed, so we abort the connection. */
case SPICE_CHANNEL_CLOSED:
guac_client_abort(client, GUAC_PROTOCOL_STATUS_SERVER_ERROR,
"Disconnected from SPICE server.");
"Disconnected from Spice server.");
break;
/* Channel has been opened - log it and do nothing else. */
@ -100,25 +100,25 @@ static void guac_spice_client_main_channel_handler(SpiceChannel *channel,
/* TLS error, abort the connection with a warning. */
case SPICE_CHANNEL_ERROR_TLS:
guac_client_abort(client, GUAC_PROTOCOL_STATUS_SERVER_ERROR,
"TLS failure connecting to SPICE server.");
"TLS failure connecting to Spice server.");
break;
/* I/O error, abort the connection with a warning. */
case SPICE_CHANNEL_ERROR_IO:
guac_client_abort(client, GUAC_PROTOCOL_STATUS_SERVER_ERROR,
"IO error communicating with SPICE server.");
"IO error communicating with Spice server.");
break;
/* SPICE link error, abort the connection with a warning. */
case SPICE_CHANNEL_ERROR_LINK:
guac_client_abort(client, GUAC_PROTOCOL_STATUS_SERVER_ERROR,
"Link error communicating with SPICE server.");
"Link error communicating with Spice server.");
break;
/* Connect error, abort the connection with a warning. */
case SPICE_CHANNEL_ERROR_CONNECT:
guac_client_abort(client, GUAC_PROTOCOL_STATUS_SERVER_ERROR,
"Connection error communicating with SPICe server.");
"Connection error communicating with Spice server.");
break;
/* Some other unknown event - log it and move on. */
@ -134,7 +134,7 @@ int guac_client_init(guac_client* client) {
/* Set client args */
client->args = GUAC_SPICE_CLIENT_ARGS;
guac_client_log(client, GUAC_LOG_DEBUG, "Initializing SPICE client.");
guac_client_log(client, GUAC_LOG_DEBUG, "Initializing Spice client.");
/* Alloc client data */
guac_spice_client* spice_client = calloc(1, sizeof(guac_spice_client));

View File

@ -40,9 +40,9 @@
#define GUAC_SPICE_FRAME_TIMEOUT 0
/**
* The amount of time to wait for a new message from the SPICE server when
* The amount of time to wait for a new message from the Spice server when
* beginning a new frame. This value must be kept reasonably small such that
* a slow SPICE server will not prevent external events from being handled (such
* a slow Spice server will not prevent external events from being handled (such
* as the stop signal from guac_client_stop()), but large enough that the
* message handling loop does not eat up CPU spinning.
*/

View File

@ -40,7 +40,7 @@
* The keysym being pressed.
*
* @return
* Zero if the keysym was successfully decomposed and sent to the SPICE
* Zero if the keysym was successfully decomposed and sent to the Spice
* server as a pair of key events (the dead key and base key), non-zero
* otherwise.
*/

View File

@ -36,7 +36,7 @@ guac_user_mouse_handler guac_spice_user_mouse_handler;
guac_user_key_handler guac_spice_user_key_handler;
/**
* A callback that is invoked when the SPICE server updates the mouse mode.
* A callback that is invoked when the Spice server updates the mouse mode.
*
* @param channel
* The channel on which the update occurred.

View File

@ -29,14 +29,14 @@
/**
* Translates the given keysym into the corresponding lock flag, as would be
* required by the SPICE synchronize event. If the given keysym does not
* required by the Spice synchronize event. If the given keysym does not
* represent a lock key, zero is returned.
*
* @param keysym
* The keysym to translate into a SPICE lock flag.
* The keysym to translate into a Spice lock flag.
*
* @return
* The SPICE lock flag which corresponds to the given keysym, or zero if the
* The Spice lock flag which corresponds to the given keysym, or zero if the
* given keysym does not represent a lock key.
*/
static int guac_spice_keyboard_lock_flag(int keysym) {
@ -64,17 +64,17 @@ static int guac_spice_keyboard_lock_flag(int keysym) {
}
/**
* Immediately sends an SPICE key event having the given scancode and flags.
* Immediately sends an Spice key event having the given scancode and flags.
*
* @param spice_client
* The SPICE client instance associated with the SPICE session along which the
* The Spice client instance associated with the SPICE session along which the
* key event should be sent.
*
* @param scancode
* The scancode of the key to press or release via the SPICE key event.
* The scancode of the key to press or release via the Spice key event.
*
* @param flags
* Any SPICE-specific flags required for the provided scancode to have the
* Any Spice-specific flags required for the provided scancode to have the
* intended meaning, such as KBD_FLAGS_EXTENDED. The possible flags and
* their meanings are dictated by SPICE. KBD_FLAGS_DOWN and KBD_FLAGS_UP
* need not be specified here - they will automatically be added depending
@ -97,17 +97,17 @@ static void guac_spice_send_key_event(guac_spice_client* spice_client,
}
/**
* Immediately sends an SPICE synchonize event having the given flags. An SPICE
* Immediately sends an Spice synchonize event having the given flags. A Spice
* synchronize event sets the state of remote lock keys absolutely, where a
* lock key will be active only if its corresponding flag is set in the event.
*
* @param spice_client
* The SPICE client instance associated with the SPICE session along which the
* The Spice client instance associated with the Spice session along which the
* synchronize event should be sent.
*
* @param modifiers
* Bitwise OR of the flags representing the lock keys which should be set,
* if any, as dictated by the SPICE protocol. If no flags are set, then no
* if any, as dictated by the Spice protocol. If no flags are set, then no
* lock keys will be active.
*/
static void guac_spice_send_synchronize_event(guac_spice_client* spice_client,
@ -132,7 +132,7 @@ static void guac_spice_send_synchronize_event(guac_spice_client* spice_client,
* returned.
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*
* @param keysym
* The keysym of the key to lookup within the given keyboard.
@ -188,7 +188,7 @@ static int guac_spice_count_bits(unsigned int value) {
}
/**
* Returns an estimated cost for sending the necessary SPICE events to type the
* Returns an estimated cost for sending the necessary Spice events to type the
* key described by the given guac_spice_keysym_desc, given the current lock and
* modifier state of the keyboard. A higher cost value indicates that a greater
* number of events are expected to be required.
@ -234,10 +234,10 @@ static int guac_spice_keyboard_get_cost(guac_spice_keyboard* keyboard,
/**
* Returns a pointer to the guac_spice_key structure representing the
* definition(s) and state of the key having the given keysym. If no such key
* is defined within the keyboard layout of the SPICE server, NULL is returned.
* is defined within the keyboard layout of the Spice server, NULL is returned.
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*
* @param keysym
* The keysym of the key to lookup within the given keyboard.
@ -245,7 +245,7 @@ static int guac_spice_keyboard_get_cost(guac_spice_keyboard* keyboard,
* @return
* A pointer to the guac_spice_key structure representing the definition(s)
* and state of the key having the given keysym, or NULL if no such key is
* defined within the keyboard layout of the SPICE server.
* defined within the keyboard layout of the Spice server.
*/
static guac_spice_key* guac_spice_keyboard_get_key(guac_spice_keyboard* keyboard,
int keysym) {
@ -265,7 +265,7 @@ static guac_spice_key* guac_spice_keyboard_get_key(guac_spice_keyboard* keyboard
* current keyboard lock and modifier states.
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*
* @param key
* The key whose lowest-cost possible definition should be retrieved.
@ -312,7 +312,7 @@ static const guac_spice_keysym_desc* guac_spice_keyboard_get_definition(guac_spi
* logged.
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*
* @param mapping
* The keysym/scancode mapping that should be added to the given keyboard.
@ -364,7 +364,7 @@ static void guac_spice_keyboard_add_mapping(guac_spice_keyboard* keyboard,
* Loads all keysym/scancode mappings declared within the given keymap and its
* parent keymap, if any. These mappings are stored within the given
* guac_spice_keyboard structure for future use in translating keysyms to the
* scancodes required by SPICE key events.
* scancodes required by Spice key events.
*
* @param keyboard
* The guac_spice_keyboard which should be initialized with the
@ -449,11 +449,11 @@ unsigned int guac_spice_keyboard_get_modifier_flags(guac_spice_keyboard* keyboar
}
/**
* Presses/releases the requested key by sending one or more SPICE key events, as
* Presses/releases the requested key by sending one or more Spice key events, as
* defined within the keymap defining that key.
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*
* @param key
* The guac_spice_keysym_desc of the key being pressed or released, as
@ -464,7 +464,7 @@ unsigned int guac_spice_keyboard_get_modifier_flags(guac_spice_keyboard* keyboar
*
* @return
* Zero if the key was successfully pressed/released, non-zero if the key
* cannot be sent using SPICE key events.
* cannot be sent using Spice key events.
*/
static const guac_spice_keysym_desc* guac_spice_keyboard_send_defined_key(guac_spice_keyboard* keyboard,
guac_spice_key* key, int pressed) {
@ -643,7 +643,7 @@ void guac_spice_keyboard_set_indicators(SpiceChannel* channel, guac_client* clie
g_object_get(channel, SPICE_PROPERTY_KEY_MODIFIERS, &modifiers, NULL);
/* Update with received locks */
guac_client_log(client, GUAC_LOG_DEBUG, "Received updated keyboard lock flags from SPICE server: 0x%X", modifiers);
guac_client_log(client, GUAC_LOG_DEBUG, "Received updated keyboard lock flags from Spice server: 0x%X", modifiers);
keyboard->modifiers = modifiers;
complete:

View File

@ -39,7 +39,7 @@
#define GUAC_SPICE_KEY_MAX_DEFINITIONS 4
/**
* All possible sources of SPICE key events tracked by guac_spice_keyboard.
* All possible sources of Spice key events tracked by guac_spice_keyboard.
*/
typedef enum guac_spice_key_source {
@ -50,7 +50,7 @@ typedef enum guac_spice_key_source {
GUAC_SPICE_KEY_SOURCE_CLIENT = 0,
/**
* The key event is being synthesized internally within the SPICE support.
* The key event is being synthesized internally within the Spice support.
*/
GUAC_SPICE_KEY_SOURCE_SYNTHETIC = 1
@ -58,15 +58,15 @@ typedef enum guac_spice_key_source {
/**
* A representation of a single key within the overall local keyboard,
* including the definition of that key within the SPICE server's keymap and
* including the definition of that key within the Spice server's keymap and
* whether the key is currently pressed locally.
*/
typedef struct guac_spice_key {
/**
* All definitions of this key within the SPICE server's keymap (keyboard
* All definitions of this key within the Spice server's keymap (keyboard
* layout). Each definition describes which scancode corresponds to this
* key from the perspective of the SPICE server, as well as which other
* key from the perspective of the Spice server, as well as which other
* scancodes must be pressed/released for this key to have the desired
* meaning.
*/
@ -74,7 +74,7 @@ typedef struct guac_spice_key {
/**
* The number of definitions within the definitions array. If this key does
* not exist within the SPICE server's keymap, this will be 0.
* not exist within the Spice server's keymap, this will be 0.
*/
int num_definitions;
@ -93,18 +93,18 @@ typedef struct guac_spice_key {
} guac_spice_key;
/**
* The current keyboard state of an SPICE session.
* The current keyboard state of an Spice session.
*/
typedef struct guac_spice_keyboard {
/**
* The guac_client associated with the SPICE session whose keyboard state is
* The guac_client associated with the Spice session whose keyboard state is
* being managed by this guac_spice_keyboard.
*/
guac_client* client;
/**
* The local state of all known lock keys, as a bitwise OR of all SPICE lock
* The local state of all known lock keys, as a bitwise OR of all Spice lock
* key flags. Legal flags are KBD_SYNC_SCROLL_LOCK, KBD_SYNC_NUM_LOCK,
* KBD_SYNC_CAPS_LOCK, and KBD_SYNC_KANA_LOCK.
*/
@ -124,7 +124,7 @@ typedef struct guac_spice_keyboard {
/**
* The local state of all keys, as well as the necessary information to
* translate received keysyms into scancodes or sequences of scancodes for
* SPICE. The state of each key is updated based on received Guacamole key
* Spice. The state of each key is updated based on received Guacamole key
* events, while the information describing the behavior and scancode
* mapping of each key is populated based on an associated keymap.
*
@ -149,8 +149,8 @@ typedef struct guac_spice_keyboard {
/**
* The total number of keys that the user of the connection is currently
* holding down. This value indicates only the client-side keyboard state.
* It DOES NOT indicate the number of keys currently pressed within the SPICE
* server.
* It DOES NOT indicate the number of keys currently pressed within the
* Spice server.
*/
int user_pressed_keys;
@ -159,12 +159,12 @@ typedef struct guac_spice_keyboard {
/**
* Allocates a new guac_spice_keyboard which manages the keyboard state of the
* SPICE session associated with the given guac_client. Keyboard events will be
* dynamically translated from keysym to SPICE scancode according to the
* dynamically translated from keysym to Spice scancode according to the
* provided keymap. The returned guac_spice_keyboard must eventually be freed
* with guac_spice_keyboard_free().
*
* @param client
* The guac_client associated with the SPICE session whose keyboard state is
* The guac_client associated with the Spice session whose keyboard state is
* to be managed by the newly-allocated guac_spice_keyboard.
*
* @param keymap
@ -172,7 +172,7 @@ typedef struct guac_spice_keyboard {
*
* @return
* A newly-allocated guac_spice_keyboard which manages the keyboard state
* for the SPICE session associated given guac_client.
* for the Spice session associated given guac_client.
*/
guac_spice_keyboard* guac_spice_keyboard_alloc(guac_client* client,
const guac_spice_keymap* keymap);
@ -228,7 +228,7 @@ int guac_spice_keyboard_is_pressed(guac_spice_keyboard* keyboard, int keysym);
* @see GUAC_SPICE_KEYMAP_MODIFIER_ALTGR
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*
* @return
* The local state of all known modifier keys.
@ -240,7 +240,7 @@ unsigned int guac_spice_keyboard_get_modifier_flags(guac_spice_keyboard* keyboar
* synchronizing the remote state of those keys if it is expected to differ.
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*
* @param set_modifiers
* The lock key flags which should be set. Legal flags are
@ -264,7 +264,7 @@ void guac_spice_keyboard_update_locks(guac_spice_keyboard* keyboard,
* @see GUAC_SPICE_KEYMAP_MODIFIER_ALTGR
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*
* @param set_modifiers
* The modifier key flags which should be set.
@ -277,7 +277,7 @@ void guac_spice_keyboard_update_modifiers(guac_spice_keyboard* keyboard,
/**
* Updates the local state of the given keysym, sending the key events required
* to replicate that state remotely (on the SPICE server). The key events sent
* to replicate that state remotely (on the Spice server). The key events sent
* will depend on the current keymap.
*
* @param keyboard
@ -300,20 +300,20 @@ int guac_spice_keyboard_update_keysym(guac_spice_keyboard* keyboard,
int keysym, int pressed, guac_spice_key_source source);
/**
* Releases all currently pressed keys, sending key release events to the SPICE
* Releases all currently pressed keys, sending key release events to the Spice
* server as necessary. Lock states (Caps Lock, etc.) are not affected.
*
* @param keyboard
* The guac_spice_keyboard associated with the current SPICE session.
* The guac_spice_keyboard associated with the current Spice session.
*/
void guac_spice_keyboard_reset(guac_spice_keyboard* keyboard);
/**
* Callback which is invoked when the SPICE server reports changes to keyboard
* Callback which is invoked when the Spice server reports changes to keyboard
* lock status using a Server Set Keyboard Indicators PDU.
*
* @param channel
* The spiceContext associated with the current SPICE session.
* The spiceContext associated with the current Spice session.
*
* @param client
* The guac_client object associated with the callback.

View File

@ -86,7 +86,7 @@
#define GUAC_SPICE_KEYMAP_MODIFIER_ALTGR 2
/**
* Represents a keysym-to-scancode mapping for SPICE, with extra information
* Represents a keysym-to-scancode mapping for Spice, with extra information
* about the state of prerequisite keysyms.
*/
typedef struct guac_spice_keysym_desc {
@ -102,7 +102,7 @@ typedef struct guac_spice_keysym_desc {
int scancode;
/**
* Required SPICE-specific flags that must be sent along with the scancode.
* Required Spice-specific flags that must be sent along with the scancode.
*/
int flags;
@ -111,7 +111,7 @@ typedef struct guac_spice_keysym_desc {
* associated scancode to be interpreted as this keysym.
*
* If the associated keysym is pressed, and any of these modifiers are not
* currently active, Guacamole's SPICE support must send additional events
* currently active, Guacamole's Spice support must send additional events
* to activate these modifiers prior to sending the scancode for this
* keysym.
*
@ -125,7 +125,7 @@ typedef struct guac_spice_keysym_desc {
* associated scancode to be interpreted as this keysym.
*
* If the associated keysym is pressed, and any of these modifiers are
* currently active, Guacamole's SPICE support must send additional events
* currently active, Guacamole's Spice support must send additional events
* to deactivate these modifiers prior to sending the scancode for this
* keysym.
*

View File

@ -39,7 +39,7 @@
#include <syslog.h>
/**
* Callback invoked by SPICE when an informational message needs to be
* Callback invoked by Spice when an informational message needs to be
* logged.
*
* @param format
@ -52,7 +52,7 @@
void guac_spice_client_log_info(const char* format, ...);
/**
* Callback invoked by SPICE when an error message needs to be logged.
* Callback invoked by Spice when an error message needs to be logged.
*
* @param format
* A printf-style format string to log.

View File

@ -95,24 +95,24 @@ const char* GUAC_SPICE_CLIENT_ARGS[] = {
enum SPICE_ARGS_IDX {
/**
* The hostname of the SPICE server (or repeater) to connect to.
* The hostname of the Spice server to connect to.
*/
IDX_HOSTNAME,
/**
* The port of the SPICE server (or repeater) to connect to.
* The port of the Spice server to connect to.
*/
IDX_PORT,
/**
* Whether or not the connection to the SPICE server should be made via
* Whether or not the connection to the Spice server should be made via
* TLS.
*/
IDX_TLS,
/**
* The verification mode that should be used to validate TLS connections
* to the SPICE server.
* to the Spice server.
*/
IDX_TLS_VERIFY,
@ -134,7 +134,7 @@ enum SPICE_ARGS_IDX {
IDX_PUBKEY,
/**
* The proxy server to connect through when connecting to the SPICE server.
* The proxy server to connect through when connecting to the Spice server.
*/
IDX_PROXY,
@ -145,7 +145,7 @@ enum SPICE_ARGS_IDX {
IDX_READ_ONLY,
/**
* Space-separated list of encodings to use within the SPICE session. If not
* Space-separated list of encodings to use within the Spice session. If not
* specified, this will be:
*
* "zrle ultra copyrect hextile zlib corre rre raw".
@ -153,18 +153,18 @@ enum SPICE_ARGS_IDX {
IDX_ENCODINGS,
/**
* The username to send to the SPICE server if authentication is requested.
* The username to send to the Spice server if authentication is requested.
*/
IDX_USERNAME,
/**
* The password to send to the SPICE server if authentication is requested.
* The password to send to the Spice server if authentication is requested.
*/
IDX_PASSWORD,
/**
* "true" if the red and blue components of each color should be swapped,
* "false" or blank otherwise. This is mainly used for SPICE servers that do
* "false" or blank otherwise. This is mainly used for Spice servers that do
* not properly handle colors.
*/
IDX_SWAP_RED_BLUE,
@ -187,10 +187,10 @@ enum SPICE_ARGS_IDX {
IDX_AUTORETRY,
/**
* The encoding to use for clipboard data sent to the SPICE server if we are
* The encoding to use for clipboard data sent to the Spice server if we are
* going to be deviating from the standard (which mandates ISO 8829-1).
* Valid values are "ISO8829-1" (the only legal value with respect to the
* SPICE standard), "UTF-8", "UTF-16", and "CP2252".
* Spice standard), "UTF-8", "UTF-16", and "CP2252".
*/
IDX_CLIPBOARD_ENCODING,
@ -216,7 +216,7 @@ enum SPICE_ARGS_IDX {
IDX_FILE_DIRECTORY,
/**
* Whether or not the shared directory should be read-only to the SPICE
* Whether or not the shared directory should be read-only to the Spice
* server.
*/
IDX_FILE_TRANSFER_RO,
@ -242,20 +242,20 @@ enum SPICE_ARGS_IDX {
/**
* The name of the keymap chosen as the layout of the server. Legal names
* are defined within the *.keymap files in the "keymaps" directory of the
* source for Guacamole's SPICE support.
* source for Guacamole's Spice support.
*/
IDX_SERVER_LAYOUT,
#ifdef ENABLE_COMMON_SSH
/**
* "true" if SFTP should be enabled for the SPICE connection, "false" or
* "true" if SFTP should be enabled for the Spice connection, "false" or
* blank otherwise.
*/
IDX_ENABLE_SFTP,
/**
* The hostname of the SSH server to connect to for SFTP. If blank, the
* hostname of the SPICE server will be used.
* hostname of the Spice server will be used.
*/
IDX_SFTP_HOSTNAME,
@ -651,7 +651,7 @@ void guac_spice_settings_free(guac_spice_settings* settings) {
free(settings->username);
#ifdef ENABLE_SPICE_REPEATER
/* Free SPICE repeater settings */
/* Free Spice repeater settings */
free(settings->dest_host);
#endif

View File

@ -34,17 +34,17 @@
#define GUAC_SPICE_DEFAULT_RECORDING_NAME "recording"
/**
* SPICE-specific client data.
* Spice-specific client data.
*/
typedef struct guac_spice_settings {
/**
* The hostname of the SPICE server (or repeater) to connect to.
* The hostname of the Spice server (or repeater) to connect to.
*/
char* hostname;
/**
* The port of the SPICE server (or repeater) to connect to.
* The port of the Spice server (or repeater) to connect to.
*/
char* port;
@ -55,13 +55,13 @@ typedef struct guac_spice_settings {
/**
* The type of TLS validation that should be done for encrypted connections
* to SPICE servers.
* to Spice servers.
*/
SpiceSessionVerify tls_verify;
/**
* One or more Base64-encoded certificates to use to validate TLS
* connections to the SPICE server.
* connections to the Spice server.
*/
char* ca;
@ -72,12 +72,12 @@ typedef struct guac_spice_settings {
char* ca_file;
/**
* The public key of the SPICE server for TLS verification.
* The public key of the Spice server for TLS verification.
*/
char* pubkey;
/**
* SPICE supports connecting to remote servers via a proxy server. You can
* Spice supports connecting to remote servers via a proxy server. You can
* specify the proxy server to use in this property.
*/
char* proxy;
@ -93,7 +93,7 @@ typedef struct guac_spice_settings {
char* password;
/**
* Space-separated list of encodings to use within the SPICE session.
* Space-separated list of encodings to use within the Spice session.
*/
char* encodings;
@ -161,8 +161,8 @@ typedef struct guac_spice_settings {
int retries;
/**
* The encoding to use for clipboard data sent to the SPICE server, or NULL
* to use the encoding required by the SPICE standard.
* The encoding to use for clipboard data sent to the Spice server, or NULL
* to use the encoding required by the Spice standard.
*/
char* clipboard_encoding;
@ -182,7 +182,7 @@ typedef struct guac_spice_settings {
#ifdef ENABLE_COMMON_SSH
/**
* Whether SFTP should be enabled for the SPICE connection.
* Whether SFTP should be enabled for the Spice connection.
*/
bool enable_sftp;

View File

@ -22,7 +22,7 @@
/**
* The key used to store and retrieve Guacamole-related data from within the
* SPICE client structure.
* Spice client structure.
*/
#define GUAC_SPICE_CLIENT_KEY "GUAC_SPICE"
@ -125,54 +125,54 @@
#define GUAC_SPICE_PARAMETER_TLS_VERIFY_SUBJECT "subject"
/**
* The property within a SPICE client channel that indicates if the SPICE
* The property within a Spice client channel that indicates if the SPICE
* agent is connected.
*/
#define SPICE_PROPERTY_AGENT_CONNECTED "agent-connected"
/**
* The SPICE client property that defines CA certificates used to validate
* the TLS connection to the SPICE server.
* The Spice client property that defines CA certificates used to validate
* the TLS connection to the Spice server.
*/
#define SPICE_PROPERTY_CA "ca"
/**
* The SPICE client property that defines a path on the server running guacd
* The Spice client property that defines a path on the server running guacd
* to the file containing the certificate authority certificates to use to
* validate the TLS connection to the SPICE server.
* validate the TLS connection to the Spice server.
*/
#define SPICE_PROPERTY_CA_FILE "ca-file"
/**
* The property that the SPICE client uses to set the image cache size. If
* The property that the Spice client uses to set the image cache size. If
* undefined a default of 0 will be used.
*/
#define SPICE_PROPERTY_CACHE_SIZE "cache-size"
/**
* The SPICE client channel property that stores the identifier of the channel.
* The Spice client channel property that stores the identifier of the channel.
*/
#define SPICE_PROPERTY_CHANNEL_ID "channel-id"
/**
* THe SPICE client channel property that stores the type of the channel.
* THe Spice client channel property that stores the type of the channel.
*/
#define SPICE_PROPERTY_CHANNEL_TYPE "channel-type"
/**
* SPICE library property that determines whether or not the sockets are provided
* Spice library property that determines whether or not the sockets are provided
* by the client.
*/
#define SPICE_PROPERTY_CLIENT_SOCKETS "client-sockets"
/**
* The property that tells the SPICE client the color depth to use when
* The property that tells the Spice client the color depth to use when
* allocating new displays.
*/
#define SPICE_PROPERTY_COLOR_DEPTH "color-depth"
/**
* The property that tells the SPICE client to enable audio playback and
* The property that tells the Spice client to enable audio playback and
* recording. The SPICE client default is TRUE.
*/
#define SPICE_PROPERTY_ENABLE_AUDIO "enable-audio"
@ -183,13 +183,13 @@
#define SPICE_PROPERTY_ENABLE_USBREDIR "enable-usbredir"
/**
* The property that contains the hostname, IP address, or URL of the SPICE
* The property that contains the hostname, IP address, or URL of the Spice
* server that the client should attempt to connect to.
*/
#define SPICE_PROPERTY_HOST "host"
/**
* A read-only property exposed by the SPICE client library indicating the
* A read-only property exposed by the Spice client library indicating the
* current state of key modifiers - such as lock keys - on the server.
*/
#define SPICE_PROPERTY_KEY_MODIFIERS "key-modifiers"
@ -201,88 +201,88 @@
/**
* The property used to toggle the playback and/or record
* mute status on the SPICE server.
* mute status on the Spice server.
*/
#define SPICE_PROPERTY_MUTE "mute"
/**
* The property used to get or set the number of audio playback and/or recording
* channels that will be available between the SPICE server and client.
* channels that will be available between the Spice server and client.
*/
#define SPICE_PROPERTY_NUM_CHANNELS "nchannels"
/**
* The property used to tell the SPICE client the password to send on to the
* The property used to tell the Spice client the password to send on to the
* SPICE server for authentication.
*/
#define SPICE_PROPERTY_PASSWORD "password"
/**
* The property used to set the unencrypted communication port for communicating
* with the SPICE server.
* with the Spice server.
*/
#define SPICE_PROPERTY_PORT "port"
/**
* The property that the SPICE client uses to set the proxy server that is used
* to connect to the SPICE server.
* The property that the Spice client uses to set the proxy server that is used
* to connect to the Spice server.
*/
#define SPICE_PROPERTY_PROXY "proxy"
/**
* The property used by the SPICE client to tell the server that the session
* The property used by the Spice client to tell the server that the session
* should be read-only.
*/
#define SPICE_PROPERTY_READ_ONLY "read-only"
/**
* The property that the SPICE client uses to determine a local (to guacd)
* directory that will be shared with the SPICE server.
* The property that the Spice client uses to determine a local (to guacd)
* directory that will be shared with the Spice server.
*/
#define SPICE_PROPERTY_SHARED_DIR "shared-dir"
/**
* The property that tells the SPICE client that the shared directory should be
* read-only to the SPICE server and should not allow writes.
* The property that tells the Spice client that the shared directory should be
* read-only to the Spice server and should not allow writes.
*/
#define SPICE_PROPERTY_SHARED_DIR_RO "share-dir-ro"
/**
* The property within the SPICE client that is used to set the port used for
* secure, TLS-based communication with the SPICE server.
* The property within the Spice client that is used to set the port used for
* secure, TLS-based communication with the Spice server.
*/
#define SPICE_PROPERTY_TLS_PORT "tls-port"
/**
* The property that is used to set the username that the SPICE client will use
* The property that is used to set the username that the Spice client will use
* to authenticate with the server.
*/
#define SPICE_PROPERTY_USERNAME "username"
/**
* The property that tells the SPICE client whether or not to verify the
* certificate presented by the SPICE server in TLS communications.
* The property that tells the Spiec client whether or not to verify the
* certificate presented by the Spice server in TLS communications.
*/
#define SPICE_PROPERTY_VERIFY "verify"
/**
* The property used to get or set the playback and/or recording volume of audio
* on the SPICE server to the remote client.
* on the Spice server to the remote client.
*/
#define SPICE_PROPERTY_VOLUME "volume"
/**
* The signal sent by the SPICE client when a new channel is created.
* The signal sent by the Spice client when a new channel is created.
*/
#define SPICE_SIGNAL_CHANNEL_NEW "channel-new"
/**
* The signal sent by the SPICE client when a channel is destroyed.
* The signal sent by the Spice client when a channel is destroyed.
*/
#define SPICE_SIGNAL_CHANNEL_DESTROY "channel-destroy"
/**
* The signal sent by the SPICE client when an event occurs on a channel.
* The signal sent by the Spice client when an event occurs on a channel.
*/
#define SPICE_SIGNAL_CHANNEL_EVENT "channel-event"
@ -309,7 +309,7 @@
#define SPICE_SIGNAL_CURSOR_SET "cursor-set"
/**
* The signal sent by the SPICE client when the client is disconnected from
* The signal sent by the Spice client when the client is disconnected from
* the server.
*/
#define SPICE_SIGNAL_DISCONNECTED "disconnected"
@ -348,24 +348,24 @@
#define SPICE_SIGNAL_INPUTS_MODIFIERS "inputs-modifiers"
/**
* The signal sent by the SPICE client when the connected status or capabilities
* The signal sent by the Spice client when the connected status or capabilities
* of a channel change.
*/
#define SPICE_SIGNAL_MAIN_AGENT_UPDATE "main-agent-update"
/**
* Signal fired by the SPICE client when clipboard selection data is available.
* Signal fired by the Spice client when clipboard selection data is available.
*/
#define SPICE_SIGNAL_MAIN_CLIPBOARD_SELECTION "main-clipboard-selection"
/**
* A signal fired by the SPICE client when clipboard selection data is available
* A signal fired by the Spice client when clipboard selection data is available
* from the guest, and of what type.
*/
#define SPICE_SIGNAL_MAIN_CLIPBOARD_SELECTION_GRAB "main-clipboard-selection-grab"
/**
* A signal fired by the SPICE client when clipboard selection data is no longer
* A signal fired by the Spice client when clipboard selection data is no longer
* available from the guest.
*/
#define SPICE_SIGNAL_MAIN_CLIPBOARD_SELECTION_RELEASE "main-clipboard-selection-release"
@ -381,19 +381,19 @@
#define SPICE_SIGNAL_MAIN_MOUSE_UPDATE "main-mouse-update"
/**
* A signal sent by the SPICE client when the server has indicated that live
* A signal sent by the Spice client when the server has indicated that live
* migration has started.
*/
#define SPICE_SIGNAL_MIGRATION_STARTED "migration-started"
/**
* The signal sent by the SPICE client when a MM time discontinuity is
* The signal sent by the Spice client when a MM time discontinuity is
* detected.
*/
#define SPICE_SIGNAL_MM_TIME_RESET "mm-time-reset"
/**
* The signal fired by the SPICE client when a new file transfer task has been
* The signal fired by the Spice client when a new file transfer task has been
* initiated.
*/
#define SPICE_SIGNAL_NEW_FILE_TRANSFER "new-file-transfer"
@ -421,7 +421,7 @@
#define SPICE_SIGNAL_PLAYBACK_STOP "playback-stop"
/**
* A signal indicating that the SPICE server would like to capture audio data
* A signal indicating that the Spice server would like to capture audio data
* from the client, along with the required format of that data.
*/
#define SPICE_SIGNAL_RECORD_START "record-start"
@ -437,7 +437,7 @@
#define SPICE_SIGNAL_SHARE_FOLDER "notify::share-folder"
/**
* The signal indicating that the SPICE server has gone to streaming mode.
* The signal indicating that the Spice server has gone to streaming mode.
*/
#define SPICE_SIGNAL_STREAMING_MODE "streaming-mode"

View File

@ -26,12 +26,12 @@
#define SPICE_DEFAULT_HOST "localhost"
/**
* The default SPICE port number to connect to if none is specified.
* The default Spice port number to connect to if none is specified.
*/
#define SPICE_DEFAULT_PORT "5900"
/**
* The default encodings to use for the SPICE clipboard.
* The default encodings to use for the Spice clipboard.
*/
#define SPICE_DEFAULT_ENCODINGS "zrle ultra copyrect hextile zlib corre rre raw"

View File

@ -53,23 +53,17 @@ SpiceSession* guac_spice_get_session(guac_client* client) {
guac_client_log(client, GUAC_LOG_DEBUG, "Initializing new SPICE session.");
/* Set up the SPICE session and Guacamole client. */
/* Set up the Spice session and Guacamole client. */
guac_spice_client* spice_client = (guac_spice_client*) client->data;
guac_spice_settings* spice_settings = spice_client->settings;
/* Create a new SPICE client. */
/* Create a new Spice client. */
SpiceSession* spice_session = spice_session_new();
guac_client_log(client, GUAC_LOG_DEBUG, "Registering new channel callback.");
/* Register a callback for handling new channel events. */
g_signal_connect(spice_session, SPICE_SIGNAL_CHANNEL_NEW,
G_CALLBACK(guac_spice_client_channel_handler), client);
guac_client_log(client, GUAC_LOG_DEBUG, "Setting up connection properties.");
guac_client_log(client, GUAC_LOG_DEBUG, "Setting up host/port.");
/* Set hostname and port */
g_object_set(spice_session, SPICE_PROPERTY_HOST, spice_settings->hostname, NULL);
guac_client_log(client, GUAC_LOG_DEBUG, "Connecting to host %s",
@ -100,6 +94,7 @@ SpiceSession* guac_spice_get_session(guac_client* client) {
spice_client->keyboard = guac_spice_keyboard_alloc(client,
spice_settings->server_layout);
/* If file transfer is enabled, set up the required properties. */
if (spice_settings->file_transfer) {
guac_client_log(client, GUAC_LOG_DEBUG, "File transfer enabled, configuring Spice client.");
g_object_set(spice_session, SPICE_PROPERTY_SHARED_DIR, spice_settings->file_directory, NULL);
@ -113,12 +108,9 @@ SpiceSession* guac_spice_get_session(guac_client* client) {
guac_client_for_owner(client, guac_spice_folder_expose,
spice_client->shared_folder);
}
else {
guac_client_log(client, GUAC_LOG_DEBUG, "Disabling file transfer.");
g_object_set(spice_session, SPICE_PROPERTY_SHARED_DIR, NULL, NULL);
}
guac_client_log(client, GUAC_LOG_DEBUG, "Finished setting properties.");
else
g_object_set(spice_session, SPICE_PROPERTY_SHARED_DIR, NULL, NULL);
/* Return the configured session. */
return spice_session;
@ -158,12 +150,8 @@ void* guac_spice_client_thread(void* data) {
return NULL;
}
guac_client_log(client, GUAC_LOG_DEBUG, "Configuration completed, flushing socket.");
guac_socket_flush(client->socket);
// guac_timestamp last_frame_end = guac_timestamp_current();
guac_client_log(client, GUAC_LOG_DEBUG, "Connection configuration finished, calling spice_session_connect.");
if(!spice_session_connect(spice_client->spice_session))
@ -193,6 +181,7 @@ void* guac_spice_client_thread(void* data) {
g_object_unref(spice_client->spice_session);
spice_client->spice_session = NULL;
}
guac_client_stop(client);
guac_client_log(client, GUAC_LOG_INFO, "Internal SPICE client disconnected");
return NULL;

View File

@ -46,42 +46,42 @@
#include <pthread.h>
/**
* SPICE-specific client data.
* Spice-specific client data.
*/
typedef struct guac_spice_client {
/**
* The SPICE client thread.
* The Spice client thread.
*/
pthread_t client_thread;
/**
* The underlying SPICE session.
* The underlying Spice session.
*/
SpiceSession* spice_session;
/**
* The main SPICE channel.
* The main Spice channel.
*/
SpiceMainChannel* main_channel;
/**
* The SPICE audio playback channel.
* The Spice audio playback channel.
*/
SpicePlaybackChannel* playback_channel;
/**
* The SPICE audio recording/input channel.
* The Spice audio recording/input channel.
*/
SpiceRecordChannel* record_channel;
/**
* The SPICE channel that handles the cursor display and events.
* The Spice channel that handles the cursor display and events.
*/
SpiceCursorChannel* cursor_channel;
/**
* The SPICE channel that handles mouse and keyboard inputs.
* The Spice channel that handles mouse and keyboard inputs.
*/
SpiceInputsChannel* inputs_channel;
@ -96,7 +96,7 @@ typedef struct guac_spice_client {
guac_common_display* display;
/**
* The SPICE display channel.
* The Spice display channel.
*/
SpiceDisplayChannel* spice_display;
@ -149,16 +149,16 @@ typedef struct guac_spice_client {
pthread_mutexattr_t attributes;
/**
* Lock which is used to synchronizes access to SPICE data structures
* Lock which is used to synchronizes access to Spice data structures
* between user input and client threads. It prevents input handlers
* from running when SPICE data structures are allocated or freed
* from running when Spice data structures are allocated or freed
* by the client thread.
*/
pthread_rwlock_t lock;
/**
* Lock which synchronizes the sending of each SPICE message, ensuring
* attempts to send SPICE messages never overlap.
* Lock which synchronizes the sending of each Spice message, ensuring
* attempts to send Spice messages never overlap.
*/
pthread_mutex_t message_lock;
@ -175,27 +175,27 @@ typedef struct guac_spice_client {
} guac_spice_client;
/**
* Allocates a new rfbClient instance given the parameters stored within the
* Allocates a new Spice client session given the parameters stored within the
* client, returning NULL on failure.
*
* @param client
* The guac_client associated with the settings of the desired SPICE
* The guac_client associated with the settings of the desired Spice
* connection.
*
* @return
* A new rfbClient instance allocated and connected according to the
* A new Spice session instance allocated and connected according to the
* parameters stored within the given client, or NULL if connecting to the
* SPICE server fails.
* Spice server fails.
*/
SpiceSession* guac_spice_get_session(guac_client* client);
/**
* SPICE client thread. This thread initiates the SPICE connection and
* Spice client thread. This thread initiates the Spice connection and
* ultimately runs throughout the duration of the client, existing as a single
* instance, shared by all users.
*
* @param data
* The guac_client instance associated with the requested SPICE connection.
* The guac_client instance associated with the requested Spice connection.
*
* @return
* Always NULL.

View File

@ -55,7 +55,7 @@ int guac_spice_user_join_handler(guac_user* user, int argc, char** argv) {
/* Store settings at user level */
user->data = settings;
/* Connect via SPICE if owner */
/* Connect via Spice if owner */
if (user->owner) {
/* Store owner's settings at client level */