src/server/safs/proxy.c

changeset 733
66bde992ebd0
parent 732
2aeaf6f32861
child 735
902b417ab6d2
equal deleted inserted replaced
732:2aeaf6f32861 733:66bde992ebd0
142 static void proxy_response_finished(HttpClient *client, void *userdata) { 142 static void proxy_response_finished(HttpClient *client, void *userdata) {
143 ProxyRequest *proxy = userdata; 143 ProxyRequest *proxy = userdata;
144 144
145 log_ereport(LOG_INFORM, "proxy_response_finished: %s", client->uri); 145 log_ereport(LOG_INFORM, "proxy_response_finished: %s", client->uri);
146 146
147 int ret = REQ_PROCEED; 147 int ret = proxy->client->error == 0 ? REQ_PROCEED : REQ_ABORTED;
148 if(!proxy->response_started) { 148 if(!proxy->response_started) {
149 protocol_status(proxy->sn, proxy->rq, 502, NULL); 149 protocol_status(proxy->sn, proxy->rq, 502, NULL);
150 ret = REQ_ABORTED; 150 ret = REQ_ABORTED;
151 } 151 }
152 152
211 } 211 }
212 212
213 static ssize_t proxy_response_write(HttpClient *client, void *buf, size_t nbytes, void *userdata) { 213 static ssize_t proxy_response_write(HttpClient *client, void *buf, size_t nbytes, void *userdata) {
214 ProxyRequest *proxy = userdata; 214 ProxyRequest *proxy = userdata;
215 ssize_t ret = net_write(proxy->sn->csd, buf, nbytes); 215 ssize_t ret = net_write(proxy->sn->csd, buf, nbytes);
216 if(ret == 0) {
217 log_ereport(LOG_FAILURE, "proxy_response_write ret 0 wtf");
218 }
219
216 if(ret < 0) { 220 if(ret < 0) {
217 IOStream *st = proxy->sn->csd; 221 IOStream *st = proxy->sn->csd;
218 if(st->io_errno == EWOULDBLOCK) { 222 if(st->io_errno == EWOULDBLOCK) {
219 log_ereport(LOG_INFORM, "proxy_response_write would block"); 223 log_ereport(LOG_INFORM, "proxy_response_write would block");
220 // Is there already an poll event for csd? 224 // Is there already an poll event for csd?
243 proxy_unref(proxy); 247 proxy_unref(proxy);
244 log_ereport(LOG_FAILURE, "proxy_response_write: cannot add write poll"); 248 log_ereport(LOG_FAILURE, "proxy_response_write: cannot add write poll");
245 } 249 }
246 return HTTP_CLIENT_CALLBACK_WOULD_BLOCK; 250 return HTTP_CLIENT_CALLBACK_WOULD_BLOCK;
247 } else { 251 } else {
248 log_ereport(LOG_FAILURE, "proxy_response_write failed: %s", strerror(st->io_errno)); 252 log_ereport(LOG_FAILURE, "proxy_response_write failed: ret: %d: %s", (int)ret, strerror(st->io_errno));
253 proxy->rq->rq_attr.keep_alive = 0;
249 return HTTP_CLIENT_CALLBACK_ERROR; 254 return HTTP_CLIENT_CALLBACK_ERROR;
250 } 255 }
251 } 256 }
252 return ret; 257 return ret;
253 } 258 }

mercurial