src/server/proxy/httpclient.c

changeset 720
8c7d08d3be2e
parent 719
c4c2b8e8ddc5
child 722
12fb6b33418c
--- a/src/server/proxy/httpclient.c	Fri Mar 06 18:50:23 2026 +0100
+++ b/src/server/proxy/httpclient.c	Sat Mar 07 15:29:11 2026 +0100
@@ -243,7 +243,7 @@
 }
 
 int http_client_process(HttpClient *client, Event *event) {
-    int ret = client_process(client, event);
+    int ret = client->stage != 2 ? client_process(client, event) : client_ws_process(client, event);
     if(ret && client->error == 0 && client->event.fn == NULL) {
         if(client_start_poll(client)) {
             client->error = 1;
@@ -429,11 +429,18 @@
     }
     // readiness notification
     if(ret == 0) {
+        client->transfer_buffer_pos = 0;
+        client->transfer_buffer_len = 0;
         if(client->ws_msg_ready && client->ws_msg_ready(client, client->ws_msg_ready_userdata)) {
             return 0;
         }
-        client->transfer_buffer_pos = 0;
-        client->transfer_buffer_len = 0;
+        
+        if(client->transfer_buffer_pos < client->transfer_buffer_len) {
+            // ws_msg_ready has added data to the transfer buffer -> flush buffer again
+            if(client_send_buf(client) && client->error) {
+                return 0;
+            }
+        }
     }
     
     // flush transfer2 buffer
@@ -482,6 +489,10 @@
 // sends the content of the transfer buffer to client->socketfd
 static int client_send_buf(HttpClient *client) {
     size_t nbytes = client->transfer_buffer_len - client->transfer_buffer_pos;
+    if(nbytes == 0) {
+        return 0;
+    }
+    //printf("reqbuf:\n\n%.*s\n\n", (int)nbytes, client->transfer_buffer + client->transfer_buffer_pos);
     ssize_t w;
     while((w = write(client->socketfd, client->transfer_buffer + client->transfer_buffer_pos, nbytes)) > 0) {
         client->transfer_buffer_pos += w;

mercurial