PContentStream CFileSystemServiceImpl::readFile(const wstring& path1) { wstring path = makeValidPath(path1); wstring contentType = getFileContentType(path); int64_t contentLength = getFileContentLength(path); PContentStream cstream(new BContentStreamFile(path, contentType, contentLength)); return cstream; }
const char* process_request(struct request_bundle* bundle, int* cache_hit) { fprintf(stderr, "process_request: Processing request on connection %d with filename %s\n", bundle->req->fd, bundle->req->filename); assert( bundle->req != NULL ); char* filename = bundle->req->filename; char* data; intmax_t filesize; char* error = NULL; if (bundle->ent != NULL) { *cache_hit = 1; fprintf(stderr, "process_request: Cache hit\n"); data = bundle->ent->filedata; filesize = bundle->ent->filesize; } else { *cache_hit = 0; fprintf(stderr, "process_request: Cache miss, getting file\n"); data = getFile(filename); if (data == NULL) error = "Error reading file"; else { filesize = getFileSize(filename); if (filesize == -1) error = "Error getting file size"; else { struct cache_entry* ent = createCacheEntry( filename, data, filesize ); cache_putEntry(ent); bundle->ent = ent; } // At this point, the request filesize and entry filesize should match up... *fingers crossed* } } if (error == NULL) { int fs = filesize; char* contentType = getFileContentType(filename); fprintf(stderr, "process_request: Calling return_result\n"); assert ( data != NULL ); return_result( bundle->req->fd, contentType, data, fs ); } else return_error( bundle->req->fd, error ); return error; }