be2ab6e5d246e880480ae5083f433d5a0be41050
[silc.git] / CHANGES
1 Fri May 25 14:38:38 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2
3         * Do not say "You have left channel %s" in client library.
4           Moved it to the application.  Affected files are
5           lib/silcclient/command.c and silc/client_ops.c.
6
7         * Fixed silc_client_get_clients.  Command context was not
8           duplicated and was freed memory in the callback.  Affected
9           file lib/silcclient/idlist.c.
10
11         * Do not say "you are now talking..." on JOIN command in the
12           client library.  The appliation must handle it.
13
14         * Do not say ".. changed topic to" in command reply in the
15           client libary.  The application must handle it.
16
17         * Fixed TOPIC command sending in the client library.
18
19         * Fixed a memory leak in silc_client_command_free in the file
20           lib/silcclient/command.c.
21
22 Thu May 24 19:08:55 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
23
24         * Imported a modified version of Irssi client to the source tree.
25           The Irssi will be used to create a new client called
26           Irssi SILC.  Imported to irssi/.
27
28           Added silc_core_init_finish function to the Irssi.  Affected
29           file irssi/configure.in.
30
31           A lot changes in the Makefile.ams around the irssi tree.
32
33 Tue May 22 22:23:49 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
34
35         * Do not rehash if the new size is same as the old size of the
36           hash table, in the silc_hash_table_rehash*.  The affected file
37           lib/silcutil/silchashtable.c.
38
39         * Replaced hash_table_del_by_context calls from the server
40           (when channel->user_list and client->channels) to the
41           hash_table_del as it is sufficient and faster.
42
43 Tue May 22 17:27:16 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
44
45         * Added silc_hash_table_list, silc_hash_table_get and the
46           SilcHashTableList structure to provide an alternative way to
47           traverse the hash table.  The affected files are
48           lib/silcutil/silchashtable.[ch].
49
50         * Changed the server's idlist routines to use the hash table
51           routines to optimize the code.
52
53 Mon May 21 21:46:20 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
54
55         * Replaced the client entry's `channel' list and channel entry's
56           `user_list' list to hash tables for optimized lookup.  Changed
57           the code to use the hash table interface around the code. 
58           Affected file lib/silcd/idlist.[ch].
59
60         * Added `auto_rehash' boolean argument to the function
61           silc_hash_table_alloc to indicate whether the hash table should
62           auto-rehash when it thinks is appropriate time.  It will
63           increase the hash table size if the there is twice as much
64           entries in the table than the size of the table, and will
65           decrease the size if there are twice as less entries than
66           the size of the table.
67
68 Mon May 21 09:51:11 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
69
70         * Fixed silc_xxx_get_supported to not crash at some circumstances.
71
72 Sun May 20 13:45:58 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
73
74         * silc_idcache_purge_by_context deletes the entry now by context
75           as it is supposed to do.  Affected file lib/silccore/idcache.c.
76
77         * Send the ERR_NO_SUCH_NICK in the WHOIS command reply if the
78           client is not anymore valid (WHOWAS givens the info) and not
79           the ERR_NO_SUCH_CLIENT_ID if the nickname still exists.
80
81 Sat May 19 16:30:03 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
82
83         * Removed the `data' and `data_len' arguments from the ID Cache
84           interfaces and added `name' argument.  ID Cache does not handle
85           anymore the binary data only a names associated with given ID.
86
87         * When hashing a Client ID with silc_hash_id the entire ID is
88           not hashed anymore, instead only the hash of the Client ID is
89           hashed.  This way we can access the Client ID from the cache
90           with Client ID but with the hash of the ID (which is a hash of
91           the nickname) as well without any difference in performance.
92
93           Added also silc_idcache_find_by_id_one_ext to do one on one 
94           searching when we have the actual ID.  Added also function
95           silc_hash_client_id_compare.  The affected files are
96           lib/silccore/idcache.[ch] and lib/silcutil/silcutil.[ch].
97
98         * When hashing the name associated with a ID it is always done
99           in lowercase.  This way we can access the cache without worrying
100           about case-sensitivity, even though, for example nicknames are
101           case sensitive.
102
103         * Fixed a bug in server with channel message sending.  It put
104           wrong ID type as destination ID.  The affected file 
105           silcd/packet_send.c.
106
107         * silc_idcache_del_by_context now deletes from all hash tables
108           by context.  Affected file lib/silccore/idcache.c.
109
110 Fri May 18 17:42:00 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
111
112         * Changed the client library to use the new ID Cache interface.
113           Changes around the source tree.
114
115         * Added silc_hash_table_rehash_ext to rehash with specific
116           hash function.  Affected file lib/silcutil/silchashtable.[ch].
117
118         * Added silc_hash_string_compare to compare two strings in the
119           hash table.  Affected file lib/silcutil/silcutil.[ch].
120
121 Fri May 18 11:18:45 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
122
123         * Added new function silc_idcache_del_by_context into the
124           lib/silccore/idcache.[ch].
125
126         * Changed the server's ID list routines to use the new ID Cache
127           interface.  Changes around the source tree.
128
129 Fri May 18 08:35:31 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
130
131         * Added silc_hash_table_del[_by_context]_ext functions in to the
132           lib/silcutil/silchashtable.[ch].
133
134           Removed silc_hash_table_find_all* routines and added new
135           silc_hash_table_find_foreach to replace them.
136
137           Added silc_hash_table_replace_ext function as extended
138           replacing function.  Separated the simple hash table interface
139           from the extended hash table interface in the file
140           lib/silcutil/silchashtable.h.
141
142         * Fixed minor bugs and changed it to use some of the new
143           hash table functions in lib/silccore/idcache.c
144
145 Thu May 17 18:15:12 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
146
147         * Added new function silc_hash_table_find_all to return all keys
148           in the hash table by the specified key.  As the hash table is
149           collision resistant it also makes it possible to have several
150           duplicate keys in the hash table.  This function may be used to
151           find all of the keys from the hash.
152
153           Added user_context arguments to the SilcHashFunction,
154           SilcHashCompare and SilcHashDestructor to deliver user specified
155           context.
156
157           Added new fuctions silc_hash_table_find[_all]_ext to do
158           extended lookup with specified hash and compare functions and
159           specified user contexts.
160
161           Added new function silc_hash_table_add_ext to add the key
162           with specified hash function and user context.
163
164           Added new function silc_hash_table_foreach to traverse all
165           entrys in the hash table.  Added SilcHashForeach callback
166           function.
167
168           Added new function silc_hash_table_del_by_context to delete
169           the entry only if the context associated with the key matches.
170
171           Affected files are lib/silcutil/silchashtable.[ch].
172
173         * Removed silc_hash_[server/client/channel]_id and added just
174           silc_hash_id to the lib/silcutil/silcutil.[ch].  Added also
175           silc_hash_id_compare to compare two ID's using as the hash table
176           comparison function.  Added also silc_hash_data to hash
177           binary data and silc_hash_data_compare to compare it.
178
179         * Removed silc_idlist_find_client_by_hash as it is not needed
180           anymore.  Affected file silcd/idlist.[ch].
181
182         * Rewrote the entire ID Cache system (in lib/silccore/idcache.[ch])
183           to use internally the SilcHashTable.  The new ID Cache is a lot
184           faster than the old one.  Some of the ID Cache interface was also
185           rewritten and obsolete and stupid functions were removed.
186
187 Wed May 16 23:03:30 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
188
189         * Added entry_count field to the SilcHashTable to keep the number
190           of the entries in the table.  Implemented the function
191           silc_hash_table_rehash.  Added new function
192           silc_hash_table_count.  Affected file lib/silcutil/silchashtable.c.
193
194           Fixed a minor bug in silc_hash_table_free.
195
196         * Added silc_hash_string, silc_hash_uint, silc_hash_ptr,
197           silc_hash_client_id, silc_hash_server_id and silc_hash_channel_id
198           into the lib/silcutil/silcutil.[ch].
199
200 Wed May 16 20:02:47 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
201
202         * Implemented a collision resistant hash table into the
203           lib/silcutil/silchashtable[ch].  See the header and the source
204           for the SilcHashTable API.
205
206 Tue May 15 22:05:46 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
207
208         * Merged dotconf version 1.0.2 into lib/dotconf.
209
210 Sun May 13 19:32:09 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
211
212         * Do not compile anything in lib/silcsim/* if the SIM support
213           is not enabled.  The tree should now compile without problems
214           under cygwin.
215
216 Thu May 10 22:49:51 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
217
218         * Compiled the SILC under cygwin.  Compiled and tested briefly
219           without problems.  More tests needed.  The SIMs didn't compile
220           though.
221
222         * Added various #ifdef HAVE_* stuff to lib/silccrypt/silrng.c.
223
224         * Fixed possible crash in silc_get_username in the
225           lib/silcutil/silcutil.c.
226
227 Tue May  8 09:04:03 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
228
229         * Fixed a va_arg in silc/client_ops.c.
230
231         * Oops, RC5 routines were named AES and caused some problems
232           when not using SIM's.  Affected file lib/silccrypt/rc5.c.
233
234 Sun May  6 13:59:48 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
235
236         * Added new SilcIDIP structure into the lib/silccore/id.h and
237           replaced the old `ip' fields from all SILC ID's to that type.
238           This is a step towards IPv6 support.
239
240           The silc_id_get_len takes now the ID as an extra argument.
241           The silc_id_id2str, silc_id_str2id and silc_id_dup now supports
242           both IPv4 and IPv6 based ID's.
243
244           The affected files are lib/silccore/id.[ch] and other files
245           around the tree using these routines.
246
247         * Removed the ID length arguments in server from various 
248           silc_server_send_notify_* routines -> they are not needed 
249           anymore.
250
251 Sat May  5 13:56:33 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
252
253         * Fixed memory leak in silc_encode_pem_file in the file
254           lib/silcutil/silcutil.c.
255
256 Thu May  3 21:23:50 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
257
258         * Check minor version as well in the SKE.  Affected files are
259           silcd/protocol.c and lib/silcclient/protocol.c.
260
261         * Added --identifier option to the server so that an identifier
262           can be when creating the public key for the server.  Affected
263           file is silcd/silcd.c.
264
265         * Fixed minor decoding bug in silc_pkcs_decode_identifier in
266           lib/silccrypt/silcpkcs.c.
267
268 Wed May  2 20:50:49 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
269
270         * Register default ciphers and stuff when using -C option with
271           the server.  Affected file sildc/silcd.c.
272
273         * Put back the servers public key filename format, it is better
274           than the new one.  For now, the client keys are saved with the
275           new filename format.  The affected file silc/client_ops.c.
276
277         * Implemented the Cipher API for the rest of the ciphers that
278           did not implement it or implemented it the wrong way.
279
280 Wed May  2 13:31:26 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
281
282         * Register default ciphers and stuff when using the -S option
283           in the client.  Affected file silc/silc.c.  Same also when
284           creating new key pair with -C option.
285
286 Tue May  1 14:18:13 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
287
288         * Fixed the silc_verify_public_key client operation function to
289           save the public keys differently.  The fingerprint is now 
290           used as filename and not the hostname.  This way also the
291           client keys are saved uniquely and not with hostnames.  The
292           affected file is silc/client_ops.c.
293
294         * Trimmed the silc_hash_fingerprint function to remove extra
295           whitespaces from the end of the fingerprint.  The affected
296           file is lib/silccrypt/silchash.c.
297
298         * Updated TODO.
299
300         * Added silc_cipher_register_default function to register all
301           default ciphers.  It can be used when configuration files
302           does not exist and the application does not want any specific
303           ciphers in any specific order.
304
305           The SilcDList is now used as silc_cipher_list dynamically
306           allocated cipher list.  Removed the static list all together
307           and now all ciphers must be allocated to the dynamic list.
308           The silc_cipher_alloc routine was changed to check only the
309           dynamic list.
310
311           All silc_cipher_* routines that used to return int returns
312           now bool.
313
314           The affected files lib/silccrypt/silccrypt.[ch].
315
316         * The same thing was done to silc_hash_* as for silc_cipher_*
317           routines.  Affected files lib/silccrypt/silchash.[ch].
318
319         * The same thing was done to silc_pkcs_* as for silc_cipher_*
320           routines.  Affected files lib/silccrypt/silcpkcs.[ch].
321           Added also silc_pkcs_[un]register[_default] functions.
322           Removed the data_context from the PKCS API.
323
324         * Added silc_hmac_register_default function to register default
325           hmacs.  Affected files lib/silccrypt/silchmac.[ch].  Added also
326           SILC_ALL_HMACS macro that can be used with silc_hmac_unregister
327           to unregister all hmacs at once.
328
329         * Register the default ciphers, hash functions, PKCSs and HMACs
330           if client's configuration file does not exist.  The affected
331           file silc/silc.c.
332
333         * The client did not load the hash functions from the SIM
334           modules at all.  Added support for this.  Affected file is
335           silc/clientconfig.c.
336
337         * When decoding public key with silc_pkcs_public_key_decode, check
338           the supported algorithm only if PKCS are registered.  Affected
339           file lib/silccrypt/silcpkcs.c.  The same was done with the
340           silc_pkcs_private_key_decode.
341
342         * Fixed the SILC List routines to keep the list always in order.
343           It used to change the list's order when traversing the list but
344           not it preserves the order.  Affected file lib/trq/silclist.h.
345
346 Mon Apr 30 17:29:03 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
347
348         * Added the client library to use the SilcSocketConnection's
349           reference counter (by silc_socket_dup) to prevent the bug that
350           the socket object may be freed underneath async operation.
351
352         * The name resolv library checking fixes in the configure.in.pre.
353           The patch by salo.
354
355         * Created new version of the protocol drafts for future
356           development. The -03 drafts are the ones that will be changed
357           in the trunk now and the -02 will remain as they are.
358
359         * Send list of CUMODE notifys to the router when announcing
360           the channel users to the router.  Affected file silcd/server.c.
361           If the router receiving channel founder CUMODE for a channel
362           that already has channel founder it will send CUMODE notify
363           to the sender to remove the channel founder rights from the
364           announced client.  Affected file silcd/packet_receive.c.
365
366         * The CUMODE notify may now use Server ID as well as the entity
367           who changes the mode.  Updated protocool specs.
368
369         * Updated INSTALL and README files.
370
371 Sun Apr 29 23:17:50 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
372
373         * New web pages in the http://silc.pspt.fi.  The pages was
374           designed by salo.
375
376         * Updated CREDITS.
377
378 Sun Apr 29 13:33:41 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
379
380         * Implemented the [DenyConnectin] config section in the server.
381           Added silc_server_config_denied_conn to check whether incoming
382           connection is denied.  Affected file silcd/serverconfig.[ch].
383
384         * Do not check the ports when checking the incoming configuration
385           data if the port is 0, meaning any.  Affected file is
386           silcd/serverconfig.c.
387
388 Fri Apr 20 18:58:43 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
389
390         * Fixed buffer overflow in silc_string_compare in the file
391           lib/silcutil/silcutil.c.
392
393         * Fixed double free in silc_server_command_leave in the file
394           silcd/command.c.
395
396 Fri Apr 20 14:00:11 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
397
398         * Fixed the version checking in the server.  Affected file is
399           silcd/protocol.c.
400
401 Thu Apr 19 19:52:46 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
402
403         * Fixed the configuration data fetching when accepting new
404           connections in the server.  Affected file silcd/server.c.
405
406 Thu Apr 19 11:40:20 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
407
408         * Added `sender_entry' argument to the function
409           silc_server_packet_relay_to_channel so that we can check
410           whether some destination actually belongs to the same route
411           the sender belongs (ie, we must not resend the packet to the
412           sender).  Affected file silcd/packet_send.[ch].
413
414         * Added `servername' field to the SilcClientEntry in the server
415           to hold the name of the server where client is from.  Affected
416           file is silcd/idlist.h.
417
418 Wed Apr 18 22:19:03 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
419
420         * Moved the channel message encrypting in the router betwen
421           router connections from silc_server_channel_message to the
422           silc_server_packet_relay_to_channel since we want to check
423           whether we have anybody channel before encrypting anything.
424           Affected files silcd/packet_[receive/send].c.
425
426 Tue Apr 17 21:18:19 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
427
428         * Fixed the [AdminConnection] server config section to support
429           multiple entries.  Affected file silcd/serverconfig.c.
430
431         * Added support into the server to check the validity of the
432           incoming connection before executing any KE or authentication
433           protocols.
434
435         * The connection configuration is now saved to the KE and 
436           connection auth protocol contexts and not fetched anymore in 
437           the protocol.  Affected files silcd/server.c, silcd/protocol.[ch].
438
439         * The local hosts listenning address and port is also resolved
440           now when starting the server.  We want to have the socket object
441           to include the real address and port for the listener.  Added
442           new function silc_net_check_local_by_sock into the files
443           lib/silcutil/silcnet.[ch].
444
445         * Fixed a broadcast bug in server -> do not broadcast if we
446           are standalone.
447
448         * Fixed a routing bug.  Do not route broadcast packets ever.
449           Broadcast packets must be processed always and not routed since
450           they may be destined to some other host than yourself and thus
451           would get routed without no good reason.  Affected file is
452           silcd/server.c.
453
454         * Added function silc_server_config_is_primary_route to check
455           whether primary router connection has been configured (a router
456           configuration that we are initiating).  If there is not, we 
457           will assume that there is only two routers in the SILC network
458           and we will use the incoming router connection as our primary
459           route.  Affected files silcd/serverconfig.[ch], silcd/server.c.
460
461         * Changed the order of the broadcasting.  Broadcast _after_ the
462           packet has been processed not before.  Affected file is
463           silcd/server.c.
464
465         * Fixed a [ClientConnection] parsing bug.  The port was never
466           parsed correctly thus resulting to port 0.  Affected file
467           silcd/serverconfig.c.
468
469         * Fixed silc_server_send_notify_args -> it ignored the `broadcast'
470           argument and did not set the broadcast packet flag.  Affected
471           file silcd/packet_send.c.  Fixed same bug in the function
472           silc_server_send_notify as well.
473
474         * If we receive NEW_ID packet for our own ID in the server, ignore
475           the packet.
476
477 Mon Apr 16 12:10:33 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
478
479         * Updated TODO.
480
481         * Removed the nickname from the Private Message Payload.
482           Updated the code and the protocol specs.
483
484         * Updated protocol specs for submitting to the IETF.
485
486         * Tweaked the Random Number Generator a bit.  Affected file
487           lib/silccrypt/silcrng.c.  Exported a new function
488           silc_rng_[global]_add_noise which can be used to add more
489           noise to the RNG.
490
491 Sat Apr 14 16:21:32 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
492
493         * Do not parse packets with different timeout when protocol
494           is active -> may cause problem with rekey.  Affected file
495           silcd/server.c.
496
497         * When server receives signoff notify it must not create
498           new channel key if the client is on any channels since the
499           sender of the signoff notify will create it.
500
501 Fri Apr 13 17:12:46 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
502
503         * Added printing of error messages during SKE protocol from the
504           failure packet sent by server during SKE.  Affected file
505           silc/client_ops.c.
506
507         * Removed the client's failure_callback handling with timeout
508           and handle it immediately when received.
509
510         * The SKE library returned wrong type in SUCCESS and FAILURE 
511           packets.  They must be 32 bit MSB not 16 bit MSB.
512
513 Fri Apr 13 00:09:08 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
514
515         * Ok, rewrote the logic of the re-key and now it seems to work.
516           I tested it on high traffic with frequent re-keys without
517           problems.  Added hmac_receive (and renamed hmac to hmac_send)
518           in SilcClientConnection in lib/silcclient/client.h and
519           in SilcIDListData in silcd/idlist.h.  Also, removed the
520           SilcPacketParserContext's cipher and hmac fields as they are
521           not needed anymore and actually caused some problems when
522           the ciphers and hmac's changed underneath the packet parser.
523
524 Thu Apr 12 14:42:51 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
525
526         * If re-key protocol is active then process the incoming packets
527           synchronously since we must assure that icoming packets encrypted
528           with the old key is processed before the new keys is set to
529           use.  This is true other packets than for REKEY packets.
530           Affected file silcd/server.c.  The same was done to client library
531           as well, affected file lib/silcclient/client.c.
532
533 Thu Apr 12 12:01:52 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
534
535         * Fixed bug in client and server to accept the force send if
536           the packet is send from silc_[server/client]_packet_process
537           function.  Otherwise the packets are never delivered, oops.
538
539 Wed Apr 11 22:10:15 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
540
541         * Disable force sending of packets when REKEY protocol is active.
542           We must assure that no packet is sent directly when rekey is
543           performed.  All packets must be sent through packet queue.
544           Added macro SILC_SERVER_IS_REKEY to silcd/server.h and
545           SILC_CLIENT_IS_REKEY to lib/silcclient/client.h.  Affected
546           function is silc_[server/client]_packet_send_real to check
547           the situation.
548
549         * Replaced the SIM paths from example config files to 
550           /usr/local/modules.  Also, make install creates now
551           /usr/local/silc/logs directory to hold all the SILC server
552           logs.
553
554 Wed Apr 11 16:59:59 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
555
556         * Made the configure.in.pre work on Solaris.  Patch by salo.
557
558         * Made all ciphers compatible with non-x86 machines.  Defined
559           CBC mode macros into lib/silccrypt/ciphers_def.h.
560
561 Tue Apr 10 20:32:44 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
562
563         * Fixed the make install.
564
565 Tue Apr 10 16:20:34 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
566
567         * When MAC computation fails the silc_packet_decrypt returned 0
568           even though it was supposed to return -1.  Fixed this.  The
569           affected file is lib/silccore/silcpacket.c.
570
571         * Do not replace the config files in /etc/silc (in make install)
572           if they already exist.  Affected file ./Makefile.am.
573
574         * Do not send re-key packets immediately but through packet queue.
575           Affected file silcd/protocol.c and lib/silcclient/protocol.c.
576
577         * Changed silc_net_check_host_by_sock to return FALSE if the
578           IP/DNS could not be resolved.  Though, it returns the IP address
579           now even if it could not resolve it (but returns also FALSE).
580           Affected file lib/silcutil/silcnet.[ch].
581
582 Mon Apr  9 21:54:44 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
583
584         * Added silc_pkcs_decode_identifier to decode the public key's
585           identifier.  Affected file lib/silccrypt/silpkcs.[ch].
586           Added also silc_pkcs_free_identifier.  Added also new context
587           SilcPublicKeyIdentifier.
588
589         * Added -S option to the silc client.  It is used to dump the
590           contents of the specified public key file.
591
592         * Changed the PKCS api to return the public key length when
593           setting the public key.
594
595         * Fixed a fatal bug in the public and private key file loading.
596           Affected file lib/silccrypt/silcpkcs.c.
597
598         * Execute the packet parsing for client with zero (0) timeout
599           if the protocol is active.  Affected file silcd/server.c.
600
601 Sun Apr  8 19:30:56 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
602
603         * Made the key generation options to the silcd program.  Added
604           -C option, equivalent to client's option.
605
606         * Added new [ServerKeys] config section to the server.  It
607           configures the server's public and private key.
608
609         * Defined generic Public Key Payload into the protocol
610           specification to send specific type of public keys and
611           certificates.
612
613         * Defined new command SILC_COMMAND_GETKEY to fetch a client's
614           public key or certificate.
615
616         * Implemented the GETKEY command to the server and to the
617           client library and on user interface.
618
619 Sun Apr  8 01:37:21 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
620
621         * Made preliminary `make install' work.
622
623 Thu Apr  5 17:42:30 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
624
625         * Added SilcServerRekey context into silcd/idlist.h.
626
627         * Added the PFS support as defined in the specification to the
628           SKE protocol.  Affected files lib/silcske/*.c.
629
630         * Added `ske_group' field to the SilcServerRekey context to hold
631           the number of the SKE group that is used with PFS in re-key.
632           Affected file silcd/idlist.h.
633
634         * Added PFS re-key support to the server.  Affected file is
635           silcd/protocol.c.
636
637         * Added silc_protocol_cancel to cancel execution of the next
638           state of the protocol.  Affected file is
639           lib/silccore/silcprotocol.[ch].
640
641         * Added the re-key support with and without PFS to the client
642           library.  Re-key is performed once in an hour, by default.
643
644           Added new protocol type SILC_PROTOCOL_CLIENT_REKEY.
645           Added silc_client_rekey_callback and silc_client_rekey_final.
646           Affected files are lib/silcclient/protocol.[ch] and
647           lib/silcclient/client.[ch].
648
649         * Removed the `hmac_key' and `hmac_key_len' fields from the
650           SilcClientConnection structure; not needed.  Affected file is
651           lib/silcclient/client.h.
652
653         * Updated TODO.
654
655 Wed Apr  4 16:32:31 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
656
657         * Do not ask whether user wants to use the negotiated private key
658           for private messages, just use it.  Affected file is 
659           silc/local_command.c.
660
661         * Added `send_enc_key' and `enc_key_len' fields to the 
662           SilcIDListData structure since they are needed in the re-key
663           phase.  Affected file is silcd/idlist.[ch].
664
665         * Implemented the simple re-key protocol into the server.
666           Affected files silcd/server.c and silcd/protocol.[ch].  The
667           re-key will be performed once in an hour, by default.
668
669           Added new protocol type SILC_PROTOCOL_SERVER_REKEY.
670           Added silc_server_rekey, silc_server_rekey_callback and
671           silc_server_rekey_final.
672
673         * Removed Tunneled flag from the protocol.  Updated the code
674           and the specifications.
675
676         * Adde `pfs' field to the SilcIDListData to indicate whether
677           the PFS is to be performed in the re-key.  Affected file is
678           silcd/idlist.h.
679
680 Tue Apr  3 21:52:42 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
681
682         * Defined uint8, int8, uint16, int16, uint32, int32, uint64 and
683           int64 of at least the xintXX size.  If void * is less that 4
684           bytes uint32 * will be used.  Defined bool as boolean.
685
686         * Changed _ALL_ unsigned long and unsigned int to uint32, 
687           unsgined short to uint16 in the source tree.
688
689         * Fixed a fatal bug in silc_server_remove_clients_by_server.  Do
690           not handle clients that has entry->data.registered == FALSE.
691           They are not in the network anymore.  Affected file is
692           silcd/server.c.
693
694 Tue Apr  3 16:39:19 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
695
696         * Implemented the sending of the SERVER_SIGNOFF notify in the
697           server.  Affected file is silcd/server.c.
698
699         * Added silc_server_send_notify_args into silcd/packet_send.[ch].
700           Added also silc_notify_payload_encode_args into the
701           lib/silccore/silcnotify.[ch].
702
703         * Implemented ther SERVER_SIGNOFF notify handling in the server.
704           Affected file silcd/packet_receive.c.
705
706         * Implemented the SERVER_SIGNOFF notify handling in the client
707           library.  Affected file lib/silcclient/client_notify.c.  Also,
708           implemnted the printing of the SERVER_SIGNOFF info to the
709           application.  Affected file silc/client_ops.c.
710
711         * The silc_idlist_del_server now returns TRUE or FALSE to indicate
712           if the deleting was successful.  Affected file silcd/idlist.[ch].
713
714         * Added support for public key authentication in the connection
715           authentication protocol in the client library.  Affected file
716           lib/silcclient/protocol.c.
717
718         * Changed the server's silc_idlist_get_clients_by_* interface
719           to support already allocated array so that new entries may be
720           added to pre-allocated array.  Affected file silcd/idlist.[ch].
721           This fixes some bugs with WHOIS, WHOWAS and IDENTIFY commands
722           and command replies.
723
724         * All command reply functions in the server now calls the 
725           pending command callback even if error occured.  This way the
726           error will be delivered to the client as well.  Affected files
727           silcd/command.c and silcd/command_reply.c.
728
729         * Fixed INFO command to return local server's info if no server
730           was provided.  Affected file lib/silcclient/command.c.
731
732         * Removed RESTART command for good.  Updated the code and the
733           protocol specs.
734
735         * Rewrote parts of the task system.  It is a bit simpler now.
736           Removed unsued task priorities. The affected files are
737           lib/silcutil/silctask.[ch].
738
739 Mon Apr  2 20:02:33 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
740
741         * Moved the USERS printing from the library to the application.
742           Affected files lib/silcclient/command.c and silc/client_ops.c.
743
744 Mon Apr  2 13:13:23 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
745
746         * Updated TODO.
747
748         * Added channel key re-key support.  The re-key is perfomed
749           only by the router and is done once in an hour.  Added `rekey'
750           field to the SilcChannelEntry in the server.  Affected files
751           silcd/server.c and silcd/idlist.h.
752
753         * Added silc_task_unregister_by_context into the file
754           lib/silcutil/silctask.[ch].
755
756 Sun Apr  1 19:49:34 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
757
758         * Added SILC_UMODE_GONE mode to indicate when the client is not
759           present in the SILC network.  Added also support to the local
760           command AWAY that will set this mode.  Added support of showing
761           "xxx is gone" in WHOIS command.  The USERS command shows the
762           gone status as well.
763
764         * Fixed setting server and router operator privileges in the
765           server's UMODE command.  Affected file silcd/command.c.
766
767         * Merged the SKE KE1 and KE2 payloads into one payload.  The
768           new KE payload is equivalent to the old KE2 payload.
769
770           Cleaned up the SKE Start Payload parsing.  It now uses the
771           simple buffer unformatting to do the parsing.  A lot faster
772           now.
773
774           Added new Mutual Authentication flag (SILC_SKE_SP_FLAG_MUTUAL)
775           to the SKE that is used to indicate whether both of the SKE
776           parties should perform authentication.  By default only the
777           responder performs authentication.  By setting this flag also
778           the initiator must do authentication.  By default it is unset
779           since in normal SKE case, client to server connection, only
780           the responder should do authentication.  When doing SKE between
781           two clients both should perform authentication.  Updated the
782           code and the protocol specs.
783
784         * A little fix to IDENTIFY command in the server.  Search the
785           client first by hash not nickname.  Affected file is 
786           silcd/command.c.
787
788         * Fixed the silc_client_close_connection to support closing
789           the client to client connections wihtout deleting too much
790           data.  Affected file lib/silcclient/client.c.
791
792         * Fixed a fatal bug in server and client; if KE1 or KE2 packets
793           are received if protocol used to be active but is not anymore
794           the application would crash due to NULL pointer dereference.
795           Affected files silcd/server.c and lib/silcclient/client.c.
796
797         * Added `hash' field to the SilcClientConnection to include
798           the hash function negotiated in the SKE protocol.
799
800         * Added new channel mode SILC_CMODE_FOUNDER_AUTH that is used
801           to set the channel founder authentication data.  A client can
802           claim the founder rights later by providing the authentication
803           data to the CUMODE command using SILC_CUMODE_FOUNDER mode.
804           This way the channel founder can regain the channel founder
805           privileges even it is left the channel.  This works only on
806           local server and the client must be connected to the same
807           server to be able to regain the founder rights.  Updated the
808           protocol specs accordingly.
809
810           Added support to the CMODE command in the client to set the
811           founder auth data.  Read the README to see how to set it.
812
813           Added support to the CUMODE command to claim the founder
814           rights.  Read the README to see how to do it.
815
816           Added support for the founder authentication to the Channel
817           Entry in the server.  Affected file silcd/idlist.h.
818
819           Added support for the SILC_CMODE_FOUNDER_AUTH mode in the
820           server's CMODE command.  Affected file silcd/command.c.
821
822         * Added the following new functions into lib/silccore/silcauth.[ch]:
823           silc_auth_get_method and silc_auth_get_data.    
824
825         * The server now saves the remote hosts public key to the
826           SilcIDListData pointer.  Affected file silcd/protocol.c.
827
828         * The normal server now does not remove the channel entry from
829           the cache if the founder authentication data is set.  It used
830           to remove it if the founder was the last one on the channel on 
831           the server and left the channel.  The auth data is saved and
832           if the channel is re-joined later the old entry is used with
833           the old auth data.  Affected files silcd/command_reply.c and
834           silcd/server.c.
835
836         * Removed the `pkcs' field from the SilcIDListData structure
837           in the server; it is not used.  Affected file silcd/idlist.h.
838
839 Sat Mar 31 15:38:36 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
840
841         * Fixed packet processing on slow links.  Partial packets were
842           never re-processed because the incoming data buffer was cleared
843           by the application.  Application must not directly clear the
844           sock->inbuf, the packet processing routines handle it.  Fixed
845           this in client library and in server.
846
847 Fri Mar 30 16:35:27 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
848
849         * Fixed the WHOIS and IDENTIFY send reply function to really
850           check whether to send list or just one entry.  Affected file
851           silcd/command.c.
852
853         * Cleaned up the LEAVE command's channel key distribution.  The
854           affected file silcd/command.c.
855
856         * Changed CMODE_CHANGE's <Client ID> to <ID Payload> as server
857           can enforce the channel mode as well.  In that case the ID
858           includes the ID of the server.  The code now enforces the
859           mode change if the router have different mode than the server.
860
861         * The notify client operation with CMODE_CHANGE notify can now
862           return NULL client_entry pointer if the CMODE was not changed
863           by client.  Application must check for this.
864
865         * Added <Server ID> argument to INFO command to support server
866           info fetching by Server ID.
867
868         * Added silc_server_announce_get_channel_users to get assembled
869           packets of channel users of the specified channel.  Affected
870           file silcd/server.[ch].
871
872         * Fixed bug in CHANNEL_CHANGE notify in the server.  The new ID
873           was freed underneath the ID Cache.
874
875         * Re-announce clients when the server received CHANNEL_CHANGE
876           notify from the router.  Affected file silcd/packet_send.c.
877
878 Thu Mar 29 19:10:28 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
879
880         * Fixed a fatal bug when client does /join 1 2 3 4 5 6 the server
881           crashed since it did not handle the fact that there is no cipher
882           called "3" and didn't check the error condition.  Now fixed.
883
884         * Added SILC_MESSAGE_FLAG_REQUEST message flag as generic request
885           flag.  It can be used to send message requests.
886
887 Thu Mar 29 12:26:25 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
888
889         * Implemented the RESTART command in the client.
890
891         * Added SILC_MESSAGE_FLAG_NOTICE message flag for informational
892           notice type messages.  Added notice printing to the user
893           interface.
894
895         * The channel keys are not re-generated if the channel's mode
896           is PRIVKEY, ie private key on the channel exists.  Affected
897           files silcd/server.c and silcd/command.c.
898
899         * Fixed a little bug in channel message delivery when channel
900           private keys are set in the server.  Affected file is
901           silcd/packet_send.c.
902
903         * Changed the setting on channel->on_channel = TRUE from the
904           silc_client_save_channel_key to the JOIN command reply.  The
905           key payload is not received if the private channel key is set.
906           Affected file lib/silcclient/command_reply.c and the
907           lib/silcclient/client_channel.c.
908
909         * When the CMODE_CHANGE notify is sent and the channel private
910           key mode is removed the channel key must be re-generated in
911           other cells as well.  Added this support for the router in the
912           silcd/packet_receive.c.
913
914         * Added new local command NOTICE to send notice message on
915           channel.  Affected file silc/local_command.[ch].
916
917 Wed Mar 28 23:55:54 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
918
919         * Added new local command ME to the client.  It is used to send
920           message to a channel with SILC_MESSAGE_FLAG_ACTION to indicate
921           some action.  Affected file silc/local_command.[ch].
922
923         * Changed channel_message and private_message client operations 
924           to deliver the message flags to the application.  Added also
925           the `flags' arguments to the silc_client_send_channel_message
926           and silc_client_send_private_message functions.  Affected file
927           silcapi.h.
928
929 Wed Mar 28 20:50:47 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
930
931         * Redefined the Private Message Payload to support private message
932           keys and to support the new private message flags.  Updated
933           the protocol specs.  Flags makes it possible to have for example
934           CTCP style messages.
935
936         * Added new type SilcPrivateMessagePayload and defined an API
937           for it in the lib/silcclient/silcprivate.[ch].
938
939         * Tested private message private keys successfully.  Tested the
940           private message key set, unset and list commands with the new
941           KEY command.
942
943         * Redefined the Channel Message Payload to include the channel
944           message flags (equal with private message flags) to support
945           for example CTCP style messages.
946
947         * Defined some of the message (for channel and private message)
948           flags.  Updated the protocol specs and added the flags to the
949           lib/silccore/silcchannel.h.  The type is SilcMessageFlags.
950
951 Wed Mar 28 15:52:36 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
952
953         * Added SilcKeyAgreementStatus type to the key agreement routines
954           to indicate the current status and error if one occured.
955           The status types are defined in the lib/silcclient/silcapi.h.
956
957         * Added new local command KEY that is used to set and unset private
958           keys for channels, set and unset private keys for private messages
959           with remote clients and to send key agreement requests and
960           negotiate the key agreement protocol with remote client.  The
961           key agreement is supported only to negotiate private message keys,
962           it currently cannot be used to negotiate private keys for channels,
963           as it is not convenient for that purpose.
964
965         * Fixed a minor pending callback setting bug in the function
966           silc_client_get_client_by_id_resolve, now the function works.
967           Affected file lib/silcclient/idlist.c.
968
969         * Added function silc_net_get_local_port to get local bound
970           port by socket.  Added to lib/silcutil/silcnet.[ch].
971
972         * Added `sockets' and `sockets_count' fields to the SilcClient
973           object.  They hold the sockets of the listenning sockets in
974           the client.  Listenning sockets may be for example the key 
975           agreement server.  Affected file lib/silcclient/client.[ch].
976           Added functions the silc_client_add_socket and the
977           silc_client_del_socket.  They are exported to the application
978           as well.
979
980         * Added ~./silc/clientkeys to support other client's public keys.
981
982         * Renamed verify_server_key client operation to verify_public_key
983           and added one argument to indicate the type of the connection
984           (server, client etc.).
985
986 Tue Mar 27 22:22:38 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
987
988         * Added silc_server_connection_auth_request to handle the
989           incoming CONNECTION_AUTH_REQUEST packet.  Affected file is
990           silcd/packet_receive.[ch].
991
992         * Added silc_server_send_connection_auth_request into the
993           silcd/packet_send.c to send the connection auth request packet.
994
995         * Cleaned up the silcd/protocol.c a bit and fixed some memory
996           leaks.
997
998         * Fixed the public key authentication in responder side in the
999           server.  The `auth_data' pointer includes the SilcPublicKey
1000           not the path to the public key.  Affected file silcd/protocol.c.
1001
1002         * Implemented the public key authentication in the initiator side
1003           in the server.  Affected file silcd/protocol.c.
1004
1005         * Removed the [RedirectClient] config section from the server
1006           configuration.  Is not needed and I don't want to implement it.
1007
1008 Tue Mar 27 12:49:56 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1009
1010         * Cleaned up the CMODE command in the server.  It now works
1011           correctly and supports all the modes defined in the protocol.
1012           Affected file is silcd/command.c.
1013
1014         * Added `hmac_name' field to the SilcChannelEntry in the server
1015           to hold the default HMAC of the channel.  It can be set when
1016           creating the channel (with JOIN command).  Affected files
1017           silcd/idlist.[ch].
1018
1019         * Added <cipher> and <hmac> argument to the CMODE_CHANGE notify
1020           type to indicate the change of the current cipher and hmac
1021           on the channel.  Client can safely ignore the <cipher> argument
1022           (if it chooses to do so) since the CHANNEL_KEY packet will 
1023           force the channel key change anyway.  The <hmac> argument is
1024           important since the client is responsible of setting the new
1025           HMAC and the hmac key into use.
1026
1027         * Fixed the CMODE command in the client library as well.
1028
1029         * Tested CMODE command in router environment successfully.
1030
1031 Mon Mar 26 14:39:48 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1032
1033         * Show the version of the remote client (or server) when connecting
1034           to the server.  It is logged to the log file.  Affected file
1035           is silcd/protocol.c.
1036
1037         * Fixed the KILLED notify handling in the client library.  The
1038           client must be removed from all channels when receiving the
1039           KILLED notify.
1040
1041           Also, do not remove the client entry when giving the KILL 
1042           command but when the KILLED notify is received.
1043
1044         * Removed silc_idlist_find_client_by_nickname from the server.
1045           Not needed anymore.  Affected files silcd/idlist.[ch].
1046
1047         * Implemented the CHANNEL_CHANGE notify type handling to the
1048           server.  Affected file silcd/server.c.
1049
1050         * Updated TODO.
1051
1052 Mon Mar 26 12:11:14 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1053
1054         * Added silc_server_send_notify_invite to send the INVITE
1055           notify between routers.
1056
1057         * Implemented the INVITE command correctly to the server.
1058
1059         * Implemented the INVITE notify type handling in the server.
1060
1061         * Implemented the INVITE command to the client library and on the
1062           user interface.
1063
1064 Sun Mar 25 20:27:09 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1065
1066         * Added function silc_server_get_client_resolve to find the
1067           client entry by ID from all ID lists and then resolve it
1068           (using WHOIS) if it cannot be found.  Affected file is
1069           silcd/server.[ch].
1070
1071 Sun Mar 25 13:52:51 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1072
1073         * Implemented the BAN command to the client library.
1074
1075         * The JOIN command in the server now checks the invite list
1076           and the ban list.
1077
1078         * Changed the silc_command_reply_payload_encode_va and the
1079           silc_command_payload_encode_va to support that if argument is
1080           NULL it ignores and checks the next argument.  Affected file
1081           lib/silccore/silccommand.c.
1082
1083         * Added silc_server_send_notify_ban to send the BAN notify
1084           type between routers.
1085
1086         * Chaned the silc_notify_payload_encode to support that if 
1087           argument is NULL it ignores and checks the next argument.
1088           Affected file lib/silccore/silcnotify.c.
1089
1090         * Tested ban lists in router environment successfully.
1091
1092 Sat Mar 24 14:47:25 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1093
1094         * Implemented BAN command to the server, in silcd/command.[ch].
1095
1096         * Removed the BAN and INVITE_LIST modes from the CMODE command
1097           in the server code.
1098
1099         * Added function silc_string_match to regex match two strings.
1100           Affected files lib/silcutil/silcutil.[ch].
1101
1102 Fri Mar 23 22:02:40 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1103
1104         * Redefined parts of the SilcChannelEntry in the server to support
1105           the new ban and invite lists.
1106
1107 Fri Mar 23 16:25:11 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1108
1109         * Redefined the INVITE command.  The same command can be used to
1110           invite individuals to the channel but also to manage the invite
1111           list of the channel (to add to and remove from the invite list).
1112           Updated the protocol specs.
1113
1114         * Added new command SILC_COMMAND_BAN that can be used to manage
1115           the ban list of the channel.  Updated the protocol specs.
1116
1117         * Removed the channel modes: the SILC_CMODE_BAN and the 
1118           SILC_CMODE_INVITE_LIST as they were a bit kludge to be included
1119           in the CMODE command.  The equivalent features are now available
1120           using INVITE and BAN commands.  Updated the protocol specs.
1121
1122         * Added new SILC_NOTIFY_TYPE_BAN notify type to notify routers
1123           in the network about change in the current ban list.  The notify
1124           type is not used by the client.
1125
1126         * Redefined parts of the SILC_NOTIFY_TYPE_INVITE command to 
1127           support the invite lists.
1128
1129 Thu Mar 22 22:52:23 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1130
1131         * Added new function silc_string_regexify that converts string
1132           including wildcard characters into regex string that can
1133           be used by the GNU regex library.  Added into the file
1134           lib/silcutil/silcutil.[ch].
1135
1136           Added silc_string_regex_combine to combine to regex strings
1137           into one so that they can be used as one regex string by
1138           the GNU regex library.  Added into the file
1139           lib/silcutil/silcutil.[ch].
1140
1141           Added silc_string_regex_match to match two strings.  It returns
1142           TRUE if the strings match.  Added into lib/silcutil/silcutil.[ch].
1143
1144 Thu Mar 22 15:29:42 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1145
1146         * Imported GNU regex to the soruce tree into lib/contrib.
1147           Fixed some compiler warning from the regex.c.
1148
1149 Wed Mar 21 15:27:58 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1150
1151         * Fixed MOTD command in the server to work in router environment.
1152
1153         * Fixed the MOTD command in the client library to support
1154           the server argument in the command.
1155
1156         * Added `nickname_len' argument to the silc_idlist_add_client
1157           in the server, as the `nickname' argument may be binary data
1158           (it may be hash).
1159
1160         * Added silc_idlist_get_channels to return all channels from
1161           the ID list.
1162
1163         * Implemented LIST command to the server.  Affected file is
1164           silcd/command.c.
1165
1166         * Implemented the LIST command to the client library and on the
1167           user interface.
1168
1169         * Added [<user count>] argument to the LIST command reply.
1170           With private channels the user count is not shown.
1171
1172         * Updated TODO and README.
1173
1174 Tue Mar 20 21:05:57 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1175
1176         * The client entry's data.registered must be TRUE even with
1177           global client entry on global client list.  The data.registered
1178           is used to check whether the client is anymore in the network,
1179           for example with WHOWAS command so it must be valid.
1180
1181         * Fixed the WHOWAS command in the server.  It now actually works
1182           in router environment.  Added function into silcd/command_reply.c
1183           silc_server_command_reply_whowas_save.
1184
1185         * Added silc_idlist_purge function to the silcd/idlist.c
1186           to periodically purge the ID Cache.
1187
1188         * Fixed INFO command in the server.  It works now in router
1189           environment.  Added <server name> argument to the INFO command
1190           reply.  Updated the protocol specs.
1191
1192         * Fixed minor bug in silc_idcache_purge to not purge if the
1193           expire value is zero.
1194
1195         * Fixed various bugs in WHOIS and IDENTIFY command handling as
1196           they were buggy because of the WHOWAS information.
1197
1198         * Fixed local command MSG to handle the async resolving of 
1199           the remote client properly.  It used to fail the first MSG.
1200           Affected file silc/local_command.c.
1201
1202         * Added `data_len' field to SilcIDCache context.
1203
1204 Tue Mar 20 16:29:00 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1205
1206         * Update TODO.  Todo in commands in the server.
1207
1208 Tue Mar 20 15:45:14 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1209
1210         * Added new notify type SILC_NOTIFY_TYPE_UMODE_CHANGE that is
1211           used by routers as broadcast packet to inform other routers
1212           about the changed user mode.
1213
1214           Implemented the notify handling in the server.  Affected file is
1215           silcd/packet_receive.c.  Added the function 
1216           silc_server_send_notify_umode to the silcd/packet_send.[ch].
1217
1218         * Added new generic Channel Payload and deprecated the New Channel
1219           Payload.  The New Channel Payload is now the generic Channel
1220           Payload.
1221
1222         * Added new argument `mode' to the silc_server_send_new_channel
1223           as it is required in the Channel Payload now.
1224
1225         * Renamed the SilcChannelPayload to SilcChannelMessagePayload
1226           and created a new and real SilChannelPayload to represent the
1227           new generic Channel Payload.  Implemented the encode/decode
1228           for Channel Payload.  Affected file lib/silccore/silcchannel.[ch].
1229
1230         * Added silc_server_get_client_channel_list to return the list
1231           of channels the client has joined for WHOIS command reply.
1232           Affected file silcd/server.[ch].
1233
1234         * Implemented the channel list sending in the WHOIS command reply
1235           in server and in the client.
1236
1237           Implemented the channel list displaying on the user interface
1238           as well.  Affected file silc/client_ops.c.
1239
1240         * Added silc_channel_payload_parse_list to parse list of Channel
1241           Payloads.  It returns SilcDList list of SilcChannelPayloads.
1242           Client for example can use this function to parse the list of
1243           channels it receives in the WHOIS command reply.  The caller
1244           must free the list by calling silc_channel_payload_list_free.
1245           Affected files lib/silccore/silcchannel.[ch].
1246
1247 Mon Mar 19 21:39:15 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1248
1249         * Added one new argument <user mode> to the WHOIS command reply
1250           to return the mode of the user in SILC.  Updated the protocol
1251           specs.
1252
1253           Implemented it to the server and client.
1254
1255 Mon Mar 19 18:43:06 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1256
1257         * Fixed the mode printing on the user interface on joining.
1258           Affected file silc/client_ops.c.
1259
1260         * Implemented the UMODE command and user modes in general to the
1261           client library and to the user interface.
1262
1263         * Implemented the UMODE command to the server.
1264
1265         * The server now sends UNKNOWN_COMMAND error status if client sends
1266           unknown command.  Affected file silcd/command.c.
1267
1268         * All server commands now handle the command identifier the right
1269           way when sending the command reply to the client.  The client can
1270           use to identify the command replies with the identifier.
1271
1272 Mon Mar 19 16:13:07 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1273
1274         * Added silc_server_get_client_route to resolve the route to
1275           the client indicated by the client ID.  Affected file is
1276           silcd/server.[ch].
1277
1278         * Added silc_server_relay_packet as general function to relay
1279           packet to arbitrary destination.  This deprecates functions
1280           like _send_private_message_key, _relay_notify etc.  Affected
1281           file is silcd/packet_send.[ch].
1282
1283           Removed silc_server_send_key_agreement, 
1284           silc_server_send_private_message_key and
1285           silc_server_packet_relay_notify functions from the file
1286           silcd/packet_send.[ch].
1287
1288         * Updated TODO.
1289
1290         * Implemented the SILC_NOTIFY_TYPE_KILLED notify handling in the
1291           server.  Affected file silcd/packet_receive.[ch].
1292
1293         * Implemented the KILL command to the client.  Implemented the
1294           SILC_NOTIFY_TYPE_KILLED notify handling in the client library.
1295           Affected files lib/silcclient/command[_reply].c and
1296           lib/silcclient/client_notify.c.  Implemented the KILL notify
1297           printing in the user inteface.
1298
1299         * Fixed a lot silc_parse_nick memory leaks from the client
1300           library in the file lib/silcclient/command.c.
1301
1302         * Changed the silc_server_send_notify_on_channels's `sender'
1303           argument from SilcSocketConnection to SilcClientEntry to 
1304           check the sender as entry and not as connection object and not
1305           to send to the client provided as argument.  The affected file
1306           is silcd/packet_send.[ch].
1307
1308         * The notify packets that are destined directly to the client used
1309           to not to be processed by the server.  Now changed that and the
1310           server processes all notify packets.  After relaying the packet
1311           to the client the notify packet is processed in the server.
1312
1313         * The silc_server_free_client_data now checks whether there is
1314           pending outgoing traffic for the client and purges the data to
1315           the network before removing the client entry.
1316
1317 Sun Mar 18 21:02:47 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1318
1319         * Added SILC_NOTIFY_TYPE_KILLED notify type.  It is sent when
1320           an client is killed from the SILC Network.  Updated the protocol
1321           specs accordingly.
1322
1323           Added new function silc_server_send_notify_killed to the
1324           silcd/packet_send.[ch].
1325
1326         * Added function silc_server_packet_relay_notify to relay notify
1327           packets that are destined directly to a client.  In this case
1328           the server does not process the notify packets but merely relays
1329           it to the client.  Affected file silcd/packet_send.[ch].
1330
1331           Added also silc_server_packet_process_relay_notify to check
1332           whereto relay the notify.  Affected file is 
1333           silcd/packet_receive.[ch].
1334
1335         * Implemented the KILL command to the server.
1336
1337         * Updated TODO.
1338
1339         * Added the backup schema desgined last fall to the protocol
1340           specs for everyone to see.  The specification is in the
1341           *-spec-xx.txt draft and the packet type definitions for the
1342           backup routers is in *-pp-xx.txt draft.  Thusly, added also
1343           new packet type SILC_PACKET_CELL_ROUTERS.
1344
1345         * A big security problem in the implementation discovered.  The
1346           signoff of an client did not cause new channel key generation
1347           which it of course should've done.  The channel keys must be
1348           always re-generated when client leaves (or signoffs) the channel.
1349           The silc_server_remove_from_channels funtion now handles
1350           the channel key re-generation.
1351
1352         * Added `sender' argument to the silc_server_send_notify_on_channels
1353           to not to send the client provided as argument.  Affected file
1354           silcd/packet_send.[ch].
1355
1356 Fri Mar 16 15:52:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1357
1358         * Implemented OPER and SILCOPER commands into the server and
1359           the client library.
1360
1361         * Added silc_auth_verify and silc_auth_verify_data to verify
1362           the authentication directly from the authentication payload.
1363           It supports verifying both passphrase and public key based
1364           authentication.  Affected file lib/silccore/silcauth.[ch].
1365
1366         * Added `hash' field to the SilcIDListData structure.  It is the
1367           hash negotiated in the SKE protocol.  Affected file is
1368           silcd/idlist.[ch].
1369
1370         * Slight redesigning of the SilcAuthPayload handling routines.
1371           Do not send SilcPKCS but SilcPublicKey as argument.
1372
1373         * Implemented the public key authentication support to the
1374           serverconfig.  The public key is loaded from the provided path
1375           and saved as authentication data to void * pointer.  Thus,
1376           changed the unsigned char *auth_data to void *auth_data;
1377
1378         * Fixed SHUTDOWN command to send the reply before the server
1379           is shutdown. :)  Affected file silcd/command.c.
1380
1381         * Fixed fatal bug in CONNECT command.  The hostname was invalid
1382           memory and server crashed.  Affected file silcd/command.c.
1383
1384         * Fixed fatal bug in CLOSE command.  The server_entry became
1385           invalid but was referenced later in the command.  Affected file
1386           silcd/command.c.
1387
1388 Thu Mar 15 12:46:58 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1389
1390         * Fixed fatal bug in failure packet handling.  Server ignored
1391           the failure and thus crashed when it came.
1392
1393         * Updated TODO.
1394
1395 Wed Mar 14 20:37:35 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1396
1397         * Added new SILC_CF_LAG_STRICT command flag that strictly forces
1398           that the command may be executed only once in (about) 2 seconds.
1399           The old SILC_CF_LAG flag is same but allows command bursts up
1400           to five before limiting.
1401
1402           Added the support for CF_LAG and CF_LAG_STRICT flags to the
1403           server code.  Various commands now includes the CF_LAG_STRICT
1404           flag to disallow any kind of miss-use of the command.
1405
1406         * Fixed the silc_buffer_unformat to not to allocate any data
1407           if the length of the data is zero.  It used to allocate the
1408           length + 1.  Affected file lib/silcutil/silcbuffmt.c.
1409
1410 Wed Mar 14 16:10:30 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1411
1412         * Changed the format of AdminConnection configuration section
1413           in the server.  Added username of the admin to the format.
1414           Affected files silcd/serverconfig.[ch].
1415
1416           Added silc_server_config_find_admin into silcd/serverconfig.[ch]
1417           to return admin configuration data by host, username and/or
1418           nickname.
1419
1420 Wed Mar 14 13:18:16 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1421
1422         * Implemented WHOWAS command to the server.  Added the functions:
1423
1424           silc_server_command_whowas_parse,
1425           silc_server_command_whowas_send_reply,
1426           silc_server_command_whowas_from_client and
1427           silc_server_command_whowas_from_server
1428
1429         * Added <Client ID> argument to the WHOWAS command reply.  Updated
1430           the protocol specs accordingly.
1431
1432         * Implemented WHOWAS command and command_reply to the client
1433           library.
1434
1435           Implemented the WHOWAS printing on the user interface.
1436
1437 Tue Mar 13 22:17:34 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1438
1439         * Added new argument to the WHOWAS command reply, the real name.
1440           It is an optional argument.  Updated the protocol specs.
1441
1442         * Added SilcIDCacheDestructor callback that is registered when
1443           the SilcIDCache is allocated.  The callback is called when
1444           an cache entry in the ID Cache expires, or is purged from the
1445           cache.  Added into lib/silccore/idcache.[ch].
1446
1447           Added silc_idlist_client_destructor to the silcd/idlist.[ch]
1448           to destruct the client entries when the cache entry expires.
1449           Other ID Cache's in server and in the client library ignores
1450           the destructor.
1451
1452         * If the ID Cache entry's `expire' field is zero then the entry
1453           never expires.  Added boolean `expire' argument to the
1454           silc_idcache_add function in the lib/silccore/idcache.[ch].
1455           If it is TRUE the default expiry value is used.
1456
1457         * Added silc_server_free_client_data_timeout that is registered
1458           when client disconnects.  By default for 5 minutes we preserve
1459           the client entry for history - for WHOWAS command.
1460
1461 Tue Mar 13 13:26:18 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1462
1463         * Added support to the server to enforce that commands are not
1464           executed more than once in 2 seconds.  If server receives 
1465           commands from client more frequently, timeout is registered
1466           to process the commands.  Affected file silcd/command.c.
1467           Added new function silc_server_command_process_timeout.
1468
1469         * Changed NICK_NOTIFY handling in client library to check that
1470           if the client's nickname was changed, so there is no need to
1471           resolve anything from the server.
1472
1473         * Removed error printing from the WHOIS and IDENTIFY commands.
1474           If error occurs then it is ignored silently in the client library.
1475           The application, however, may map the received error to 
1476           human readable error string.  The application currently maps
1477           the NO_SUCH_NICKNAME error to string.
1478
1479         * Made the command status message public to the application.  Moved
1480           them from lib/silcclient/command_reply.c to 
1481           lib/silcclient/command_reply.h.  The application can map the
1482           received command status to the string with the
1483           silc_client_command_status_message function.
1484
1485         * Added check to the server to check that client's ID is same
1486           as the Source ID in the packet the client sent.  They must
1487           match.
1488
1489 Tue Mar 13 12:49:21 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1490
1491         * Added dist-bzip hook to the Makefile.am to make bzip2
1492           compressed distributions.
1493
1494 Mon Mar 12 18:43:38 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1495
1496         * Server now enforces the maximum length for the nickname and
1497           the channel as protocol specification dictates.  128 bytes for
1498           nickname and 256 bytes for channel name.
1499
1500         * Moved the WHOIS printing to the application.  The client libary
1501           does not print out the WHOIS information anymore, the application
1502           must do it.  Renamed silc_client_command_reply_whois_print to
1503           the silc_client_command_reply_whois_save.
1504
1505           The client's idle time is also sent to the application now, and
1506           the idle is shown on screen.
1507
1508         * Added silc_client_command_reply_identify_save to save the
1509           received IDENTIFY entries.
1510
1511         * Do not check for channel private keys in message sending and
1512           reception if the channel does not have the PRIVKEY mode set.
1513           Affected file lib/silclient/client_channel.c.
1514
1515 Sun Mar 11 20:25:06 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1516
1517         * Fixed a minor bug if WHOIS and IDENTIFY command parsing that
1518           just surfaced after chaning the JOIN procedure.
1519
1520 Sun Mar 11 14:59:05 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1521
1522         * Added silc_client_get_clients_by_list to get client entries
1523           from Client ID list, that is returned for example by JOIN
1524           and USERS command replies.  The application should use this
1525           function for example when JOIN command reply is received to
1526           resolve the clients already on the channel (library does not
1527           do that anymore as USERS command reply is not used in the JOIN
1528           procedure anymore).  Affected files lib/silcclient/silcapi.h and
1529           lib/silcclient/idlist.c.
1530
1531         * JOIN command reply and USERS command reply returns now SilcBuffer
1532           pointers instead of unsigned char pointers when returning
1533           the client list and mode list.
1534
1535         * Added <Client ID> argument to the JOIN command reply, mainly
1536           for the server to identify for which client the command was
1537           originally sent.  Updated protocol specs accordingly.
1538
1539         * Added SilcDlist private_key pointer to the SilcChannelEntry
1540           in the client to support the channel private keys.  Affected
1541           file is lib/silcclient/idlist.h.
1542
1543         * Added SilcChannelPrivateKey argument to the function
1544           silc_client_send_channel_message so that application can choose
1545           to use specific private ke if it wants to.  If it is not provided,
1546           the normal channel key is used, unless private keys are set. 
1547           In this case the first (key that was added first) is used 
1548           as the encryption key.
1549
1550         * Implemented the support for channel private key handling.
1551           Implemented the following functions:
1552
1553           silc_client_add_channel_private_key,
1554           silc_client_del_channel_private_keys,
1555           silc_client_del_channel_private_key,
1556           silc_client_list_channel_private_keys and
1557           silc_client_free_channel_private_keys
1558
1559           Affected file lib/silcclient/client_channel.c.
1560
1561         * Added the support for the private keys in the channel message
1562           sending and encryption and in the message reception and
1563           decryption.  Affected funtions are
1564           silc_client_send_channel_message and silc_client_channel_message.
1565
1566 Sat Mar 10 21:36:22 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1567
1568         * Added SKE's key verify callback to the client library's
1569           KE protocol context. Affected files lib/silcclient/protocol.[ch].
1570
1571         * Removed the statement that server (or router) must send USERS
1572           command reply when joining to the channel so that the client
1573           knows who are on the channel.  Instead, the client list and 
1574           client's mode list is now sent in the JOIN command reply to the
1575           client who joined channel.  This is better solution.
1576
1577         * Added function silc_server_get_users_on_channel and function
1578           silc_server_save_users_on_channel to the silcd/server.[ch].
1579
1580         * Removed function silc_server_command_send_users from the
1581           silcd/command.c.
1582
1583         * Do not show topic on the client library anymore.  The topic is
1584           sent in the command reply notify to the application and the
1585           application must show the topic now.
1586
1587 Sat Mar 10 00:07:37 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1588
1589         * Added client searching by nickname hash into the IDENTIFY and
1590           WHOIS commands in the server as they were clearly missing from
1591           them.  Affected file is silcd/command.c.
1592
1593         * Fixed a bug in private message receiving in the client library.
1594           The remote ID was freed and it wasn't supposed, now it is
1595           duplicated.
1596
1597 Fri Mar  9 12:40:42 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1598
1599         * Minor fix to the channel payload; allocate the data area, as it
1600           needs to be of specific length.
1601
1602         * If the key agreement port is zero then the operating
1603           system will define the bound port.  Affected files are
1604           lib/silcclient/silcapi.h and lib/silcclient/client_keyagr.c.
1605
1606         * Added new function silc_channel_payload_decrypt into the file
1607           lib/silccore/silcchannel.[ch].
1608
1609         * Moved the channel message etc, check from silc_packet_decrypt
1610           to applications.  The library calls now a generic 
1611           SilcPacketCheckDecrypt callback which is to return TRUE or FALSE
1612           when the packet is either normal or special.  This was done to
1613           allow more wide range of checking that was not allowed when
1614           the code was in library.  Now applications can do virtually any
1615           checks to the packet and return to the library the decision how
1616           the packet should be processed.  Affected files are
1617           lib/silccore/silcpacket.[ch].
1618
1619           Added silc_server_packet_decrypt_check to the server and
1620           silc_client_packet_decrypt_check to the client library.
1621
1622         * Added silc_server_packet_send_srcdest into silcd/packet_send.[ch]
1623           to send with specified source and destination information.
1624
1625         * Channel message delivery between routers was broken after the
1626           channel key distribution was fixed earlier.  The channel key
1627           was used be to distributed to other routers as well which is not
1628           allowed by the protocol.  Now this is fixed and channel keys
1629           really are cell specific and the channel message delivery between
1630           routers comply with the protocol specification.
1631
1632         * Fixed various commands in server to check also the global list
1633           for the channel entry and not just the local list.  The affected
1634           file silcd/command.c.
1635
1636 Thu Mar  8 21:39:03 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1637
1638         * Added assert()s to buffer formatting and unformatting routines
1639           to assert (if --enable-debug) when error occurs.  Affected
1640           file: lib/silcutil/silcbuffmt.c.
1641
1642         * Changed to auto-reconnect to check whether the remote host is
1643           router and register the re-connect timeout if it is.  It used 
1644           to check that whether we are normal server, but router must do
1645           auto-reconnect with another router as well.  Affected file
1646           silcd/server.c.
1647
1648         * Removed the [<key len>] option from CMODE command as the cipher
1649           name decides the key length, nowadays.  See the defined ciphers
1650           from the protocol specification.
1651
1652         * Added [<hmac>] option to the CMODE command to define the HMAC
1653           for the channel.  Added SILC_CMODE_HMAC channel mode.
1654
1655         * Added [<hmac>] option for the JOIN command so that user can
1656           select which HMAC is used to compute the MACs of the channel
1657           messages.
1658
1659         * Added Hmac field to the Channel Message Payload.  The integrity
1660           of plaintext channel messages are now protected by computing
1661           MAC of the message and attaching the MAC to the payload.  The
1662           MAC is encrypted.  Now, it is clear that this causes some
1663           overhead to the size of the packet but rationale for this is that
1664           now the receiver can verify whether the channel message decrypted
1665           correctly and also when private keys are set for the channel the
1666           receiver can decrypt the packet with several keys and check from
1667           the MAC which key decrypted the message correctly.
1668
1669         * Added silc_cipher_encrypt and silc_cipher_decrypt into the
1670           lib/silccrypt/silccipher.[ch].
1671
1672         * Added silc_hash_len to return the digest length into the
1673           lib/silcrypt/silchash.[ch].
1674
1675         * Rewrote parts of Silc Channel Payload interface in the
1676           lib/silccore/silcchannel.[ch].  The encode function now also
1677           encrypts the packet and parse function decrypts it.
1678
1679 Wed Mar  7 20:58:50 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1680
1681         * Fixed a minor formatting bug in the SKE's key material processing.
1682           It actually might have processed the keys wrong way resulting
1683           into wrong keys.
1684
1685         * Redefined the mandatory HMAC algorithms and added new algorithms.
1686           Added hmac-sha1-96 and hmac-md5-96 which are normal hmac-sha1
1687           and hmac-md5 truncated to 96 bits.  The mandatory is now 
1688           hmac-sha1-96.  Rest are optional (including the one that used
1689           to be mandatory).  Rationale for this is that the truncated HMAC
1690           length is sufficient from security point of view and can actually
1691           make the attack against the HMAC harder.  Also, the truncated
1692           HMAC causes less overhead to the packets.  See the RFC2104 for
1693           more information.
1694
1695         * Added new [hmac] configuration section.  The SKE used to use
1696           the hash names (md5 and sha1) in the SKE proposal as HMCAS which
1697           is of course wrong.  The official names that must be proposed in
1698           the SKE are the ones defined in the protocol specification
1699           (hmac-sha1-96 for example).  The user can configure any hmac
1700           using any hash function configured in the [hash] section.  At
1701           least, the mandatory must be configured.
1702
1703           Rewrote the HMAC interface in lib/silccrypt/silchmac.[ch].
1704
1705         * Added HMAC list to the SKE proposal list.  It has now both
1706           hash algorithm list and HMAC list.  This makes the protocol
1707           incompatible with previous versions.  The SKE now seems to work
1708           the way it is supposed to work, for the first time actually.
1709
1710         * Defined plain Hash algorithms to the protocol specification.
1711           Added sha1 and md5.
1712
1713 Tue Mar  6 15:36:11 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1714
1715         * Implemented support for key agreement packets into the server.
1716           Added functions silc_server_key_agreement and
1717           silc_server_send_key_agreement.  Other than these functions,
1718           server has nothing to do with this packet.
1719
1720         * Added support for private message key packets into the server.
1721           Added functions silc_server_private_message_key and
1722           silc_server_send_private_message_key.
1723
1724         * Updated TODO.
1725
1726         * Changed the silc_[client|server]_protocol_ke_set_keys to be
1727           called in the protocol's final callback instead in the END
1728           protocol state.  This makes a little more sense and in the same
1729           time in client we can use the same protocol routines for normal
1730           key exchange and to key agreement packet handling as well.
1731
1732         * Added to both client's and server's KE protocol context the
1733           SilcSKEKeyMaterial pointer to save the key material.  We will
1734           bring the key material to the protocol's final callback by doing
1735           this.  The final callback must free the key material.
1736
1737         * Added SKE's packet_send callback into client's KE protocol
1738           context so that the caller can choose what packet sending function
1739           is used.  This way we can use different packet sending when
1740           doing normal SKE when doing key agreement packet handling (in
1741           the key agreement packet handling we do not want to encrypt
1742           the packets).
1743
1744         * Implemented the responder side of the key agreement routines
1745           in the client.  The client can now bind to specified port and
1746           accept incoming key negotiation.  The key material is passed
1747           to the application after the protocol is over.
1748
1749         * Implemented the processing of incoming Key Agreement packet
1750           in the client.  Added function silc_client_key_agreement to
1751           process the packet.
1752
1753         * Implemented the intiator side of the key agreement routines
1754           in the client.  The client can now initiate key agreement with
1755           another remote client.  The key material is passed to the
1756           application after the protocol is over.
1757
1758         * Created client_keyagr.c to include all the key agreement 
1759           routines.
1760
1761         * Added macro SILC_TASK_CALLBACK_GLOBAL which is equal to the
1762           SILC_TASK_CALLBACK except that it is not static.
1763
1764         * Created client_notify.c and moved the Notify packet handling
1765           from the client.[ch] into that file.
1766
1767         * Created client_prvmsg.c and moved all private message and
1768           private message key routines from the client.[ch] into that file.
1769
1770         * Create client_channel.c and moved all channel message and
1771           channel private key routines from the client.[ch] into that file.
1772
1773         * Changed silc_client_get_client_by_id_resolve to resolve with
1774           WHOIS command instead of IDENTIFY command, in the file
1775           lib/silclient/idlist.c.
1776
1777 Mon Mar  5 18:39:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1778
1779         * Implemented the SKE's responder side to the Client library.
1780
1781         * When FAILURE is received to the protocol do not trust it
1782           blindly.  Register a timeout to wait whether the remote closes
1783           the connection as it should do it, only after that process the
1784           actual failure.  This was changed to both client and server.
1785
1786         * Added client_internal.h to include some of the structures
1787           there instead of client.h in lib/silcclient/.
1788
1789         * Added function silc_task_unregister_by_callback to unregister
1790           timeouts by the callback function.
1791
1792 Sat Mar  3 19:15:43 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1793
1794         * Some "Incomplete WHOIS info" errors has been appearing on the
1795           log files.  Took away the entry->userinfo check from WHOIS
1796           reply sending.  The entry->userinfo is now " " if client did not
1797           provide one.  I thought this was fixed earlier but something
1798           is wrong still.  Let's see if the error still appears.
1799
1800 Wed Feb 28 20:56:29 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1801
1802         * Fixed a minor bug in the login when the channel key is
1803           re-generated in the server.  It used to generate the key in
1804           wrong order and thus caused problems in the channel traffic.
1805
1806         * Fixed a minor bug in channel key distsribution after
1807           KICK command.  The key was not sent to the router even though
1808           it should've been.
1809
1810 Tue Feb 27 20:24:25 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1811
1812         * Added silc_ske_process_key_material_data as generic routine
1813           to process any key material as the SILC protocol dictates.  The
1814           function is used by the actual SKE library but can be used by
1815           applications as well.  This relates to the private message keys
1816           and the channel private keys since they must be processed the
1817           same way the normal SILC session keys.  The protocol dictates
1818           this.  Affected files: lib/silcske/silcske.[ch].
1819
1820           Added also silc_ske_free_key_material to free the
1821           SilcSKEKeyMaterial structure.
1822
1823         * Defined silc_cipher_set_key function to set the key for
1824           cipher without using the object's method function.  The affected
1825           files: lib/silccrypt/silccipher.[ch].
1826
1827         * Implemented silc silc_client_add_private_message_key,
1828           silc_client_add_private_message_key_ske, 
1829           silc_client_del_private_message_key,
1830           silc_client_list_private_message_keys and
1831           silc_client_free_private_message_keys functions in the
1832           client library.
1833
1834           Added functions silc_client_send_private_message_key to send
1835           the Private Message Key payload and silc_client_private_message_key
1836           to handle incoming Private Message Key payload.
1837
1838         * Added Cipher field to the Private Message Key payload to set
1839           the cipher to be used.  If ignored, the default cipher defined
1840           in the SILC protocol (aes-256-cbc) is used.
1841
1842 Tue Feb 27 13:30:52 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1843
1844         * Removed lib/silcclient/ops.h file.
1845
1846           Redefined parts of the SILC Client Library API. Created new
1847           file silcapi.h that deprecates the ops.h file and defines the
1848           published Client Library API.  Defined also private message key
1849           API and channel private key API into the file.
1850
1851           This is the file that the application must include from the
1852           SILC Client Library.  Other files need not be included by
1853           the application anymore.
1854
1855         * Added new key_agreement client operation callback and also
1856           defined the Key Agreement library API for the application.
1857
1858 Tue Feb 27 11:28:31 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1859
1860         * Added new packet type: SILC_PACKET_KEY_AGREEMENT.  This packet
1861           is used by clients to request key negotiation  between another
1862           client in the SILC network.  If the negotiation is started it
1863           is performed using the SKE protocol.  The result of the
1864           negotiation, the secret key material, can be used for example
1865           as private message key.
1866
1867           Implemented the Key Agreement payload into the files
1868           lib/silccore/silauth.[ch].
1869
1870 Mon Feb 26 12:13:58 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1871
1872         * Redefined ciphers for the SILC protocol.  Added some new ciphers
1873           and defined the key lengths for the algorithms.  Changed the
1874           code accordingly.  The default key length is now 256 bits.
1875
1876         * Fixed SKE key distribution function silc_ske_process_key_material
1877           when the key length is more than 128 bits.  The default key 
1878           length in SILC is now 256 bits.
1879
1880         * Added new command status type: SILC_STATUS_ERR_UNKOWN_ALGORITHM
1881           to indicate unsupported algorithm.
1882
1883         * Renamed rijndael.c to aes.c and all functions as well.
1884
1885         * Fixed a long standing channel key setting bug in client library.
1886           Weird that it has never surfaced before.
1887
1888         * Fixed bug in channel deletion.  If the entire channel is removed
1889           then it must also delete the references of the channel entry
1890           from the client's channel list as the client's channel entry and
1891           the channel's client entry share same memory.
1892
1893 Sun Feb 25 20:47:29 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1894
1895         * Implemented CONNECT and SHUTDOWN commands in the client.
1896
1897         * Implemented CLOSE command to the client.
1898
1899         * Added the function silc_idlist_find_server_by_name into the
1900           files silcd/idlist.[ch].
1901
1902           Added the function silc_idlist_find_server_by_conn into the
1903           files silcd/idlist.[ch].
1904
1905 Sat Feb 24 23:45:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1906
1907         * DIE command was renamed to SHUTDOWN.  Updated the both code
1908           and protocol specs.
1909
1910         * Defined SILC_UMODE_NONE, SILC_UMODE_SERVER_OPERATOR and
1911           SILC_UMODE_ROUTER_OPERATOR modes into lib/silccore/silcmode.h.
1912
1913         * Implemented CONNECT, CLOSE and SHUTDOWN commands to the server
1914           side.
1915
1916         * Added function silc_server_create_connection function to create
1917           connection to remote router.  My server implementation actually
1918           does not allow router to connect to normal server (it expects
1919           that normal server always initiates the connection to the router)
1920           so the CONNECT command is only good for connecting to another
1921           router.
1922
1923 Sat Feb 24 16:03:45 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1924
1925         * Added SILC_NOTIFY_TYPE_KICKED to indicate that the client
1926           or some other client was kicked from the channel.
1927
1928           Implemented the handling of the notify type to both client
1929           and server.
1930
1931           Implemented silc_server_send_notify_kicked to send the KICKED
1932           notify.  It is used to send it to the server's primary router.
1933
1934         * Implemented the KICK command into server and client.
1935
1936         * Added `query' argument to the silc_idlist_get_client function
1937           to indicate whether to query the client from server or not if
1938           it was not found.
1939
1940         * Added new command status type SILC_STATUS_ERR_NO_CHANNEL_FOPRIV
1941           to indicate that the client is not channel founder.
1942
1943         * Updated TODO.
1944
1945 Sat Feb 24 00:00:55 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1946
1947         * Removed the rng context from SilcPacketContext structure and
1948           changed that the packet routine uses the Global RNG API.
1949
1950 Fri Feb 23 11:22:57 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1951
1952         * Added support for quit message that client can "leave" on the
1953           channel when it quits the SILC.  It is ditributed inside the
1954           SILC_NOTIFY_TYPE_SIGNOFF notify type.
1955
1956           Added silc_server_free_client_data that will take the
1957           signoff message as argument.
1958
1959         * Changed SKE routines to use the silc_pkcs_sign/verify routines.
1960
1961 Thu Feb 22 23:05:36 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1962
1963         * Updated parts of the protocol specification to keep it up
1964           to date.
1965
1966 Thu Feb 22 15:08:20 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1967
1968         * Added List flag (SILC_PACKET_FLAG_LIST) to indicate list of
1969           payloads in one packet.
1970
1971         * Deprecated following packet types: NEW_ID_LIST, NEW_CHANNEL_LIST,
1972           NEW_CHANNEL_USER_LIST, SET_MODE and SET_MODE_LIST.  List packets
1973           use now the new List flag.
1974
1975         * Also deprecated the following packet types: REPLACE_ID,
1976           NEW_CHANNEL_USER and REMOVE_CHANNEL_USER packet types.
1977          
1978         * Added list support for Notify packet in server.
1979
1980         * Added silc_server_send_notify_channel_change to send the
1981           CHANNEL_CHANGE notify type to replace channel ID's.  Deprecates
1982           the silc_server_send_replace_id.
1983
1984         * Added silc_server_send_notify_nick_change to send the
1985           NICK_CHANGE notify type.  Deprecates the function
1986           silc_server_send_replace_id.
1987
1988         * Added silc_server_send_notify_join to send the JOIN notify type.
1989           Deprecates the function silc_server_send_new_channel_user.
1990
1991         * Added silc_server_send_notify_leave to send LEAVE notify type.
1992           Deprecates the function silc_server_send_remove_channel_user.
1993
1994         * Added silc_server_send_notify_cmode and 
1995           silc_server_send_notify_cumode to send CMODE and CUMODE notify
1996           types.  Deprecates the silc_server_send_set_mode function.
1997
1998         * Added SERVER_SIGNOFF notify type to indicate that server has
1999           quit.  This means that all clients on the channel from that 
2000           server will drop.  This can be also used when netsplit happens.
2001
2002           Deprecated REMOVE_ID packet type since it is not needed anymore
2003           even from server.
2004
2005           Added silc_server_send_notify_server_signoff to send the
2006           SERVER_SIGNOFF notify type.  Deprecates the function
2007           silc_server_send_remove_id.
2008
2009           Added also silc_server_send_notify_signoff to send the
2010           SIGNOFF notify type.
2011
2012         * Employed the PKCS #1. It is the mandatory way to do RSA in the
2013           SILC protocol from this day on.  Changed the protocol 
2014           specification as well.
2015
2016         * Added silc_server_send_notify_topic_set to send TOPIC_SET
2017           notify type.  It is used between routers to notify about
2018           topic changes on a channel.
2019
2020         * Added silc_id_dup into lib/silccore/id.[ch] to duplicate
2021           ID data.
2022
2023         * Partly updated the protocol specification to comply with the
2024           changes now made.  It is still though a bit outdated.
2025
2026         * The JOIN notify type now takes one extra argument <Channel ID>.
2027           The packet used to be destined to the channel but now the
2028           JOIN type may be sent as list thus it is impossible to 
2029           destine it to any specific channel.  By adding this argument
2030           it is again possible.
2031
2032 Wed Feb 21 22:39:30 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2033
2034         * Added CREDITS file.  The CHANGES and CREDITS file will appear
2035           in the distribution as well.
2036
2037 Wed Feb 21 14:17:04 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2038
2039         * Implemented CMODE_CHANGE, CUMODE_CHANGE and TOPIC_SET notify
2040           types in the server's silcd/packet_receive.c.
2041
2042         * Implemented CMODE and CUMODE to work in router environment.
2043
2044         * Fixed minor encoding and decoding buglet from the
2045           lib/silccore/silcmode.c.
2046
2047         * Fixed buffer overflow from lib/silcclient/command.c in USERS
2048           command parsing.
2049
2050 Wed Feb 21 12:44:00 EET 2001  Mika Boström <bostik@lut.fi>
2051
2052         * Changed all SilcConfigServer* and silc_config_server* to
2053           SilcServerConfig* and silc_server_config*, respectively.
2054           Patch by Bostik.
2055
2056 Wed Feb 21 00:10:00 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2057
2058         * Associated the ID (client or server ID) to the Authentication
2059           Payload to avoid any possibility of forging.  Updated the
2060           protocol specification and the code accordingly.
2061
2062 Tue Feb 20 14:14:14 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2063
2064         * The RSA key length is now save to the RsaKey context in the
2065           key generation process in lib/silccrypt/rsa.c.  The key length
2066           is now used to figure out the maximum size of the block allowed
2067           to be encrypted/signed.
2068
2069         * Added silc_mp_mp2bin_noalloc into lib/silcmath/mpbin.[ch].  It
2070           is equivalent to the silc_mp_mp2bin but does not allocate any
2071           memory.
2072
2073         * Changed silc_mp_mp2bin API to take length argument.  If it is
2074           non-zero then the buffer is allocated that large.  If zero, then
2075           the size is approximated using silc_mp_sizeinbase, which however
2076           is not relieable.
2077
2078         * Created Global RNG API which is global RNG that application can
2079           initialize.  After initializing, any routine anywhere in the
2080           code (including library) can use RNG without allocating a new
2081           RNG object.  This was done to allow this sort of use of the 
2082           RNG in code that has no chance to allocate RNG object.  All
2083           applications currently allocate this and many routines in the
2084           library use this.  Affected file lib/silccrypt/silcrng.[ch].
2085
2086         * Removed the RNG kludge from lib/silcmath/primegen.c and changed
2087           it to use the Global RNG API.
2088
2089         * Defined Authentication Payload into protocol specification that
2090           is used during SILC session to authenticate entities.  It is
2091           used for example by client to authenticate itself to the server
2092           to obtain server operator privileges.
2093
2094           Implemented this payload into the lib/silccore/silcauth.[ch].
2095           Implemented also routines for public key based authentication
2096           as the new protocol specification dictates.
2097
2098           Moved definitions of different authentication methods from
2099           lib/silccore/silcprotocol.h into lib/silccore/silcauth.h.
2100
2101         * Added silc_pkcs_encrypt, silc_pkcs_decrypt, silc_pkcs_sign,
2102           silc_pkcs_verify and silc_pkcs_sign_with_hash and
2103           silc_pkcs_verify_with_hash functions into the file 
2104           lib/silccrypt/silcpkcs.[ch].
2105
2106 Mon Feb 19 19:59:28 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2107
2108         * The client entry's userinfo pointer must be always valid. 
2109           Otherwise the [<unknown>] bug will surface beacuse the WHOIS
2110           will fail since it requires the userinfo.  Now, the userinfo
2111           is allocated as "" if actual userinfo does not exist.  Actually,
2112           it must exist and it is totally Ok to drop client connections
2113           that does not announce the userinfo.  However, we will make
2114           this workaround for now.
2115
2116         * Added silc_net_get_remote_port into lib/silcutil/silcnet.[ch]
2117           to return the remote port by socket.
2118
2119 Mon Feb 19 14:26:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2120
2121         * Changed SILC_SERVER_COMMAND_EXEC_PENDING macro to the name
2122           SILC_SERVER_PENDING_EXEC and added an new macro
2123           SILC_SERVER_PENDING_DESTRUCTOR which is called to free the
2124           data or when error occurs while processing the pending command.
2125
2126           Added new argument `destructor' into silc_server_command_pending
2127           and to the SilcServerCommandPending object.  This destructor is
2128           now called after calling the pending callback or if error occurs
2129           immediately.  If error occurs the actual pending callback won't
2130           be called at all - only the destructor.  The destructor may be
2131           NULL if destructor is not needed.
2132
2133           All this applies for client library code as well.  Similar
2134           changes were made there as well for the pending commands.
2135
2136           In the client, the application must now allocate the 
2137           SilcClientCommandContext with the silc_client_command_alloc
2138           function.
2139
2140         * Added reference counter to the SilcServerCommandContext.  Added
2141           function silc_server_command_alloc and silc_server_command_dup 
2142           functions.
2143
2144           Same type of functions added to the client library for the same
2145           purpose as well.
2146
2147         * Removed the cmd_ident from IDListData away since it is now 
2148           global for all connections.  It is the command identifier used
2149           in command sending and with pending commands.  The affected file
2150           is silcd/idlist.h.
2151
2152         * Added reference counter to the SilcSocketConnection objecet to
2153           indicate the usage count of the object.  The object won't be
2154           freed untill the reference counter hits zero.  Currently only
2155           server uses this, and client ignores it.  The client must be
2156           set to use this too later.  The affected files are
2157           lib/silccore/silcsockconn.[ch].  Added also the function
2158           silc_socket_dup to increase the reference counter.
2159
2160           This was mainly added because it is possible that the socket
2161           is removed underneath of pending command or other async
2162           operation.  Now it won't be free'd and proper DISCONNECTING
2163           flags, etc. can be set to avoid sending data to connection that
2164           is not valid anymore.
2165
2166         * Added SILC_SET_DISCONNECTING to server.c when EOF is read from
2167           the connection.  After that it sets SILC_SET_DISCONNECTED.
2168           It is, however, possible that the socket data is not still freed.
2169           The silc_server_packet_process now checks that data is not
2170           read or written to connection that is DISCONNECTED.  The socket
2171           get's freed when the reference counter hits zero.
2172
2173 Mon Feb 19 00:50:57 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2174
2175         * Changed the client operation API: channel_message operation's
2176           `sender' is now the client entry of the sender, not the nickname
2177           and the `channel' is the channel entry, not the channel name.
2178
2179           In the private_message operation the `sender' is now also the
2180           client entry of the sender not the nickname.
2181
2182           Affected file is lib/silcclient/ops.h and all applications
2183           using the client operations.
2184
2185 Sat Feb 17 22:11:50 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2186
2187         * Moved the calling of ops->connect() from connect_to_server_final
2188           into receive_new_id functin since that is the point when the
2189           client is actually allowed to send traffic to network.  The
2190           affected file is lib/silcclient/client.c.
2191
2192 Sat Feb 17 13:15:35 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2193
2194         * When receiving NEW_CHANNEL_LIST, NEW_CHANNEL_USER_LIST,
2195           NEW_ID_LIST and SET_MODE_LIST packets, broadcast the list packet
2196           (if needs broadcasting) instead of broadcasting the packets one
2197           by one which would make a burst in the network traffic.
2198
2199         * Added `broadcast' argument to the functions in silcd/server.[ch]
2200           silc_server_create_new_channel[_with_id] to indicate whether
2201           to send New Channel packet to primary router.
2202
2203 Sat Feb 17 01:06:44 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2204
2205         * Added new function into the silcd/server.[ch] files:
2206           silc_server_create_new_channel_with_id to create new channel with
2207           already existing Channel ID.
2208
2209         * Added new packet type SILC_PACKET_SET_MODE_LIST into the file
2210           lib/silccore/silcpacket.h.  This packet is used t send list of
2211           Set Mode payloads inside one packet.  Server uses this to set
2212           the modes for the channels and clients on those channels, that it
2213           announced to the router when it connected to it.  The protocol
2214           specification has been updated accordingly.
2215
2216         * The silc_server_new_channel did not handle the packet coming
2217           from normal server as it normally does not send that.  However,
2218           when it announces its channels it does send it.  Implemented
2219           the support for that.
2220
2221         * Added SILC_ID_CHANNEL_COMPARE macro to compare to Channel ID's
2222           into the file lib/silccore/id.h.
2223
2224 Fri Feb 16 23:57:29 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2225
2226         * Fixed memory leaks in the functions silc_idlist_del_client,
2227           silc_idlist_del_channel and silc_idlist_del_server in the file
2228           silcd/idlist.c.  All of those leaked like a sieve.
2229
2230         * Fixed some small memory leaks in the client's function
2231           silc_client_notify_by_server.
2232
2233         * Added functions into silcd/server.c: silc_server_announce_clients,
2234           silc_server_announce_channels and silc_server_announce_server.
2235           These functions are used by normal and router server to announce
2236           to its primary router about clients, channels and servers (when
2237           router) that we own.  This is done after we've connected to the
2238           router.
2239
2240           These functions effectively implements the following packet types:
2241           SILC_PACKET_NEW_CHANNEL_LIST, SILC_PACKET_NEW_CHANNEL_USER_LIST
2242           and SILC_PACKET_NEW_ID_LIST.
2243
2244         * Added new functions into the silcd/packet_receive.[ch]:
2245           silc_server_new_id_list, silc_server_new_channel_list and
2246           silc_server_new_channel_user_list to handle the incoming 
2247           NEW_ID_LIST, NEW_CHANNEL_LIST and NEW_CHANNEL_USER_LIST packets.
2248
2249         * Added support of changing Channel ID in the function
2250           silc_server_replace_id.  If the server that announces a channel
2251           to the router already exists in the router (with same name but
2252           with different Channel ID), router is responsible to send
2253           Replace ID packet to the server and force the server to change
2254           the Channel ID to the one router has.
2255
2256         * Added new notify type SILC_NOTIFY_TYPE_CHANNEL_CHANGE to notify
2257           client that the Channel ID has been changed by the router.  The
2258           normal server sends this to the client.  Client must start using
2259           the new Channel ID as the channel's ID.
2260
2261           Implemented handling of this new type into lib/silcclient/client.c
2262           into the function silc_client_notify_by_server.
2263
2264         * Added new function silc_idlist_replace_channel_id into the files
2265           silcd/idlist.[ch] to replace the Channel ID.
2266
2267 Fri Feb 16 14:14:00 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2268
2269         * Call silc_server_command_identify_check always when processing
2270           the IDENTIFY command in silcd/command.c
2271
2272 Thu Feb 15 20:07:37 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2273
2274         * Added new packet type SILC_PACKET_HEARTBEAT that is used to
2275           send keepalive packets.  The packet can be sent by clients, 
2276           servers and routers.
2277
2278           Added function silc_socket_set_heartbeat into the file
2279           lib/silccore/silcsockconn.[ch] to set the heartbeat timeout.
2280           If not set, the heartbeat is not performed.  The actual 
2281           heartbeat is implemented in the low level socket connection
2282           library.  However, application is responsible of actually
2283           sending the packet.
2284
2285           Added silc_server_send_heartbeat to send the actual heartbeat
2286           packet into silcd/packet_send.[ch].  Server now performs
2287           keepalive with all connections.
2288
2289         * Added silc_task_get_first function into lib/silcutil/silctask.c
2290           to return the timeout task with shortest timeout.  There was a bug
2291           in task unregistration that caused problems.  TODO has been
2292           updated to include that task system must be rewritten.
2293
2294         * The client library will now resolve the client information when
2295           receiving JOIN notify from server for client that we know but
2296           have incomplete information.
2297
2298         * Rewrote parts of silc_server_remove_from_channels and
2299           silc_server_remove_from_one_channel as they did not remove the
2300           channel in some circumstances even though they should've.
2301
2302         * Encryption problem encountered in server:
2303
2304           The LEAVE command used to send the Channel Key packet to the
2305           router immediately after generating it.  However, the code
2306           had earlier sent Remove Channel user packet but not immediately,
2307           ie. it was put to queue.  The order of packets in the router
2308           was that Channel Key packet was first and Remove Channel User
2309           packet was second, even though they were encrypted in the
2310           reverse order.  For this reason, MAC check failed.  Now, this
2311           is fixed by not sending the Channel Key packet immediately but
2312           putting it to queue.  However, this is more fundamental problem:
2313           packets that are in queue should actually not be encrypted 
2314           because packets that are sent immediately gets encrypted
2315           actually with wrong IV (and thus MAC check fails).  So, packets
2316           that are in queue should be encrypted when they are sent to
2317           the wire and not when they put to the queue.
2318
2319           However, the problem is that the current system has not been
2320           designed to work that way.  Instead, the packet is encrypted
2321           as soon as possible and left to the queue.  The queue is then
2322           just purged into wire.  There won't be any fixes for this
2323           any time soon.  So, the current semantic for packet sending
2324           is as follows:
2325
2326           o If you send packet to remote host and do not force the send
2327           (the packet will be in queue) then all subsequent packets to the
2328           same remote host must also be put to the queue.  Only after the
2329           queue has been purged is it safe again to force the packet
2330           send immediately.
2331
2332           o If you send all packets immediately then it safe to send
2333           any of subsequent packets through the queue, however, after
2334           the first packet is put to queue then any subsequent packets
2335           must also be put to the queue.
2336
2337           Follow these rules and everything works fine.
2338
2339 Thu Feb 15 14:24:32 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2340
2341         * Added new function silc_server_remove_clients_by_server to
2342           remove all client entries from ID list when the server connection
2343           is lost.  In this case it is also important to invalidate all
2344           client entires as they hold the invalid server entry.  This
2345           fixes fatal bug when server has lost connection and will reconnect
2346           again.
2347
2348 Wed Feb 14 16:03:25 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2349
2350         * Made some sanity checks to silc_server_daemonise like to check
2351           whether the requested user and group actually exists.
2352
2353         * Added sanity check to SKE's silc_ske_responder_finish to check
2354           that the public and private key actually is valid. 
2355
2356         * Invalidate the client's nickname when receiving Replace ID
2357           packet and the Client ID is being replaced.  This means that the
2358           server will query the nickname if someone needs it (client)
2359           a bit later.
2360
2361         * Sort the ID Cache in client library when the ID Cache data
2362           has changed (needs sorting).
2363
2364         * Do not allow for SILC client to create several connections to
2365           several servers.  The client does not support windows right now
2366           and generating multiple connections causes weird behaviour.
2367
2368           Irssi-silc client does support windows and can handle several
2369           connections without problems, see: www.irssi.org and SILC plugin.
2370
2371         * Fixed some places where client was added to the IDList.  The
2372           rule of thumb is following (in order to get everything right):
2373           If the client is directly connected local client then the 
2374           `connection' argument must be set and `router' argument must be 
2375           NULL to silc_idlist_add_client function.  If the client is not
2376           directly connected client then the `router' argument must
2377           bet set and the `connection' argument must be NULL to the
2378           silc_idlist_add_client function.
2379
2380         * The funtion silc_server_packet_send_local_channel actually did
2381           not check whether the client was locally connected or not.  It
2382           does that now.  Fixed a bug related to LEAVE command.
2383
2384         * Fixed Remove Channel User payload parsing bug in server's
2385           silcd/packet_receive.c.  Fixed a bug related to LEAVE command.
2386
2387         * The server's silc_server_save_channel_key now checks also the
2388           global ID list for the channel as it might not be in the local
2389           list.  Fixed a bug related to LEAVE command.
2390
2391         * Is this the end of the [<unknown>] buglet that has been lurking
2392           around for a long time?  A little for loop fix in server's
2393           silc_server_command_whois_parse that is used by both IDENTIFY
2394           and WHOIS command.  At least, this was a clear bug and a cause
2395           of one type of [<unknown>] buglet.
2396
2397         * WHOIS and IDENTIFY commands call the function
2398           silc_server_command_[whois/identify]_check function even if
2399           we are not router server.
2400
2401 Tue Feb 13 19:55:59 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2402
2403         * Added --with-gmp configuration option.  If set the GMP
2404           is always compiled in the SILC source tree.  If not set then
2405           it is checked whether the system has the GMP3 installed.  If
2406           it has then the GMP won't be compiled (the system's headers
2407           and library is used), if it doesn't have it then the GMP is
2408           compiled in the SILC source tree.
2409
2410 Mon Feb 12 11:20:32 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2411
2412         * Changed RSA private exponent generation to what PKCS #1
2413           suggests.  We try to find the smallest possible d by doing
2414           modinv(e, lcm(phi)) instead of modinv(e, phi).  Note: this is
2415           not security fix but optimization.
2416
2417 Sun Feb 11 18:19:51 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2418
2419         * Added new config entry [Identity] to fork the server and run
2420           it as specific user and group.  A patch from Bostik.
2421
2422         * Imported Dotconf configuration library into lib/dotconf.
2423           This will be used to create the SILC configuration files later.
2424           It will appear in the distsribution after this commit.
2425
2426 Sat Feb 10 21:13:45 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2427
2428         * A big code auditing weekend happening.  Auditing code for 
2429           obvious mistakes, bugs and errors.  Also, removing any code
2430           that is obsolete.
2431
2432           Removed files for being obsolete:
2433
2434           o lib/silcutil/silcbuffer.c (the buffer interface is entirely in
2435           inline in the file lib/silcutil/silcbuffer.h)
2436
2437           o lib/silcutil/silcbufutil.c (the header has inline versions)
2438
2439           Changed code to fix possible error conditions:
2440
2441           o The buffer formatting routines now check that the destination
2442           buffer really has enough space to add the data.  This applies for
2443           both buffer formatting and unformatting 
2444           (lib/silcutil/silcbuffmt.[ch]).  Also, the entire buffer
2445           unformatting was changed to accomodate following rules: 
2446           XXX_*STRING_ALLOC will allocate space for the data into the pointer
2447           sent to the function while XXX_*STRING will not allocate or copy 
2448           the data into the buffer.  Instead it sets the pointer from the
2449           buffer into the pointer sent as argument (XXX_*STRING used to
2450           require that the pointer must be allocated already).  This change
2451           makes this whole thing a bit more consistent and more optimized
2452           (note that the data returned in the unformatting with XXX_*STRING
2453           must not be freed now).  The routines return now -1 on error.
2454
2455           o Tried to find all code that use buffer_format and buffer_unformat
2456           and added return value checking to prevent formatting and
2457           especially unformatting errors and possible subsequent fatal
2458           errors.
2459
2460           o Changed ske->x and ske->KEY to mallocated pointers in
2461           lib/silcske/silcske.h.  Fixed possible data and memory leak.
2462
2463           o Added return value checking to all *_parse* functions.  Fixed
2464           many memory leaks as well.
2465
2466           o Added length argument to silc_id_str2id in lib/silccore/id.[ch]
2467           so that buffer overflows would not happen.  All code now also
2468           checks the return value as it can fail.
2469
2470 Mon Feb  5 20:08:30 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2471
2472         * Added reconnection support to server if the normal server looses
2473           its connection to the router (for example if router is rebooted).
2474           The server performs normal reconnection strategy implemented
2475           to the server.  Affected file silcd/server.c.
2476
2477 Sun Feb  4 13:18:32 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2478
2479         * Added new packet type SILC_PACKET_SET_MODE that is used to
2480           distribute the information about changed modes (for clients,
2481           channels and clients channel modes) to all routers in the
2482           network.  Updated the protocol specification accordingly.
2483
2484           Added functions into silcd/packet_send.c and 
2485           silcd/packet_receive.c: silc_server_send_set_mode, 
2486           silc_server_set_mode.
2487
2488           Added new files silcmode.[ch] into lib/silccore that implements
2489           the encoding and decoding of Set Mode Payload.  Added new type
2490           SilcSetModePayload.  Moved the definitions of different modes
2491           from lib/silccore/silcchannel.h into lib/silccore/silcmode.h.
2492
2493 Sat Feb  3 15:44:54 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2494
2495         * Oops, a little mistake in server's connection authentication 
2496           protocol.  The protocol is not ended with FAILURE but with
2497           SUCCESS if the authentication is Ok. :)  Affected file is
2498           silcd/protocol.c.
2499
2500         * Implemented NICK_CHANGE notify handling in server in the file
2501           silcd/packet_receive.c  The NICK_CHANGE notify is distributed to
2502           the local clients on the channel.  After the changing nickname
2503           in router environment snhould work and the [<unknown>] nickname
2504           should appear no more.
2505  
2506           The silc_server_replace_id function that receives the Replace ID
2507           payload now sends the NICK_CHANGE notify type also in the file
2508           silcd/packet_receive.c
2509
2510         * Changed WHOIS and IDENTIFY command to support the maximum amount
2511           of arguments defined in protocol specs (3328 arguments).  This 
2512           fixed a bug that caused problems when there were more than three
2513           users on a channel.
2514
2515 Fri Feb  2 11:42:56 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2516
2517         * Added extra parameter, command identifier, to the
2518           silc_client_send_command so that explicit command identifier
2519           can be defined.
2520
2521           Changed that ID list routines uses specific command identifier
2522           when sending WHOIS/IDENTIFY requests to the server so that they
2523           can be identified when the reply comes back.
2524
2525           Affected files lib/silcclient/command.[ch],
2526           lib/silcclient/client.c and lib/silcclient/idlist.[ch].
2527
2528         * Added `sender' argument to silc_server_packet_send_to_channel
2529           to indicaet the sender who originally sent the packet to us
2530           that we are now re-sending.  Ignored if NULL.  Affected file
2531           silcd/packet_send.[ch].
2532
2533         * Added some server statistics support in silcd/server_internal.h
2534           SilcServerStatistics structure and around the server code.  Also
2535           send some nice statistics information when client is connecting
2536           to the client.
2537
2538 Thu Feb  1 23:31:21 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2539
2540         * Fixed channel ID decoding in server's JOIN command reply in
2541           silcd/command_reply.c
2542
2543         * Fixed braodcasting of replace ID payload to not to send it if
2544           we are standalone server in silcd/packet_receive.c.
2545
2546         * Fixed all channel message sending routines to not to send
2547           packets to clients that has router set, since they are routed
2548           separately in the same function earlier.  Affects file
2549           silcd/packet_send.c and all channel packet sending functions.
2550
2551         * In USERS reply, res_argv[i] are not allocated, the table
2552           is allocated.  Thus changed that free the table, not its
2553           internals.
2554
2555         * In server's whois_check and identify_check if the client is
2556           locally connected do not send any WHOIS commands - they are not
2557           needed.
2558
2559 Thu Feb  1 21:32:27 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2560
2561         * Fixed some minor bugs in client when sending WHOIS command.  The
2562           arguments was in wrong order.
2563
2564         * Removed statis function add_to_channel from server in 
2565           silcd/command.c that was previously used with the joining but
2566           is obsolete now.
2567
2568         * Tested USERS command in router environment successfully with two
2569           routers, two servers and two clients.
2570
2571 Thu Feb  1 00:54:26 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2572
2573         * Reorganized the USERS command and command reply in client library
2574           in lib/silcclient/command.c and lib/silcclient/command_reply.c.
2575           When the command is given by user we register a pending command
2576           callback that will reprocess the command after the reply has been
2577           received from the server.  When reprocessing the packet we then
2578           display the information.  Thus, the USERS information is displayed
2579           now in the command callback instead of in the command reply
2580           callback.  The processing of the command is same as previously
2581           when server has sent the command reply in the JOINing process.
2582
2583         * Added to USERS command in silcd/command_reply.c to join the client,
2584           we didn't use to know about, to the channel after we've created
2585           a client entry for it.  Also, for clienet we did know already still
2586           check whether it is on the channel or not and add it if not.
2587
2588         * Removed silc_server_command_join_notify as the function and its
2589           use was obsolete.
2590
2591 Tue Jan 30 22:39:15 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2592
2593         * Changed the client's pending command handling to the same as the
2594           server's pending command handling.  It is also now possible to
2595           execute command reply functions from other command reply
2596           function as the function callbacks for commands and command
2597           replies are one and same.  The pending commands are not static
2598           list anymore, it is mallocated SilcDList in lib/silcclient/client.h
2599           in client connection context.  Thus, pending commands are server
2600           connection specific as it is convenient.
2601
2602           Changed the function silc_client_command_pending and
2603           silc_client_command_pending_del and added new function
2604           silc_client_command_pending_check.  Removed the 
2605           SILC_CLIENT_CMD_REPLY_EXEC, and SILC_CLIENT_PENDING_COMMAND_CHECK
2606           macros.
2607
2608         * Added cmd_ident, current command identifier, to the client
2609           connection context in lib/silcclient/client.h to keep track on
2610           command identifiers used in command sending.  Client's command reply
2611           function handling now supports the mandatory command identifiers.
2612
2613         * Added SILC_CLIENT_COMMAND_EXEC_PENDING macros to all command reply
2614           funtions in client to fully support pending command callbacks.
2615
2616         * NOTE: the name_list in USERS (old NAMES) command is NOT sent anymore
2617           as one of the arguments to the application in the command reply
2618           client operation.
2619
2620         * NOTE: The FORWARDED flag is depracated.  It used to be depracated
2621           before first releasing SILC but came back.  Now it is removed again
2622           and should come back nomore.  The FORWARDED flag was used only
2623           by the JOINing procedure by forwarding the command packet to router.
2624           Now, the JOINing procedure has been changed to more generic (due
2625           to various router environment issues) and FORWARDED is not needed
2626           anymore for anything.  The protocol specification is yet to be
2627           updated.
2628
2629           Now, removed silc_server_packet_forward from server and the flag
2630           SILC_PACKET_FORWARDED from lib/silccore/silcpacket.h.
2631
2632 Tue Jan 30 00:05:05 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2633
2634         * Renamed NAMES command to USERS command.  The NAMES was named that
2635           due to historical reasons.  Now it is renamed.  Also, rewrote
2636           parts of the USERS command.  The nickname list is not sent anymore
2637           by the server.  Only Client ID and mode lists are sent in the USERS
2638           command.  Changed this also to the protocol specification.
2639
2640           The client now resolves the names and stuff after it receives
2641           the USERS list from the server when joining to the channel.
2642
2643         * WHOIS and IDENTIFY commands has been changed to support multiple
2644           Client ID's per command.  One can now search for multiple users
2645           in the network by sending only one WHOIS or IDENTIFY command.
2646           Changed the code and the protocol specifications.
2647
2648         * Removed silc_server_command_identify_parse and changed that IDENTIFY
2649           uses silc_server_command_whois_parse to parse the request. */
2650
2651         * If normal server, do not parse the WHOIS and IDENTIFY requests
2652           before sending it to the router.  Saves some time.
2653
2654 Sun Jan 28 16:19:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2655
2656         * Fixed JOIN command on client library.  Wrong number of arguments
2657           used to crash the client.
2658
2659         * Added silc_server_channel_has_global function to check whether
2660           channel has global users or not.
2661
2662         * Added silc_server_channel_has_local function to check whether channel
2663           has locally connected clients on the channel.
2664
2665         * The silc_server_remove_from_one_channel now checks whether the
2666           channel has global users or not after given client was removed from
2667           the channel.  It also checks whether the channel has local clients
2668           on the channel anymore.  If it does not have then the channel entry
2669           is removed as it is not needed anymore.
2670
2671         * The silc_server_notify now checks on JOIN notify whether the joining
2672           client is one of locally connected or global.  If it is global then
2673           the channel has now global users on the channel and that is marked
2674           to the channel entry.  Also, it now saves the global client to
2675           global list who is joining and JOINs it to the channel.  This is
2676           for normal server, that is.
2677
2678           Changed silc_server_send_notify_on_channel, 
2679           silc_server_packet_relay_to_channel and 
2680           silc_server_packet_send_to_channel check if we are normal server
2681           and client has router set (ie. global client) do not send the
2682           message to that client, as it is already routed to our router.
2683
2684         * Implemented LEAVE notify type handling in silc_server_notify 
2685           function.
2686
2687         * Tested LEAVE command in router environment successfully.  Tested
2688           with two routers, two servers and two clients.
2689
2690         * Updated TODO.
2691
2692         * idlist_find_xxx_by_id routines now dumps the ID on the debug mode.
2693
2694         * Implemented SIGNOFF notify type handling in silc_server_notify
2695           function.
2696
2697         * silc_server_remove_id now removes the client entry from all channels
2698           it has joined and thusly sends SIGNOFF notify type.
2699
2700         * Rewrote the NAMES list generation in server by removing two excess
2701           loops.  The lists are created now inside one loop.
2702
2703 Sat Jan 27 22:34:56 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2704
2705         * silc_server_remove_channel_user checks now also global list
2706           for channel and client.
2707
2708         * silc_server_new_channel_user checks now both local and global
2709           list for channel and client.  Fixed a bug in client id decoding.
2710           Used to decode wrong buffer.
2711
2712         * silc_server_channel_message checks now both local and global
2713           list for channel entry.
2714
2715         * Tested channel joining (hence JOIN) in router environment
2716           successfully.  Tested with two routers, two servers and two
2717           clients.
2718
2719         * Tested channel message sending in router environment successfully.
2720
2721 Thu Jan 11 03:22:57 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2722
2723         * Added silc_server_save_channel_key into server.[ch] to save the
2724           received channel key in Channel Key payload processing. It is
2725           also used in JOIN command reply handling.
2726
2727           Equivalent function silc_client_save_channel_key added into
2728           client.[ch] into client library.
2729
2730         * Changed JOIN command reply to send information whether the channel
2731           was created or not (is existing already) and the channel key 
2732           payload.  Changed protocol specs accordingly.
2733
2734         * Fixed bugs in WHOIS and IDENTIFY command reply sending when
2735           the request was sent by ID and not by nickname.  Crashed on
2736           NULL dereference.
2737
2738 Sat Dec 23 21:55:07 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2739
2740         * Fixed a bug in Client library.  IDENTIFY and WHOIS reply functions
2741           now correctly save the received data.
2742
2743         * silc_server_free_sock_user_data now notifies routers in the 
2744           network about entities leaving the network.
2745
2746           At the same time implemented functions silc_server_remove_id
2747           and silc_server_send_remove_id to receive and send REMOVE_ID
2748           packets.  The packet is used to notify routers in the network
2749           about leaving entities.  The ID removed will become invalid in
2750           the network.
2751
2752         * Added function silc_idlist_del_server into server. Removes and
2753           free's server entry from ID list.
2754
2755         * silc_server_private_message function now checks, if we are router,
2756           that the destination ID really is valid ID, naturally.
2757
2758         * In router when NEW_ID packet is received (for new client) the
2759           hash of the Client ID is saved in the ID Cache but the
2760           client->nickname is set to NULL, instead of putting the hash
2761           to it as well.
2762
2763           IDENTIFY command now also checks that client->nickname must be
2764           valid. If it is not if will request the data from the server who
2765           owns the client.  Added new function 
2766           silc_server_command_identify_check.
2767
2768         * Added silc_command_set_command into lib/silccore/silcommand.[ch]
2769           to set the command to already allocated Command Payload.
2770
2771         * Tested private message sending in router environment with two
2772           routers, two servers and two clients.  Fixed minor bugs and now
2773           it works fine.
2774
2775         * Fixed segfault from client's NAMES command. Used to crash if
2776           not on any channel.
2777
2778         * Forwarded packets must not be routed even if it is not destined
2779           to the receiver.  Changed server code comply with this.
2780
2781 Sun Dec 17 14:40:08 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2782
2783         * Added `require_reverse_mapping' boolean value to ServerParams
2784           structure. If TRUE (not default) the server will require that
2785           the connecting host has fully qualified domain name.
2786
2787           If the reverse mapping is not required and hostname could not be
2788           found the IP address is used as hostname.
2789
2790 Sat Dec 16 17:39:54 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2791
2792         * Implemented version string checking to both client and server.
2793           The check is incomplete currently due to the abnormal version 
2794           strings used in development version of SILC.
2795
2796         * Changed all command functions in server to use the new
2797           CHECK_ARGS macro.
2798
2799 Fri Dec 15 15:55:12 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2800
2801         * Changed char *data to unsigned char *data in ID Cache system to
2802           support binary data as ID Cache data. Changed code to support
2803           binary data in lib/silccore/idcache.c.
2804
2805         * Renamed silc_server_packet_relay_command_reply to 
2806           silc_server_command_reply as it is normal packet receiving
2807           function. Rewrote the function to accept command replys for
2808           servers and not only for clients.
2809
2810         * Mark remote router always as registered server if we are connecting
2811           to it.  Otherwise, commands sent by the router to us are ignored.
2812
2813         * All ID List find routines now returns the ID Cache Entry pointer
2814           as well if requested.
2815
2816         * WHOIS command works now in router environment, tested with two
2817           routers, two servers and two clients.
2818
2819         * Cleaned up and rewrote IDENTIFY command. IDENTIFY should work now
2820           in router environment (as it is almost equivalent to WHOIS) but
2821           hasn't been tested thoroughly.  Added new functions:
2822
2823           silc_server_command_identify_parse
2824           silc_server_command_identify_send_reply
2825           silc_server_command_identify_from_client
2826           silc_server_command_identify_from_server
2827
2828         * Disabled route cache adding because adding two different ID's with
2829           same IP replaces the old cache entry thus giving wrong route.
2830           The entry->router->connection is always the fastest route anyway
2831           so route cache may not be needed.  Of course, new routes maybe
2832           established after receiving the ID when the entry->router->connection
2833           might not be anymore the most optimal.
2834
2835 Thu Dec 14 15:55:35 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2836
2837         * Add route cache for received ID for fast routing.
2838
2839         * Added silc_server_packet_route to route received packet on router
2840           that is not destined to us.
2841
2842         * Renamed silc_server_get_route to silc_server_route_get.
2843
2844         * Added id_string and id_string_len fields into SilcServer to
2845           include encoded ServerID for fast comparing without excess
2846           encoding of the ID's.
2847
2848         * Cleaned up WHOIS command on server side. Added following static
2849           functions:
2850
2851           silc_server_command_whois_parse
2852           silc_server_command_whois_check
2853           silc_server_command_whois_send_reply
2854           silc_server_command_whois_from_client
2855           silc_server_command_whois_from_server
2856
2857         * Added macro SILC_SERVER_COMMAND_CHECK_ARGC to check mandatory
2858           arguments in command replies. All command functions should be
2859           updated to use this macro.
2860
2861 Sun Dec 10 23:52:00 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2862
2863         * Minor typo fixes on command reply handling on server.
2864
2865 Tue Nov 28 11:05:39 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2866
2867         * Added silc_server_command_add_to_channel internal routine to add
2868           the client to the channel after router has created the channel and
2869           sent command reply to the server.
2870
2871         * Added generic silc_server_send_command to send any command from
2872           server.
2873
2874         * Use static buffer with ID rendering instead of duplicating data.
2875
2876 Mon Nov 27 21:39:40 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2877
2878         * Fixed a channel user mode bug when joining to a channel server gave
2879           everybody channel founder rights, oops.
2880
2881         * We mark ourselves as the router of the incoming server connection
2882           if we are router ourselves.  This way we can check in some packet
2883           sending functions whether it is locally connected server.  For
2884           incoming router connections we put NULL.
2885
2886         * For router sending packets locally means now always sending the
2887           packet cell wide; to local clients and local servers.  For normal
2888           server sending packet locally means sending it to only local
2889           clients.
2890
2891         * Fixed the JOIN command to really work in router environment.  If the
2892           channel is created it is always created by the router.  Router is
2893           also responsible of making the initial joining to the channel,
2894           sending JOIN notify to the sending server and distributing 
2895           NEW_CHANNEL and NEW_CHANNEL_USER packets.  Hence, if the channel
2896           does not exist server doesn't do anything else but forward the
2897           command to the router which performs everything.
2898
2899         * Added silc_server_send_channel_key function to send the Channel Key
2900           payload.
2901
2902         * Added silc_server_create_channel_key to create new channel key.  The
2903           channel key is now re-generated everytime someone joins or leaves
2904           a channel, as protocol dictates.  Note: channel->key_len is the
2905           key length in bits.
2906
2907 Wed Nov 22 22:14:19 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2908
2909         * Splitted server.[ch] finally.  Created now packet_send.[ch] and
2910           packet_receive.[ch] to separate packet sending and receiving
2911           routines.  The server.[ch] now includes everything else including
2912           actual packet processing (writing and reading data) and other
2913           server issues.
2914
2915           Renamed silc_server_private_message_send_internal to
2916           silc_server_send_private_message.  The routine is still though
2917           used only to relay private messages as server does not send
2918           private messages itself.
2919
2920           Renamed silc_server_new_channel to silc_server_create_new_channel
2921           and added new function sicl_server_new_channel that handles the
2922           incoming New Channel packet.  Added also new sending function
2923           silc_server_send_new_channel to send New Channel Payload.
2924
2925         * Added new function silc_server_notify to process incoming notify
2926           packet to the server/router. Server may then relay the notify
2927           to clients if needed.
2928
2929         * Added new function silc_server_new_channel_user to process incoming
2930           New Channel User packet.  Router will redistribute the packet and
2931           send JOIN notify to its local clients and locally connected servers
2932           if needed.  Normal server will send JOIN notify to its local client
2933           on same channel when received this packet.  Added also corresponding
2934           sending function silc_server_send_new_channel_user to sent the
2935           payload.
2936
2937         * Added boolean route argument to send_notif_to_channel and
2938           packet_send_to_channel functions to attempt to route the packet
2939           if it is TRUE and send only locally if it is FALSE.
2940
2941 Tue Nov 21 19:49:31 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2942
2943         * silc_server_replace_id now broadcasts the received replace ID
2944           packet if it is not broadcast packet already. The router must
2945           broadcast to inform other routers about changed ID.
2946
2947         * Added backpointer to server's router into SilcServer context in
2948           silcd/server_internal.h.
2949
2950         * Fixed silc_server_packet_broadcast to send correct broadcast
2951           packets.
2952
2953         * The channel key is now distributed to the local client as soon
2954           as it is received from the router (in router environment) so that
2955           no other packet may be sent for the channel until client has 
2956           received the key.
2957
2958         * silc_server_remove_channel_user now broadcasts the received
2959           Remove Channel User packet if it is not broadcast packet already.
2960           The router must broadcast to inform other routers about removed
2961           channel user.
2962
2963         * Added users field into SilcPacketContext that is a reference count
2964           of the context.  One can increase the reference count by calling
2965           silc_packet_context_dup which is now changed to just increase the
2966           reference count instead of duplicating the data.  The reference
2967           count is decresed by calling silc_packet_context_free that will
2968           free the data after the reference count hits zero.
2969
2970           For now on the packet context and everything allocated into it
2971           (including the raw packet from network) must be freed by calling
2972           the new silc_packet_context_free function.  Added also new function
2973           silc_packet_context_alloc that must be used now to allocate the
2974           context.  This also means that if a routine is asynchronous from
2975           silc_[client/server]_packet_parse_type the packet context must
2976           be duplicated by calling silc_packet_context_dup.  Otherwise it
2977           gets free'd after silc_[client/server]_packet_parse_type returns.
2978           Also, one must remember that if packet is duplicated then its 
2979           reference count must be decresed by calling the free function as
2980           many times as it was duplicated.
2981
2982         * Changed SilcBuffer field from protocol contexts to SilcPacketContext
2983           from both client and server.
2984
2985 Mon Nov 20 23:47:03 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2986
2987         * Made joining to a channel working in router environment.
2988
2989         * Cleaned up JOIN command on server side and create function
2990           silc_server_command_join_channel internal routine to make the
2991           joining happen.
2992
2993 Thu Nov  9 21:12:39 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
2994
2995         * Changed silc_command_pending list to SilcDList.  Also, added
2996           `ident' field to SilcServerCommandPending structure to identify
2997           the reply and to call correct callback.
2998
2999           Added silc_server_command_pending_check function to replace the
3000           corresnponding macro.  The silc_command_pending list is not
3001           extern anymore.
3002
3003         * Added silc_command_set_ident into lib/silccore/silccommand.[ch]
3004           to set identifier to previously allocated Command Payload.  It
3005           is used to set identifier for command when resending Command
3006           Payload.
3007
3008         * Added silc_command_payload_encode_payload to encode Command
3009           Payload buffer from SilcCommandPayload structure.
3010
3011         * Added silc_argument_payload_encode_payload to encode Argument
3012           payload buffer from SilcArgumentPayload structure.
3013
3014 Wed Nov  8 21:03:28 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3015
3016         * Changed WHOIS command to support router connection on server side.
3017           The whois request is always sent to router unless the server is
3018           standalone server.  After server has received the reply from the
3019           router will it send the reply to the client.
3020
3021         * Added silc_server_packet_broadcast into silcd/server.[ch] to
3022           broadcast received broadcast packet.  The function is used only
3023           by router.  The broadcast packet is always sent to the router's
3024           primary route.
3025
3026         * Added silc_id_render function in lib/silcutil/silcutil.[ch] to
3027           render given ID to printable string, for log files for example.
3028
3029 Tue Nov  7 22:14:19 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3030
3031         * Made basic router to router connections working.  At least they
3032           can now connect to each other but nothing really works the way
3033           they are supposed - yet.
3034
3035         * Added new initiator token to RouterConnection configuration
3036           file in silcd/serverconfig.[ch].  It is used to tell whether we
3037           are the initiator to the remote router or whether we'll expect
3038           the other end to connect.
3039
3040         * Moved registering of listener task to silc_server_init, hence
3041           the server starts listenning as soon as it is run, even if it
3042           does not have connections to other routers.  Let's see how well
3043           this will work.
3044
3045         * Changed default connection retry timeouts for more suitable in
3046           silcd/server.h.
3047
3048         * Removed cipher and such arguments from silc_idlist_add_client
3049           and silc_idlist_add_server prototypes from silcd/idlist.[ch].
3050           Added new function silc_idlist_add_data to add the keys and stuff
3051           to any ID entry.
3052
3053         * Added SilcIDListData structure and added it to SilcClientEntry
3054           and SilcServerEntry as their first field in the structure.  This
3055           way we can explicitly cast the ID entries to the SilcIDListData
3056           structure and get common data for the entries.  In past, we had
3057           to first check what type of connection it is and then cast it to
3058           correct ID entry type.  Now, we can directly cast the opaque
3059           pointer to the SilcIDListData (no matter what ID entry it actually
3060           is) and get the data needed.
3061
3062 Mon Nov  6 21:56:12 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3063
3064         * Wow, found a bug in scheduler.  The scheduler uninitialized itself
3065           in some circumstances even if threre were timeout tasks, though not
3066           IO tasks, but tasks anyway.  Now fixed.
3067
3068         * Defined SilcServerConnection structure to hold connection specific
3069           stuff about directly connected servers and routers.  The definition
3070           is currently in silcd/server_internal.h.  I thought about having
3071           a bit more important role fro this struct but for now it is used
3072           only when connecting to other server (or router actually).
3073
3074         * Added connecting retry support in server when connecting to
3075           router(s).  The retry feature implement exponential backoff
3076           algorithm.  Also, added SilcServerParams structure to hold default
3077           parameters for server.  For now, it include these retry settings
3078           and are hard coded.  After server is moded to be as Silc Server
3079           Library this structure will be more important.
3080
3081 Sun Nov  5 22:28:44 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3082
3083         * Changed client librarys channel->clients table to SilcList and
3084           changed code accordingly.
3085
3086 Thu Nov  2 16:28:01 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3087
3088         * Changed client's channel table to SilcList and changed code 
3089           accordingly.  Also changed SilcChannelClientEntry to include back-
3090           pointer to the channel so that client entry can use that structure
3091           as list as well and we have fast cross-reference to the channel.
3092           This change dramatically decreased the complexity of channel
3093           handling with client entry and vice versa (removed one extra
3094           loop when searching for channel entry from many functions).
3095
3096         * Changed server->sim from table to SilcDList and changed code
3097           accordingly.
3098
3099         * NAMES command can now be used from user interface.  It will show
3100           the user list on the channel, neatly.
3101
3102         * Added realname pointer to SilcClientEntry in lib/silcclient/idlist.h.
3103           Code now saves realname of the user if it becomes available.
3104
3105         * Renamed configure.in to configure.in.pre and made ./prepare
3106           script to automatically add correct version string to
3107           configure.in which it creates from configure.in.pre.
3108
3109 Wed Nov  1 17:21:26 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3110
3111         * NAMES command reply now shows users mode with the nickname when
3112           joining to channel.
3113
3114         * Moved silc_client_ch[u]mode[_char] functions from 
3115           silc/clientutil.[ch] to lib/silcclient/client.[ch].  Though, that
3116           place sucks, they are utility functions and should be in some
3117           other file.
3118
3119         * Fixed some unsigned int's to unsigned short's.  Patch by cras.
3120
3121         * Fixed contrib/getopt*.[ch] to not require config.h.  Patch by
3122           cras.
3123
3124 Tue Oct 31 20:10:37 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3125
3126         * Updated README.
3127
3128         * Added TRQ (efficient deque and list library) into lib/trq.  This is
3129           a very good list library that is currently used in the SILC.  Defined
3130           SilcList API over the library because I didn't like the API very
3131           much.  See lib/trq/silclist.h for the API and examples of how to
3132           use the API.  Fixed various places in the code to use the new
3133           SilcList API. The SilcList is meant for lists that has a structure
3134           already defined as a list.  It is not suitable to add just some
3135           context to the list (in TRQ, the context is the list actually).
3136
3137           So, I defined SilcDList that can be used for the purpose where 
3138           predefined list structure does not exit.  This can be used as
3139           such list.  Now some context just can be added to the SilcDList.
3140           Currently this list is not used in the SILC just yet, though there
3141           are a lot places where this can replace dynamically allocated
3142           tables and I will fix these places, later, to use SilcDList.
3143           See lib/trq/silcdlist.h for SilcDList (they are all inline functions,
3144           and use TRQ internally).
3145
3146           Also fixed some annoying warning messages that the original TRQ
3147           code generated.  Also minor changes to TRQ's Makefile.in.
3148
3149         * Added support for querying by Client ID to both WHOIS and 
3150           IDENTIFY commands into server, as required by the protocol.
3151
3152         * Removed method function pointers from SilcBuffer structure. They
3153           weren't used to anything and just increased the context size for
3154           no good reason.  This change also made silc_buffer_alloc and
3155           silc_buffer_free functions inline functions.
3156
3157         * Disabled command flooding detection support until it's fixed so 
3158           that it accepts commands in but does not execute them more than once
3159           in two seconds.
3160
3161         * Added silc_net_localhost(), to return local hostname, into
3162           lib/silcutil/silcnet.[ch].  Also added client->hostname pointer
3163           that must be initialized before calling silc_client_init.
3164
3165         * Added new function: silc_server_send_notify_on_channels to send
3166           notify messages to all channels client has joined.  It is assured
3167           that the message is sent only once per client.
3168
3169         * Moved silc_log_format (from lib/silcutil/silclog.[ch] into
3170           lib/silcutil/silcutil.[ch] as silc_format function.  The new 
3171           function is generic and is used by server as well, not only by
3172           the logging routines.
3173
3174         * Added new SKE status type: SILC_SKE_STATUS_BAD_VERSION to indicate
3175           the provided version string was not acceptable.  Added new function:
3176           silc_ske_check_version into lib/silcske/silcske.h.  The function
3177           must be implemented by the application (client or server) and it
3178           does not reside in the SKE library.  The function checks the version
3179           string remote end sent.
3180
3181         * Added back pointers (to opaque context and to SilcSocketConnection) 
3182           into SilcPacketContext structure into lib/silccore/silcpacket.h.
3183
3184         * Added silc_packet_context_dup into lib/silccore/silcpacket.[ch] to
3185           duplicate packet context structure.
3186
3187         * Changed `notify' client operation to send same arguments as client
3188           receives from server except for ID's.  ID's are mapped to correct
3189           ID entry and that is returned.  Also, if channel entry is not sent
3190           by server but the notify is for channel the channel entry is sent
3191           to application (otherwise application doesn't know that it is for
3192           channel (library gets it from packet's Destination ID)).
3193
3194         * Added silc_client_remove_from_channels into client library to 
3195           remove a client from all channels it has joined to.  Used when 
3196           received SIGNOFF notify from server.  Added also new function
3197           silc_client_replace_from_channels to replace old ID entry with
3198           new ID entry on all channels.  Used when received NICK_CHANGE
3199           notify from server.
3200
3201         * Fixed ID Cache list handling in silc_idlist_get_client in 
3202           lib/silcclient/idlist.c.  Also, added silc_idlist_get_client_by_id
3203           to get (or query) client by ID.
3204
3205         * Updated TODO list.
3206
3207         * Added connection authentication status message defined by the
3208           protocol: SILC_CONN_AUTH_OK and SILC_CONN_AUTH_FAILED and added the
3209           support for these into the code in client and server side.
3210
3211         * Added generic function silc_client_send_command to send any command
3212           with variable argument list.  Application should use this function
3213           to send commands if the command functions provided by the library
3214           does not suite for the application's user interface needs.
3215
3216         * Added new `failure' client operation.  Application is notified about
3217           received failure packet if client is executing a protocol.  In this
3218           case the protocol's execution has failed.
3219
3220         * Added SKE's end notify to send the SKE_SUCCESS notify message that
3221           is required by the protocol.
3222
3223         * Added SILC_PROTOCOL_STATE_FAILURE to indicate received failure
3224           packet from remote.  SILC_PROTOCOL_STATE_ERROR indicates local
3225           error at our end.
3226
3227         * Added status flag to SilcSKE object to indicate realtime status
3228           of the SKE protocol.
3229
3230         * Application receives now exactly same command reply arguments as
3231           the library receives from server.  However, if ID is received the
3232           corresponding ID entry is returned to the application (eg. Client
3233           ID is mapped to correct SilcClientEntry entry and that is returned).
3234           Changed command_reply client operation due to this change.
3235
3236         * Changed all ID's in commands and in command replys as ID Payloads.
3237           Change affected both client and server side codes.
3238
3239           All ID's sent in SILC network (with execption of ID's in SILC
3240           Packet header) are sent in ID Payload to support variable length
3241           ID's.
3242
3243         * Server now notifies nick changes and notifies all clients on
3244           the channels about the new nickname (about the new Client ID,
3245           actually).
3246
3247         * Implemented CMODE command to change channel modes. Supports all
3248           channel modes defined by the protocol specs except ban and invite
3249           lists. (Also, private channel key mode is supported but support for
3250           setting private channel key in client is missing, thus, this mode
3251           has no effect on client side (except that server requires that the
3252           client uses private channel key and normal channel traffic does not
3253           work anymore)).
3254
3255           Also, invite mode works per se, but INVITE command does not work
3256           yet correctly, so you can set channel as invite only channel but
3257           inviting clients to the channel does not work (it is yet to be
3258           thought what's the best way to do it).
3259
3260         * Added new command SILC_COMMAND_CUMODE to change user mode on the
3261           channel.  Defined user modes: CHANNEL_FOUNDER and CHANNEL_OPERATOR.
3262           Implemented CUMODE command to change user's mode on the channel.
3263           Supports all modes defined by the protocol specs.
3264
3265         * Added NAMES command reply to return users modes on the channel.
3266
3267         * Removed unnecessary and slow ciphers from lib/silccrypt.
3268
3269         * Set SO_KEEPALIVE option to connection sockets by default.
3270
3271         * Added new command reply status: SILC_STATUS_USER_NOT_ON_CHANNEL.
3272
3273         * Added notify types: MOTD, CMODE_CHANGE and CUMODE_CHANGE.  Also,
3274           redefined the Notify Payload into protocol specs.
3275
3276         * Added silc_id_payload_parse_id to get ID directly from raw
3277           ID payload data.
3278
3279 Mon Oct  9 20:57:02 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3280
3281         * Changed SILC_COMMAND_IDENTIFY in protocol specification to 
3282           accept searching by Client ID as well.
3283
3284         * Added support for LEAVE and SIGNOFF notify types in client library.
3285
3286         * Added silc_id_payload_parse_data into lib/silccore/silcpayload.[ch]
3287           to parse ID Payload from raw data.
3288
3289 Sun Oct  8 19:33:08 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3290
3291         * Added flags parameter into silc_ske_assemble_security_properties
3292           function in lib/silcske/silcske.[ch].
3293
3294         * Changed notify client operation to fit better for notify messages
3295           sent by server.  The notify payload received from server is now
3296           passed to the application (after parsing it to SilcNotifyPayload).
3297           It is application's responsibility to retrieve the arguments
3298           from the payload and show the message the way it wants.  The message
3299           sent by server is implementation specific.
3300
3301         * Changed public keys to comply with the protocol specification.
3302           Old public keys are not supported anymore and are not compatible.
3303
3304         * Removed nickname from Channel Payload as the latest draft removed
3305           it.  The client must resolve the nickname from the NAMES command
3306           reply received when it joined the channel.
3307
3308           Also, changed all channel_xxxx_payload to channel_payload_xxxx.
3309
3310 Sat Oct  7 21:55:01 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3311
3312         * Fixed some errors in protocol specification drafts.
3313
3314         * Created lib/silccore/silcnotify.c to implement Notify Payload
3315           encoding and decoding, lib/silccore/silcpayload.[ch] to implement
3316           generic payloads described by protocol specifications.  The file
3317           includes implementations for ID Payload and Argument Payload.
3318
3319         * Changed Command Payload implementation to use the new Argument
3320           Payload.  Changed command_xxxx_payload to command_payload_xxxx
3321           to comply with SILC coding conventions.
3322
3323         * Added suppport for Argument Payload handling in Notify Payload
3324           implementation as protocol requires it.  Added the new support
3325           into server and client lib as well.
3326
3327 Thu Oct  5 21:16:28 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3328
3329         * Added support for multiple nicknames on same channel.  [n] is
3330           added locally to the nickname if there are more than one same
3331           nicknames on the channel.
3332
3333         * Server now sends all nicknames that matched WHOIS request.
3334           Client also shows the list received from server.
3335
3336         * Added TOPIC command to client side.  User can now set and show
3337           current topic on channel.
3338
3339         * Added MOTD command to client and server.  Also, server sends the
3340           motd when client connects to the server.
3341
3342         * Changed version strings to comply ISO 8601.
3343
3344 Wed Oct  4 23:29:06 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3345
3346         * Fixed protocol error handling in client library.  It should now
3347           cope even if the SKE fails for some reason.
3348
3349         * Made new protocol specification drafts for submitting to IETF.
3350
3351         * Implemented TOPIC command to server in silcd/command.c.
3352
3353         * Added two new notify types into lib/silccore/silcnotify.h:
3354           SILC_NOTIFY_TYPE_NICK_CHANGE and SILC_NOTIFY_TYPE_TOPIC_SET to
3355           notify nickname change and topic setting/change on a channel.
3356
3357         * API change of command_reply operation in client library.  The
3358           application gets now the status type received from server as well.
3359
3360 Sat Sep 30 16:57:42 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3361
3362         * Removed the function just added to lib/silcutil/silcschedule.[ch].
3363
3364         * Cras fixed and optimized the packet handling even further and
3365           it should work now.  Minor change to the prototype of function
3366           silc_packet_receive_process in lib/silccore/silcpacket.[ch].
3367
3368 Sat Sep 30 08:48:47 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3369
3370         * Added new function into lib/silcutil/silcschedule.[ch]:
3371           silc_schedule_with_fd to select() a specified fd.  The function
3372           returns after timeout expires or data arrives or goes.  The
3373           function is used by packet routines to wait that all data is
3374           received from network.
3375
3376         * Fixed data reading from network in lib/silccore/silcpacket.c.
3377           The code now assures that all data is read from the fd and then
3378           continues packet processing.  This was a bug fix since the code
3379           used to drop some data in some circumstances.
3380
3381         * Added new function into lib/silcclient/client.[ch]:
3382           silc_client_start_key_exchange to start key exchange after
3383           connection has been established to server.  The code internally
3384           now uses this funtion but its main purpose was to provide it
3385           for applications that perform their own connecting.  After
3386           application has created a connection it merely calls this
3387           function to start the key exchange between client and server.
3388           The library takes care of everything else after that.
3389
3390           Updated also lib/silcclient/README to explain the usage of
3391           this new function.
3392
3393         * Do not send to application information that connection has
3394           been established.  Application gets notified it by connect
3395           operation anyway.
3396
3397 Thu Sep 28 23:40:19 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3398
3399         * Applied cras's patch to add silc_schedule_one function.  The
3400           function runs scheduler once and returns.
3401
3402         * Fixed the scheduler after cras messed it up.  The timeout
3403           handling works now as it's supposed to work.
3404
3405         * Added into lib/silccore/ silcnotify.h to include notify
3406           message types support.  Changed silc_server_send_notify*
3407           functions, in server.[ch], to support those new notify types.
3408           Added the support for the notify types into client library,
3409           as well.  Added new notify client operation into ops.h in
3410           lib/silcclient/.
3411
3412         * Changed silc_server_packet_send_to_channel to send normal
3413           packets instead of just channel message packets.  The function
3414           is now used to send the notify packets to channels.  It is not
3415           used to send channel message packets anymore, as server never
3416           sends them anymore.
3417
3418         * Added explicit casting into lib/silcutil/silcbuffmt.c to few
3419           va_arg()s as it seems to require it nowadays.  I guess, if SILC
3420           is compiled with older va_arg() the new code should work anyway.
3421
3422 Wed Sep 13 18:10:14 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3423
3424         * Splitted core library.  Core library (lib/silccore) includes
3425           now only SILC protocol specific core (and common) components.
3426           Created new utility library (lib/silcutil) that includes more
3427           generic purpose stuff.  The stuff for util library was taken
3428           from the old core library.  This was minor and easy split.
3429
3430         * Created SILC Client Library (lib/silcclient) that includes
3431           implementation of the SILC client without user interface.  This
3432           was major move from silc/ directory.  The code has been changed
3433           so that it is transparent towards the user interface.  The
3434           silc/ directory includes now the same user interface as before
3435           and it uses the new client library.  Read lib/silcclient/README.
3436           Basicly, the client library performs everything else related
3437           to SILC except user interface handling.  Also, configuration
3438           files are considered to be part of user interface and library
3439           does not handle them.
3440
3441           This change also changed a lot of structures, function naming etc.
3442           Most important change was that SilcClientWindow object was
3443           renamed to SilcClientConnection in the client library.  Created
3444           also new file lib/silcclient/ops.h.  Also added new files
3445           silc/local_command.[ch] and silc/client_ops.[ch].
3446
3447           All these changes were made to make it easier for user interface
3448           designers to create what ever user interface for the SILC client
3449           they want.
3450
3451           It is also expected that the server will be moved to lib
3452           directory as well and SILC Server Library will be created;
3453           sometimes in the future.
3454
3455         * Removed Local commands from lib/silccore/silccommand.h as
3456           they are application specific and new client library does not
3457           handle any of those anymore.
3458
3459         * Several functions moved to lib/silcutil/silcutilc.[ch] from
3460           old client implementation in silc/.
3461
3462         * Added support for callback functions in SILC_LOG_* macros.
3463           Application can now set its own callbacks that will be called
3464           instead of using the default functions that will always print
3465           the debug messages to stderr (or stdout).  Also, debugging can
3466           now be disabled by setting silc_debug to FALSE and re-enabled by
3467           setting it to TRUE.  Note, that logging will still work even
3468           if debugging is disabled.
3469
3470           New functions in lib/silcutil/silclog.[ch]: silc_log_set_callbacks,
3471           silc_log_reset_callbacks, silc_log_set_debug_callbacks and
3472           silc_log_reset_debug_callbacks.
3473
3474         * To enable debugging in silc client one must give now -d
3475           option on command line.
3476
3477         * Changed silc_schedule_init to automatically allocate task queues
3478           if they are not allocated before calling it.
3479
3480 Thu Sep  7 10:49:33 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3481
3482         * Added GMP 3.1 into math library.
3483
3484 Sun Aug 20 21:27:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3485
3486         * Added SILC_PACKET_REMOVE_CHANNEL_USER to remove a client from
3487           a channel in SILC network.  The packet is used by servers and
3488           routers to notify other routers that user has left a channel.
3489           This little feature was missing until now.  Added the feature
3490           to protocol specification as well.
3491
3492           Added functions: silc_server_send_remove_channel_user and
3493           silc_server_remove_channel_user into server.[ch].
3494
3495         * Added SILC_PACKET_REKEY and SILC_PACKET_REKEY_DONE into
3496           lib/silccore/silcpacket.h.  However, they are not implemented
3497           yet.
3498
3499 Sat Aug 19 23:04:16 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3500
3501         * Fixed joining to a channel and sending channel messages
3502           between server and router.  The channel message sending should
3503           now work inside a cell.
3504
3505 Tue Jul 25 20:46:13 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3506
3507         * Fixed the private message sending between server and router.
3508           The private message sending should now work inside a cell.
3509
3510         * Added silc_server_replace_id into server.[ch] to replace
3511           existing ID in the SILC network.
3512
3513         * Added silc_idlist_find_server_by, silc_idlist_replace_client_id
3514           and silc_idlist_replace_server_id into idlist.[ch] in server.
3515
3516 Mon Jul 24 18:33:31 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3517
3518         * Fixed the server to server connections.  Server can again now
3519           connect to router.  Router to router connections probably does
3520           not work just yet.
3521
3522 Thu Jul 20 13:15:01 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3523
3524         * Added dynamic protocol registering support.  Now protocols can
3525           registered and unregistered on the fly.  Patch by cras.
3526
3527 Wed Jul 19 19:08:46 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3528
3529         * Added lib/contrib directory to hold routines that some platforms
3530           don't have but are needed by SILC.
3531
3532         * Added getopt.c, getopt1.c and getopt.h from GNU C library
3533           into lin/contrib to provide getopt() and getopt_long() for
3534           those who don't have it.
3535
3536 Tue Jul 18 20:41:20 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3537
3538         * Added AWAY command to client.  When away message is set and
3539           client receives a private message packet the client automatically
3540           replies to the sender with the away message.
3541
3542         * Fixed a bug in lib/silcmath/mpbin.c: silc_mp_mp2bin.  This
3543           bug seemed to be the cause of recent problems when compiling
3544           with gcc-2.95.
3545
3546         * Added version detection support to SKE protocol specification
3547           and added the new changes to the SKE implementation as well.
3548           There were other minor changes in the SKE protocol as well.
3549
3550           Many changes in lib/silcske/silcske.[ch] and in
3551           lib/silcske/payload.[ch].
3552
3553         * Added ^U functionality, clear input line.  Patch from cras.
3554
3555 Mon Jul 17 23:33:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3556
3557         * Mainly small bugfixes on core library.  Fixed some debugging
3558           logging and buffer overflow in silclog.c.
3559
3560         * Updated config.sub and config.guess on the distribution tree.
3561
3562 Sat Jul 15 15:33:48 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3563
3564         * Added command lagging support in server. Client may execute
3565           commands now only once in two seconds.
3566
3567 Thu Jul 13 22:10:21 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3568
3569         * Optimized packet reception. MAC computation and checking is now
3570           also more optimized.  A lot previously duplicated code is now
3571           used as generic by both client and server.
3572
3573         * Fixed key pair generation in clientutil.c
3574
3575 Wed Jul 12 18:28:07 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3576
3577         * Added into lib/silccore/silcbufutil.[ch] new function;
3578           silc_buffer_realloc.
3579
3580         * Moved generic packet sending/encryption functions to 
3581           lib/silccore/silcpacket.[ch] from client and server.  Some
3582           rewriting of the functions.
3583
3584         * Moved all generic packet reception/decryption functions to
3585           lib/silccore/silcpacket.[ch] from client and server.  The
3586           packet processing is now much cleaner in both client and server.
3587           These were major changes in both client and server.
3588
3589         * Created many common functions in server to do packet sending.
3590           Previously code were duplicated a lot, this has been removed
3591           with these changes.
3592
3593 Tue Jul 11 20:27:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3594
3595         * Rewrote major parts of the ID cache system.  Don't know 
3596           whether it is better now or not but at least the API is more
3597           cleaner now.
3598
3599         * Major rewrite on ID cache stuff on client because of the ID
3600           cache API changes.  Added idlist.c to client.
3601
3602         * Also major rewrite on ID cache stuff on server as well.
3603           Major rewrite of idlist.[ch]. SilcXXXList's are now named
3604           SilcXXXEntry's.  We won't keep anymore idlist specific pointers
3605           in hand, instead they are all put into the ID cache system now.
3606           All server_idlist_* routines uses ID cache now instead of
3607           traversing its own lists (those lists does not exist anymore).
3608           SilcIDList though still exists.  Also, SilcXXXEntry's are
3609           now pointers.
3610
3611 Sun Jul  9 15:19:24 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3612
3613         * Finally made the SKE implementation compliant to the protocol
3614           specification.  All mp integers are now binary encoded as
3615           opposed being HEX encoded.
3616
3617         * Added lib/silcmath/mpbin.[ch].  Encoding mp intergers to and
3618           from binary data.
3619
3620         * Added into lib/silccore/silcutil.[ch] PEM encoding/decoding
3621           functions: silc_[encode/decode]_pem.  Also added function
3622           silc_encode_pem_file to PEM encode with newlines ('\n') for
3623           saving into a file.
3624
3625         * SILC public keys are now encoded either PEM or binary.  Same
3626           option is for private keys as well.  By default private keys
3627           are binary encoded and public keys PEM encoded.  Silly HEX
3628           encoding were removed.
3629
3630         * Added into lib/silccrypt/silchash.[ch] silc_hash_fingerprint
3631           function to create fingerprints.
3632
3633         * Fixed a bug in SHA1; does not change the original data anymore.
3634
3635         * Partly implemented INFO command on client and server side.
3636           Fixed CLEAR command.  Changes to SERVER command; show current
3637           server(s) when giving command without arguments.  Added
3638           VERSION command to client.
3639
3640         * Added check to server that unregistered connections cannot
3641           execute commands (unless it is specificly allowed).
3642
3643 Thu Jul  6 18:12:24 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3644
3645         * Fixed screen refresh.
3646
3647         * Fixed channel joining bug from client.  On some circumstances
3648           client tried to join to a channel it had already joined.
3649
3650         * Added public key verification process into client's protocol.c.
3651           The client now verifies the public key from user and saves
3652           it into ~./silc/serverkeys/ directory. 
3653
3654           Added into: clientutil.[ch]: silc_client_verify_server_key.
3655
3656         * Changed SKE protocol's silc_ske_initiator_finish function
3657           to accept callback function that verifies the received public
3658           key.  Removed old silc_ske_verify_public_key function.
3659
3660 Wed Jul  5 19:19:02 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3661
3662         * Added into silcpkcs[ch]: silc_pkcs_public_key[_data]_set and
3663           silc_pkcs_private_key[_data]_set.
3664
3665         * Made the password and public authentication more cleaner in
3666           server's protocol.c.
3667
3668         * Removed historic and obsolete protocol `channel_auth' from
3669           both client and server.
3670
3671         * Removed wrong way of sending command status messages from
3672           server to client in server's command.c.  The old way violated
3673           protocol specification.  
3674
3675           Changes to silccore/silccommand.[ch]: removed
3676           silc_command_encode_status_payload -> not needed anymore,
3677           changed silc_command_encode_payload_va to accept extra
3678           argument on variable argument list.  The argument type must
3679           now be provided to the function.  Also, added new function:
3680           silc_command_encode_reply_payload_va which is same as
3681           normal command_encode_payload_va except command status type
3682           is provided as extra argument.
3683
3684 Tue Jul  4 18:26:39 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3685
3686         * Added ~./silc directory handling.  The directory includes the
3687           public and private keys for the client.
3688
3689           Added silc_client_check_silc_dir, silc_client_create_identifier
3690           and silc_client_load_keys.
3691
3692         * Implemented SILC protocol compliant public key.  Added public
3693           and private key saving to and loading from files.
3694
3695           Added into silcpkcs.[ch]: silc_pkcs_encode_identifier,
3696           silc_pkcs_public_key_encode[_data], silc_pkcs_public_key_decode,
3697           silc_pkcs_private_key_encode[_data], silc_pkcs_private_key_decode,
3698           silc_pkcs_public_key_alloc, silc_pkcs_public_key_free,
3699           silc_pkcs_private_key_alloc and silc_pkcs_private_key_free.
3700
3701           Implemented: silc_pkcs_save_[public/private]_key[_data] and
3702           silc_pkcs_load_[public/private]_key.
3703
3704 Mon Jul  3 18:51:27 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3705
3706         * Added silc_server_get_route (route.[ch]) to get connection
3707           data for the fastest route for given ID.
3708
3709         * Implemented INVITE command on client and server.  The command
3710           were re-defined in the SILC Protocol Specification and the
3711           implementation now complies with the specification.
3712
3713         * Implemented PING command on client and server.
3714
3715         * Implemented NAMES command on client and server.  The server side
3716           supports currently only normal server not router server yet.
3717           Some changes to NAMES definition in SILC protocol specification.
3718
3719 Sun Jul  2 18:23:01 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3720
3721         * Implemented LEAVE command on client and server.
3722
3723         * Previously deprecated SILC_PACKET_FORWARDED flag is now in use 
3724           again.  This change was made to the protocol as well.  Server
3725           should not violate the protocol specification anymore.
3726
3727 Fri Jun 30 14:03:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
3728
3729         * Added SOCKS4 and SOCKS5 support to SILC client.  SOCKS5
3730           was tested.  SOCKS4 was not but should work anyway.