31 static void resolve_cache_close();
32 static void *resolve_cache_clean(
void *);
36 static char *mapname =
ZE_WDBDIR "/ze-res-cache.db";
37 static size_t mapcachesize = 2 * 1024 * 1024;
39 #define VALUE_LEN_MAX 256 41 #define RESOLVE_DT_REFRESH (1 DAYS) 42 #define RESOLVE_DT_EXPIRE (3 DAYS) 43 #define RESOLVE_DT_CHECK (1 HOURS) 44 #define RESOLVE_DT_LOOP (1 MINUTES) 45 #define RESOLVE_DT_SYNC (2 MINUTES) 61 static int resolve_cyclic_task(
void *arg);
88 sz = strlen(prefix) + strlen(key) + 4;
89 if ((s = malloc(sz)) != NULL) {
94 snprintf(s, sz,
"%s:%s", prefix, key);
100 memset(argv, 0,
sizeof (argv));
141 sz = strlen(prefix) + strlen(key) + 4;
142 if ((s = malloc(sz)) != NULL) {
144 time_t first,
last, now;
145 char *hostname = value;
147 first = now = time(NULL);
154 memset(buf, 0,
sizeof (buf));
155 snprintf(s, sz,
"%s:%s", prefix, key);
163 memset(argv, 0,
sizeof (argv));
173 if (last + dt_refresh < now || !
STRCASEEQUAL(value, hostname)) {
178 snprintf(buf,
sizeof (buf),
"%lu;%lu;%s", first, last, value);
179 res =
zeMap_Add(&map, s, buf, strlen(buf) + 1);
202 if (p_expire > 6
HOURS)
203 dt_expire = p_expire;
216 static char browsekey[256];
229 if (dbdir == NULL || strlen(dbdir) == 0)
231 snprintf(name,
sizeof (name),
"%s/%s", dbdir,
"ze-res-cache.db");
238 (void) atexit(resolve_cache_close);
240 memset(browsekey, 0,
sizeof (browsekey));
241 ZE_MessageInfo(10,
"*** Registering resolve cache cyclic task...");
254 resolve_cache_close()
284 clean_up_cache(key, val, arg)
290 time_t *now = (time_t *) arg;
292 if (key == NULL || val == NULL)
303 first = last = (time_t) 0;
304 memset(argv, 0,
sizeof (argv));
312 if (last + dt_expire < *now) {
313 ZE_MessageInfo(11,
"Resolve cache entry expired %s %lu %lu", key, last);
329 resolve_cyclic_task(arg)
332 static time_t last_check = 0, last_sync = 0;
345 if (last_check + dt_check <= now) {
350 zeMap_Browse(&map, clean_up_cache, &now, browsekey,
sizeof (browsekey),
361 if (last_sync + dt_sync <= now) {
367 resolve_cache_sync();
#define RESOLVE_DT_REFRESH
#define ZEMAP_INITIALIZER
#define ZEMAP_BROWSE_CONTINUE
bool zeMap_Flush(ZEMAP_T *map)
bool zeMap_OK(ZEMAP_T *map)
bool resolve_cache_show_cyclic_task
#define ZEMAP_BROWSE_DELETE
bool zeMap_Lookup(ZEMAP_T *map, char *key, char *value, size_t size)
int zeStr2Tokens(char *, int, char **, char *)
bool CycTasks_Register(CYCLIC_F task, void *arg, time_t period)
bool zeMap_Browse(ZEMAP_T *map, ZEMAP_BROWSE_F func, void *arg, char *key, size_t ksz, time_t tmax)
bool zeMap_Open(ZEMAP_T *map, ZEDB_ENV_T *env, char *name, int rdonly, size_t cache_size)
#define ZE_MessageInfo(level,...)
#define RESOLVE_DT_EXPIRE
void resolve_cache_log_enable(bool enable)
bool resolve_cache_init(char *dbdir, int rwmode)
bool zeMap_Add(ZEMAP_T *map, char *key, char *value, size_t size)
bool resolve_cache_check(char *prefix, char *key, char *value, size_t size)
#define ZE_LogSysError(...)
bool zeMap_Unlock(ZEMAP_T *map)
bool resolve_cache_times(time_t p_sync, time_t p_check, time_t p_expire)
#define STRCASEEQUAL(a, b)
unsigned long zeStr2ulong(char *s, int *error, unsigned long dval)
bool zeMap_Lock(ZEMAP_T *map)
bool resolve_cache_add(char *prefix, char *key, char *value)
bool zeMap_Close(ZEMAP_T *map)