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 non-zero the entry expires in that specified time.
176 * If zero the entry never expires from the cache.
178 * If the `ret' is non-NULL the created ID Cache entry is returned to
182 bool silc_idcache_add(SilcIDCache cache, char *name, void *id,
183 void *context, int expire, SilcIDCacheEntry *ret);
185 /****f* silccore/SilcIDCacheAPI/silc_idcache_del
189 * bool silc_idcache_del(SilcIDCache cache, SilcIDCacheEntry old);
193 * Delete cache entry from cache. Returns TRUE if the entry was deleted.
194 * The destructor function is not called.
197 bool silc_idcache_del(SilcIDCache cache, SilcIDCacheEntry old);
199 /****f* silccore/SilcIDCacheAPI/silc_idcache_del_by_id
203 * bool silc_idcache_del_by_id(SilcIDCache cache, void *id);
207 * Delete cache entry by ID. Returns TRUE if the entry was deleted.
208 * The destructor function is not called.
211 bool silc_idcache_del_by_id(SilcIDCache cache, void *id);
213 /****f* silccore/SilcIDCacheAPI/silc_idcache_del_by_id_ext
217 * bool silc_idcache_del_by_id_ext(SilcIDCache cache, void *id,
218 * SilcHashFunction hash,
219 * void *hash_context,
220 * SilcHashCompare compare,
221 * void *compare_context);
225 * Same as silc_idcache_del_by_id but with specific hash and comparison
226 * functions. If the functions are NULL then default values are used.
227 * Returns TRUE if the entry was deleted. The destructor function is
231 bool silc_idcache_del_by_id_ext(SilcIDCache cache, void *id,
232 SilcHashFunction hash,
234 SilcHashCompare compare,
235 void *compare_context);
237 /****f* silccore/SilcIDCacheAPI/silc_idcache_del_by_context
241 * bool silc_idcache_del_by_context(SilcIDCache cache, void *context);
245 * Deletes cachen entry by the user specified context. Returns TRUE
246 * if the entry was deleted. The destructor function is not called.
249 bool silc_idcache_del_by_context(SilcIDCache cache, void *context);
251 /****f* silccore/SilcIDCacheAPI/silc_idcache_del_all
255 * bool silc_idcache_del_all(SilcIDCache cache);
259 * Deletes all cache entries from the cache and frees all memory.
260 * The destructor function is not called.
263 bool silc_idcache_del_all(SilcIDCache cache);
265 /****f* silccore/SilcIDCacheAPI/silc_idcache_purge
269 * bool silc_idcache_purge(SilcIDCache cache);
273 * Purges the cache by removing expired cache entires. Note that this
274 * may be very slow operation. Returns TRUE if the purging was successful.
275 * The destructor function is called for each purged cache entry.
278 bool silc_idcache_purge(SilcIDCache cache);
280 /****f* silccore/SilcIDCacheAPI/silc_idcache_by_context
284 * bool silc_idcache_purge_by_context(SilcIDCache cache, void *context);
288 * Purges the cache by context and removes expired cache entires.
289 * Returns TRUE if the puring was successful. The destructor function
290 * is called for the purged cache entry.
293 bool silc_idcache_purge_by_context(SilcIDCache cache, void *context);
295 /****f* silccore/SilcIDCacheAPI/silc_idcache_get_all
299 * bool silc_idcache_get_all(SilcIDCache cache, SilcIDCacheList *ret);
303 * Returns all cache entries from the ID cache to the `ret' SilcIDCacheList.
304 * Returns TRUE if the retrieval was successful. The caller must free
305 * the returned SilcIDCacheList.
308 bool silc_idcache_get_all(SilcIDCache cache, SilcIDCacheList *ret);
310 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_id
314 * bool silc_idcache_find_by_id(SilcIDCache cache, void *id,
315 * SilcIDCacheList *ret);
319 * Find ID Cache entry by ID. This may return multiple entry and the
320 * `ret' SilcIDCacheList is allocated. Returns TRUE if the entry was
321 * found. The caller must free the returned SilcIDCacheList.
324 bool silc_idcache_find_by_id(SilcIDCache cache, void *id,
325 SilcIDCacheList *ret);
327 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_id_one
331 * bool silc_idcache_find_by_id_one(SilcIDCache cache, void *id,
332 * SilcIDCacheEntry *ret);
336 * Find ID Cache entry by ID. Returns only one entry from the cache
337 * and the found entry is considered to be exact match. Returns TRUE
338 * if the entry was found.
341 bool silc_idcache_find_by_id_one(SilcIDCache cache, void *id,
342 SilcIDCacheEntry *ret);
344 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_id_one_ext
348 * bool silc_idcache_find_by_id_one_ext(SilcIDCache cache, void *id,
349 * SilcHashFunction hash,
350 * void *hash_context,
351 * SilcHashCompare compare,
352 * void *compare_context,
353 * SilcIDCacheEntry *ret);
357 * Same as silc_idcache_find_by_id_one but with specific hash and
358 * comparison functions. If `hash' is NULL then the default hash
359 * funtion is used and if `compare' is NULL default comparison function
360 * is used. Returns TRUE if the entry was found.
363 bool silc_idcache_find_by_id_one_ext(SilcIDCache cache, void *id,
364 SilcHashFunction hash,
366 SilcHashCompare compare,
367 void *compare_context,
368 SilcIDCacheEntry *ret);
370 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_context
374 * bool silc_idcache_find_by_context(SilcIDCache cache, void *context,
375 * SilcIDCacheEntry *ret);
379 * Find cache entry by user specified context. Returns TRUE if the
383 bool silc_idcache_find_by_context(SilcIDCache cache, void *context,
384 SilcIDCacheEntry *ret);
386 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_name
390 * bool silc_idcache_find_by_name(SilcIDCache cache, char *name,
391 * SilcIDCacheList *ret);
395 * Find cache entries by the name associated with the ID. This may
396 * return muliptle entries allocated to the SilcIDCacheList. Returns
397 * TRUE if the entry was found. The caller must free the SIlcIDCacheList.
400 bool silc_idcache_find_by_name(SilcIDCache cache, char *name,
401 SilcIDCacheList *ret);
403 /****f* silccore/SilcIDCacheAPI/silc_idcache_find_by_name_one
407 * bool silc_idcache_find_by_name_one(SilcIDCache cache, char *name,
408 * SilcIDCacheEntry *ret);
412 * Find cache entry by the name associated with the ID. This returns
413 * one entry and the found entry is considered to be exact match.
414 * return muliptle entries allocated to the SilcIDCacheList. Returns
415 * TRUE if the entry was found.
418 bool silc_idcache_find_by_name_one(SilcIDCache cache, char *name,
419 SilcIDCacheEntry *ret);
421 /****f* silccore/SilcIDCacheAPI/silc_idcache_list_count
425 * int silc_idcache_list_count(SilcIDCacheList list);
429 * Returns the number of cache entries in the ID cache list.
432 int silc_idcache_list_count(SilcIDCacheList list);
434 /****f* silccore/SilcIDCacheAPI/silc_idcache_list_first
438 * bool silc_idcache_list_first(SilcIDCacheList list,
439 * SilcIDCacheEntry *ret);
443 * Returns the first cache entry from the ID cache list. Returns FALSE
444 * If the entry could not be retrieved.
447 bool silc_idcache_list_first(SilcIDCacheList list, SilcIDCacheEntry *ret);
449 /****f* silccore/SilcIDCacheAPI/silc_idcache_list_next
453 * bool silc_idcache_list_next(SilcIDCacheList list, SilcIDCacheEntry *ret);
457 * Returns the next cache entry from the ID Cache list. Returns FALSE
458 * when there are not anymore entries in the list.
461 bool silc_idcache_list_next(SilcIDCacheList list, SilcIDCacheEntry *ret);
463 /****f* silccore/SilcIDCacheAPI/silc_idcache_list_free
467 * void silc_idcache_list_free(SilcIDCacheList list);
471 * Frees ID cache list. User must free the list context returned by
472 * any of the searching functions.
475 void silc_idcache_list_free(SilcIDCacheList list);