コード例 #1
0
ファイル: FileSystemServiceImpl.cpp プロジェクト: xcodez/jsfs
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;
}
コード例 #2
0
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;

}