summaryrefslogtreecommitdiffstats
path: root/src/server.c
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2020-09-26 16:10:10 -0400
committerDrew DeVault <sir@cmpwn.com>2020-09-26 16:10:10 -0400
commit50d21c03f5b02254d8eb0953bd5e635813cfe1c1 (patch)
tree9a6ca3851fdf22c68a5e14eecb0052c83409ff1a /src/server.c
parente9641dbf1ec871d8ab367b4f4655278caeecf621 (diff)
downloadgmnisrv-50d21c03f5b02254d8eb0953bd5e635813cfe1c1.tar.gz
gmnisrv-50d21c03f5b02254d8eb0953bd5e635813cfe1c1.tar.xz
gmnisrv-50d21c03f5b02254d8eb0953bd5e635813cfe1c1.zip
Free up resources throughout
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/server.c b/src/server.c
index eb5f9f7..958ad64 100644
--- a/src/server.c
+++ b/src/server.c
@@ -210,7 +210,7 @@ disconnect_client(struct gmnisrv_server *server, struct gmnisrv_client *client)
static int
client_init_ssl(struct gmnisrv_server *server, struct gmnisrv_client *client)
{
- client->ssl = gmnisrv_tls_get_ssl(server->conf, client->sockfd);
+ client->ssl = tls_get_ssl(server->conf, client->sockfd);
if (!client->ssl) {
client_error(&client->addr,
"unable to initialize SSL, disconnecting");
@@ -377,6 +377,10 @@ sni_callback(SSL *ssl, int *al, void *arg)
const char *hostname = SSL_get_servername(client->ssl,
SSL_get_servername_type(client->ssl));
+ if (!hostname) {
+ return SSL_TLSEXT_ERR_NOACK;
+ }
+
struct gmnisrv_host *host = gmnisrv_config_get_host(
server->conf, hostname);
if (!host) {
@@ -384,7 +388,7 @@ sni_callback(SSL *ssl, int *al, void *arg)
}
client->host = host;
- gmnisrv_tls_set_host(client->ssl, client->host);
+ tls_set_host(client->ssl, client->host);
return SSL_TLSEXT_ERR_OK;
}
@@ -461,6 +465,12 @@ server_run(struct gmnisrv_server *server)
void
server_finish(struct gmnisrv_server *server)
{
- // TODO
- (void)server;
+ while (server->nclients) {
+ disconnect_client(server, &server->clients[0]);
+ }
+ for (size_t i = 0; i < server->nfds; ++i) {
+ close(server->fds[i].fd);
+ }
+ free(server->fds);
+ free(server->clients);
}