Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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);
}