static void tcp_recv(uv_stream_t *handle, ssize_t nread, const uv_buf_t *buf)
{
- uv_loop_t *loop = handle->loop;
struct session *s = handle->data;
-
assert(s && session_get_handle(s) == (uv_handle_t *)handle &&
handle->type == UV_TCP);
return;
}
- struct worker_ctx *worker = loop->data;
-
if (nread < 0 || !buf->base) {
if (kr_verbose_status) {
struct sockaddr *peer = session_get_peer(s);
worker_end_tcp(s);
}
session_wirebuf_compress(s);
+ struct worker_ctx *worker = handle->loop->data;
mp_flush(worker->pkt_pool.ctx);
}
return session->wire_buf;
}
-size_t session_wirebuf_get_len(struct session *session)
-{
- return session->wire_buf_end_idx;
-}
-
size_t session_wirebuf_get_size(struct session *session)
{
return session->wire_buf_size;
uint8_t *session_wirebuf_get_start(struct session *session);
/** Get size of session wirebuffer. */
size_t session_wirebuf_get_size(struct session *session);
-/** Get length of data in the session wirebuffer. */
-size_t session_wirebuf_get_len(struct session *session);
/** Get pointer to the beginning of free space in session wirebuffer. */
uint8_t *session_wirebuf_get_free_start(struct session *session);
/** Get amount of free space in session wirebuffer. */
}
assert(tls_p->session == s);
- assert(tls_p->recv_buf == buf && nread <= sizeof(tls_p->recv_buf));
+ const bool ok = tls_p->recv_buf == buf && nread <= sizeof(tls_p->recv_buf);
+ if (!ok) {
+ assert(false);
+ /* don't risk overflowing the buffer if we have a mistake somewhere */
+ return kr_error(EINVAL);
+ }
const char *logstring = tls_p->client_side ? client_logstring : server_logstring;