--- a/src/server/proxy/httpclient.h Fri Feb 06 15:57:37 2026 +0100 +++ b/src/server/proxy/httpclient.h Fri Feb 06 17:07:58 2026 +0100 @@ -30,12 +30,87 @@ #define PROXY_HTTPCLIENT_H #include "../public/nsapi.h" +#include "../daemon/httpparser.h" + +#include <sys/socket.h> +#include <cx/string.h> +#include <cx/mempool.h> #ifdef __cplusplus extern "C" { #endif +typedef struct HttpClient HttpClient; +struct HttpClient { + EventHandler *ev; + CxMempool *mp; + char *uri; + + struct sockaddr *addr; + size_t addrlen; + + HeaderArray *request_headers; + HeaderArray *response_headers; + + /* + * Request body callback function + * + * size_t request_body_read(HttpClient *client, void *buf, size_t size, void *userdata) + */ + // TODO: fix, doesn't work this way + //size_t (*request_body_read)(HttpClient *, void *, size_t, void *); + //void *request_body_read_userdata; + + /* + * Response start callback function + * + * int response_start(HttpClient *client, int status, char *message, void *userdata) + */ + int (*response_start)(HttpClient *, int, char *, void *); + void *response_start_userdata; + + /* + * Response body write function + * + * int response_body_write(HttpClient *client, void *buf, size_t size, void *userdata) + */ + int (*response_body_write)(HttpClient *, void *, size_t, void *); + void *response_body_write_userdata; + + /* + * Response finished callback + * + * void response_finished(HttpClient *client, int error, void *userdata) + */ + void (*response_finished)(HttpClient *, int, void *); + void *response_finished_userdata; + + + // internals + + Event out_event; + Event in_event; +}; +HttpClient* http_client_new(EventHandler *ev); + +int http_client_set_addr(HttpClient *client, const struct sockaddr *addr, socklen_t addrlen); + +/* + * Adds a request header + * + * This function does not create a copy of name/value. The string pointers must + * be valid for the lifetime of the HttpClient. + */ +int http_client_add_request_header(HttpClient *client, cxmutstr name, cxmutstr value); + +/* + * Adds a request header + * + * This functions creates a copy of name/value and the original pointers can be + * discarded after the function returns. + */ +int http_client_add_request_header_copy(HttpClient *client, cxstring name, cxstring value); #ifdef __cplusplus