src/server/proxy/httpclient.c

changeset 720
8c7d08d3be2e
parent 719
c4c2b8e8ddc5
child 722
12fb6b33418c
equal deleted inserted replaced
719:c4c2b8e8ddc5 720:8c7d08d3be2e
241 } 241 }
242 return ret; 242 return ret;
243 } 243 }
244 244
245 int http_client_process(HttpClient *client, Event *event) { 245 int http_client_process(HttpClient *client, Event *event) {
246 int ret = client_process(client, event); 246 int ret = client->stage != 2 ? client_process(client, event) : client_ws_process(client, event);
247 if(ret && client->error == 0 && client->event.fn == NULL) { 247 if(ret && client->error == 0 && client->event.fn == NULL) {
248 if(client_start_poll(client)) { 248 if(client_start_poll(client)) {
249 client->error = 1; 249 client->error = 1;
250 } 250 }
251 } 251 }
427 if(client->error) { 427 if(client->error) {
428 return 0; 428 return 0;
429 } 429 }
430 // readiness notification 430 // readiness notification
431 if(ret == 0) { 431 if(ret == 0) {
432 client->transfer_buffer_pos = 0;
433 client->transfer_buffer_len = 0;
432 if(client->ws_msg_ready && client->ws_msg_ready(client, client->ws_msg_ready_userdata)) { 434 if(client->ws_msg_ready && client->ws_msg_ready(client, client->ws_msg_ready_userdata)) {
433 return 0; 435 return 0;
434 } 436 }
435 client->transfer_buffer_pos = 0; 437
436 client->transfer_buffer_len = 0; 438 if(client->transfer_buffer_pos < client->transfer_buffer_len) {
439 // ws_msg_ready has added data to the transfer buffer -> flush buffer again
440 if(client_send_buf(client) && client->error) {
441 return 0;
442 }
443 }
437 } 444 }
438 445
439 // flush transfer2 buffer 446 // flush transfer2 buffer
440 if(client_ws_write(client)) { 447 if(client_ws_write(client)) {
441 return 1; 448 return 1;
480 } 487 }
481 488
482 // sends the content of the transfer buffer to client->socketfd 489 // sends the content of the transfer buffer to client->socketfd
483 static int client_send_buf(HttpClient *client) { 490 static int client_send_buf(HttpClient *client) {
484 size_t nbytes = client->transfer_buffer_len - client->transfer_buffer_pos; 491 size_t nbytes = client->transfer_buffer_len - client->transfer_buffer_pos;
492 if(nbytes == 0) {
493 return 0;
494 }
495 //printf("reqbuf:\n\n%.*s\n\n", (int)nbytes, client->transfer_buffer + client->transfer_buffer_pos);
485 ssize_t w; 496 ssize_t w;
486 while((w = write(client->socketfd, client->transfer_buffer + client->transfer_buffer_pos, nbytes)) > 0) { 497 while((w = write(client->socketfd, client->transfer_buffer + client->transfer_buffer_pos, nbytes)) > 0) {
487 client->transfer_buffer_pos += w; 498 client->transfer_buffer_pos += w;
488 nbytes = client->transfer_buffer_len - client->transfer_buffer_pos; 499 nbytes = client->transfer_buffer_len - client->transfer_buffer_pos;
489 if(nbytes == 0) { 500 if(nbytes == 0) {

mercurial