src/server/proxy/httpclient.h

changeset 665
b8d5b797d090
parent 662
70fdf948b642
child 666
c99e0b352e36
--- 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

mercurial