WebSocket: some clean-up

This commit is contained in:
Přemysl Eric Janouch 2020-10-14 09:43:39 +02:00
parent 2b8f52ac72
commit efc663a178
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 26 additions and 37 deletions

View File

@ -1624,8 +1624,7 @@ start:
} }
static enum ws_read_result static enum ws_read_result
backend_ws_fill_read_buffer backend_ws_fill_read_buffer (struct ws_context *self, void *buf, size_t *len)
(struct ws_context *self, void *buf, size_t *len)
{ {
ssize_t n_read; ssize_t n_read;
start: start:
@ -1776,47 +1775,37 @@ backend_ws_on_fd_ready (EV_P_ ev_io *handle, int revents)
(void) revents; (void) revents;
struct ws_context *self = handle->data; struct ws_context *self = handle->data;
uint8_t buf[BUFSIZ];
size_t n_read;
enum ws_read_result (*fill_buffer)(struct ws_context *, void *, size_t *) restart:
= self->ssl n_read = sizeof buf;
? backend_ws_fill_read_buffer_tls
: backend_ws_fill_read_buffer;
bool close_connection = false;
uint8_t buf[8192]; // Try to read some data in a non-blocking manner
while (true) (void) set_blocking (self->server_fd, false);
enum ws_read_result result = self->ssl
? backend_ws_fill_read_buffer_tls (self, buf, &n_read)
: backend_ws_fill_read_buffer (self, buf, &n_read);
(void) set_blocking (self->server_fd, true);
switch (result)
{ {
// Try to read some data in a non-blocking manner case WS_READ_AGAIN:
size_t n_read = sizeof buf; return;
(void) set_blocking (self->server_fd, false); case WS_READ_ERROR:
enum ws_read_result result = fill_buffer (self, buf, &n_read); print_error ("reading from the server failed");
(void) set_blocking (self->server_fd, true); break;
case WS_READ_EOF:
print_status ("the server closed the connection");
break;
case WS_READ_OK:
if (backend_ws_on_data (self, buf, n_read))
goto restart;
switch (result) // XXX: maybe we should wait until we receive an EOF
{
case WS_READ_AGAIN:
goto end;
case WS_READ_ERROR:
print_error ("reading from the server failed");
close_connection = true;
goto end;
case WS_READ_EOF:
print_status ("the server closed the connection");
close_connection = true;
goto end;
case WS_READ_OK:
if (backend_ws_on_data (self, buf, n_read))
break;
// XXX: maybe we should wait until we receive an EOF
close_connection = true;
goto end;
}
} }
end: backend_ws_close_connection (self);
if (close_connection)
backend_ws_close_connection (self);
} }
static bool static bool