Defines the guac_socket object and functionss for using and manipulating it. More...
Go to the source code of this file.
Data Structures | |
struct | guac_socket |
The core I/O object of Guacamole. More... |
Functions | |
guac_socket * | guac_socket_alloc () |
Allocates a new, completely blank guac_socket. | |
void | guac_socket_free (guac_socket *socket) |
Frees the given guac_socket and all associated resources. | |
void | guac_socket_require_threadsafe (guac_socket *socket) |
Declares that the given socket must behave in a threadsafe way. | |
void | guac_socket_require_keep_alive (guac_socket *socket) |
Declares that the given socket must automatically send a keep-alive ping to ensure neither side of the socket times out while the socket is open. | |
void | guac_socket_instruction_begin (guac_socket *socket) |
Marks the beginning of a Guacamole protocol instruction. | |
void | guac_socket_instruction_end (guac_socket *socket) |
Marks the end of a Guacamole protocol instruction. | |
void | guac_socket_update_buffer_begin (guac_socket *socket) |
Marks the beginning of a socket's buffer modification. | |
void | guac_socket_update_buffer_end (guac_socket *socket) |
Marks the end of a socket's buffer modification. | |
guac_socket * | guac_socket_open (int fd) |
Allocates and initializes a new guac_socket object with the given open file descriptor. | |
guac_socket * | guac_socket_nest (guac_socket *parent, int index) |
Allocates and initializes a new guac_socket which writes all data via nest instructions to the given existing, open guac_socket. | |
ssize_t | guac_socket_write_int (guac_socket *socket, int64_t i) |
Writes the given unsigned int to the given guac_socket object. | |
ssize_t | guac_socket_write_string (guac_socket *socket, const char *str) |
Writes the given string to the given guac_socket object. | |
ssize_t | guac_socket_write_base64 (guac_socket *socket, const void *buf, size_t count) |
Writes the given binary data to the given guac_socket object as base64- encoded data. | |
ssize_t | guac_socket_write (guac_socket *socket, const void *buf, size_t count) |
Writes the given data to the specified socket. | |
ssize_t | guac_socket_read (guac_socket *socket, void *buf, size_t count) |
Attempts to read data from the socket, filling up to the specified number of bytes in the given buffer. | |
ssize_t | guac_socket_flush_base64 (guac_socket *socket) |
Flushes the base64 buffer, writing padding characters as necessary. | |
ssize_t | guac_socket_flush (guac_socket *socket) |
Flushes the write buffer. | |
int | guac_socket_select (guac_socket *socket, int usec_timeout) |
Waits for input to be available on the given guac_socket object until the specified timeout elapses. |
Defines the guac_socket object and functionss for using and manipulating it.
guac_socket* guac_socket_alloc | ( | ) |
Allocates a new, completely blank guac_socket.
This guac_socket will do absolutely nothing when used unless its handlers are defined.
ssize_t guac_socket_flush | ( | guac_socket * | socket | ) |
Flushes the write buffer.
If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.
socket | The guac_socket object to flush |
ssize_t guac_socket_flush_base64 | ( | guac_socket * | socket | ) |
Flushes the base64 buffer, writing padding characters as necessary.
If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.
socket | The guac_socket object to flush |
void guac_socket_free | ( | guac_socket * | socket | ) |
Frees the given guac_socket and all associated resources.
socket | The guac_socket to free. |
void guac_socket_instruction_begin | ( | guac_socket * | socket | ) |
Marks the beginning of a Guacamole protocol instruction.
If threadsafety is enabled on the socket, other instructions will be blocked from sending until this instruction is complete.
socket | The guac_socket beginning an instruction. |
void guac_socket_instruction_end | ( | guac_socket * | socket | ) |
Marks the end of a Guacamole protocol instruction.
If threadsafety is enabled on the socket, other instructions will be allowed to send.
socket | The guac_socket ending an instruction. |
guac_socket* guac_socket_nest | ( | guac_socket * | parent, |
int | index | ||
) |
Allocates and initializes a new guac_socket which writes all data via nest instructions to the given existing, open guac_socket.
If an error occurs while allocating the guac_socket object, NULL is returned, and guac_error is set appropriately.
parent | The guac_socket this new guac_socket should write nest instructions to. |
index | The stream index to use for the written nest instructions. |
guac_socket* guac_socket_open | ( | int | fd | ) |
Allocates and initializes a new guac_socket object with the given open file descriptor.
If an error occurs while allocating the guac_socket object, NULL is returned, and guac_error is set appropriately.
fd | An open file descriptor that this guac_socket object should manage. |
ssize_t guac_socket_read | ( | guac_socket * | socket, |
void * | buf, | ||
size_t | count | ||
) |
Attempts to read data from the socket, filling up to the specified number of bytes in the given buffer.
If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.
socket | The guac_socket to read from. |
buf | The buffer to read bytes into. |
count | The maximum number of bytes to read. |
void guac_socket_require_keep_alive | ( | guac_socket * | socket | ) |
Declares that the given socket must automatically send a keep-alive ping to ensure neither side of the socket times out while the socket is open.
This ping will take the form of a "nop" instruction. Enabling keep-alive automatically enables threadsafety.
socket | The guac_socket to declare as requiring an automatic keep-alive ping. |
void guac_socket_require_threadsafe | ( | guac_socket * | socket | ) |
Declares that the given socket must behave in a threadsafe way.
Calling this function on a socket guarantees that the socket will send instructions atomically. Without automatic threadsafe sockets, multiple threads writing to the same socket must ensure that instructions will not potentially overlap.
socket | The guac_socket to declare as threadsafe. |
int guac_socket_select | ( | guac_socket * | socket, |
int | usec_timeout | ||
) |
Waits for input to be available on the given guac_socket object until the specified timeout elapses.
If an error occurs while waiting, a negative value is returned, and guac_error is set appropriately.
If a timeout occurs while waiting, zero value is returned, and guac_error is set to GUAC_STATUS_INPUT_TIMEOUT.
socket | The guac_socket object to wait for. |
usec_timeout | The maximum number of microseconds to wait for data, or -1 to potentially wait forever. |
void guac_socket_update_buffer_begin | ( | guac_socket * | socket | ) |
Marks the beginning of a socket's buffer modification.
If threadsafety is enabled on the socket, other functions which modify the buffer will be blocked until this modification is complete.
socket | The guac_socket whose buffer is being updated. |
void guac_socket_update_buffer_end | ( | guac_socket * | socket | ) |
Marks the end of a socket's buffer modification.
If threadsafety is enabled on the socket, other functions which modify the buffer will now be allowed to continue.
socket | The guac_socket whose buffer is done being updated. |
ssize_t guac_socket_write | ( | guac_socket * | socket, |
const void * | buf, | ||
size_t | count | ||
) |
Writes the given data to the specified socket.
The data written is not buffered, and will be sent immediately.
If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.
socket | The guac_socket object to write to. |
buf | A buffer containing the data to write. |
count | The number of bytes to write. |
ssize_t guac_socket_write_base64 | ( | guac_socket * | socket, |
const void * | buf, | ||
size_t | count | ||
) |
Writes the given binary data to the given guac_socket object as base64- encoded data.
The data written may be buffered until the buffer is flushed automatically or manually. Beware that because base64 data is buffered on top of the write buffer already used, a call to guac_socket_flush_base64() must be made before non-base64 writes (or writes of an independent block of base64 data) can be made.
If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.
socket | The guac_socket object to write to. |
buf | A buffer containing the data to write. |
count | The number of bytes to write. |
ssize_t guac_socket_write_int | ( | guac_socket * | socket, |
int64_t | i | ||
) |
Writes the given unsigned int to the given guac_socket object.
The data written may be buffered until the buffer is flushed automatically or manually.
If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.
socket | The guac_socket object to write to. |
i | The unsigned int to write. |
ssize_t guac_socket_write_string | ( | guac_socket * | socket, |
const char * | str | ||
) |
Writes the given string to the given guac_socket object.
The data written may be buffered until the buffer is flushed automatically or manually. Note that if the string can contain characters used internally by the Guacamole protocol (commas, semicolons, or backslashes) it will need to be escaped.
If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.
socket | The guac_socket object to write to. |
str | The string to write. |