Add secure field to HTTP_Request to mark whether the underlying connection uses TLS or not

This commit is contained in:
2025-09-18 09:19:38 +02:00
parent a63e68f969
commit b1021deb15
7 changed files with 24 additions and 8 deletions
+11 -4
View File
@@ -245,6 +245,8 @@ int socket_pool_read(SocketPool *pool, SocketHandle handle, char *dst, int len);
int socket_pool_write(SocketPool *pool, SocketHandle handle, char *src, int len); int socket_pool_write(SocketPool *pool, SocketHandle handle, char *src, int len);
bool socket_pool_secure(SocketPool *pool, SocketHandle handle);
#endif // SOCKET_POOL_INCLUDED #endif // SOCKET_POOL_INCLUDED
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
@@ -1366,6 +1368,8 @@ static int parse_request(Scanner *s, HTTP_Request *req)
if (!contains_head(s->src + s->cur, s->len - s->cur)) if (!contains_head(s->src + s->cur, s->len - s->cur))
return 0; return 0;
req->secure = false;
if (0) {} if (0) {}
else if (consume_str(s, HTTP_STR("GET "))) req->method = HTTP_METHOD_GET; else if (consume_str(s, HTTP_STR("GET "))) req->method = HTTP_METHOD_GET;
else if (consume_str(s, HTTP_STR("POST "))) req->method = HTTP_METHOD_POST; else if (consume_str(s, HTTP_STR("POST "))) req->method = HTTP_METHOD_POST;
@@ -1378,10 +1382,6 @@ static int parse_request(Scanner *s, HTTP_Request *req)
else if (consume_str(s, HTTP_STR("PATCH "))) req->method = HTTP_METHOD_PATCH; else if (consume_str(s, HTTP_STR("PATCH "))) req->method = HTTP_METHOD_PATCH;
else return -1; else return -1;
if (s->cur == s->len || s->src[s->cur] != ' ')
return -1;
s->cur++;
{ {
Scanner s2 = *s; Scanner s2 = *s;
int peek = s->cur; int peek = s->cur;
@@ -4178,6 +4178,11 @@ int socket_pool_write(SocketPool *pool, SocketHandle handle, char *src, int len)
return socket_write(&pool->socks[handle], src, len); return socket_write(&pool->socks[handle], src, len);
} }
bool socket_pool_secure(SocketPool *pool, SocketHandle handle)
{
return socket_secure(&pool->socks[handle]);
}
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
// src/client.c // src/client.c
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
@@ -4840,6 +4845,8 @@ int http_server_wait(HTTP_Server *server, HTTP_Request **req, HTTP_ResponseBuild
server->ready_count--; server->ready_count--;
*req = http_engine_getreq(&server->conns[index].engine); *req = http_engine_getreq(&server->conns[index].engine);
(*req)->secure = socket_pool_secure(server->socket_pool, server->conns[index].sock);
*builder = (HTTP_ResponseBuilder) { server, index, server->conns[index].gen }; *builder = (HTTP_ResponseBuilder) { server, index, server->conns[index].gen };
return 0; return 0;
} }
+1
View File
@@ -162,6 +162,7 @@ typedef struct {
} HTTP_Header; } HTTP_Header;
typedef struct { typedef struct {
bool secure;
HTTP_Method method; HTTP_Method method;
HTTP_URL url; HTTP_URL url;
int minor; int minor;
+2 -4
View File
@@ -1003,6 +1003,8 @@ static int parse_request(Scanner *s, HTTP_Request *req)
if (!contains_head(s->src + s->cur, s->len - s->cur)) if (!contains_head(s->src + s->cur, s->len - s->cur))
return 0; return 0;
req->secure = false;
if (0) {} if (0) {}
else if (consume_str(s, HTTP_STR("GET "))) req->method = HTTP_METHOD_GET; else if (consume_str(s, HTTP_STR("GET "))) req->method = HTTP_METHOD_GET;
else if (consume_str(s, HTTP_STR("POST "))) req->method = HTTP_METHOD_POST; else if (consume_str(s, HTTP_STR("POST "))) req->method = HTTP_METHOD_POST;
@@ -1015,10 +1017,6 @@ static int parse_request(Scanner *s, HTTP_Request *req)
else if (consume_str(s, HTTP_STR("PATCH "))) req->method = HTTP_METHOD_PATCH; else if (consume_str(s, HTTP_STR("PATCH "))) req->method = HTTP_METHOD_PATCH;
else return -1; else return -1;
if (s->cur == s->len || s->src[s->cur] != ' ')
return -1;
s->cur++;
{ {
Scanner s2 = *s; Scanner s2 = *s;
int peek = s->cur; int peek = s->cur;
+1
View File
@@ -65,6 +65,7 @@ typedef struct {
} HTTP_Header; } HTTP_Header;
typedef struct { typedef struct {
bool secure;
HTTP_Method method; HTTP_Method method;
HTTP_URL url; HTTP_URL url;
int minor; int minor;
+2
View File
@@ -196,6 +196,8 @@ int http_server_wait(HTTP_Server *server, HTTP_Request **req, HTTP_ResponseBuild
server->ready_count--; server->ready_count--;
*req = http_engine_getreq(&server->conns[index].engine); *req = http_engine_getreq(&server->conns[index].engine);
(*req)->secure = socket_pool_secure(server->socket_pool, server->conns[index].sock);
*builder = (HTTP_ResponseBuilder) { server, index, server->conns[index].gen }; *builder = (HTTP_ResponseBuilder) { server, index, server->conns[index].gen };
return 0; return 0;
} }
+5
View File
@@ -349,4 +349,9 @@ int socket_pool_read(SocketPool *pool, SocketHandle handle, char *dst, int len)
int socket_pool_write(SocketPool *pool, SocketHandle handle, char *src, int len) int socket_pool_write(SocketPool *pool, SocketHandle handle, char *src, int len)
{ {
return socket_write(&pool->socks[handle], src, len); return socket_write(&pool->socks[handle], src, len);
}
bool socket_pool_secure(SocketPool *pool, SocketHandle handle)
{
return socket_secure(&pool->socks[handle]);
} }
+2
View File
@@ -55,4 +55,6 @@ int socket_pool_read(SocketPool *pool, SocketHandle handle, char *dst, int len);
int socket_pool_write(SocketPool *pool, SocketHandle handle, char *src, int len); int socket_pool_write(SocketPool *pool, SocketHandle handle, char *src, int len);
bool socket_pool_secure(SocketPool *pool, SocketHandle handle);
#endif // SOCKET_POOL_INCLUDED #endif // SOCKET_POOL_INCLUDED