updates.
[silc.git] / TODO
diff --git a/TODO b/TODO
index 92ce8299bddb81c48a60e884da2ab1833e7e29d8..a8144872547ee1690cac3956e881423061fd7c7c 100644 (file)
--- 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.
@@ -251,7 +194,7 @@ Runtime library, lib/silcutil/
    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.
+   allocation possibility. (***DONE)
 
  o Add '%@' format to silc_snprintf functions.  It marks for external
    rendering function of following type:
@@ -346,7 +289,13 @@ SKR Library, lib/silcskr/
 Crypto Library, lib/silccrypt/
 ==============================
 
- o SilcStack to APIs.
+ o Add silc_crypto_init and silc_crypto_uninit.  The _init should take
+   SilcStack that will act as global memory pool for all of crypto
+   library.  It should not be necessary anymore to separately register
+   default ciphers, HMACs, etc, the _init would do that.  However, if
+   user after _init calls silc_pkcs_register, for example, it would take
+   preference over the default once, ie. user can always dictate the
+   order of algorithms. (***DONE)
 
  o Add fingerprint to SilcSILCPublicKey and retrieval to silcpk.h, and
    possibly to silcpkcs.h.
@@ -360,62 +309,12 @@ Crypto Library, lib/silccrypt/
 
  o Change SILC PKCS API to asynchronous, so that accelerators can be used.
    All PKCS routines should now take callbacks as argument and they should
-   be delivered to SilcPKCSObject and SilcPKCSAlgorithm too.
-
-   /* Signature computation callback */
-   typedef void (*SilcPKCSSignCb)(SilcBool success,
-                                 const unsigned char *signature,
-                                 SilcUInt32 signature_len,
-                                 void *context);
-
-   /* Signature verification callback */
-   typedef void (*SilcPKCSVerifyCb)(SilcBool success, void *context);
-
-   /* Encryption callback */
-   typedef void (*SilcPKCSEncryptCb)(SilcBool success,
-                                    const unsigned char *encrypted,
-                                    SilcUInt32 encrypted_len,
-                                    void *context);
-
-   /* Decryption callback */
-   typedef void (*SilcPKCSDecryptCb)(SilcBool success,
-                                    const unsigned char *decrypted,
-                                    SilcUInt32 decrypted_len,
-                                    void *context);
-
-   Either add new _async functions or add the callbacks to existing API
-   and if the callback is NULL then the API is not async and if provided
-   it may be async.  For example;
-
-   SilcBool silc_pkcs_sign(SilcPrivateKey private_key,
-                          unsigned char *src, SilcUInt32 src_len,
-                          unsigned char *dst, SilcUInt32 dst_size,
-                          SilcUInt32 *dst_len,
-                          SilcBool compute_hash, SilcHash hash,
-                          SilcPKCSSignCb async_sign,
-                          void *async_sign_context);
-
-   (if this is done then there's no reason why the buffers in the
-    callbacks cannot be the ones user gives here) or allow only async:
-
-   SilcBool silc_pkcs_sign(SilcPrivateKey private_key,
-                          unsigned char *src, SilcUInt32 src_len,
-                          SilcBool compute_hash, SilcHash hash,
-                          SilcPKCSSignCb async_sign,
-                          void *async_sign_context);
-
-   or add new:
-
-   SilcBool silc_pkcs_sign_async(SilcPrivateKey private_key,
-                                unsigned char *src, SilcUInt32 src_len,
-                                SilcBool compute_hash, SilcHash hash,
-                                SilcPKCSSignCb async_sign,
-                                void *async_sign_context);
+   be delivered to SilcPKCSObject and SilcPKCSAlgorithm too. (***DONE)
 
  o Change PKCS Algorithm API to take SilcPKCSAlgorithm as argument to
    encrypt, decrypt, sign and verify functions.  We may need to for exmaple
    check the alg->hash, supported hash functions.  Maybe deliver it also
-   to all other functions in SilcPKCSAlgorithm to be consistent.
+   to all other functions in SilcPKCSAlgorithm to be consistent. (***DONE)
 
  o Add DSS support.  Take implementation from Tom or make it yourself.
 
@@ -566,11 +465,11 @@ lib/silcasn1
 
  o SILC_ASN1_CHOICE should perhaps return an index what choice in the
    choice list was found.  Currently it is left for caller to figure out
-   which choice was found.
+   which choice was found. (***DONE)
 
  o SILC_ASN1_NULL in decoding should return SilcBool whether or not
    the NULL was present.  It's important when it's SILC_ASN1_OPTIONAL
-   and we need to know whether it was present or not.
+   and we need to know whether it was present or not. (***DONE)
 
 
 lib/silcpgp
@@ -642,17 +541,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.