+ o Structured log messages to Log API. Allows machine readable log
+ messages. Would allow sending of any kind of data in a log message.
+
+ o Base64 to an own API (***DONE)
+
+ o Timer API (***DONE)
+
+ o Add builtin SOCKS and HTTP Proxy support, well the SOCKS at least.
+ SILC currently supports SOCKS4 and SOCKS5 but it needs to be compiled
+ in separately.
+
+ 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. (***DONE)
+
+ o SilcStack aware SilcHashTable. (***DONE)
+
+ o SilcStack aware SilcDList. (***DONE)
+
+ o Thread pool API. Add this to lib/silcutil/silcthread.[ch]. (***DONE)
+
+ 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 silc_stack_alloc shouldn't require multiple by 8 size argument, it
+ should figure it out itself. (***DONE)
+
+ o silc_malloc et. al. to respect --with-alignment.
+
+ 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);