diff --git a/chttp.c b/chttp.c index a5d0bf8..b98405a 100644 --- a/chttp.c +++ b/chttp.c @@ -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); +bool socket_pool_secure(SocketPool *pool, SocketHandle handle); + #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)) return 0; + req->secure = false; + if (0) {} 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; @@ -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 return -1; - if (s->cur == s->len || s->src[s->cur] != ' ') - return -1; - s->cur++; - { Scanner s2 = *s; 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); } +bool socket_pool_secure(SocketPool *pool, SocketHandle handle) +{ + return socket_secure(&pool->socks[handle]); +} + //////////////////////////////////////////////////////////////////////////////////////// // src/client.c //////////////////////////////////////////////////////////////////////////////////////// @@ -4840,6 +4845,8 @@ int http_server_wait(HTTP_Server *server, HTTP_Request **req, HTTP_ResponseBuild server->ready_count--; *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 }; return 0; } diff --git a/chttp.h b/chttp.h index 9c5c144..fb6bfb9 100644 --- a/chttp.h +++ b/chttp.h @@ -162,6 +162,7 @@ typedef struct { } HTTP_Header; typedef struct { + bool secure; HTTP_Method method; HTTP_URL url; int minor; diff --git a/src/parse.c b/src/parse.c index c9daea2..6d5435f 100644 --- a/src/parse.c +++ b/src/parse.c @@ -1003,6 +1003,8 @@ static int parse_request(Scanner *s, HTTP_Request *req) if (!contains_head(s->src + s->cur, s->len - s->cur)) return 0; + req->secure = false; + if (0) {} 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; @@ -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 return -1; - if (s->cur == s->len || s->src[s->cur] != ' ') - return -1; - s->cur++; - { Scanner s2 = *s; int peek = s->cur; diff --git a/src/parse.h b/src/parse.h index e1e746c..95b730a 100644 --- a/src/parse.h +++ b/src/parse.h @@ -65,6 +65,7 @@ typedef struct { } HTTP_Header; typedef struct { + bool secure; HTTP_Method method; HTTP_URL url; int minor; diff --git a/src/server.c b/src/server.c index 51bd369..6fc0fce 100644 --- a/src/server.c +++ b/src/server.c @@ -196,6 +196,8 @@ int http_server_wait(HTTP_Server *server, HTTP_Request **req, HTTP_ResponseBuild server->ready_count--; *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 }; return 0; } diff --git a/src/socket_pool.c b/src/socket_pool.c index c37fb5a..d61ded8 100644 --- a/src/socket_pool.c +++ b/src/socket_pool.c @@ -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) { return socket_write(&pool->socks[handle], src, len); +} + +bool socket_pool_secure(SocketPool *pool, SocketHandle handle) +{ + return socket_secure(&pool->socks[handle]); } \ No newline at end of file diff --git a/src/socket_pool.h b/src/socket_pool.h index 7da7d03..a365aa1 100644 --- a/src/socket_pool.h +++ b/src/socket_pool.h @@ -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); +bool socket_pool_secure(SocketPool *pool, SocketHandle handle); + #endif // SOCKET_POOL_INCLUDED \ No newline at end of file