fix proxy nsapi saf response in case the httpclient returned with an error default tip

Mon, 16 Mar 2026 19:44:18 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 16 Mar 2026 19:44:18 +0100
changeset 733
66bde992ebd0
parent 732
2aeaf6f32861

fix proxy nsapi saf response in case the httpclient returned with an error

src/server/safs/proxy.c file | annotate | diff | comparison | revisions
--- a/src/server/safs/proxy.c	Sat Mar 14 13:36:39 2026 +0100
+++ b/src/server/safs/proxy.c	Mon Mar 16 19:44:18 2026 +0100
@@ -144,7 +144,7 @@
     
     log_ereport(LOG_INFORM, "proxy_response_finished: %s", client->uri);
     
-    int ret = REQ_PROCEED;
+    int ret = proxy->client->error == 0 ? REQ_PROCEED : REQ_ABORTED;
     if(!proxy->response_started) {
         protocol_status(proxy->sn, proxy->rq, 502, NULL);
         ret = REQ_ABORTED;
@@ -213,6 +213,10 @@
 static ssize_t proxy_response_write(HttpClient *client, void *buf, size_t nbytes, void *userdata) {
     ProxyRequest *proxy = userdata;
     ssize_t ret = net_write(proxy->sn->csd, buf, nbytes);
+    if(ret == 0) {
+        log_ereport(LOG_FAILURE, "proxy_response_write ret 0 wtf");
+    }
+    
     if(ret < 0) {
         IOStream *st = proxy->sn->csd;
         if(st->io_errno == EWOULDBLOCK) {
@@ -245,7 +249,8 @@
             }
             return HTTP_CLIENT_CALLBACK_WOULD_BLOCK;
         } else {
-            log_ereport(LOG_FAILURE, "proxy_response_write failed: %s", strerror(st->io_errno));
+            log_ereport(LOG_FAILURE, "proxy_response_write failed: ret: %d: %s", (int)ret, strerror(st->io_errno));
+            proxy->rq->rq_attr.keep_alive = 0;
             return HTTP_CLIENT_CALLBACK_ERROR;
         }
     }

mercurial