src/server/safs/proxy.c

changeset 694
a5aa94800b59
parent 675
edacba8beedb
equal deleted inserted replaced
693:b26cae13b79a 694:a5aa94800b59
164 static ssize_t proxy_response_write(HttpClient *client, void *buf, size_t nbytes, void *userdata) { 164 static ssize_t proxy_response_write(HttpClient *client, void *buf, size_t nbytes, void *userdata) {
165 ProxyRequest *proxy = userdata; 165 ProxyRequest *proxy = userdata;
166 ssize_t ret = net_write(proxy->sn->csd, buf, nbytes); 166 ssize_t ret = net_write(proxy->sn->csd, buf, nbytes);
167 // TODO: handle errors 167 // TODO: handle errors
168 return ret; 168 return ret;
169 }
170
171 static void proxy_request_finished(HttpClient *client, void *userdata) {
172 ProxyRequest *proxy = userdata;
173 net_setnonblock(proxy->sn->csd, 0);
174 nsapi_saf_return(proxy->sn, proxy->rq, REQ_PROCEED);
169 } 175 }
170 176
171 int http_reverse_proxy_service(pblock *param, Session *sn, Request *rq) { 177 int http_reverse_proxy_service(pblock *param, Session *sn, Request *rq) {
172 EventHandler *ev = sn->ev; 178 EventHandler *ev = sn->ev;
173 const char *method = pblock_findkeyval(pb_key_method, rq->reqpb); 179 const char *method = pblock_findkeyval(pb_key_method, rq->reqpb);
272 client->request_body_read_userdata = proxy; 278 client->request_body_read_userdata = proxy;
273 client->response_start = proxy_response_start; 279 client->response_start = proxy_response_start;
274 client->response_start_userdata = proxy; 280 client->response_start_userdata = proxy;
275 client->response_body_write = proxy_response_write; 281 client->response_body_write = proxy_response_write;
276 client->response_body_write_userdata = proxy; 282 client->response_body_write_userdata = proxy;
277 283 client->response_finished = proxy_request_finished;
278 //net_setnonblock(sn->csd, 1); 284 client->response_finished_userdata = proxy;
285
286 net_setnonblock(sn->csd, 1);
279 if(http_client_start(client)) { 287 if(http_client_start(client)) {
280 //net_setnonblock(sn->csd, 0); 288 net_setnonblock(sn->csd, 0);
281 http_client_free(client); 289 http_client_free(client);
282 return REQ_ABORTED; 290 return REQ_ABORTED;
283 } 291 }
284 292
285 return REQ_PROCESSING; 293 return REQ_PROCESSING;

mercurial