--- a/src/server/proxy/httpclient.c Thu Feb 12 16:02:09 2026 +0100 +++ b/src/server/proxy/httpclient.c Fri Feb 13 12:16:09 2026 +0100 @@ -29,6 +29,8 @@ #include "httpclient.h" #include <cx/buffer.h> +#include <stdlib.h> +#include <string.h> static int client_connected(EventHandler *ev, Event *event); @@ -56,6 +58,15 @@ return client; } +void http_client_free(HttpClient *client) { + cxMempoolFree(client->mp); + header_array_free(client->request_headers); + free(client->addr); + free(client->method); + free(client->uri); + free(client); +} + int http_client_set_addr(HttpClient *client, const struct sockaddr *addr, socklen_t addrlen) { free(client->addr); client->addr = NULL; @@ -72,6 +83,39 @@ return 0; } +int http_client_set_method(HttpClient *client, const char *method) { + return http_client_set_method_len(client, method, method ? strlen(method) : 0); +} + +int http_client_set_uri(HttpClient *client, const char *uri) { + return http_client_set_uri_len(client, uri, uri ? strlen(uri) : 0); +} + +static int client_set_str(char **ptr, const char *str, size_t len) { + free(*ptr); + if(str) { + char *newvalue = malloc(len+1); + if(!newvalue) { + *ptr = NULL; + return 1; + } + memcpy(newvalue, str, len); + newvalue[len] = 0; + *ptr = newvalue; + } else { + *ptr = NULL; + return 0; + } +} + +int http_client_set_method_len(HttpClient *client, const char *method, size_t len) { + return client_set_str(&client->method, method, len); +} + +int http_client_set_uri_len(HttpClient *client, const char *uri, size_t len) { + return client_set_str(&client->uri, uri, len); +} + int http_client_add_request_header(HttpClient *client, cxmutstr name, cxmutstr value) { return header_array_add(client->request_headers, name, value); } @@ -113,7 +157,7 @@ if(ret) { close(socketfd); } - return 1; + return ret; } static int create_req_buffer(HttpClient *client) {