Sat, 21 Feb 2026 21:52:08 +0100
implement proxy request finish callback
--- a/src/server/proxy/httpclient.c Sat Feb 21 19:36:15 2026 +0100 +++ b/src/server/proxy/httpclient.c Sat Feb 21 21:52:08 2026 +0100 @@ -195,14 +195,15 @@ client->socketfd = socketfd; - client->writeev.cookie = client; - client->writeev.fn = client_connected; + client->event.cookie = client; + client->event.fn = client_connected; + client->event.finish = client_finished; int ret = 1; if(connect(socketfd, client->addr, client->addrlen)) { int err = errno; if(err == EINPROGRESS) { - ret = ev_pollout(client->ev, socketfd, &client->writeev); + ret = ev_pollout(client->ev, socketfd, &client->event); } else { log_ereport(LOG_FAILURE, "http-client-start: connect failed: %s", strerror(err)); }
--- a/src/server/proxy/httpclient.h Sat Feb 21 19:36:15 2026 +0100 +++ b/src/server/proxy/httpclient.h Sat Feb 21 21:52:08 2026 +0100 @@ -137,8 +137,7 @@ int request_body_terminated; int response_header_complete; - Event readev; - Event writeev; + Event event; }; HttpClient* http_client_new(EventHandler *ev);
--- a/src/server/safs/proxy.c Sat Feb 21 19:36:15 2026 +0100 +++ b/src/server/safs/proxy.c Sat Feb 21 21:52:08 2026 +0100 @@ -168,6 +168,12 @@ return ret; } +static void proxy_request_finished(HttpClient *client, void *userdata) { + ProxyRequest *proxy = userdata; + net_setnonblock(proxy->sn->csd, 0); + nsapi_saf_return(proxy->sn, proxy->rq, REQ_PROCEED); +} + int http_reverse_proxy_service(pblock *param, Session *sn, Request *rq) { EventHandler *ev = sn->ev; const char *method = pblock_findkeyval(pb_key_method, rq->reqpb); @@ -274,10 +280,12 @@ client->response_start_userdata = proxy; client->response_body_write = proxy_response_write; client->response_body_write_userdata = proxy; + client->response_finished = proxy_request_finished; + client->response_finished_userdata = proxy; - //net_setnonblock(sn->csd, 1); + net_setnonblock(sn->csd, 1); if(http_client_start(client)) { - //net_setnonblock(sn->csd, 0); + net_setnonblock(sn->csd, 0); http_client_free(client); return REQ_ABORTED; }