5 Author: Pekka Riikonen <priikone@silcnet.org>
7 Copyright (C) 2000 - 2001 Pekka Riikonen
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
21 /****h* silccore/SilcIDCacheAPI
25 * SILC ID Cache is an cache for all kinds of ID's used in the SILC
26 * protocol. Application can save here the ID's it uses and the interface
27 * provides fast retrieval of the ID's from the cache.
34 /****s* silccore/SilcIDCacheAPI/SilcIDCacheEntry
38 * typedef struct { ... } SilcIDCacheEntry;
42 * This is one entry in the SILC ID Cache system. Contents of this is
43 * allocated outside the ID cache system, however, all the fields are
44 * filled with ID cache utility functions. The ID cache system does not
45 * allocate any of these fields nor free them.
53 * A name associated with the ID.
57 * Time when this cache entry expires. This is normal time() value
58 * plus the validity. Cache entry has expired if current time is
59 * more than value in this field. If this value is zero (0) the
60 * entry never expires.
64 * Any caller specified context.
76 /****s* silccore/SilcIDCacheAPI/SilcIDCache
80 * typedef struct SilcIDCacheStruct *SilcIDCache;
84 * This context is the actual ID Cache and is allocated by
85 * silc_idcache_alloc and given as argument usually to all
86 * silc_idcache_* functions. It is freed by the
87 * silc_idcache_free function.
90 typedef struct SilcIDCacheStruct *SilcIDCache;
92 /****s* silccore/SilcIDCacheAPI/SilcIDCacheList
96 * typedef struct SilcIDCacheListStruct *SilcIDCacheList;
100 * This context is the ID Cache List and is allocated by
101 * some of the silc_idcache_* functions. Functions that may return
102 * multiple entries from the cache allocate the entries in to the
103 * SilcIDCacheList. The context is freed by silc_idcache_list_free
107 typedef struct SilcIDCacheListStruct *SilcIDCacheList;
109 /****f* silccore/SilcIDCacheAPI/SilcIDCacheDestructor
113 * typedef void (*SilcIDCacheDestructor)(SilcIDCache cache,
114 * SilcIDCacheEntry entry);
118 * Destructor callback that is called when an cache entry expires or is
119 * purged from the ID cache. The application must not free cache entry
120 * because the library will do it automatically. The appliation, however,
121 * is responsible of freeing any data in the entry.
124 typedef void (*SilcIDCacheDestructor)(SilcIDCache cache,
125 SilcIDCacheEntry entry);
127 #define SILC_ID_CACHE_EXPIRE 3600
128 #define SILC_ID_CACHE_EXPIRE_DEF (time(NULL) + SILC_ID_CACHE_EXPIRE)
132 /****f* silccore/SilcIDCacheAPI/silc_idcache_alloc
136 * SilcIDCache silc_idcache_alloc(uint32 count, SilcIdType id_type,
137 * SilcIDCacheDestructor destructor);
141 * Allocates new ID cache object. The initial amount of allocated entries
142 * can be sent as argument. If `count' is 0 the system uses default values.
143 * The `id_type' defines the types of the ID's that will be saved to the
147 SilcIDCache silc_idcache_alloc(uint32 count, SilcIdType id_type,
148 SilcIDCacheDestructor destructor);
150 /****f* silccore/SilcIDCacheAPI/silc_idcache_free
154 * void silc_idcache_free(SilcIDCache cache);
158 * Frees ID cache object and all cache entries.
161 void silc_idcache_free(SilcIDCache cache);
163 /****f* silccore/SilcIDCacheAPI/silc_idcache_add
167 * bool silc_idcache_add(SilcIDCache cache, char *name, void *id,
168 * void *context, int expire);
172 * Add new entry to the cache. Returns TRUE if the entry was added and
173 * FALSE if it could not be added. The `name' is the name associated with
174 * the ID, the `id' the actual ID and the `context' a used specific context.
175 * If the `expire' is TRUE the entry expires in default time and if FALSE
176 * the entry never expires from the cache.
179 bool silc_idcache_add(SilcIDCache cache, char *name, void *id,
180 void *context, int expire);
182 /****f* silccore/SilcIDCacheAPI/silc_idcache_del
186 * bool silc_idcache_del(SilcIDCache cache, SilcIDCacheEntry old);
190 * Delete cache entry from cache. Returns TRUE if the entry was deleted.
191 * The destructor function is not called.
194 bool silc_idcache_del(SilcIDCache cache, SilcIDCacheEntry old);
196 /****f* silccore/SilcIDCacheAPI/silc_idcache_del_by_id
200 * bool silc_idcache_del_by_id(SilcIDCache cache, void *id);
204 * Delete cache entry by ID. Returns TRUE if the entry was deleted.
205 * The destructor function is not called.
208 bool silc_idcache_del_by_id(SilcIDCache cache, void *id);
210 /****f* silccore/SilcIDCacheAPI/silc_idcache_del_by_id_ext
214 * bool silc_idcache_del_by_id_ext(SilcIDCache cache, void *id,
215 * SilcHashFunction hash,
216 * void *hash_context,
217 * SilcHashCompare compare,
218 * void *compare_context);
222 * Same as silc_idcache_del_by_id but with specific hash and comparison
223 * functions. If the functions are NULL then default values are used.
224 * Returns TRUE if the entry was deleted. The destructor function is
228 bool silc_idcache_del_by_id_ext(SilcIDCache cache, void *id,
229 SilcHashFunction hash,
231 SilcHashCompare compare,
232 void *compare_context);
234 /****f* silccore/SilcIDCacheAPI/silc_idcache_del_by_context
238 * bool silc_idcache_del_by_context(SilcIDCache cache, void *context);
242 * Deletes cachen entry by the user specified context. Returns TRUE
243 * if the entry was deleted. The destructor function is not called.
246 bool silc_idcache_del_by_context(SilcIDCache cache, void *context);
248 /****f* silccore/SilcIDCacheAPI/silc_idcache_del_all
252 * bool silc_idcache_del_all(SilcIDCache cache);
256 * Deletes all cache entries from the cache and frees all memory.
257 * The destructor function is not called.
260 bool silc_idcache_del_all(SilcIDCache cache);
262 /****f* silccore/SilcIDCacheAPI/silc_idcache_purge
266 * bool silc_idcache_purge(SilcIDCache cache);
270 * Purges the cache by removing expired cache entires. Note that this
271 * may be very slow operation. Returns TRUE if the purging was successful.
272 * The destructor function is called for each purged cache entry.
275 bool silc_idcache_purge(SilcIDCache cache);
277 /****f* silccore/SilcIDCacheAPI/silc_idcache_by_context
281 * bool silc_idcache_purge_by_context(SilcIDCache cache, void *context);
285 * Purges the cache by context and removes expired cache entires.
286 * Returns TRUE if the puring was successful. The destructor function
287 * is called for the purged cache entry.
290 bool silc_idcache_purge_by_context(SilcIDCache cache, void *context);
292 /****f* silccore/SilcIDCacheAPI/silc_idcache_get_all
296 * bool silc_idcache_get_all(SilcIDCache cache, SilcIDCacheList *ret);
300 * Returns all cache entries from the ID cache to the `ret' SilcIDCacheList.
301 * Returns TRUE if the retrieval was successful. The caller must free
302 * the returned SilcIDCacheList.
305 bool silc_idcache_get_all(SilcIDCache cache, SilcIDCacheList *ret);
307 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_id
311 * bool silc_idcache_find_by_id(SilcIDCache cache, void *id,
312 * SilcIDCacheList *ret);
316 * Find ID Cache entry by ID. This may return multiple entry and the
317 * `ret' SilcIDCacheList is allocated. Returns TRUE if the entry was
318 * found. The caller must free the returned SilcIDCacheList.
321 bool silc_idcache_find_by_id(SilcIDCache cache, void *id,
322 SilcIDCacheList *ret);
324 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_id_one
328 * bool silc_idcache_find_by_id_one(SilcIDCache cache, void *id,
329 * SilcIDCacheEntry *ret);
333 * Find ID Cache entry by ID. Returns only one entry from the cache
334 * and the found entry is considered to be exact match. Returns TRUE
335 * if the entry was found.
338 bool silc_idcache_find_by_id_one(SilcIDCache cache, void *id,
339 SilcIDCacheEntry *ret);
341 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_id_one_ext
345 * bool silc_idcache_find_by_id_one_ext(SilcIDCache cache, void *id,
346 * SilcHashFunction hash,
347 * void *hash_context,
348 * SilcHashCompare compare,
349 * void *compare_context,
350 * SilcIDCacheEntry *ret);
354 * Same as silc_idcache_find_by_id_one but with specific hash and
355 * comparison functions. If `hash' is NULL then the default hash
356 * funtion is used and if `compare' is NULL default comparison function
357 * is used. Returns TRUE if the entry was found.
360 bool silc_idcache_find_by_id_one_ext(SilcIDCache cache, void *id,
361 SilcHashFunction hash,
363 SilcHashCompare compare,
364 void *compare_context,
365 SilcIDCacheEntry *ret);
367 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_context
371 * bool silc_idcache_find_by_context(SilcIDCache cache, void *context,
372 * SilcIDCacheEntry *ret);
376 * Find cache entry by user specified context. Returns TRUE if the
380 bool silc_idcache_find_by_context(SilcIDCache cache, void *context,
381 SilcIDCacheEntry *ret);
383 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_name
387 * bool silc_idcache_find_by_name(SilcIDCache cache, char *name,
388 * SilcIDCacheList *ret);
392 * Find cache entries by the name associated with the ID. This may
393 * return muliptle entries allocated to the SilcIDCacheList. Returns
394 * TRUE if the entry was found. The caller must free the SIlcIDCacheList.
397 bool silc_idcache_find_by_name(SilcIDCache cache, char *name,
398 SilcIDCacheList *ret);
400 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_name_one
404 * bool silc_idcache_find_by_name_one(SilcIDCache cache, char *name,
405 * SilcIDCacheEntry *ret);
409 * Find cache entry by the name associated with the ID. This returns
410 * one entry and the found entry is considered to be exact match.
411 * return muliptle entries allocated to the SilcIDCacheList. Returns
412 * TRUE if the entry was found.
415 bool silc_idcache_find_by_name_one(SilcIDCache cache, char *name,
416 SilcIDCacheEntry *ret);
418 /****f* silccore/SilcIDCacheAPI/silc_idcache_list_count
422 * int silc_idcache_list_count(SilcIDCacheList list);
426 * Returns the number of cache entries in the ID cache list.
429 int silc_idcache_list_count(SilcIDCacheList list);
431 /****f* silccore/SilcIDCacheAPI/silc_idcache_list_first
435 * bool silc_idcache_list_first(SilcIDCacheList list,
436 * SilcIDCacheEntry *ret);
440 * Returns the first cache entry from the ID cache list. Returns FALSE
441 * If the entry could not be retrieved.
444 bool silc_idcache_list_first(SilcIDCacheList list, SilcIDCacheEntry *ret);
446 /****f* silccore/SilcIDCacheAPI/silc_idcache_list_next
450 * bool silc_idcache_list_next(SilcIDCacheList list, SilcIDCacheEntry *ret);
454 * Returns the next cache entry from the ID Cache list. Returns FALSE
455 * when there are not anymore entries in the list.
458 bool silc_idcache_list_next(SilcIDCacheList list, SilcIDCacheEntry *ret);
460 /****f* silccore/SilcIDCacheAPI/silc_idcache_list_free
464 * void silc_idcache_list_free(SilcIDCacheList list);
468 * Frees ID cache list. User must free the list context returned by
469 * any of the searching functions.
472 void silc_idcache_list_free(SilcIDCacheList list);