From e88c9d1739695ed8172c0eceffdc3d2c6e656403 Mon Sep 17 00:00:00 2001 From: Soikk Date: Thu, 1 Jan 2026 19:49:02 +0100 Subject: Fixed receive_request for HTTPS connections and enabled HTTPS through the config file --- src/net/net.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/net/net.c') diff --git a/src/net/net.c b/src/net/net.c index 39b25e3..3d738ae 100755 --- a/src/net/net.c +++ b/src/net/net.c @@ -98,7 +98,6 @@ int setup_https(http_server *hs, str certfile, str keyfile){ log_error("Missing private key file"); return 1; } - if(hs->ssl != NULL){ SSL_free(hs->ssl); } @@ -192,18 +191,20 @@ static inline int server_read(http_server *hs, str *buf){ } int receive_request(http_server *hs, str *request){ - // SSL_has_pending can return 0 if you havent read any bytes yet (https://stackoverflow.com/questions/6616976/why-does-this-ssl-pending-call-always-return-zero) struct pollfd pfd[1] = { {.fd = hs->csocket, .events = POLLIN } }; while(poll(pfd, 1, 100)){ if(pfd[0].revents & POLLIN){ int rb = 0; if(hs->secure){ - if(SSL_has_pending(hs->ssl)){ + // SSL_has_pending can return 0 if you havent read any bytes yet + // https://stackoverflow.com/questions/6616976/why-does-this-ssl-pending-call-always-return-zero + // so we must perform a read first to advance the state machine + do{ rb = server_read(hs, request); if(rb == 0){ return pleasesslgivemetheerror(SSL_get_error(hs->ssl, rb)); } - } + }while(SSL_has_pending(hs->ssl)); }else{ rb = server_read(hs, request); if(rb == 0){ -- cgit v1.2.3