| 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; |