26 #ifndef _http_cache_table_h 27 #define _http_cache_table_h 45 #ifndef _internalerr_h 53 #define LOCK(m) pthread_mutex_lock((m)) 54 #define TRYLOCK(m) pthread_mutex_trylock((m)) 55 #define UNLOCK(m) pthread_mutex_unlock((m)) 56 #define INIT(m) pthread_mutex_init((m), 0) 57 #define DESTROY(m) pthread_mutex_destroy((m)) 112 time_t freshness_lifetime;
113 time_t response_time;
114 time_t corrected_initial_age;
116 bool must_revalidate;
120 pthread_mutex_t d_response_lock;
121 pthread_mutex_t d_response_write_lock;
125 friend class HTTPCacheTest;
128 friend class DeleteCacheEntry;
129 friend class WriteOneCacheEntry;
130 friend class DeleteExpired;
131 friend class DeleteByHits;
132 friend class DeleteBySize;
154 return freshness_lifetime;
157 return response_time;
160 return corrected_initial_age;
163 return must_revalidate;
171 DBG(cerr <<
"Try locking read response... (" << hex << &d_response_lock << dec <<
") ");
172 int status =
TRYLOCK(&d_response_lock);
175 LOCK(&d_response_write_lock);
176 UNLOCK(&d_response_write_lock);
178 DBGN(cerr <<
"Done" << endl);
185 DBG(cerr <<
"Unlocking read response... (" << hex << &d_response_lock << dec <<
") ");
187 DBGN(cerr <<
"Done" << endl);
192 DBG(cerr <<
"locking write response... (" << hex << &d_response_lock << dec <<
") ");
193 LOCK(&d_response_lock);
194 LOCK(&d_response_write_lock);
195 DBGN(cerr <<
"Done" << endl);
199 DBG(cerr <<
"Unlocking write response... (" << hex << &d_response_lock << dec <<
") ");
200 UNLOCK(&d_response_write_lock);
202 DBGN(cerr <<
"Done" << endl);
206 url(
""), hash(-1), hits(0), cachename(
""), etag(
""), lm(-1),
207 expires(-1), date(-1), age(-1), max_age(-1), size(0),
208 range(false), freshness_lifetime(0), response_time(0),
209 corrected_initial_age(0), must_revalidate(false),
210 no_cache(false), readers(0) {
211 INIT(&d_response_lock);
212 INIT(&d_response_write_lock);
215 url(u), hash(-1), hits(0), cachename(
""), etag(
""), lm(-1),
216 expires(-1), date(-1), age(-1), max_age(-1), size(0),
217 range(false), freshness_lifetime(0), response_time(0),
218 corrected_initial_age(0), must_revalidate(false),
219 no_cache(false), readers(0) {
220 INIT(&d_response_lock);
221 INIT(&d_response_write_lock);
236 friend class HTTPCacheTest;
239 CacheTable d_cache_table;
242 unsigned int d_block_size;
243 unsigned long d_current_size;
245 string d_cache_index;
248 map<FILE *, HTTPCacheTable::CacheEntry *> d_locked_entries;
252 throw InternalErr(__FILE__, __LINE__,
"unimplemented");
256 throw InternalErr(__FILE__, __LINE__,
"unimplemented");
260 throw InternalErr(__FILE__, __LINE__,
"unimplemented");
263 CacheTable &get_cache_table() {
return d_cache_table; }
264 CacheEntry *get_locked_entry_from_cache_table(
int hash,
const string &url);
284 void delete_expired_entries(time_t time = 0);
285 void delete_by_hits(
int hits);
286 void delete_by_size(
unsigned int size);
287 void delete_all_entries();
289 bool cache_index_delete();
290 bool cache_index_read();
291 CacheEntry *cache_index_parse_line(
const char *line);
292 void cache_index_write();
294 string create_hash_directory(
int hash);
297 void add_entry_to_cache_table(
CacheEntry *entry);
300 void remove_entry_from_cache_table(
const string &url);
301 CacheEntry *get_locked_entry_from_cache_table(
const string &url);
302 CacheEntry *get_write_locked_entry_from_cache_table(
const string &url);
305 int default_expiration, time_t request_time);
307 unsigned long max_entry_size,
const vector<string> &headers);
310 void bind_entry_to_data(
CacheEntry *entry, FILE *body);
311 void uncouple_entry_from_data(FILE *body);
312 bool is_locked_read_responses();
void unlock_read_response()
void increment_new_entries()
vector< CacheEntry * > CacheEntries
void lock_write_response()
void set_block_size(unsigned int sz)
CacheEntries::iterator CacheEntriesIter
void set_no_cache(bool state)
A class for software fault reporting.
void set_current_size(unsigned long sz)
unsigned int get_block_size() const
int get_hash(const string &url)
void set_size(unsigned long sz)
CacheEntries ** CacheTable
CacheEntry(const string &u)
int get_new_entries() const
bool get_must_revalidate()
unsigned long get_current_size() const
time_t get_freshness_lifetime()
void unlock_write_response()
time_t get_response_time()
void lock_read_response()
time_t get_corrected_initial_age()
void set_cache_root(const string &cr)