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; }
/* * 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; }