response_status response_start(client_t *client) { response_status ret ; if(client->status_code == 304){ return write_headers(client, NULL, 0, 0); } if (CheckFileWrapper(client->response)) { DEBUG("use sendfile"); //enable_cork(client); ret = start_response_file(client); if(ret == STATUS_OK){ // sended header ret = process_sendfile(client); } }else{ ret = start_response_write(client); DEBUG("start_response_write status_code %d ret = %d", client->status_code, ret); if(ret == STATUS_OK){ // sended header ret = process_write(client); } } return ret; }
response_status process_body(client_t *client) { response_status ret; write_bucket *bucket; if(client->bucket){ bucket = (write_bucket *)client->bucket; //retry send ret = writev_bucket(bucket); if(ret == STATUS_OK){ client->write_bytes += bucket->total_size; free_write_bucket(bucket); client->bucket = NULL; }else if(ret == STATUS_ERROR){ free_write_bucket(bucket); client->bucket = NULL; return ret; }else{ // return ret; } } if (CheckFileWrapper(client->response)) { ret = process_sendfile(client); }else{ ret = process_write(client); } return ret; }
static inline void process_request(int fd) { int rlen = recv(fd,rbuf,BUF_LEN,0); char path[128]; if(rlen > 0) { rbuf[rlen] = 0; if(http_get_path(rbuf, rlen, path)) { process_sendfile(fd, path); } else { send(fd,sbuf,sbuf_len,0); } } event_free(fd); }