Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 2000 - 2006 Pekka Riikonen
+ Copyright (C) 2000 - 2007 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*/
-/****h* silcidcache/SILC ID Cache Interface
+/****h* silcapputil/SILC ID Cache Interface
*
* DESCRIPTION
*
* protocol. Application can save here the ID's it uses and the interface
* provides fast retrieval of the ID's from the cache.
*
- * SILC ID Cache is not thread-safe. If the same cache context must be
+ * SILC ID Cache is not thread-safe. If the same cache context must be
* used in multithreaded environment concurrency control must be employed.
*
***/
#ifndef SILCIDCACHE_H
#define SILCIDCACHE_H
-/****s* silcidcache/SilcIDCacheAPI/SilcIDCacheEntry
+/****s* silcapputil/SilcIDCacheAPI/SilcIDCacheEntry
*
* NAME
*
} *SilcIDCacheEntry;
/***/
-/****s* silcidcache/SilcIDCacheAPI/SilcIDCache
+/****s* silcapputil/SilcIDCacheAPI/SilcIDCache
*
* NAME
*
***/
typedef struct SilcIDCacheStruct *SilcIDCache;
-/****f* silcidcache/SilcIDCacheAPI/SilcIDCacheDestructor
+/****f* silcapputil/SilcIDCacheAPI/SilcIDCacheDestructor
*
* SYNOPSIS
*
/* Prototypes */
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_alloc
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_alloc
*
* SYNOPSIS
*
SilcIDCacheDestructor destructor,
void *destructor_context);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_free
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_free
*
* SYNOPSIS
*
***/
void silc_idcache_free(SilcIDCache cache);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_add
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_add
*
* SYNOPSIS
*
* Add new entry to the cache. Returns the allocated cache entry if the
* entry was added successfully, or NULL if error occurred. The `name' is
* the name associated with the ID, the `id' the actual ID and the
- * `context' a caller specific context.
- *
- * The `name', `id' and `context' pointers will be stored in the cache,
- * and if the caller frees these pointers the caller is also responsible
- * of deleting the cache entry.
+ * `context' a caller specific context. The caller is responsible of
+ * freeing the `name' and `id' when the entry is deleted.
*
***/
SilcIDCacheEntry
silc_idcache_add(SilcIDCache cache, char *name, void *id, void *context);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_del
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_del
*
* SYNOPSIS
*
SilcBool silc_idcache_del(SilcIDCache cache, SilcIDCacheEntry entry,
void *app_context);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_del_by_id
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_del_by_id
*
* SYNOPSIS
*
SilcBool silc_idcache_del_by_id(SilcIDCache cache, void *id,
void *app_context);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_del_by_context
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_del_by_context
*
* SYNOPSIS
*
SilcBool silc_idcache_del_by_context(SilcIDCache cache, void *context,
void *app_context);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_update_id
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_update
*
* SYNOPSIS
*
* SilcBool silc_idcache_update(SilcIDCache cache, SilcIDCacheEntry entry,
- * void *old_id, void *new_id,
- * char *old_name, char *new_name);
+ * void *new_id, char *new_name,
+ * SilcBool free_old_name);
*
* DESCRIPTION
*
* Updates cache `entry' with new values. If the `new_id' is non-NULL
- * then the new value will be copied over the old value in the `entry'.
+ * then the new value will be copied over the old value in the `entry'
+ * unless the ID doesn't exist, when the `new_id' will be stored in `entry'.
* If the `new_name' is non-NULL then the `entry' will be updated with
* `new_name'. The caller is responsible of freeing the old name if it
* was updated with new one. The old ID value does not need to be freed
- * as the new value is copied over the old value.
+ * as the new value is copied over the old value. If the `free_old_name'
+ * is TRUE the library will free the old name from the entry.
*
***/
SilcBool silc_idcache_update(SilcIDCache cache, SilcIDCacheEntry entry,
- void *old_id, void *new_id,
- char *old_name, char *new_name);
+ void *new_id, char *new_name,
+ SilcBool free_old_name);
+
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_update_by_context
+ *
+ * SYNOPSIS
+ *
+ * SilcBool
+ * silc_idcache_update_by_context(SilcIDCache cache, void *context,
+ * void *new_id, char *new_name,
+ * SilcBool free_old_name);
+ *
+ * DESCRIPTION
+ *
+ * Same as silc_idcache_update but finds the corrent ID cache entry by
+ * the `context' added to the ID cache.
+ *
+ ***/
+SilcBool silc_idcache_update_by_context(SilcIDCache cache, void *context,
+ void *new_id, char *new_name,
+ SilcBool free_old_name);
+
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_move
+ *
+ * SYNOPSIS
+ *
+ * SilcBool silc_idcache_move(SilcIDCache from_cache, SilcIDCache to_cache,
+ * SilcIDCacheEntry entry);
+ *
+ * DESCRIPTION
+ *
+ * Moves the ID cache entry indicated by `entry' from the `from_cache'
+ * to `to_cache'. After this returns TRUE the `entry' is available only
+ * from the `to_cache'. Return FALSE if `entry' is not in `from_cache'
+ * or system is out of memory.
+ *
+ ***/
+SilcBool silc_idcache_move(SilcIDCache from_cache, SilcIDCache to_cache,
+ SilcIDCacheEntry entry);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_get_all
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_get_all
*
* SYNOPSIS
*
***/
SilcBool silc_idcache_get_all(SilcIDCache cache, SilcList *ret_list);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_find_by_id
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_find_by_id
*
* SYNOPSIS
*
SilcBool silc_idcache_find_by_id(SilcIDCache cache, void *id,
SilcList *ret_list);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_find_by_id_one
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_find_by_id_one
*
* SYNOPSIS
*
SilcBool silc_idcache_find_by_id_one(SilcIDCache cache, void *id,
SilcIDCacheEntry *ret);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_find_by_context
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_find_by_context
*
* SYNOPSIS
*
SilcBool silc_idcache_find_by_context(SilcIDCache cache, void *context,
SilcIDCacheEntry *ret);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_find_by_name
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_find_by_name
*
* SYNOPSIS
*
SilcBool silc_idcache_find_by_name(SilcIDCache cache, char *name,
SilcList *ret_list);
-/****f* silcidcache/SilcIDCacheAPI/silc_idcache_find_by_name_one
+/****f* silcapputil/SilcIDCacheAPI/silc_idcache_find_by_name_one
*
* SYNOPSIS
*