| 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) { |