Imported robodoc
[silc.git] / TODO
diff --git a/TODO b/TODO
index be0898e9de3f0e11f699470ae27edd5324ecfc8b..508d80b2e8507da1a27cdff28fe1947a9fe54deb 100644 (file)
--- a/TODO
+++ b/TODO
-TODO
-====
+TODO/bugs in Irssi SILC client
+==============================
 
-This is more or less complete list of tasks that has to be done before
-SILC 1.0 could ever be released.  It is clear that the list does not
-include all the bugs that exists.  At the end of list are tasks that 
-needs to be done but are probably post 1.0.
+ o We should get rid of the clientconfig.[ch] in Irssi SILC and move the
+   cipher, hash, hmac and pkcs configuration to the Irssi SILC's config
+   file.
 
-Feel free to contribute if you have the ability and free time - all the
-help is really appreciated - and needed.
+ o The QUIT command should wait for servers disconnection (at least for
+   a while) before exiting the application.
 
-                                                       - Pekka
+ o Add local command to switch the channel's private key when channel has
+   several private keys.  Currently sending channel messages with many
+   keys is not possible because changing the key is not possible by the
+   user.
 
+ o Add local commands to list the current server and client public keys
+   that the user has.  And a local command to dump the contents of the
+   public key to the screen.  Something like LISTKEYS, SHOWKEY...
 
-New features TODO
-=================
+ o Add PERL scripting support from Irssi CVS.
 
- o Optimization in general.  I have not focused to program optimized code
-   in many circumstances.  It has been more important to get this up and
-   working.  A lot must be optimized especially the ID cache.  Instead of
-   using lists some hash tables should be used.  The searching by ID and
-   such must be made a lot faster.  If someone would like dedicate their
-   efforts purely to generate optimized code I'd be appreaciated.
+ o Extend the /HELP command to support sub commands or something.  So
+   that user can say /help set mutual_authentication they would get
+   help of the mutual_authentication setting.
 
- o We should replace all short, int, long, unsigned short, unsigned int,
-   unsigned long with some pre-defined datatypes that really are what
-   we want on all platforms.  int16, uint16, int32, uint32 etc. are
-   what we could use or maybe SilcInt16, SilcUInt16 etc.  Also, boolean
-   datatype should be defined.
+ o Set different kind of settings, like, /set mutual_authentication,
+   /set key_exchange_timeout, /set conn_auth_timeout etc etc.
 
- o Add boolean (or bool), typedef of unsigned char.
 
- o More platform supports should be added.  The code is pretty much
-   generic but there are some parts that require porting (SIM).  Also, 
-   some support for different platforms is needed into configure.in.
+TODO/bugs In SILC Client Library
+================================
 
- o SILC requires currently GCC to work because we use GCC specific 
-   compilation options.  Generally any compiler that supports inline
-   functions and can build shared libraries (for SIMs) should work.  
-   These cases should be included into configure.in.
+ o The public key authentication is missing for example in OPER and SILCOPER
+   commands.  See the XXX's in the lib/silcclient/command.c.
 
- o Extended SIM (SILC Module) support.  Currently only SILC Cipher API
-   and SILC Hash API may be used as SIM's.  What I have in mind is to
-   have extended support for SIM's so that basically any SILC API could
-   be used as SIM's.  This would open tremendous possiblities but
-   opens also issues on security that needs to be dealt with.
+ o The client library must manage somehow when receiving client that has
+   same nickname, same server, same username but different Client ID than
+   what we have in the cache.  It is now assumed that they are different
+   client but it might not be.  It should at least number the clients
+   using the client->num so that they can be accessed from the user
+   interface separately or it could just remove the old client unless
+   it is on some channels.
 
-   Some sort of SIM compilation environment should be defined so that
-   the SIM's could use SILC specific symbols from the modules (which they
-   cannot do currently).  In the future modules could add new features
-   to SILC easily with this support.  I'm more thinking this from client's
-   perspective to add new features to client (such as IRC support as SIM)
-   but server should have the support as well.  Anyhow, this is an 
-   interesting feature...
 
-   This maybe post 1.0 task - dunno.
+TODO/bugs In SILC Server
+========================
 
- o SIM support for other platforms than just for Linux.  Apache has
-   example code (code that we could use directly pretty easily) for
-   other platforms.
-
-TODO In SILC Client Library
-===========================
-
- o Client library crashes if for example server timeouts protocol
-   execution and disconnects the client.  The client, on the other hand
-   may still assume that the connection is active, even after receiving
-   the EOF.  Reason for this is that the clien library does not handle
-   the SilcSocketConnection reference counter at all.  This must be
-   fixed.
-
- o Add client library parameters or options that handle what kind of
-   messages the library should print out (using `say' client operation,
-   for example) and what is left for the application to print.  The
-   appliation could for example set that it handles all command printing
-   but all error printing should be handled by the library, etc...
-
- o Non-blocking connection on the background must be stopped if some
-   other connection on same window has established.  Now it is possible
-   that some non-blocking connection timeouts on the background when
-   we already have a working connection to some other place; things
-   goes bad.
-
- o Input line on UI is buggy.  Cursor movement etc bugs.  Too lazy to
-   fix it.
-
- o Logic for handling multiple same nicknames for example in private
-   message sending.  I guess the logic is done in server side but is
-   missing from client.
-
- o I guess, public key authentication (when connecting to a server)
-   is not working currently.  It is just matter of loading the keys
-   from file and using them (see corresponding code in server, it should
-   support public key authentication already).
-
- o Connection Authentication request resolving is missing and must be
-   done.  This is required by the protocol.
+ o Incomplete IPv6 support:
 
+       o silcd/serverid.c and its routines supports only IPv4.
 
-TODO In SILC Server
-===================
+ o The backup router support described in the protocol specification
+   should be done at some point.
 
- o TODO in command.c and in command_reply.c:
+ o New configuration file format must be added.  The new one will be
+   done using the dotconf config library (lib/dotconf).  The following
+   tasks relates closely to this as well and must be done at the same time
+   when adding the new config file format:
 
-       o LIST is not implemented
-       o RESTART is not implemented
-       o INVITE is probably not working correctly
-       o INFO works only with local server.  It must work with any
-         server in the network, implement the sending to other servers.
-       o PING works only with local server.  It must work with any
-         server in the network, implement the sending to other servers.
-       o MOTD works only with local server.  It must work with any
-         server in the network, implement the sending to other servers.
-       o JOIN does not check the invite and ban lists
-       o CMODE should be rewritten as it uses a lot duplicated code.
-         Some of the modes may still not be implemented or is implemented
-         the wrong way.  Also, setting ban and invite lists does not
-         work at all and requires some thinking how to do them.
+       o Server says that it is able to listen on multiple ports but
+         currently that is bogus.  It can, but internals are for single
+         server.
 
- o Packet processing can be made faster. All packet function in the
-   packet_receive.c has same prototypes.  Instead of calling those from
-   huge switch() make a table of callback functions that can be called
-   directly by the packet type.
+       o Protocol execution timeouts are hard coded, should be
+         configurable.
 
- o DNS/IP lookup blocks the server.  This must be fixed.  Check the
-   resolver stuff (resolver(3), resolver(5)).  Either we have to do the
-   own resolver stuff (through scheduler, if possible without writing
-   too much own stuff) or use threads.
+       o IP address fields in configuration file should accept mask
+         format as well, IP/MASK, and not just plain IP.
 
- o Acceptance of incoming connections (client and server connections)
-   should be checked before key exchange protocol.  Currently it is
-   checked at the authentication phase after KE, that is ok, but it should
-   be checked before starting KE, as well.
+        o Connection classes should be actually implemented in
+         serverconfig.c.  They can be defined but they are totally
+         ignored currently.  And they should be redefined also.
 
- o Server says that it is able to listen on multiple ports but currently
-   that is bogus.  It can, but internals are for single server.
 
- o Protocol execution timeouts are hard coded, should be configurable.
-
- o IP address fields in configuration file should accept mask format
-   as well, IP/MASK, and not just plain IP.
-
- o Connection classes should be actually implemented in serverconfig.c.
-   They can be defined but they are totally ignored currently.
-
-
-TODO In SILC Libraries
-======================
-
- o Rewrite the task system.  I made it too complex and too "neat" and
-   it really should be rewritten.  We don't need priorities really, one
-   priority is enough.  This will simplify a lot the task system.
+TODO/bugs In SILC Libraries
+===========================
 
- o Implement PFS (Perfect Forward Secrecy) flag in SKE (and in client and
-   server, actually).  If PFS is set, re-key must cause new key exchange.
-   This is required by the SILC protocol.
+ o Move all utility stuff to undef lib/silcutil/.  This includes trq,
+   dotconf and zlib.
 
- o Re-key in general is actually missing (from everywhere) and must be done.
+ o Incomplete IPv6 support:
 
- o ID Cache expiry does not work.
+       o All network routines in lib/silcutil/silcnet.[ch] does not
+         support IPv6.
+       o silc_id_render supports only IPv4 based ID's in the file
+         lib/silcutil/silcutil.c.
 
  o Compression routines are missing.  The protocol supports packet
    compression thus it must be implemented.  SILC Comp API must be
@@ -165,52 +91,41 @@ TODO In SILC Libraries
    not in distribution), but it is not used yet, and it requires some
    tweaking on the Makefiles (we want static lib not shared).
 
- o SIM support for SILC PKCS API needs to made so that they could be
-   used as SIM's.  At the same time some work is required on prime
-   generation as the way it is done now sucks.  Read from code for
-   more (silcpkcs.h).
+ o All payload parsing (decoding) functions should take unsigned char *
+   and uint32 as data and data length as arguments.  Now some of the
+   routines do already that but most of the routines use SilcBuffer.
+   The SilcBuffer ones should be removed since buf->data and buf->len
+   is more convenient to use.  However, the silc_buffer_[un]format
+   routines support only SilcBuffer so they would require reallocation
+   of SilcBuffer.  Maybe support for raw data (and not just SilcBuffer)
+   should be added silc_buffer_[un]format_? routines.  These are currently
+   only cosmetic changes but at some point must be done to make the
+   payload interfaces consistent.
 
- o Random Number Generator needs some tweaking.  Reading /dev/random may
-   block resulting slow initialization of RNG.  Some other things in the
-   RNG may block as well.  Also, I have some pending changes to the RNG 
-   that needs to be commited (from Schneier's Yarrow-160 paper).  They 
-   should make the RNG even better.
+ 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 Scheduler needs to be analyzed on high load as it might be unfair
-   towards select() because it may run timeout tasks before select() and
-   after select().  If it is found to be unfair the timeout task running
-   before select() should probably be removed.
 
+TODO/Bugs in native WIN32 support (libraries)
+=============================================
 
-Other Things TODO
-=================
+ o silc_net_create_connection_async does not work the same way than on
+   Unix.  Do it with threads on WIN32.
 
- o Write manuals for server.
 
- o Write manuals for client.
+TODO In SILC Protocol
+=====================
 
- o Write SILC Library Reference manual.  This would include all the SILC
-   API's with simple examples how the functions are to be used.  This is
-   pretty easy to create by taking all the functions plus their comments
-   from source/header files.  However, same sort of reference manual 
-   should be written for client and server as well.
+ o If channel founder mode is set and the invite mode is set on channel
+   then the founder should be added to the list automatically so that
+   if the founder signoff's it will be able join again to the invite only
+   channel wihtout being invited.
 
 
 TODO After 1.0
 ==============
 
- o Pthreads support.  A lot of problems are solved with server (and with
-   client as well) if we add pthread support.  We can forget things such
-   as non-blocking connecting etc, and we can do things such as DNS/IP
-   lookups async.  The server itself also benefits great deal from 
-   threads, especially from performance point of view.
-
-   But, this is not a small task and almost entire SILC Library has to
-   be made re-entrant.  Own API is probably added for the threads support
-   to make changes in the future as painless as possible.  So the API 
-   would have things like silc_mutex_lock, silc_mutex_unlock and 
-   friends...
-
  o X.509 certificate support.  SILC protocol supports certificates and
    it would be great to have support for them.  This is a big task as
    support has to be made for ASN.1 as well.  I've looked into OpenSSL 
@@ -226,6 +141,8 @@ TODO After 1.0
    to start writing one myself.  Anyhow, the OpenSSL X.509 lib should
    be checked.
 
+   Other package that should be checked is the NSS's X509 library.
+
  o SSH2 public keys support.  Maybe - not really needed but could be
    nice as SSH is widely used all over the place.  SILC Protocol 
    supports SSH2 public keys.