Removed GUAC_*_TIMEOUT, added usec_timeout parameters to functions which need them, updated docs.

This commit is contained in:
Michael Jumper 2011-11-23 00:43:30 -08:00
parent a932c2f1a0
commit 087ed54fc2
4 changed files with 23 additions and 28 deletions

View File

@ -301,11 +301,13 @@ typedef int guac_client_init_handler(guac_client* client, int argc, char** argv)
* Initialize and return a new guac_client. The pluggable client will be chosen based on * Initialize and return a new guac_client. The pluggable client will be chosen based on
* the first connect message received on the given file descriptor. * the first connect message received on the given file descriptor.
* *
* @param client_fd The file descriptor associated with the socket associated with the connection to the * @param client_fd The file descriptor associated with the socket associated
* web-client tunnel. * with the connection to the web-client tunnel.
* @param usec_timeout The maximum number of microseconds to wait for each
* instruction during the initial client handshake.
* @return A pointer to the newly initialized client. * @return A pointer to the newly initialized client.
*/ */
guac_client* guac_get_client(int client_fd); guac_client* guac_get_client(int client_fd, int usec_timeout);
/** /**
* Free all resources associated with the given client. * Free all resources associated with the given client.

View File

@ -51,19 +51,6 @@
*/ */
/**
* The number of milliseconds to wait for messages in any phase before
* timing out and closing the connection with an error.
*/
#define GUAC_TIMEOUT 15000
/**
* The number of microseconds to wait for messages in any phase before
* timing out and closing the conncetion with an error. This is always
* equal to GUAC_TIMEOUT * 1000.
*/
#define GUAC_USEC_TIMEOUT (GUAC_TIMEOUT*1000)
/** /**
* An arbitrary timestamp denoting a relative time value in milliseconds. * An arbitrary timestamp denoting a relative time value in milliseconds.
*/ */
@ -348,10 +335,12 @@ int guac_send_cursor(GUACIO* io, int x, int y, cairo_surface_t* surface);
* connection for parsing. * connection for parsing.
* *
* @param io The GUACIO connection to use. * @param io The GUACIO connection to use.
* @param usec_timeout The maximum number of microseconds to wait before
* giving up.
* @return A positive value if data is available, negative on error, or * @return A positive value if data is available, negative on error, or
* zero if no data is currently available. * zero if no data is currently available.
*/ */
int guac_instructions_waiting(GUACIO* io); int guac_instructions_waiting(GUACIO* io, int usec_timeout);
/** /**
* Reads a single instruction from the given GUACIO connection. * Reads a single instruction from the given GUACIO connection.
@ -360,16 +349,19 @@ int guac_instructions_waiting(GUACIO* io);
* returned, and guac_error is set appropriately. * returned, and guac_error is set appropriately.
* *
* @param io The GUACIO connection to use. * @param io The GUACIO connection to use.
* @param usec_timeout The maximum number of microseconds to wait before
* giving up.
* @param parsed_instruction A pointer to a guac_instruction structure which * @param parsed_instruction A pointer to a guac_instruction structure which
* will be populated with data read from the given * will be populated with data read from the given
* GUACIO connection. * GUACIO connection.
* @return A positive value if data was successfully read, negative on * @return A positive value if data was successfully read, negative on
* error, or zero if the instruction could not be read completely * error, or zero if the instruction could not be read completely
* because GUAC_TIMEOUT elapsed, in which case subsequent calls to * because the timeout elapsed, in which case subsequent calls to
* guac_read_instruction() will return the parsed instruction once * guac_read_instruction() will return the parsed instruction once
* enough data is available. * enough data is available.
*/ */
int guac_read_instruction(GUACIO* io, guac_instruction* parsed_instruction); int guac_read_instruction(GUACIO* io, int usec_timeout,
guac_instruction* parsed_instruction);
/** /**
* Returns an arbitrary timestamp. The difference between return values of any * Returns an arbitrary timestamp. The difference between return values of any

View File

@ -128,7 +128,7 @@ void guac_client_free_buffer(guac_client* client, guac_layer* layer) {
} }
guac_client* guac_get_client(int client_fd) { guac_client* guac_get_client(int client_fd, int usec_timeout) {
guac_client* client; guac_client* client;
GUACIO* io = guac_open(client_fd); GUACIO* io = guac_open(client_fd);
@ -159,7 +159,7 @@ guac_client* guac_get_client(int client_fd) {
int result; int result;
/* Wait for data until timeout */ /* Wait for data until timeout */
result = guac_instructions_waiting(io); result = guac_instructions_waiting(io, usec_timeout);
if (result == 0) { if (result == 0) {
guac_send_error(io, "Select timeout."); guac_send_error(io, "Select timeout.");
guac_close(io); guac_close(io);
@ -172,7 +172,7 @@ guac_client* guac_get_client(int client_fd) {
return NULL; return NULL;
} }
result = guac_read_instruction(io, &instruction); result = guac_read_instruction(io, usec_timeout, &instruction);
if (result < 0) { if (result < 0) {
guac_close(io); guac_close(io);
return NULL; return NULL;
@ -254,7 +254,7 @@ guac_client* guac_get_client(int client_fd) {
int result; int result;
/* Wait for data until timeout */ /* Wait for data until timeout */
result = guac_instructions_waiting(io); result = guac_instructions_waiting(io, usec_timeout);
if (result == 0) { if (result == 0) {
guac_send_error(io, "Connect timeout."); guac_send_error(io, "Connect timeout.");
guac_close(io); guac_close(io);
@ -267,7 +267,7 @@ guac_client* guac_get_client(int client_fd) {
return NULL; return NULL;
} }
result = guac_read_instruction(io, &instruction); result = guac_read_instruction(io, usec_timeout, &instruction);
if (result < 0) { if (result < 0) {
guac_log_error("Error reading instruction while waiting for connect"); guac_log_error("Error reading instruction while waiting for connect");
guac_close(io); guac_close(io);

View File

@ -356,7 +356,8 @@ int __guac_fill_instructionbuf(GUACIO* io) {
} }
/* Returns new instruction if one exists, or NULL if no more instructions. */ /* Returns new instruction if one exists, or NULL if no more instructions. */
int guac_read_instruction(GUACIO* io, guac_instruction* parsed_instruction) { int guac_read_instruction(GUACIO* io, int usec_timeout,
guac_instruction* parsed_instruction) {
int retval; int retval;
int i = io->instructionbuf_parse_start; int i = io->instructionbuf_parse_start;
@ -441,7 +442,7 @@ int guac_read_instruction(GUACIO* io, guac_instruction* parsed_instruction) {
} }
/* No instruction yet? Get more data ... */ /* No instruction yet? Get more data ... */
retval = guac_select(io, GUAC_USEC_TIMEOUT); retval = guac_select(io, usec_timeout);
if (retval <= 0) if (retval <= 0)
return retval; return retval;
@ -467,12 +468,12 @@ void guac_free_instruction(guac_instruction* instruction) {
} }
int guac_instructions_waiting(GUACIO* io) { int guac_instructions_waiting(GUACIO* io, int usec_timeout) {
if (io->instructionbuf_used_length > 0) if (io->instructionbuf_used_length > 0)
return 1; return 1;
return guac_select(io, GUAC_USEC_TIMEOUT); return guac_select(io, usec_timeout);
} }
guac_timestamp guac_current_timestamp() { guac_timestamp guac_current_timestamp() {