Merged silc_1_1_branch to trunk.
[silc.git] / TODO
diff --git a/TODO b/TODO
index 2b8196371c3965c4a052cec1a87028208c574cdd..92ce8299bddb81c48a60e884da2ab1833e7e29d8 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/.
 
 
@@ -242,6 +244,35 @@ Runtime library, lib/silcutil/
    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.
+
+ 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
@@ -614,6 +645,16 @@ lib/silcserver
  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: