updates.
[silc.git] / TODO
diff --git a/TODO b/TODO
index 2b8196371c3965c4a052cec1a87028208c574cdd..ac0175a6e883f6b400f734999754c159f8fa4bf8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -46,6 +46,8 @@ lib/silccore
 
  o All payload encoding routines should take SilcStack as argument.
 
+ o Remove SilcCommandCb from silccommand.h.
+
  o All payload test routines into lib/silccore/tests/.
 
 
@@ -80,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:
@@ -181,66 +171,50 @@ 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].
+ o silc_hash_table_replace -> silc_hash_table_set.  Retain support for
+   silc_hash_table_replace as macro. (***DONE)
 
-   typedef void (*SilcThreadPoolFunc)(SilcSchedule schedule,
-                                     void *context);
+ o SilcStack aware SilcHashTable. (***DONE)
 
-   /* 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);
+ o SilcStack aware SilcDList. (***DONE)
 
-   /* 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);
+ o Thread pool API.  Add this to lib/silcutil/silcthread.[ch].         (***DONE)
 
-   /* 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.
+ o Fast mutex implementation.  Fast rwlock implementation.  Mutex and
+   rwlock implementation using atomic operations.
 
-      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);
+ o Compression routines are missing.  The protocol supports packet
+   compression thus it must be implemented.  SILC Zip API must be
+   defined.
 
-   /* Modify the amount of maximum threads of the pool. */
-   void silc_thread_pool_set_max_threads(SilcThreadPool tp,
-                                        SilcUInt32 max_threads);
+ o Add new functions to SilcStack API in lib/silcutil/silcstack.[ch].  Add
+   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)
 
-   /* Returns the amount of maximum size the pool can grow. */
-   SilcUInt32 silc_thread_pool_num_max_threads(SilcThreadPool tp);
+ o Add '%@' format to silc_snprintf functions.  It marks for external
+   rendering function of following type:
 
-   /* Returns the amount of free threads in the pool currently. */
-   SilcUInt32 silc_thread_pool_num_free_threads(SilcThreadPool tp);
+     /* 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);
 
-   /* 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);
+   It can work like following:
 
- o Fast mutex implementation.  Fast rwlock implementation.  Mutex and
-   rwlock implementation using atomic operations.
+   char *id_renderer(void *data)
+   {
+     char tmp[32];
+     id_to_str(tmp, sizeof(tmp), (SilcID *)data);
+     return strdup(tmp);
+   }
 
- o Compression routines are missing.  The protocol supports packet
-   compression thus it must be implemented.  SILC Zip API must be
-   defined.
+   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
@@ -611,9 +585,19 @@ 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
+   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
+   server-threads FSM.  Same as in client library.
+
  o Reference count all Silc*Entry structures.
 
  Some issues that must be kept in mind from 1.0 and 1.1 silcd's: