Example #1
0
void *request_handler(void *ptr) {
    #ifdef DEBUG
    printf("enter request_handler\n");
    #endif

    int client_fd = ((Thread_Input*)ptr)->client_fd; 
    Request request;
    Response response;
    parse_request_header(client_fd, &request);
    modify_request_header(&request);
    
    if (check_cache(&request, &response)) {
        send_client(client_fd, &response);
    } else {
        if (forward_request(client_fd, &request, &response) < 0) {
            Close(client_fd);
            return NULL;
        } else {
            if (response.content_size <= MAX_OBJECT_SIZE)
                save_to_cache(&request, &response);
        }
    }
    free(ptr);
    Close(client_fd);
    #ifdef DEBUG
    printf("connection close\n\n");
    printf("leave request_handler\n");
    #endif
    return NULL; 
}
Example #2
0
/* 
 * request_handler - general function to handler each client request 
 */
void *request_handler(int client_fd) {
    #ifdef DEBUG
    printf("enter request_handler\n");
    #endif

    Request request;
    Response response;
    parse_request_header(client_fd, &request);
    modify_request_header(&request);
    
    if (check_cache(&request, &response)) {
        #ifdef DEBUG
        printf("in cache ! \n");
        #endif
        send_client(client_fd, &response);
    } else {
        #ifdef DEBUG
        printf("not in cache !\n");
        #endif
        if (forward_request(client_fd, &request, &response) < 0) {
            close(client_fd);
            return NULL;
        } else {
            /* save to cache if status code 2XX and < max size */
            if (response.content_size <= MAX_OBJECT_SIZE &&
                    response.header[state_ofs] == '2')
                save_to_cache(&request, &response);
        }
    }

    close(client_fd);
    #ifdef DEBUG
    printf("connection close\n");
    printf("leave request_handler\n");
    #endif
    return NULL; 
}