X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=TODO;h=ac0175a6e883f6b400f734999754c159f8fa4bf8;hb=c496063e2dcbce20ed4dbe221240921960d2f9c0;hp=779353e2de286ed44e78bbfb1db2e7dfd49a1343;hpb=a0f56a810a4be80dcf9505381618570f5492064f;p=silc.git diff --git a/TODO b/TODO index 779353e2..ac0175a6 100644 --- a/TODO +++ b/TODO @@ -82,28 +82,16 @@ Runtime library, lib/silcutil/ o Fix universal time decoding (doesn't accept all formats) in silctime.c. - o Add functions to manipulate environment variables. - - SilcBool silc_setenv(const char *variable, const char *value); - const char *silc_getenv(const char *variable); - SilcBool silc_clearenv(const char *variable); + o Add functions to manipulate environment variables. (***DONE) o Add functions to loading shared/dynamic object symbols (replaces the SIM library (lib/silcsim) and introduces generic library). Add this - to lib/silcutil/silcdll.[ch]. - - SilcDll silc_dll_load(const char *object_path, SilcDllFlags flags); - void silc_dll_close(SilcDll dll); - void *silc_dll_getsym(SilcDll dll, const char *symbol); - const char *silc_dll_error(SilcDll dll); + to lib/silcutil/silcdll.[ch]. (***TESTING NEEDED WIN32, TODO Symbian) o Add directory opening/traversing functions o silc_getopt routines - o silc_hash_table_replace -> silc_hash_table_set. Retain support for - silc_hash_table_replace as macro. - o The SILC Event signals. Asynchronous events that can be created, connected to and signalled. Either own event routines or glued into SilcSchedule: @@ -183,59 +171,14 @@ Runtime library, lib/silcutil/ o silc_stringprep to non-allocating version. - o SilcStack aware SilcHashTable. - - o SilcStack aware SilcDList. - - o Thread pool API. Add this to lib/silcutil/silcthread.[ch]. - - typedef void (*SilcThreadPoolFunc)(SilcSchedule schedule, - void *context); - - /* Allocate thread pool with at least `min_threads' and at most - `max_threads' many threads. If `stack' is non-NULL all memory - is allocated from the `stack'. If `start_min_threads' is TRUE - this will start `min_threads' many threads immediately. */ - SilcThreadPool silc_thread_pool_alloc(SilcStack stack, - SilcUInt32 min_threads, - SilcUInt32 max_threads, - SilcBool start_min_threads); - - /* Free thread pool. If `wait_unfinished' is TRUE this will block - and waits that all remaining active threads finish before freeing - the pool. */ - void silc_thread_pool_free(SilcThreadPool tp, SilcBool wait_unfinished); - - /* Run `run' function with `run_context' in one of the threads in the - thread pool. Returns FALSE if the thread pool is being freed. If - there are no free threads left in the pool this will queue the - the `run' and will call it once a thread becomes free. - - If `completion' is non-NULL it will be called to indicate completion - of the `run' function. If `schedule' is non-NULL the `completion' - will be called through the scheduler in the main thread. If it is - NULL the `completion' is called directly from the thread after the - `run' has returned. */ - SilcBool silc_thread_pool_run(SilcThreadPool tp, - SilcSchedule schedule, - SilcThreadPoolFunc run, - void *run_context, - SilcThreadPoolFunc completion, - void *completion_context); - - /* Modify the amount of maximum threads of the pool. */ - void silc_thread_pool_set_max_threads(SilcThreadPool tp, - SilcUInt32 max_threads); + o silc_hash_table_replace -> silc_hash_table_set. Retain support for + silc_hash_table_replace as macro. (***DONE) - /* Returns the amount of maximum size the pool can grow. */ - SilcUInt32 silc_thread_pool_num_max_threads(SilcThreadPool tp); + o SilcStack aware SilcHashTable. (***DONE) - /* Returns the amount of free threads in the pool currently. */ - SilcUInt32 silc_thread_pool_num_free_threads(SilcThreadPool tp); + o SilcStack aware SilcDList. (***DONE) - /* Stops all free and started threads. The minumum amount of threads - specified to silc_thread_pool_alloc always remains. */ - void silc_thread_pool_purge(SilcThreadPool tp); + o Thread pool API. Add this to lib/silcutil/silcthread.[ch]. (***DONE) o Fast mutex implementation. Fast rwlock implementation. Mutex and rwlock implementation using atomic operations. @@ -245,15 +188,33 @@ Runtime library, lib/silcutil/ defined. o Add new functions to SilcStack API in lib/silcutil/silcstack.[ch]. Add - silc_stack_[set|get]_byte_alignment and - silc_stack_[set|get]_address_alignment. The _byte_alignment defines the - default alignment when allocating aligned memory for structures etc. - The _address_alignment defines the default alignment for memory - addresses SilcStack routines return. Usefull when needing special - aligned addresses for example for hardware devices (such as crypto - accelerators). In 1.1 both are unsigned long, but in 1.2 both can be - user defined. Move also the low level silc_stack_malloc and - silc_stack_realloc from silcstack_i.h to silcstack.h. + silc_stack_[set|get]_alignment. It defines the default alignment used + when allocating memory from stack. It can be used to specify special + alignments too when needed (such as for hardware devices like crypto + accelerators). Move also the low level silc_stack_malloc and + silc_stack_realloc from silcstack_i.h to silcstack.h. Remove the + _ua unaligned memory allocation routines. Remove unaligned memory + allocation possibility. (***DONE) + + o Add '%@' format to silc_snprintf functions. It marks for external + rendering function of following type: + + /* Snprintf rendering function. The `data' is rendered into a string + and allocated string is returned. If NULL is returned the + rendering is skipped and ignored. If the returned string does + not fit to the destination buffer it may be truncated. */ + typedef char *(*SilcSnprintfRender)(void *data); + + It can work like following: + + char *id_renderer(void *data) + { + char tmp[32]; + id_to_str(tmp, sizeof(tmp), (SilcID *)data); + return strdup(tmp); + } + + silc_snprintf(buf, sizeof(buf), "Client ID %@", id_renderer, client_id); (o Generic SilcStatus or SilcResult that includes all possible status and error conditions, including those of SILC protocol. Though, the SILC @@ -624,17 +585,17 @@ lib/silcserver o Library must have support for SERVICE command. - o The server must be able to run behind NAT device. This means that + o The server must be able to run behind NAT device. This means that Server ID must be based on public IP instead of private IP. - o The following data must be in per-connection context: client id cache, - server id cache, channel id cache, all statistics must be + o The following data must be in per-connection context: client id cache, + server id cache, channel id cache, all statistics must be per-connection. o The following data must be in per-thread context: command context freelist/pool, pending commands, random number generator. - o Do inccoming packet processing in an own FSM thread in the + o Do inccoming packet processing in an own FSM thread in the server-threads FSM. Same as in client library. o Reference count all Silc*Entry structures.