src/server/proxy/httpclient.c

changeset 669
ccdc97fd8204
parent 668
0a7d1e9ca6b8
--- 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) {

mercurial