Merged silc_1_0_branch to trunk.
[silc.git] / TODO-1.0
index 6b7d01e69309ccb34d33bf693895c82f5f5f5469..73e5a27bc4c2bbffb83c63e54fe1872255e611ff 100644 (file)
--- a/TODO-1.0
+++ b/TODO-1.0
@@ -31,6 +31,14 @@ least could be done.
  o OpenPGP certificate support, allowing the use of PGP public keys
    in SILC.
 
+ o SILC PKCS (silcpkcs.h) reorganizing when other PK supports added.
+   Move the SILC Public Key routines away from the crypto library into
+   the core library (silccore).  silc_pkcs_public/private_key_* routines
+   to silc_public/private_key_* routines.  The silc_public_key_* routines
+   should also automatically handle SILC Public Keys, and other keys
+   and certificates as well.  Add fe. silcpk.h into silccore.  It should
+   also include the Public Key Payload encoding and decoding routines.
+
  o Compression routines are missing.  The protocol supports packet
    compression thus it must be implemented.  SILC Zip API must be
    defined.
@@ -67,7 +75,7 @@ least could be done.
 
          These naturally cause the overal memory consumption to grow
          but would take away many allocations that can be done several
-         times in a second.
+         times in a second (see also ~/silcpacket).
 
        o Move the actual file descriptor task callback (the callback that
          handles the incoming data, outgoing data etc, that is implemnted
@@ -90,23 +98,6 @@ least could be done.
          SILC_BUFFER_LEN macro can do the same.  These would save
          totally 8 bytes of memory per buffer.
 
-       o Scheduler can be optimized for FD tasks by changing the fd_queue
-         to SilcHashTable instead of using linked list.  We need to do
-         one-to-one mapping of FD to task and hash table is more efficient
-         for this usage.
-
-         Also redefine the silc_select to perhaps return a separate
-         structure of the events that actually occurred, instead of
-         returning the events in the fd_list which is then traversed
-         in the generic code to find the changed events.  This can be
-         made faster by having own struct which includes only the
-         changed events, thus the tarversing is faster since the whole
-         fd_list is not traversed anymore (it is still traversed in the
-         silc_select but at least it removes one extra tarversing later
-         for the same list).
-
-         Other task queues should be changed to use SilcList.
-
  o Optimizations in Server
 
        o Remove the big switch statement from the function 
@@ -133,37 +124,60 @@ least could be done.
          SIGNOFF of notify at all (using SIGNOFF takes the idea about
          SERVER_SIGNOFF away entirely).
 
+        o Another SERVER_SIGNOFF opt/bugfix:  Currently the signoff is
+          sent to a client if it is on same channel as the client that
+          signoffed.  However, the entire SERVER_SIGNOFF list is sent to
+          the client, ie. it may receive clients that was not on the 
+          same channel.  This is actually against the specs.  It must be
+          done per channel.  It shouldn't receive the whole list just
+          because one client happened to be on same channel.
+
+       o See also ~/silcserver
+
  o Add SilcAsyncOperation to utility library.  Any function that takes
    callback as an argument must/should return SilcAsyncOperation (see 
    ~/silcasync).
 
  o Rewrite SilcProtocol to be SilcFSM (see ~/silcfsm).
 
- o Change SILC_TASK_CALLBACK to non-static, and remove the macro
-   SILC_TASK_CALLBACK_GLOBAL.
+ o Do some scheduler optimizations and interface changes (see 
+   ~/silcschedule).
+
+ o Change the lib/silccore/silcpacket.[ch] interfaces (see ~/silcpacket).
+
+ o Add abstract SilcStream and SilcSocketStream (see ~/silcstream).
+
+ o Change some of the SILC Net interfaces (see ~/silcnet).
 
  o Add DSS support.
 
  o SILC RNG does not implement random seed files, and they should be
    implemented.
 
- o Add SILC scheduler's internal routines into a table of implementation
-   function pointers, that the generic code then takes as extern from
-   implementation.  These are the silc_schedule_internal_* routines.
-
  o Cipher optimizations (asm, that this) at least for i386 would be nice.
 
  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 Add a timeout to handling incoming JOIN commands.  It should be 
+   enforced that JOIN command is executed only once in a second or two
+   seconds.  Now it is possible to accept n incoming JOIN commands
+   and process them without any timeouts.  THis must be employed because
+   each JOIN command will create and distribute the new channel key
+   to everybody on the channel (Fix this to 0.9.x).
+
  o EPOC specific additions/changes required:
 
-       o In lib/silccore/silcpacket.c global RNG is used.  Change the
-         interface for that function.  The PKCS#1 also calls global RNG
-         (even though it is not used currently in SILC, the interface
-         allows its use).
+       o lib/silcutil/epoc routines missing or not completed.
+
+       o The PKCS#1 also calls global RNG (even though it is not used 
+         currently in SILC, the interface allows its use).
 
        o Something needs to be thought to the logging globals as well, 
          like silc_debug etc.  They won't work on EPOC.  Perhaps logging
          and debugging is to be disabled on EPOC.
+
+ o Check whether we can fully comply with RFC 2779.
+
+ o The CMODE cipher & hmac change problem (#101).