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/.
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:
o silc_stringprep to non-allocating version.
+ o silc_hash_table_replace -> silc_hash_table_set. Retain support for
+ silc_hash_table_replace as macro.
+
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);
-
- /* Returns the amount of maximum size the pool can grow. */
- SilcUInt32 silc_thread_pool_num_max_threads(SilcThreadPool tp);
-
- /* Returns the amount of free threads in the pool currently. */
- SilcUInt32 silc_thread_pool_num_free_threads(SilcThreadPool tp);
-
- /* 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.
compression thus it must be implemented. SILC Zip API must be
defined.
+ 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)
+
+ 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
protocol related status (currently in silcstatus.h) cannot be in
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.