diff --git a/src/client.c b/src/client.c index 654b13b0..3e07d0e7 100644 --- a/src/client.c +++ b/src/client.c @@ -103,6 +103,22 @@ static inline void client_reuseconnection(client_t *client) { con = connection_create(con->sock, con->serversock, strdup(con->ip)); reuse = client->reuse; client->con->sock = -1; /* TODO: do not use magic */ + + /* handle to keep the TLS connection */ +#ifdef HAVE_OPENSSL + if (client->con->ssl) { + /* AHhhggrr.. That pain.... + * stealing SSL state... + */ + con->ssl = client->con->ssl; + con->read = client->con->read; + con->send = client->con->send; + client->con->ssl = NULL; + client->con->read = NULL; + client->con->send = NULL; + } +#endif + client->reuse = ICECAST_REUSE_CLOSE; client_destroy(client); diff --git a/src/connection.c b/src/connection.c index 6110f8e7..c868feeb 100644 --- a/src/connection.c +++ b/src/connection.c @@ -410,6 +410,9 @@ connection_t *connection_create (sock_t sock, sock_t serversock, char *ip) void connection_uses_ssl(connection_t *con) { #ifdef HAVE_OPENSSL + if (con->ssl) + return; + con->read = connection_read_ssl; con->send = connection_send_ssl; con->ssl = SSL_new(ssl_ctx);