aboutsummaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
authorOmar Polo <op@omarpolo.com>2021-10-15 07:46:30 +0000
committerOmar Polo <op@omarpolo.com>2021-10-15 07:46:30 +0000
commit80444938654389aa7970aaa43c4590d63da6844d (patch)
treef7b03f45a7fb7b510de1f5d5f55705f349d72042 /server.c
parent33c4c3a5ba6331d7140be52dc3a4612abc07694d (diff)
move bufferevent initialization early in handle_handshake
the error path needs an initialized bufferevent too, otherwise it'll crash when trying to write the response. This moves the initialisation early, right after the tls_handshake. Another option would be to initialise it in do_accept, but that may be too early.
Diffstat (limited to 'server.c')
-rw-r--r--server.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/server.c b/server.c
index cac53ee..9bd17a3 100644
--- a/server.c
+++ b/server.c
@@ -468,6 +468,22 @@ handle_handshake(int fd, short ev, void *d)
abort();
}
+ c->bev = bufferevent_new(fd, client_read, client_write,
+ client_error, c);
+ if (c->bev == NULL)
+ fatal("%s: failed to allocate client buffer: %s",
+ __func__, strerror(errno));
+
+ event_set(&c->bev->ev_read, c->fd, EV_READ,
+ client_tls_readcb, c->bev);
+ event_set(&c->bev->ev_write, c->fd, EV_WRITE,
+ client_tls_writecb, c->bev);
+
+#if HAVE_LIBEVENT2
+ evbuffer_unfreeze(c->bev->input, 0);
+ evbuffer_unfreeze(c->bev->output, 1);
+#endif
+
if ((servname = tls_conn_servername(c->ctx)) == NULL) {
log_debug(c, "handshake: missing SNI");
goto err;
@@ -495,25 +511,7 @@ found:
if (h != NULL) {
c->host = h;
-
- c->bev = bufferevent_new(fd, client_read, client_write,
- client_error, c);
- if (c->bev == NULL)
- fatal("%s: failed to allocate client buffer: %s",
- __func__, strerror(errno));
-
- event_set(&c->bev->ev_read, c->fd, EV_READ,
- client_tls_readcb, c->bev);
- event_set(&c->bev->ev_write, c->fd, EV_WRITE,
- client_tls_writecb, c->bev);
-
-#if HAVE_LIBEVENT2
- evbuffer_unfreeze(c->bev->input, 0);
- evbuffer_unfreeze(c->bev->output, 1);
-#endif
-
bufferevent_enable(c->bev, EV_READ);
-
return;
}