src/server/proxy/httpclient.h

changeset 698
fea7c3d74cc6
parent 694
a5aa94800b59
child 700
658f4c02b4c5
--- a/src/server/proxy/httpclient.h	Sun Feb 22 10:05:37 2026 +0100
+++ b/src/server/proxy/httpclient.h	Sun Feb 22 11:18:47 2026 +0100
@@ -110,6 +110,26 @@
     void *response_body_write_userdata;
     
     /*
+     * Websocket write callback function
+     * 
+     * ssize_t ws_write(HttpClient *client, void *buf, size_t size, void *userdata)
+     * 
+     * Return: number of processed bytes,
+     *         HTTP_CLIENT_CALLBACK_WOULD_BLOCK or HTTP_CLIENT_CALLBACK_ERROR.
+     */
+    ssize_t (*ws_write)(HttpClient *, void *, size_t, void *);
+    void *ws_write_userdata;
+    
+    /*
+     * Websocket message IO available
+     * 
+     * This function is called, when client->socketfd is ready to accept
+     * new messages (http_client_add_message) 
+     */
+    int (*ws_msg_ready)(HttpClient *, void *);
+    void *ws_msg_ready_userdata;
+    
+    /*
      * Response finished callback
      * 
      * After this callback, the client object is no longer used. The callback
@@ -125,17 +145,25 @@
     HttpParser *parser;
     netbuf buffer;
     
+    // transfer_buffer: buffer for sending data to socketfd
     char *transfer_buffer;
     size_t transfer_buffer_alloc;
     size_t transfer_buffer_len;
     size_t transfer_buffer_pos;
     
+    // transfer2_buffer: buffer for response_body_write or ws_write
+    char *transfer2_buffer;
+    size_t transfer2_buffer_alloc;
+    size_t transfer2_buffer_len;
+    size_t transfer2_buffer_pos;
+    
     size_t req_contentlength_pos;
     
-    int stage; // 0: request, 1: response
+    int stage; // 0: request, 1: response, 2: websocket
     int request_body_complete;
     int request_body_terminated;
     int response_header_complete;
+    int keep_alive;
     
     Event event;
 };
@@ -180,8 +208,24 @@
  */
 int http_client_enable_chunked_transfer_encoding(HttpClient *client);
 
+/*
+ * Start request processing
+ */
 int http_client_start(HttpClient *client);
 
+/*
+ * Handle HttpClient IO and process the request/response
+ */
+int http_client_process(HttpClient *client);
+
+/*
+ * Adds message data, that will be sent to client->socketfd. This function
+ * should only be called when processing websockets.
+ */
+int http_client_add_message(HttpClient *client, const void *buf, size_t size);
+
+size_t http_client_message_buf_size_available(HttpClient *client);
+
 
 void http_client_add_tests(CxTestSuite *suite);
 

mercurial