WebSocket: some clean-up
This commit is contained in:
parent
2b8f52ac72
commit
efc663a178
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue