Implement guac_socket_write(), fix constness.
This commit is contained in:
parent
e7c70111ef
commit
96cc46313a
@ -73,7 +73,7 @@ typedef ssize_t guac_socket_read_handler(guac_socket* socket,
|
|||||||
* @return The number of bytes written, or -1 if an error occurs.
|
* @return The number of bytes written, or -1 if an error occurs.
|
||||||
*/
|
*/
|
||||||
typedef ssize_t guac_socket_write_handler(guac_socket* socket,
|
typedef ssize_t guac_socket_write_handler(guac_socket* socket,
|
||||||
void* buf, size_t count);
|
const void* buf, size_t count);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generic handler for socket select operations, similar to the POSIX select()
|
* Generic handler for socket select operations, similar to the POSIX select()
|
||||||
@ -284,8 +284,8 @@ ssize_t guac_socket_write_string(guac_socket* socket, const char* str);
|
|||||||
ssize_t guac_socket_write_base64(guac_socket* socket, const void* buf, size_t count);
|
ssize_t guac_socket_write_base64(guac_socket* socket, const void* buf, size_t count);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the given data to the specified socket. The data written may be
|
* Writes the given data to the specified socket. The data written is not
|
||||||
* buffered until the buffer is flushed automatically or manually.
|
* buffered, and will be sent immediately.
|
||||||
*
|
*
|
||||||
* If an error occurs while writing, a non-zero value is returned, and
|
* If an error occurs while writing, a non-zero value is returned, and
|
||||||
* guac_error is set appropriately.
|
* guac_error is set appropriately.
|
||||||
|
@ -81,7 +81,7 @@ ssize_t __guac_socket_fd_read_handler(guac_socket* socket,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ssize_t __guac_socket_fd_write_handler(guac_socket* socket,
|
ssize_t __guac_socket_fd_write_handler(guac_socket* socket,
|
||||||
void* buf, size_t count) {
|
const void* buf, size_t count) {
|
||||||
|
|
||||||
__guac_socket_fd_data* data = (__guac_socket_fd_data*) socket->data;
|
__guac_socket_fd_data* data = (__guac_socket_fd_data*) socket->data;
|
||||||
int retval;
|
int retval;
|
||||||
|
@ -69,7 +69,7 @@ typedef struct __guac_socket_nest_data {
|
|||||||
} __guac_socket_nest_data;
|
} __guac_socket_nest_data;
|
||||||
|
|
||||||
ssize_t __guac_socket_nest_write_handler(guac_socket* socket,
|
ssize_t __guac_socket_nest_write_handler(guac_socket* socket,
|
||||||
void* buf, size_t count) {
|
const void* buf, size_t count) {
|
||||||
|
|
||||||
__guac_socket_nest_data* data = (__guac_socket_nest_data*) socket->data;
|
__guac_socket_nest_data* data = (__guac_socket_nest_data*) socket->data;
|
||||||
unsigned char* source = (unsigned char*) buf;
|
unsigned char* source = (unsigned char*) buf;
|
||||||
|
@ -64,8 +64,8 @@ char __guac_socket_BASE64_CHARACTERS[64] = {
|
|||||||
'8', '9', '+', '/'
|
'8', '9', '+', '/'
|
||||||
};
|
};
|
||||||
|
|
||||||
ssize_t __guac_socket_write(guac_socket* socket,
|
static ssize_t __guac_socket_write(guac_socket* socket,
|
||||||
void* buf, size_t count) {
|
const void* buf, size_t count) {
|
||||||
|
|
||||||
/* If handler defined, call it. */
|
/* If handler defined, call it. */
|
||||||
if (socket->write_handler)
|
if (socket->write_handler)
|
||||||
@ -76,7 +76,28 @@ ssize_t __guac_socket_write(guac_socket* socket,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Implement guac_socket_write (buffered write) */
|
ssize_t guac_socket_write(guac_socket* socket,
|
||||||
|
const void* buf, size_t count) {
|
||||||
|
|
||||||
|
const char* buffer = buf;
|
||||||
|
|
||||||
|
/* Write until completely written */
|
||||||
|
while (count > 0) {
|
||||||
|
|
||||||
|
/* Attempt to write, return on error */
|
||||||
|
int written = __guac_socket_write(socket, buffer, count);
|
||||||
|
if (written == -1)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Advance buffer as data written */
|
||||||
|
buffer += written;
|
||||||
|
count -= written;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
ssize_t guac_socket_read(guac_socket* socket, void* buf, size_t count) {
|
ssize_t guac_socket_read(guac_socket* socket, void* buf, size_t count) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user