Implemented version string checking to client and server.
[silc.git] / CHANGES
diff --git a/CHANGES b/CHANGES
index 79fbf61dff97d6bc6bbd1fc98440452721cfaa46..426d317c50c6fccfb6891b0a78899b8e47db48e8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,732 @@
+Sat Dec 16 17:39:54 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Implemented version string checking to both client and server.
+         The check is incomplete currently due to the abnormal version 
+         strings used in development version of SILC.
+
+Fri Dec 15 15:55:12 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Changed char *data to unsigned char *data in ID Cache system to
+         support binary data as ID Cache data. Changed code to support
+         binary data in lib/silccore/idcache.c.
+
+       * Renamed silc_server_packet_relay_command_reply to 
+         silc_server_command_reply as it is normal packet receiving
+         function. Rewrote the function to accept command replys for
+         servers and not only for clients.
+
+       * Mark remote router always as registered server if we are connecting
+         to it.  Otherwise, commands sent by the router to us are ignored.
+
+       * All ID List find routines now returns the ID Cache Entry pointer
+         as well if requested.
+
+       * WHOIS command works now in router environment, tested with two
+         routers, two servers and two clients.
+
+       * Cleaned up and rewrote IDENTIFY command. IDENTIFY should work now
+         in router environment (as it is almost equivalent to WHOIS) but
+         hasn't been tested thoroughly.  Added new functions:
+
+         silc_server_command_identify_parse
+         silc_server_command_identify_send_reply
+         silc_server_command_identify_from_client
+         silc_server_command_identify_from_server
+
+       * Disabled route cache adding because adding two different ID's with
+         same IP replaces the old cache entry thus giving wrong route.
+         The entry->router->connection is always the fastest route anyway
+         so route cache may not be needed.  Of course, new routes maybe
+         established after receiving the ID when the entry->router->connection
+         might not be anymore the most optimal.
+
+Thu Dec 14 15:55:35 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Add route cache for received ID for fast routing.
+
+       * Added silc_server_packet_route to route received packet on router
+         that is not destined to us.
+
+       * Renamed silc_server_get_route to silc_server_route_get.
+
+       * Added id_string and id_string_len fields into SilcServer to
+         include encoded ServerID for fast comparing without excess
+         encoding of the ID's.
+
+       * Cleaned up WHOIS command on server side. Added following static
+         functions:
+
+         silc_server_command_whois_parse
+         silc_server_command_whois_check
+         silc_server_command_whois_send_reply
+         silc_server_command_whois_from_client
+         silc_server_command_whois_from_server
+
+       * Added macro SILC_SERVER_COMMAND_CHECK_ARGC to check mandatory
+         arguments in command replies. All command functions should be
+         updated to use this macro.
+
+Sun Dec 10 23:52:00 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Minor typo fixes on command reply handling on server.
+
+Tue Nov 28 11:05:39 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Added silc_server_command_add_to_channel internal routine to add
+         the client to the channel after router has created the channel and
+         sent command reply to the server.
+
+       * Added generic silc_server_send_command to send any command from
+         server.
+
+       * Use static buffer with ID rendering instead of duplicating data.
+
+Mon Nov 27 21:39:40 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Fixed a channel user mode bug when joining to a channel server gave
+         everybody channel founder rights, oops.
+
+       * We mark ourselves as the router of the incoming server connection
+         if we are router ourselves.  This way we can check in some packet
+         sending functions whether it is locally connected server.  For
+         incoming router connections we put NULL.
+
+       * For router sending packets locally means now always sending the
+         packet cell wide; to local clients and local servers.  For normal
+         server sending packet locally means sending it to only local
+         clients.
+
+       * Fixed the JOIN command to really work in router environment.  If the
+         channel is created it is always created by the router.  Router is
+         also responsible of making the initial joining to the channel,
+         sending JOIN notify to the sending server and distributing 
+         NEW_CHANNEL and NEW_CHANNEL_USER packets.  Hence, if the channel
+         does not exist server doesn't do anything else but forward the
+         command to the router which performs everything.
+
+       * Added silc_server_send_channel_key function to send the Channel Key
+         payload.
+
+       * Added silc_server_create_channel_key to create new channel key.  The
+         channel key is now re-generated everytime someone joins or leaves
+         a channel, as protocol dictates.  Note: channel->key_len is the
+         key length in bits.
+
+Wed Nov 22 22:14:19 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Splitted server.[ch] finally.  Created now packet_send.[ch] and
+         packet_receive.[ch] to separate packet sending and receiving
+         routines.  The server.[ch] now includes everything else including
+         actual packet processing (writing and reading data) and other
+         server issues.
+
+         Renamed silc_server_private_message_send_internal to
+         silc_server_send_private_message.  The routine is still though
+         used only to relay private messages as server does not send
+         private messages itself.
+
+         Renamed silc_server_new_channel to silc_server_create_new_channel
+         and added new function sicl_server_new_channel that handles the
+         incoming New Channel packet.  Added also new sending function
+         silc_server_send_new_channel to send New Channel Payload.
+
+       * Added new function silc_server_notify to process incoming notify
+         packet to the server/router. Server may then relay the notify
+         to clients if needed.
+
+       * Added new function silc_server_new_channel_user to process incoming
+         New Channel User packet.  Router will redistribute the packet and
+         send JOIN notify to its local clients and locally connected servers
+         if needed.  Normal server will send JOIN notify to its local client
+         on same channel when received this packet.  Added also corresponding
+         sending function silc_server_send_new_channel_user to sent the
+         payload.
+
+       * Added boolean route argument to send_notif_to_channel and
+         packet_send_to_channel functions to attempt to route the packet
+         if it is TRUE and send only locally if it is FALSE.
+
+Tue Nov 21 19:49:31 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * silc_server_replace_id now broadcasts the received replace ID
+         packet if it is not broadcast packet already. The router must
+         broadcast to inform other routers about changed ID.
+
+       * Added backpointer to server's router into SilcServer context in
+         silcd/server_internal.h.
+
+       * Fixed silc_server_packet_broadcast to send correct broadcast
+         packets.
+
+       * The channel key is now distributed to the local client as soon
+         as it is received from the router (in router environment) so that
+         no other packet may be sent for the channel until client has 
+         received the key.
+
+       * silc_server_remove_channel_user now broadcasts the received
+         Remove Channel User packet if it is not broadcast packet already.
+         The router must broadcast to inform other routers about removed
+         channel user.
+
+       * Added users field into SilcPacketContext that is a reference count
+         of the context.  One can increase the reference count by calling
+         silc_packet_context_dup which is now changed to just increase the
+         reference count instead of duplicating the data.  The reference
+         count is decresed by calling silc_packet_context_free that will
+         free the data after the reference count hits zero.
+
+         For now on the packet context and everything allocated into it
+         (including the raw packet from network) must be freed by calling
+         the new silc_packet_context_free function.  Added also new function
+         silc_packet_context_alloc that must be used now to allocate the
+         context.  This also means that if a routine is asynchronous from
+         silc_[client/server]_packet_parse_type the packet context must
+         be duplicated by calling silc_packet_context_dup.  Otherwise it
+         gets free'd after silc_[client/server]_packet_parse_type returns.
+         Also, one must remember that if packet is duplicated then its 
+         reference count must be decresed by calling the free function as
+         many times as it was duplicated.
+
+       * Changed SilcBuffer field from protocol contexts to SilcPacketContext
+         from both client and server.
+
+Mon Nov 20 23:47:03 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Made joining to a channel working in router environment.
+
+       * Cleaned up JOIN command on server side and create function
+         silc_server_command_join_channel internal routine to make the
+         joining happen.
+
+Thu Nov  9 21:12:39 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Changed silc_command_pending list to SilcDList.  Also, added
+         `ident' field to SilcServerCommandPending structure to identify
+         the reply and to call correct callback.
+
+         Added silc_server_command_pending_check function to replace the
+         corresnponding macro.  The silc_command_pending list is not
+         extern anymore.
+
+       * Added silc_command_set_ident into lib/silccore/silccommand.[ch]
+         to set identifier to previously allocated Command Payload.  It
+         is used to set identifier for command when resending Command
+         Payload.
+
+       * Added silc_command_payload_encode_payload to encode Command
+         Payload buffer from SilcCommandPayload structure.
+
+       * Added silc_argument_payload_encode_payload to encode Argument
+         payload buffer from SilcArgumentPayload structure.
+
+Wed Nov  8 21:03:28 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Changed WHOIS command to support router connection on server side.
+         The whois request is always sent to router unless the server is
+         standalone server.  After server has received the reply from the
+         router will it send the reply to the client.
+
+       * Added silc_server_packet_broadcast into silcd/server.[ch] to
+         broadcast received broadcast packet.  The function is used only
+         by router.  The broadcast packet is always sent to the router's
+         primary route.
+
+       * Added silc_id_render function in lib/silcutil/silcutil.[ch] to
+         render given ID to printable string, for log files for example.
+
+Tue Nov  7 22:14:19 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Made basic router to router connections working.  At least they
+         can now connect to each other but nothing really works the way
+         they are supposed - yet.
+
+       * Added new initiator token to RouterConnection configuration
+         file in silcd/serverconfig.[ch].  It is used to tell whether we
+         are the initiator to the remote router or whether we'll expect
+         the other end to connect.
+
+       * Moved registering of listener task to silc_server_init, hence
+         the server starts listenning as soon as it is run, even if it
+         does not have connections to other routers.  Let's see how well
+         this will work.
+
+       * Changed default connection retry timeouts for more suitable in
+         silcd/server.h.
+
+       * Removed cipher and such arguments from silc_idlist_add_client
+         and silc_idlist_add_server prototypes from silcd/idlist.[ch].
+         Added new function silc_idlist_add_data to add the keys and stuff
+         to any ID entry.
+
+       * Added SilcIDListData structure and added it to SilcClientEntry
+         and SilcServerEntry as their first field in the structure.  This
+         way we can explicitly cast the ID entries to the SilcIDListData
+         structure and get common data for the entries.  In past, we had
+         to first check what type of connection it is and then cast it to
+         correct ID entry type.  Now, we can directly cast the opaque
+         pointer to the SilcIDListData (no matter what ID entry it actually
+         is) and get the data needed.
+
+Mon Nov  6 21:56:12 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Wow, found a bug in scheduler.  The scheduler uninitialized itself
+         in some circumstances even if threre were timeout tasks, though not
+         IO tasks, but tasks anyway.  Now fixed.
+
+       * Defined SilcServerConnection structure to hold connection specific
+         stuff about directly connected servers and routers.  The definition
+         is currently in silcd/server_internal.h.  I thought about having
+         a bit more important role fro this struct but for now it is used
+         only when connecting to other server (or router actually).
+
+       * Added connecting retry support in server when connecting to
+         router(s).  The retry feature implement exponential backoff
+         algorithm.  Also, added SilcServerParams structure to hold default
+         parameters for server.  For now, it include these retry settings
+         and are hard coded.  After server is moded to be as Silc Server
+         Library this structure will be more important.
+
+Sun Nov  5 22:28:44 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Changed client librarys channel->clients table to SilcList and
+         changed code accordingly.
+
+Thu Nov  2 16:28:01 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Changed client's channel table to SilcList and changed code 
+         accordingly.  Also changed SilcChannelClientEntry to include back-
+         pointer to the channel so that client entry can use that structure
+         as list as well and we have fast cross-reference to the channel.
+         This change dramatically decreased the complexity of channel
+         handling with client entry and vice versa (removed one extra
+         loop when searching for channel entry from many functions).
+
+       * Changed server->sim from table to SilcDList and changed code
+         accordingly.
+
+       * NAMES command can now be used from user interface.  It will show
+         the user list on the channel, neatly.
+
+       * Added realname pointer to SilcClientEntry in lib/silcclient/idlist.h.
+         Code now saves realname of the user if it becomes available.
+
+       * Renamed configure.in to configure.in.pre and made ./prepare
+         script to automatically add correct version string to
+         configure.in which it creates from configure.in.pre.
+
+Wed Nov  1 17:21:26 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * NAMES command reply now shows users mode with the nickname when
+         joining to channel.
+
+       * Moved silc_client_ch[u]mode[_char] functions from 
+         silc/clientutil.[ch] to lib/silcclient/client.[ch].  Though, that
+         place sucks, they are utility functions and should be in some
+         other file.
+
+       * Fixed some unsigned int's to unsigned short's.  Patch by cras.
+
+       * Fixed contrib/getopt*.[ch] to not require config.h.  Patch by
+         cras.
+
+Tue Oct 31 20:10:37 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Updated README.
+
+       * Added TRQ (efficient deque and list library) into lib/trq.  This is
+         a very good list library that is currently used in the SILC.  Defined
+         SilcList API over the library because I didn't like the API very
+         much.  See lib/trq/silclist.h for the API and examples of how to
+         use the API.  Fixed various places in the code to use the new
+         SilcList API. The SilcList is meant for lists that has a structure
+         already defined as a list.  It is not suitable to add just some
+         context to the list (in TRQ, the context is the list actually).
+
+         So, I defined SilcDList that can be used for the purpose where 
+         predefined list structure does not exit.  This can be used as
+         such list.  Now some context just can be added to the SilcDList.
+         Currently this list is not used in the SILC just yet, though there
+         are a lot places where this can replace dynamically allocated
+         tables and I will fix these places, later, to use SilcDList.
+         See lib/trq/silcdlist.h for SilcDList (they are all inline functions,
+         and use TRQ internally).
+
+         Also fixed some annoying warning messages that the original TRQ
+         code generated.  Also minor changes to TRQ's Makefile.in.
+
+       * Added support for querying by Client ID to both WHOIS and 
+         IDENTIFY commands into server, as required by the protocol.
+
+       * Removed method function pointers from SilcBuffer structure. They
+         weren't used to anything and just increased the context size for
+         no good reason.  This change also made silc_buffer_alloc and
+         silc_buffer_free functions inline functions.
+
+       * Disabled command flooding detection support until it's fixed so 
+         that it accepts commands in but does not execute them more than once
+         in two seconds.
+
+       * Added silc_net_localhost(), to return local hostname, into
+         lib/silcutil/silcnet.[ch].  Also added client->hostname pointer
+         that must be initialized before calling silc_client_init.
+
+       * Added new function: silc_server_send_notify_on_channels to send
+         notify messages to all channels client has joined.  It is assured
+         that the message is sent only once per client.
+
+       * Moved silc_log_format (from lib/silcutil/silclog.[ch] into
+         lib/silcutil/silcutil.[ch] as silc_format function.  The new 
+         function is generic and is used by server as well, not only by
+         the logging routines.
+
+       * Added new SKE status type: SILC_SKE_STATUS_BAD_VERSION to indicate
+         the provided version string was not acceptable.  Added new function:
+         silc_ske_check_version into lib/silcske/silcske.h.  The function
+         must be implemented by the application (client or server) and it
+         does not reside in the SKE library.  The function checks the version
+         string remote end sent.
+
+       * Added back pointers (to opaque context and to SilcSocketConnection) 
+         into SilcPacketContext structure into lib/silccore/silcpacket.h.
+
+       * Added silc_packet_context_dup into lib/silccore/silcpacket.[ch] to
+         duplicate packet context structure.
+
+       * Changed `notify' client operation to send same arguments as client
+         receives from server except for ID's.  ID's are mapped to correct
+         ID entry and that is returned.  Also, if channel entry is not sent
+         by server but the notify is for channel the channel entry is sent
+         to application (otherwise application doesn't know that it is for
+         channel (library gets it from packet's Destination ID)).
+
+       * Added silc_client_remove_from_channels into client library to 
+         remove a client from all channels it has joined to.  Used when 
+         received SIGNOFF notify from server.  Added also new function
+         silc_client_replace_from_channels to replace old ID entry with
+         new ID entry on all channels.  Used when received NICK_CHANGE
+         notify from server.
+
+       * Fixed ID Cache list handling in silc_idlist_get_client in 
+         lib/silcclient/idlist.c.  Also, added silc_idlist_get_client_by_id
+         to get (or query) client by ID.
+
+       * Updated TODO list.
+
+       * Added connection authentication status message defined by the
+         protocol: SILC_CONN_AUTH_OK and SILC_CONN_AUTH_FAILED and added the
+         support for these into the code in client and server side.
+
+       * Added generic function silc_client_send_command to send any command
+         with variable argument list.  Application should use this function
+         to send commands if the command functions provided by the library
+         does not suite for the application's user interface needs.
+
+       * Added new `failure' client operation.  Application is notified about
+         received failure packet if client is executing a protocol.  In this
+         case the protocol's execution has failed.
+
+       * Added SKE's end notify to send the SKE_SUCCESS notify message that
+         is required by the protocol.
+
+       * Added SILC_PROTOCOL_STATE_FAILURE to indicate received failure
+         packet from remote.  SILC_PROTOCOL_STATE_ERROR indicates local
+         error at our end.
+
+       * Added status flag to SilcSKE object to indicate realtime status
+         of the SKE protocol.
+
+       * Application receives now exactly same command reply arguments as
+         the library receives from server.  However, if ID is received the
+         corresponding ID entry is returned to the application (eg. Client
+         ID is mapped to correct SilcClientEntry entry and that is returned).
+         Changed command_reply client operation due to this change.
+
+       * Changed all ID's in commands and in command replys as ID Payloads.
+         Change affected both client and server side codes.
+
+         All ID's sent in SILC network (with execption of ID's in SILC
+         Packet header) are sent in ID Payload to support variable length
+         ID's.
+
+       * Server now notifies nick changes and notifies all clients on
+         the channels about the new nickname (about the new Client ID,
+         actually).
+
+       * Implemented CMODE command to change channel modes. Supports all
+         channel modes defined by the protocol specs except ban and invite
+         lists. (Also, private channel key mode is supported but support for
+         setting private channel key in client is missing, thus, this mode
+         has no effect on client side (except that server requires that the
+         client uses private channel key and normal channel traffic does not
+         work anymore)).
+
+         Also, invite mode works per se, but INVITE command does not work
+         yet correctly, so you can set channel as invite only channel but
+         inviting clients to the channel does not work (it is yet to be
+         thought what's the best way to do it).
+
+       * Added new command SILC_COMMAND_CUMODE to change user mode on the
+         channel.  Defined user modes: CHANNEL_FOUNDER and CHANNEL_OPERATOR.
+         Implemented CUMODE command to change user's mode on the channel.
+         Supports all modes defined by the protocol specs.
+
+       * Added NAMES command reply to return users modes on the channel.
+
+       * Removed unnecessary and slow ciphers from lib/silccrypt.
+
+       * Set SO_KEEPALIVE option to connection sockets by default.
+
+       * Added new command reply status: SILC_STATUS_USER_NOT_ON_CHANNEL.
+
+       * Added notify types: MOTD, CMODE_CHANGE and CUMODE_CHANGE.  Also,
+         redefined the Notify Payload into protocol specs.
+
+       * Added silc_id_payload_parse_id to get ID directly from raw
+         ID payload data.
+
+Mon Oct  9 20:57:02 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Changed SILC_COMMAND_IDENTIFY in protocol specification to 
+         accept searching by Client ID as well.
+
+       * Added support for LEAVE and SIGNOFF notify types in client library.
+
+       * Added silc_id_payload_parse_data into lib/silccore/silcpayload.[ch]
+         to parse ID Payload from raw data.
+
+Sun Oct  8 19:33:08 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Added flags parameter into silc_ske_assemble_security_properties
+         function in lib/silcske/silcske.[ch].
+
+       * Changed notify client operation to fit better for notify messages
+         sent by server.  The notify payload received from server is now
+         passed to the application (after parsing it to SilcNotifyPayload).
+         It is application's responsibility to retrieve the arguments
+         from the payload and show the message the way it wants.  The message
+         sent by server is implementation specific.
+
+       * Changed public keys to comply with the protocol specification.
+         Old public keys are not supported anymore and are not compatible.
+
+       * Removed nickname from Channel Payload as the latest draft removed
+         it.  The client must resolve the nickname from the NAMES command
+         reply received when it joined the channel.
+
+         Also, changed all channel_xxxx_payload to channel_payload_xxxx.
+
+Sat Oct  7 21:55:01 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Fixed some errors in protocol specification drafts.
+
+       * Created lib/silccore/silcnotify.c to implement Notify Payload
+         encoding and decoding, lib/silccore/silcpayload.[ch] to implement
+         generic payloads described by protocol specifications.  The file
+         includes implementations for ID Payload and Argument Payload.
+
+       * Changed Command Payload implementation to use the new Argument
+         Payload.  Changed command_xxxx_payload to command_payload_xxxx
+         to comply with SILC coding conventions.
+
+       * Added suppport for Argument Payload handling in Notify Payload
+         implementation as protocol requires it.  Added the new support
+         into server and client lib as well.
+
+Thu Oct  5 21:16:28 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Added support for multiple nicknames on same channel.  [n] is
+         added locally to the nickname if there are more than one same
+         nicknames on the channel.
+
+       * Server now sends all nicknames that matched WHOIS request.
+         Client also shows the list received from server.
+
+       * Added TOPIC command to client side.  User can now set and show
+         current topic on channel.
+
+       * Added MOTD command to client and server.  Also, server sends the
+         motd when client connects to the server.
+
+       * Changed version strings to comply ISO 8601.
+
+Wed Oct  4 23:29:06 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Fixed protocol error handling in client library.  It should now
+         cope even if the SKE fails for some reason.
+
+       * Made new protocol specification drafts for submitting to IETF.
+
+       * Implemented TOPIC command to server in silcd/command.c.
+
+       * Added two new notify types into lib/silccore/silcnotify.h:
+         SILC_NOTIFY_TYPE_NICK_CHANGE and SILC_NOTIFY_TYPE_TOPIC_SET to
+         notify nickname change and topic setting/change on a channel.
+
+       * API change of command_reply operation in client library.  The
+         application gets now the status type received from server as well.
+
+Sat Sep 30 16:57:42 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Removed the function just added to lib/silcutil/silcschedule.[ch].
+
+       * Cras fixed and optimized the packet handling even further and
+         it should work now.  Minor change to the prototype of function
+         silc_packet_receive_process in lib/silccore/silcpacket.[ch].
+
+Sat Sep 30 08:48:47 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Added new function into lib/silcutil/silcschedule.[ch]:
+         silc_schedule_with_fd to select() a specified fd.  The function
+         returns after timeout expires or data arrives or goes.  The
+         function is used by packet routines to wait that all data is
+         received from network.
+
+       * Fixed data reading from network in lib/silccore/silcpacket.c.
+         The code now assures that all data is read from the fd and then
+         continues packet processing.  This was a bug fix since the code
+         used to drop some data in some circumstances.
+
+       * Added new function into lib/silcclient/client.[ch]:
+         silc_client_start_key_exchange to start key exchange after
+         connection has been established to server.  The code internally
+         now uses this funtion but its main purpose was to provide it
+         for applications that perform their own connecting.  After
+         application has created a connection it merely calls this
+         function to start the key exchange between client and server.
+         The library takes care of everything else after that.
+
+         Updated also lib/silcclient/README to explain the usage of
+         this new function.
+
+       * Do not send to application information that connection has
+         been established.  Application gets notified it by connect
+         operation anyway.
+
+Thu Sep 28 23:40:19 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Applied cras's patch to add silc_schedule_one function.  The
+         function runs scheduler once and returns.
+
+       * Fixed the scheduler after cras messed it up.  The timeout
+         handling works now as it's supposed to work.
+
+       * Added into lib/silccore/ silcnotify.h to include notify
+         message types support.  Changed silc_server_send_notify*
+         functions, in server.[ch], to support those new notify types.
+         Added the support for the notify types into client library,
+         as well.  Added new notify client operation into ops.h in
+         lib/silcclient/.
+
+       * Changed silc_server_packet_send_to_channel to send normal
+         packets instead of just channel message packets.  The function
+         is now used to send the notify packets to channels.  It is not
+         used to send channel message packets anymore, as server never
+         sends them anymore.
+
+       * Added explicit casting into lib/silcutil/silcbuffmt.c to few
+         va_arg()s as it seems to require it nowadays.  I guess, if SILC
+         is compiled with older va_arg() the new code should work anyway.
+
+Wed Sep 13 18:10:14 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Splitted core library.  Core library (lib/silccore) includes
+         now only SILC protocol specific core (and common) components.
+         Created new utility library (lib/silcutil) that includes more
+         generic purpose stuff.  The stuff for util library was taken
+         from the old core library.  This was minor and easy split.
+
+       * Created SILC Client Library (lib/silcclient) that includes
+         implementation of the SILC client without user interface.  This
+         was major move from silc/ directory.  The code has been changed
+         so that it is transparent towards the user interface.  The
+         silc/ directory includes now the same user interface as before
+         and it uses the new client library.  Read lib/silcclient/README.
+         Basicly, the client library performs everything else related
+         to SILC except user interface handling.  Also, configuration
+         files are considered to be part of user interface and library
+         does not handle them.
+
+         This change also changed a lot of structures, function naming etc.
+         Most important change was that SilcClientWindow object was
+         renamed to SilcClientConnection in the client library.  Created
+         also new file lib/silcclient/ops.h.  Also added new files
+         silc/local_command.[ch] and silc/client_ops.[ch].
+
+         All these changes were made to make it easier for user interface
+         designers to create what ever user interface for the SILC client
+         they want.
+
+         It is also expected that the server will be moved to lib
+         directory as well and SILC Server Library will be created;
+         sometimes in the future.
+
+       * Removed Local commands from lib/silccore/silccommand.h as
+         they are application specific and new client library does not
+         handle any of those anymore.
+
+       * Several functions moved to lib/silcutil/silcutilc.[ch] from
+         old client implementation in silc/.
+
+       * Added support for callback functions in SILC_LOG_* macros.
+         Application can now set its own callbacks that will be called
+         instead of using the default functions that will always print
+         the debug messages to stderr (or stdout).  Also, debugging can
+         now be disabled by setting silc_debug to FALSE and re-enabled by
+         setting it to TRUE.  Note, that logging will still work even
+         if debugging is disabled.
+
+         New functions in lib/silcutil/silclog.[ch]: silc_log_set_callbacks,
+         silc_log_reset_callbacks, silc_log_set_debug_callbacks and
+         silc_log_reset_debug_callbacks.
+
+       * To enable debugging in silc client one must give now -d
+         option on command line.
+
+       * Changed silc_schedule_init to automatically allocate task queues
+         if they are not allocated before calling it.
+
+Thu Sep  7 10:49:33 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Added GMP 3.1 into math library.
+
+Sun Aug 20 21:27:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Added SILC_PACKET_REMOVE_CHANNEL_USER to remove a client from
+         a channel in SILC network.  The packet is used by servers and
+         routers to notify other routers that user has left a channel.
+         This little feature was missing until now.  Added the feature
+         to protocol specification as well.
+
+         Added functions: silc_server_send_remove_channel_user and
+         silc_server_remove_channel_user into server.[ch].
+
+       * Added SILC_PACKET_REKEY and SILC_PACKET_REKEY_DONE into
+         lib/silccore/silcpacket.h.  However, they are not implemented
+         yet.
+
+Sat Aug 19 23:04:16 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Fixed joining to a channel and sending channel messages
+         between server and router.  The channel message sending should
+         now work inside a cell.
+
+Tue Jul 25 20:46:13 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Fixed the private message sending between server and router.
+         The private message sending should now work inside a cell.
+
+       * Added silc_server_replace_id into server.[ch] to replace
+         existing ID in the SILC network.
+
+       * Added silc_idlist_find_server_by, silc_idlist_replace_client_id
+         and silc_idlist_replace_server_id into idlist.[ch] in server.
+
+Mon Jul 24 18:33:31 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Fixed the server to server connections.  Server can again now
+         connect to router.  Router to router connections probably does
+         not work just yet.
+
 Thu Jul 20 13:15:01 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
 
        * Added dynamic protocol registering support.  Now protocols can