GUACAMOLE-221: Allow callers to request that argument values be automatically echoed to all connected users.
This commit is contained in:
parent
a8151c40c4
commit
f8f2c7f747
@ -20,6 +20,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "guacamole/argv.h"
|
#include "guacamole/argv.h"
|
||||||
|
#include "guacamole/client.h"
|
||||||
#include "guacamole/protocol.h"
|
#include "guacamole/protocol.h"
|
||||||
#include "guacamole/socket.h"
|
#include "guacamole/socket.h"
|
||||||
#include "guacamole/stream.h"
|
#include "guacamole/stream.h"
|
||||||
@ -51,7 +52,7 @@ typedef struct guac_argv_state {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Bitwise OR of all option flags that should affect processing of this
|
* Bitwise OR of all option flags that should affect processing of this
|
||||||
* argument. The only current flag is GUAC_ARGV_OPTION_ONCE.
|
* argument.
|
||||||
*/
|
*/
|
||||||
int options;
|
int options;
|
||||||
|
|
||||||
@ -243,6 +244,8 @@ static int guac_argv_blob_handler(guac_user* user, guac_stream* stream,
|
|||||||
*/
|
*/
|
||||||
static int guac_argv_end_handler(guac_user* user, guac_stream* stream) {
|
static int guac_argv_end_handler(guac_user* user, guac_stream* stream) {
|
||||||
|
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
/* Append null terminator to value */
|
/* Append null terminator to value */
|
||||||
guac_argv* argv = (guac_argv*) stream->data;
|
guac_argv* argv = (guac_argv*) stream->data;
|
||||||
argv->buffer[argv->length] = '\0';
|
argv->buffer[argv->length] = '\0';
|
||||||
@ -254,7 +257,14 @@ static int guac_argv_end_handler(guac_user* user, guac_stream* stream) {
|
|||||||
guac_argv_state* state = argv->state;
|
guac_argv_state* state = argv->state;
|
||||||
if (!(state->options & GUAC_ARGV_OPTION_ONCE) || !state->received) {
|
if (!(state->options & GUAC_ARGV_OPTION_ONCE) || !state->received) {
|
||||||
if (state->callback != NULL)
|
if (state->callback != NULL)
|
||||||
state->callback(user, argv->mimetype, state->name, argv->buffer, state->data);
|
result = state->callback(user, argv->mimetype, state->name, argv->buffer, state->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Alert connected clients regarding newly-accepted values if echo is
|
||||||
|
* enabled */
|
||||||
|
if (!result && (state->options & GUAC_ARGV_OPTION_ECHO)) {
|
||||||
|
guac_client* client = user->client;
|
||||||
|
guac_client_stream_argv(client, client->socket, argv->mimetype, state->name, argv->buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Notify that argument has been received */
|
/* Notify that argument has been received */
|
||||||
|
@ -34,6 +34,13 @@
|
|||||||
*/
|
*/
|
||||||
#define GUAC_ARGV_OPTION_ONCE 1
|
#define GUAC_ARGV_OPTION_ONCE 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Option flag which declares to guac_argv_register() that the values received
|
||||||
|
* and accepted for the associated argument should be echoed to all connected
|
||||||
|
* users via outbound "argv" streams.
|
||||||
|
*/
|
||||||
|
#define GUAC_ARGV_OPTION_ECHO 2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum number of bytes to allow for any argument value received via an
|
* The maximum number of bytes to allow for any argument value received via an
|
||||||
* argv stream and processed using guac_argv_received(), including null
|
* argv stream and processed using guac_argv_received(), including null
|
||||||
|
@ -50,8 +50,12 @@
|
|||||||
* @param data
|
* @param data
|
||||||
* Any arbitrary data that was provided when the received argument was
|
* Any arbitrary data that was provided when the received argument was
|
||||||
* registered with guac_argv_register().
|
* registered with guac_argv_register().
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Zero if the received argument value has been accepted and has either
|
||||||
|
* taken effect or is being intentionally ignored, non-zero otherwise.
|
||||||
*/
|
*/
|
||||||
typedef void guac_argv_callback(guac_user* user, const char* mimetype,
|
typedef int guac_argv_callback(guac_user* user, const char* mimetype,
|
||||||
const char* name, const char* value, void* data);
|
const char* name, const char* value, void* data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
* @see GUAC_ARGV_MAX_REGISTERED
|
* @see GUAC_ARGV_MAX_REGISTERED
|
||||||
*
|
*
|
||||||
* @see GUAC_ARGV_OPTION_ONCE
|
* @see GUAC_ARGV_OPTION_ONCE
|
||||||
|
* @see GUAC_ARGV_OPTION_ECHO
|
||||||
*
|
*
|
||||||
* @param name
|
* @param name
|
||||||
* The name of the argument that should be handled by the given callback.
|
* The name of the argument that should be handled by the given callback.
|
||||||
@ -57,7 +58,7 @@
|
|||||||
*
|
*
|
||||||
* @param options
|
* @param options
|
||||||
* Bitwise OR of all option flags that should affect processing of this
|
* Bitwise OR of all option flags that should affect processing of this
|
||||||
* argument. The only current flag is GUAC_ARGV_OPTION_ONCE.
|
* argument.
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
* Zero if the callback was successfully registered, non-zero if the
|
* Zero if the callback was successfully registered, non-zero if the
|
||||||
|
Loading…
Reference in New Issue
Block a user