Imported robodoc
[silc.git] / TODO
diff --git a/TODO b/TODO
index 37341ab83e1e6c77626e330524adcbb8055cf075..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...
 
-TODO General
-============
+ o Add PERL scripting support from Irssi CVS.
 
- 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 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 Set different kind of settings, like, /set mutual_authentication,
+   /set key_exchange_timeout, /set conn_auth_timeout etc etc.
 
-TODO In SILC Client Library
-===========================
-
- o TODO in commands (silc/local_command.c, lib/silcclient/command.c and
-                    silc/silclient/command_reply.c):
-
-       o Local command to handle private message keys is not done
-       o Local command to handle channel private keys is not done
-       o Local command to handle key agreement protocol is not done
-       o RESTART command is not implemented
-
- 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 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 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.
-
-
-TODO In SILC Server
-===================
 
- o TODO in commands (command.c and command_reply.c):
+TODO/bugs In SILC Client Library
+================================
 
-       o RESTART is not implemented
-       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.
-       o In servers all command reply funtions should still call the
-         pending command reply even if the reply was error.  In client
-         it is not called but in server, I think, it must be called.
-         When implementing this check that all commands handle the
-         situation correctly when it is called as pending command
-         (it should most likely check that cmd->pending == TRUE/FALSE).
+ 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 TODO in notify types (packet_receive.c):
+ 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.
 
-       o SERVER_SIGNOFF notify type is not implemented
 
- o TODO in authentication protocol (protocol.c):
+TODO/bugs In SILC Server
+========================
 
-       o Public key authentication is missing in initiator side.  It must
-         be implemented by creating the authentication data.
+ o Incomplete IPv6 support:
 
- o TODO in general server (server.c)
+       o silcd/serverid.c and its routines supports only IPv4.
 
-       o SILC_PACKET_CONNECTION_AUTH_REQUEST packet type is not
-         implemented.
+ o The backup router support described in the protocol specification
+   should be done at some point.
 
-       o silc_server_connect_to_router_second checks the authentication
-         method to be used in the connection.  However, if it does not
-         find it it must resolve it from the responder by sending the
-         SILC_PACKET_CONNECTION_AUTH_REQUEST packet.
+ 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 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 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 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 Protocol execution timeouts are hard coded, should be
+         configurable.
 
- 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 IP address fields in configuration file should accept mask
+         format as well, IP/MASK, and not just plain IP.
 
- 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 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 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.
-
- o Connection redirect, if server is full, is not implemented.  I also
-   don't know how to do it currently.  Maybe it shouldn't be done at all.
 
+TODO/bugs In SILC Libraries
+===========================
 
-TODO In SILC Libraries
-======================
+ o Move all utility stuff to undef lib/silcutil/.  This includes trq,
+   dotconf and zlib.
 
- 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 Incomplete IPv6 support:
 
- o Re-key in general is actually missing (from everywhere) and must be done.
+       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
@@ -148,41 +91,40 @@ 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 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.
+ 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 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 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 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 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)
+=============================================
 
+ o silc_net_create_connection_async does not work the same way than on
+   Unix.  Do it with threads on WIN32.
 
-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.
+TODO In SILC Protocol
+=====================
 
-   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 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 X.509 certificate support.  SILC protocol supports certificates and
    it would be great to have support for them.  This is a big task as
@@ -199,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.