updates.
[silc.git] / CHANGES
1 Sun Sep 16 12:32:58 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
2
3         * Assure that the packet length digged from the actual packet
4           is something sensible in the silc_packet_decrypt_rest_special
5           in lib/silccrypt/silcpacket.c.
6
7         * Free and NULL the allocated pointer in silc_hmac_alloc if
8           the HMAC allocation fails.  The affected file is
9           lib/silccrypt/silchmac.c.
10
11         * Print the selected security properties to the log files in
12           the server.  Affected file silcd/protocol.c.
13
14         * Add SKE's reference counter even if calling the completion
15           callback manually.  Otherwise it goes negative, although it
16           does not cause any problems.  The affected file is
17           lib/silcske/silcske.c.
18
19         * Remove the client entry with short timeout after giving the
20           KILL command.  Affected file lib/silcclient/command.c.
21
22         * Fixed to send error reply in WHOIS and IDENTIFY commands in
23           case all found clients are already disconnected (WHOWAS would
24           found them) in the server.  Affected file silcd/command.c.
25
26         * Update the last_receive (time of last data received) to be 
27           updated only when received private or channel message so that
28           the idle time showed in WHOIS makes more sense.
29
30         * Added boolean field `valid' in to the SilcClientEntry in the
31           client library to indicate whether the entry is valid or not.
32           This fixes the nickname change bug on channel when changing
33           the nickname to be same than the old (like nick to Nick) the
34           nickname formatter doesn't set the new nick anymore to Nick@host.
35           Affected file lib/silcclient/idlist.[ch].
36
37         * Now actually fixed the nickname changing on disconnection.
38           Added new function silc_change_nick to the Irssi SILC Client.
39           Affected file irssi/src/silc/core/client_ops.c,
40           irssi/src/silc/core/silc-nicklist.[ch].
41
42 Sat Sep 15 13:29:17 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
43
44         * Check that the public key exists in the GETKEY command before
45           trying to encode it.  Affected file silcd/command.c.
46
47         * Print some notifications on received public keys with GETKEY
48           command in the Irssi SILC Client.  Affected files are
49           irssi/src/fe-common/silc/module-formats.[ch],
50           irssi/src/silc/core/client_ops.c.
51
52         * Use IDENTIFY command to resolve the server information in the
53           GETKEY command instead of INFO command.  Affected file
54           lib/silcclient/command.c.
55
56         * All command reply functions in the client library now calls
57           the pending command reply callbacks even if an error has
58           occurred.  The server has done this a long time and now it was
59           time to move the client library to this as well.  Now all
60           errors can be delivered back to the pending command reply
61           callbacks if necessary.  Affected files are
62           lib/silcclient/command[_reply].[ch].
63
64         * Change the nickname on disconnection back to the username
65           because in reconnect the server will enforce it to it anyway.
66           Affected file irssi/src/silc/core/silc-servers.c.
67
68         * Fixed a config file parsing bug in the Irssi SILC client.
69           Affected file irssi/src/silc/core/clientconfig.c.
70
71 Thu Sep 13 23:11:18 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
72
73         * When printing the channel mode on JOIN, verify that the
74           channel key and channel's HMAC are valid.  Affected file
75           irssi/src/silc/core/client_ops.c.
76
77 Thu Sep 13 20:24:52 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
78
79         * Added defines SILC_DEFAULT_CIPHER, SILC_DEFAULT_HMAC,
80           SILC_DEFAULT_HASH and SILC_DEFAULT_PKCS in the file
81           lib/silccrypt/[silccipher.h|silchmac.h|silchash.h|silcpkcs.h].
82
83         * Removed channel key rekey task deleting from the function
84           silc_server_save_channel_key.  Affected file silcd/server.c.
85           Added explicit timeout task context instead that is used to   
86           delete the task if we are registering a new task before the
87           new task has elapsed.
88
89         * When channel key rekey occurs the client library now saves
90           the old channel key for a short period of time (10 seconds) and
91           is able to use it in case some is still sending channel
92           messages encrypted with the old key after the rekey.  Affected
93           file lib/silcclient/[idlist.h|client_channel.c].
94
95 Sun Sep  9 15:49:16 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
96
97         * Added check to the silc_server_new_id_real to not accept
98           new ID if it is the sender's own ID.  Affected file is
99           silcd/packet_receive.c.
100
101         * Assure that we do not announce ourself or the one we've
102           sending our announcements when we're router and are announcing
103           servers to our primary router.  Affected file silcd/server.c.
104
105         * Fixed silc_server_command_identify_check_client to assemble
106           correct WHOIS packet.  It send corrupted WHOIS packet and
107           caused problem with router to router connections.  Affected
108           file silcd/command.c.
109
110           Fixed also silc_server_command_whois_check the same way
111           as for the IDENTIFY command.
112
113         * Added new SilcIDListStatus to the server in the SilcIDListData
114           structure.   The status now includes the current status of
115           the entry (like registered, resolved etc.).  Affected file
116           silcd/idlist.[ch].  Defined a bunch of different status types
117           as well.  This replaced the old boolean registered field as well.
118
119           Added resolve_cmd_ident field to the SilcClientEntry structure
120           too so that if the entry is for example being resolved so 
121           another command may attach to the same pending command reply
122           without requiring to resolve the same entry again.  This concept
123           should optimize the WHOIS and the IDENTIFY resolving under
124           heavy load by taking away unnecessary resolving for entries
125           that are being resolved already.
126
127           Added support for adding multiple pending commands for one
128           command idenfier.  Affected file silcd/command[_reply].[ch].
129
130         * Fixed WHOIS and IDENTIFY save to remove the cache entry
131           before deleting the data.  Otherwise the hash table will have
132           freed data in comparison functions.  Affected file is
133           silcd/command_reply.c.
134
135         * Fixed silc_idlist_replace_client_id to add the new entry to
136           the cache with NULL nickname.  Otherwise there will be invalid
137           memory as the nickname after the nickname is freed.  Affected
138           file silcd/packet_receive.c.
139
140         * Fixed the silc_idlist_get_clients_by_hash.  The entries was
141           saved into wrong slots because the previous number of entries
142           was not taken into account.  Affected file silcd/idlist.c.
143           Fixed same thing in silc_idlist_get_clients_by_nickname too.
144
145         * If we are router and we receive JOIN notify to a channel that
146           does not have any users then notified client is marked as the
147           channel founder, as it is it.  The affected file is
148           silcd/packet_receive.c
149
150         * Added to the extended hash table API's table_del_*ext functions
151           the destructor as argument too, so that the caller can decide
152           which destructor to use or whether to use destructor at all.
153           Affected file lib/silcutil/silchashtable.[ch].
154
155         * Fixed ID Cache purging.  It actually deleted the entries from
156           the hash table after the data was freed.  The hash table ended
157           up comparing freed memory.  The affected file is
158           lib/silccore/silcidcache.c.
159
160 Sat Sep  8 10:22:10 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
161
162         * Fixed Irssi SILC client's KILL command's HELP syntax.
163
164         * The USERS command now resolves the detailed user information
165           if the userinfo field is missing.  Affected file is
166           lib/silcclient/command_reply.c.
167
168         * Do not print error in silc_file_read if the read file does
169           not exist.  Just silently return NULL.  Affected file is
170           lib/silcutil/silcutil.c.
171
172         * Fixed the silc_log_output to not wine about NULL filename
173           and to not create some bogus " " filename.  Affected file is
174           lib/silcutil/silclog.c.
175
176 Fri Sep  7 22:16:38 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
177
178         * Fixed various printing bugs on the user interface in the
179           Irssi SILC Client.  Minor changes that were forgotten from
180           the release.
181
182 Fri Sep  7 17:28:37 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
183
184         * Fixed the configure.in.pre and the compilation and distribution
185           environment to support the new autoconf 2.52.  That version is
186           now required to compile the CVS trunk.
187
188 Thu Sep  6 12:47:37 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
189
190         * Renamed function silc_parse_nickname to silc_parse_userfqdn
191           to generally parse user@fqdn format strings.  Affected file
192           lib/silcutil/silcutil.c.
193
194         * Added nickname_format and nickname_force_format fields to the
195           SilcClientParams structure.  The first one defines the format
196           for the nicknames that the library will enforce if the receives
197           multiple same nicknames.  The second one is boolean value and
198           can be used to force the library to always enforce the format
199           to the nicknames regardles whether there are multiple nicknames
200           or not.  This configurable formatting was employed to flexibly
201           support accessing multiple nicknames from the user interface.
202           The userinterface can now set the nicknames to what ever format
203           they prefer.  Affected file lib/silcclient/silcapi.h.
204
205           Added function silc_client_nickname_format to the file
206           lib/silcclient/idlist.c.  It performs the nickname formatting.
207
208           Added new field `hostname´ to the SilcClientEntry context.
209           It holds the hostname of the client.  Affected file is
210           lib/silcclient/idlist.h.
211
212         * Irssi SILC Client sets the nicknames in nick@hostn format.
213           Fe. priikone@otaku, priikone@otaku2 etc.  Affected file
214           irssi/src/silc/core/silc-core.c.
215
216           The WHOIS printing now also shows both the real nickname and
217           the formatted nickname so that user knows how to access the
218           user if there are multiple same nicknames cached.  Affected
219           file irssi/src/silc/core/client_ops.c.  Changed the WHOIS
220           printing formatting too to take the hostname now as a separate
221           argument.  The Affected file is
222           irssi/src/fe-common/silc/modules-formats.[ch].
223
224         * Changed the silc_client_get_clients_local to accept the formatted
225           nickname as argument.  It accepts the real nickname too but the
226           formatted nickname can be used to find the true entry from 
227           multiple entries.  Affected file lib/silcclient/silcapi.h and
228           lib/silcclient/idlist.c.
229
230         * Added nickname_format_parse field to the SilcClientParams.
231           It is a callback function provided by the application to parse
232           the nickname out of the formatted nickname string. The library
233           calls it to get the nickname from the formatted string. Since
234           the application generally knows better the format of the nickname
235           string it parses it instead of the library, even though library
236           encodes the formatted string.  If the callback function is not
237           provided then the library will use the string as is.  The
238           affected file is lib/silcclient/silcapi.h.
239
240         * All the nickname strings passed to the client library in 
241           commands are now expected to be formatted nickname strings.
242           If the command does not support the formatted nickname string
243           it will assume that the sent string is the actual nickname.
244           Affected file lib/silcclient/command.c.
245
246 Tue Sep  4 22:31:28 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
247
248         * Added public key authentication support to OPER and SILCOPER
249           commands in the client library.  Affected file is
250           lib/silcclient/command.c.
251
252 Tue Sep  4 12:39:17 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
253
254         * Changed the get_auth_methdod client operation to be asynchronous.
255           It can be async if the application resolves the authentication
256           method from the server during the negotiation.  Added new
257           SilcGetAuthMeth completion callback that the application will
258           call after resolving the authentication method.
259
260           Added function silc_client_request_authentication_method that
261           the application can use to resolve the authentication method
262           from the server.  Added also SilcConnectionAuthRequest callback
263           that the library will call after the server has replied.  The
264           application can call this function if it does not know the
265           current authentication method.
266
267           Affected files are lib/silcclient/client.c and 
268           lib/silcclient/silcapi.h.
269
270         * The Irssi SILC client now automatically resolves the authentication
271           method incase any configuration information is not present (and
272           currently there never is).  The affected file is
273           irssi/src/silc/core/client_ops.c.
274
275         * Fixed public key authentication from the client library.
276           Affected file lib/silcclient/protocol.c.  Changed also the
277           protocol specification about the public key authentication in
278           the connection authentication protocol.  The actual data to be
279           signed is now computed with a hash function before signing.
280
281         * Fixed the public key authentication from the server as well.
282           Affected file silcd/protocol.c.
283
284         * Removed the mlock()'s from the memory allocation routines.
285           Affected file lib/silcutil/silcmemory.c.  The ./configure does
286           not check anymore for the mlock().  Affected file is
287           configure.in.pre.
288
289         * Fixed USERS command in server to allow the execution of the
290           command for private and secret channels if the client sending
291           the command is on the channel.  Affected file silcd/command.c.
292
293         * Fixed silc_client_get_clients_local to return the clients
294           count correctly.  It could return wrong value.  Affected file
295           lib/silcclient/idlist.c.
296
297 Mon Sep  3 20:09:59 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
298
299         * Fixed the lib/silcmath/mpi/mpi.h to always use 32-bit data
300           types.  The assembler optimizations seemed not to like 64-bit
301           data types.  The assmebler optimizations thus are now enabled
302           also for BSD systems as opposed to only enable them for Linux.
303
304         * Do not check for threads at all on BSD systems.  Affected
305           file configure.in.pre.
306
307         * Removed -n and -h options from the Irssi SILC Client since
308           they are not used in silc.
309
310         * Fixed the prime generation to assure that the first digit
311           of the generated random number is not zero since our conversion
312           routines does not like number strings that starts with zero
313           digit.  If zero digit is seen the random number is regenerated.
314           This caused some corrupted RSA keys when the zero first digit
315           was met.  Affected file lib/silcmath/silcprimegen.c.
316
317 Sun Sep  2 17:17:24 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
318
319         * Fixed WIN32 configuration in the ./configure script.
320           Fixed to include xti.h on environments that has it.
321           Patches by Carsten Ilchmann and andrew.
322
323 Sat Sep  1 00:29:33 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
324
325         * Changed the silc_id_create_client_id to be collision
326           resistant.  It is now assured that there cannot be created
327           two same client ID's.  I suspect that some weird bugs in 
328           the server were actually caused by duplicate Client IDs.
329           Affected file silcd/serverid.[ch].  A router receiving
330           new ID now also assures and informs the sending server
331           if the ID caused collision.
332
333         * Changed the silc_id_create_channel_id to also assure that
334           there are no collisions.
335
336 Wed Aug 29 17:55:01 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
337
338         * Statement about ignoring the Mutual Authentication flag when
339           performing rekey with PFS was a bit misleading.  It is ignored
340           if it was set in the initial negotiation, it cannot be even
341           set in the rekey.  Fixed in the ke-auth draft.  Started the
342           new versions of the protocol drafts in the doc/.
343
344 Sun Aug 26 14:59:15 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
345
346         * Fixed a bug in silc_client_command_identify_save when saving
347           new channel information.  The channel name was no duplicated
348           and caused crash on exit.  Affected file is
349           lib/silcclient/command_reply.c.
350
351 Fri Aug 17 23:07:45 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
352
353         * Fixed the getkey command handling in the server.  Send just
354           empty OK reply to the sender if the key could not be fetched
355           (but everything else was ok, like the key just was not available).
356           Changed the public key parameter to optional in the protocol
357           specs so that empty OK reply can be sent.  Affected file
358           silcd/command.c.
359
360           Added a message to Irssi SILC client to tell to user if the
361           server did not return a public key.
362
363 Tue Aug 14 07:29:27 CEST 2001  Pekka Riikonen <priikone@silcnet.org>
364
365         * Fixed a channel key regeneration bug.  It registered new
366           timeout tasks exponentially until all system resources were
367           used.  Affected file silcd/server.c.
368
369 Sun Aug 12 20:48:14 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
370
371         * Added the SILC Document generator to the scripts/silcdoc.
372           It can be used to generate the Toolkit Reference Manual out
373           of the source tree.  Internally it will also use the RoboDoc
374           generator now imported in util/robodoc.
375
376 Sun Aug 12 12:28:17 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
377
378         * Added couple of return's in rekey protocol if error orccurred
379           during the protocol.  The execution must be terminated.
380           Affected file silcd/protocol.c.  Also, terminate the protocol
381           always with timeout.
382
383 Sat Aug 11 12:36:02 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
384
385         * The client's Client ID was created initally from the wrong
386           nickname (it could have been in format nick@host) in the
387           silc_server_new_client.  Affected file silcd/packet_receive.c
388
389 Sat Aug 11 00:29:57 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
390
391         * Added some SILC_LOG_ERROR's to various error conditions
392           if client could not be added to ID cache.  Affected files
393           silcd/packet_receive.c and silcd/server.c.
394
395         * When client's sock->user_data is freed, NULL also the 
396           client->router and client->connection pointers.  Added check
397           for these pointers being NULL to various places around the
398           code.  Affected file silcd/server.c.
399
400         * Added client->data.registered == TRUE checks to various
401           places around the code to assure that unregistered client's
402           are not handled when it is not allowed.  Affected file
403           silcd/server.c.
404
405         * Added `bool registered' fields to all 
406           silc_idlist_[server|client]_get_* routines to indicate whether
407           the fetched client needs to be registered or not.  Affected
408           file silcd/idlist.[ch].
409
410         * Add your own entry as registered to the ID cache in the
411           server.  Affected file server.c.
412
413         * Fixed a bug in silc_server_new_server.  The SilcServer was
414           set as the new server's context instead of SilcServerEntry.
415           This naturally caused some weird bugs.
416
417 Thu Aug  9 18:28:37 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
418
419         * Do not delete the channel rekey task when adding it
420           for in silc_server_create_channel_key.
421
422         * Changed the silc_server_create_channel_key to return
423           TRUE or FALSE to indicate the success of the channel key
424           creation.
425
426 Thu Jul 26 11:32:31 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
427
428         * Fixed MSVC++ project files and added missing files to
429           Makefiles under win32/.
430
431 Wed Jul 25 18:43:54 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
432
433         * Do not add TCP_NODELAY flag if the operating system
434           does not have it defined.  Affected files are
435           lib/silcutil/[unix/win32]/silc[unix/win32]net.c.
436
437         * Fixed buffer overflow from Irssi SILC Client.  Affected
438           file irssi/src/fe-common/core/themes.c.
439
440         * Fixed double free in client library in the file
441           lib/silcclient/client.c when disconnecting from server.
442
443         * Applied double free patch from cras to Irssi SILC client.
444           Affected files irssi/src/core/[modules/expandos].c
445
446         * Fixed the disconnection handling to Irssi SILC Client.
447           The application must call silc_client_close_connection
448           in ops->connect client operation in case of failure of
449           the connection.  Affected file is
450           irssi/src/silc/core/client_ops.c.
451
452         * Do not set sock->protocol to NULL in the function
453           silc_client_close_connection after executing the protocol's
454           final callback since the sock might not be valid anymore.
455           Affected file lib/silcclient/client.c.
456
457 Wed Jul 25 16:04:35 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
458
459         * Do not enable SILC_THREADS if the linking with libpthread
460           did not happen.  Affected file configure.in.pre.
461
462         * Added notion to protocol specification that server must
463           verify the sent authentication payload with CMODE when
464           setting the channel founder key.  Implemented it to the
465           server.  Affected file silcd/command.c.
466
467 Mon Jul 23 18:31:43 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
468
469         * Added _EXTRA_DIST SILC distribution variable to the
470           distributions file.  It is used to conditionally add extra
471           files or directories to the specific distribution.  Affected
472           files ./prepare, Makefile.am.pre and distributions.
473
474           Removed the `_' from the start of the distribution names.
475           It is redundant.
476
477         * Added README.WIN32 for instructions to compile the Toolkit
478           under WIN32.
479
480 Mon Jul 23 10:12:37 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
481
482         * Fixed a double free in disconnection in the server.  Affected
483           file is silcd/server.c.
484
485         * Fixed the lib/silcske/groups.c to work now also with GMP
486           MP library.  The string conversion did not work when using
487           specific base and the base is indicated in the string as well.
488
489         * Created win32/ directory which now includes MSVC++ specific
490           stuff so that toolkit (DLLs) may be compiled with MSVC++.
491           It will appear only in the toolkit distribution
492
493 Sun Jul 22 19:40:30 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
494
495         * Changed the key material distribution function in case when
496           the hash output is too short.  The data is now concatenated
497           a bit differently than it used to.  Made the change to the
498           SKE protocol specification.
499
500         * Added better GMP detection to configure.in.pre.  A patch
501           by salo.
502
503 Fri Jul 20 13:16:00 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
504
505         * Fixed a minor bug in SKE that might cause some problem on
506           some platforms.  Affected file lib/silcske/silcske.c.
507
508         * Added the cookie checking for initiator in the SKE.  It checks
509           that the responder returns the sent cookie unmodified.  The
510           affected file is lib/silcske/silcske.c.  Added new SKE
511           error type INVALID_COOKIE that can be sent during the
512           negotiation.  Fixed some memory leaks as well.
513
514         * Added the "invalid cookie" error message to Irssi SILC client's
515           message formats.
516
517 Thu Jul 19 21:44:31 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
518
519         * Added `task_max' field to the SilcClientParams to indicate
520           the maximum tasks the scheduler can handle.  If set to zero,
521           default values are used.  Affected file lib/silcclient/silcapi.h.
522
523         * Fixed memory leaks in silc_client_close_connection.  Affected
524           file lib/silcclient/client.c.
525
526         * Added silc_client_del_client_entry to client library to free
527           all memory of given client entry.  Affected file is
528           lib/silcclient/idlist.[ch].
529
530         * Added new functions silc_client_del_channel and
531           silc_client_del_server to delete channel and server entries.
532           Affected file lib/silcclient/[silcapi.h/idlist.c].
533
534         * Removed silc_client_del_client_by_id from silcapi.h.
535
536         * Fixed the INFO command to return the server's own info
537           correctly when querying by Server ID.  Affected file is
538           silcd/command.c.
539
540 Thu Jul 19 14:47:30 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
541
542         * Removed the non-blocking settings in WIN32 code in the
543           silc_sock_[read/write] and added SleepEx instead.  Affected
544           file lib/silcutil/win32/silcwin32sockconn.c.  The availability
545           of input data is now checked with FIONREAD and ioctlsocket.
546
547 Wed Jul 18 18:34:01 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
548
549         * Call silc_schedule_task_del_by_context in the 
550           silc_protocol_cancel instead of silc_schedule_task_del_by_callback.
551           Affected file lib/silccore/silcprotocol.c.
552
553         * Call silc_protocol_cancel for active protocols in the
554           silc_server_close_connection if the funtion
555           silc_server_free_sock_user_data has not been called.
556           Affected file silcd/server.c.
557
558         * Generic tasks cannot be deleted using the del_by_fd
559           task deleting function since generic tasks does not match
560           any specific fd.  Affected file lib/silcutil/silcschedule.[ch].
561
562         * Added a notion to SILCOPER help file that the SILCOPER works
563           only on router server, not on normal server.
564
565 Wed Jul 18 09:40:04 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
566
567         * Added for WIN32 support for the new scheduler as well.
568           Affected file lib/silcutil/win32/silcwin32schedule.c.
569
570         * Fixed the SHA1 implementation to work on various platforms.
571
572 Tue Jul 17 23:04:10 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
573
574         * Rewrote the SILC Scheduler entirely.  Removed the old SILC Task
575           API.  It is part of the scheduler now.  Everything else is
576           as previously but some functions has changed their names.
577           Checkout the lib/silcutil/silcschedule.h for the interface.
578           Updated all applications to use the new interface.  Affected
579           files are lib/silcutil/silcschedule.[ch].
580
581 Tue Jul 17 16:53:30 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
582
583         * Found a bug in the SKE implementation.  The HASH value,
584           specified by the protocol, was not computed correctly.  The
585           public key of the responder was not added to the computation
586           even though it is mandatory.  Affected file lib/silcske/silcske.c.
587           This unfortunately causes incompatibilities with older
588           clients and servers.
589
590         * Added WIN32 specific network init and uninit functions:
591           silc_net_win32_init and silc_net_win32_uninit to init and uninit
592           the Winsock2.  Affected file lib/silcutil/silcnet.h and
593           lib/silcutil/win32/silcwin32net.c.
594
595         * Set the socket always to nonblocking mode on WIN32 after
596           reading data or writing data.  Affected file is
597           lib/silcutil/win32/silcwin32sockconn.c.
598
599 Mon Jul 16 22:55:26 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
600
601         * Fixed various compilation problems under WIN32.  Affected
602           files lib/silcutil/win32/silcwin32thread.c and
603           lib/silcutil/win32/silcwin32schedule.c.
604
605         * Removed all _internal.h #includes from public header
606           files.  Internal headers must never be included from
607           public headers.
608
609           Removed also the lib/silcske/payload_internal.h file.
610
611         * All include files that may be needed (public and some others
612           included by the public headers) by application developers are
613           now copied to the ./includes directory.  It does not copy any
614           internal headers.  Affected file Makefile.defines.pre and all
615           Makefile.am's under lib/ and subdirs.
616
617 Thu Jul 12 17:49:31 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
618
619         * Do not change the ~/.silc directory's permissions automatically.
620           Affected file irssi/src/silc/core/clientutil.c.
621
622 Thu Jul 12 10:18:40 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
623
624         * Do not cancel the protocol in silc_server_close_connection
625           it might cause recursion.  Now cancelled in the function
626           silc_server_free_sock_user_data.  Affected file silcd/server.c.
627
628         * Fixed the silc_server_remove_clients_by_server to regenerate
629           the channel keys correctly finally.  Added also new function
630           silc_server_remove_clients_channels to actually do it.
631           Affected file silcd/server.c.
632
633         * Fixed the silc_server_new_channel to not crash by giving
634           wrong router to the new channel.  Affected file is
635           silcd/packet_receive.c.
636
637 Wed Jul 11 18:31:57 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
638
639         * Added SilcClientParams structure to the lib/silcclient/silcapi.h
640           which is given as argument to the silc_client_alloc now.
641           It can be used to configure the client and set various parameters
642           that affect the function of the client.
643
644         * The USERS command in server did not check whether the channel
645           is private or secret.  Affected file silcd/command.c.
646
647         * Added new argument to the USERS command in protocol specification.
648           The USERS command now can take the channel name as argument
649           as well.  Added support for this in client and server and
650           updated the protocol specs.
651
652         * Completed the GETKEY command in client. It can be now used
653           to fetch also servers public key not only some clients. 
654           Affected files lib/silcclient/command[_reply].c.
655
656         * Added silc_client_get_server to return server entry by the
657           server name.  Affected files lib/silcclient/silcapi.h and
658           idlist.c.
659
660         * Redefined the IDENTIFY command in protocol specification to be
661           more generic.  It now can be used to query information about
662           any entity in the SILC Network, including clients, servers and
663           channels.  The query may be based either the entity's name
664           or the ID.  Added support for this in both client and server.
665
666           Affected files silcd/command.c and lib/silcclient/command.c
667           and command_reply.c.
668
669         * Optimized the WHOIS and WHOWAS commands in the server. Removed
670           the _from_client and _from_server functions.  Affected file
671           silcd/command.c.
672
673         * Added silc_client_get_channel_by_id_resolve to the file
674           lib/silcclient/silcapi.h to resolve channel information by
675           its ID.  Added also silc_client_get_channel_by_id that
676           does not resolve it from the server.
677
678 Tue Jul 10 18:05:38 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
679
680         * Added SilcServerEntry context into the client library
681           to represent one server.  The INFO command now allocates
682           these to save the resolved server info.  For now on the
683           client library will also keep information about servers,
684           connected and resolved with INFO.
685
686           The INFO command now allocates the SilcServerEntry context
687           and saves the server info there.  The COMMAND_REPLY in
688           the INFO now returns the parameters to application in 
689           same order as defined in the protocol specification.
690
691           The entries are cached in the client->server_cache.
692
693         * The INFO command is now issued after received the Client ID
694           from the server.  Affected file lib/silcclient/client.c.
695
696         * The CMODE_CHANGE notify may now return also an SilcServerEntry
697           to the application as the mode changer might be server.
698           It is guaranteed that NULL is not returned anymore to the
699           application.  Affected file lib/silcclient/client_notify.c.
700
701           The ID Type is now also passed to the application so that
702           it can check whether the returned entry is SilcClientEntry
703           or SilcServerEntry.
704
705           Added new function silc_client_get_server_by_id to return
706           the server entry by ID.  Affected files are the
707           lib/silcclient/silcapi.h and lib/silcclient/idlist.c.
708
709         * Do not create the channel in the Irssi SILC Client when issuing
710           the JOIN command but when received the sucessful JOIN command
711           reply.  Otherwise the channel might get created even though we
712           could not join it.  The Affected file is
713           irssi/src/silc/core/[silc-channels.c/client_ops.c].
714
715         * Fixed a channel joining bug in router.  The router must also
716           check the channel modes, invite and ban lists etc. when serving
717           the JOIN command sent by normal server.  Affected file is
718           silcd/command.c.  The router now resolves the client's 
719           information from the server who sent the JOIN command if it
720           does not know it, and processes the JOIN command only after
721           that.
722
723         * Changed the SilcCommandCb to take new argument; void *context2.
724           Affected file lib/silccore/silccommand.h
725
726           The second argument in the command callbacks in the server now
727           includes the SilcServerCommandReplyContext if the command was
728           called as pending command callback from the command reply.
729           Otherwise it is NULL. When called as pending the status of the
730           command reply will be checked and if it was erronous the
731           error will be sent to the original sender of the command.
732           This way the client always receives the error messages even
733           though the server was actually the one who received the error
734           when it resent the command to router, for example.  Affected
735           files silcd/command[_reply].[ch].
736
737         * Fixed sending WHOWAS command's error message to client if
738           the requested client could not be found.  It was missing.
739           silcd/command.c.
740
741         * Changed the CMODE and CUMODE commands reply arguments in the
742           protocol specification.  The Channel ID is now sent in both
743           of the commands to identify the channel.  Implemented this
744           new feature to the client and server.  Affected files
745           lib/silcclient/command_reply.c and silcd/command.c.
746
747         * Made better checks for invite and ban lists in the JOIN
748           command in server.  Affected file silcd/command.c.
749
750 Mon Jul  9 18:28:34 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
751
752         * The server now performs the incoming host IP/DNS lookup
753           using the silc_socket_host_lookup and thus does not block
754           the server anymore.  Affected file silcd/server.c.
755
756         * Completed the multi-thread support for SILC Scheduler in
757           the lib/silcutil/silcschedule.c.
758
759         * Fixed the configure.in.pre to detect the pthread correctly
760           on various systems.
761
762         * Fixed a deadlock in silc_task_queue_wakeup in the file
763           lib/silcutil/silctask.c.
764
765 Mon Jul  9 13:40:03 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
766
767         * Added new function silc_schedule_wakeup that is used in
768           multi-threaded environment to wakeup the main thread's
769           schduler. It needs to be used when a thread adds a new task
770           or removes a task from task queues. After waking up, the
771           scheduler will detect the task queue changes. If threads
772           support is not compiled in this function has no effect.
773           Implemented the wakeup mechanism to both Unix and WIN32
774           systems.  Affected files are lib/silcutil/silcschedule.[ch],
775           lib/silcutil/unix/silcunixschedule.c and the
776           lib/silcutil/win32/silcwin32schedule.c.
777
778         * Added new function silc_task_queue_wakeup to wakeup the
779           scheduler by the specified task queue.  Affected file
780           lib/silcutil/silctask.[ch].
781
782         * The silc_socket_host_lookup_start now wakes up the scheduler
783           after adding the timeout task.  Affected file is
784           lib/silcutil/silcsockconn.c.
785
786         * The silc_socket_host_lookup is synchronous now if the threads
787           support is not compiled in.  However, the callback is still
788           called asyncronously through the scheduler, anyway.  Affected
789           file lib/silcutil/silcsockconn.c.
790
791 Mon Jul  9 00:24:45 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
792
793         * Added new function silc_socket_host_lookup to perform
794           asynchronous IP and FQDN lookups for the socket connection.
795           Affected files lib/silcutil/silcsockconn.[ch].
796
797 Sun Jul  8 18:44:53 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
798
799         * Added SILC_MUTEX_DEFINE to define the mutex on environments
800           that may or may not compile the mutex support in.
801         
802           Changed the silc_mutex_alloc interface. It allocates the
803           mutex now to the sent pointer and returns TRUE or FALSE.
804
805           Affected file lib/silcutil/silcmutex.h.
806
807         * Wrote the SILC Task Queue interface to support multi-threads.
808           Affected file lib/silcutil/silctask.[ch].
809
810         * Wrote the SILC Scheduler to support multi-threads.  Affected
811           file lib/silcutil/silcschedule.c.
812
813 Sun Jul  8 11:16:01 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
814
815         * Implemented the SILC Mutex API and SILC Thread API for WIN32
816           in lib/silcutil/win32/.
817
818 Sun Jul  8 00:18:15 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
819
820         * Defined SILC Mutex API and SILC Thread API and implemented
821           them for Unix.  Affected files are
822           lib/silcutil/silcmutex.h, lib/silcutil/silcthread.h,
823           lib/silcutil/unix/silcunixmutex.c and
824           lib/silcutil/unix/silcunixthread.c.
825
826 Sat Jul  7 14:40:31 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
827
828         * Fixed the silc_server_remove_clients_by_server's channel
829           key re-generation.  The hash table handling was incorrect
830           and would not work with many channels.  Affected file is
831           silcd/server.c.
832
833         * Fixed some memory leaks around the server code.
834
835         * Rewrote the silc_server_get_users_on_channel to support IPv6
836           based Client ID's.  Affected file silcd/server.c.
837
838         * Defined the SILC_MESSAGE_FLAG_SIGNED to the protocol
839           specification.  However, a separate document must be written
840           to define the detailed signing procedure and the payload
841           associated with the flag.  Defined the flag to the
842           lib/silccore/silcchannel.h as well.
843
844 Fri Jul  6 18:26:31 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
845
846         * Changed the dynamic tables to static size tables in the
847           lib/silccrypt/silchmac.c.
848
849         * Removed GCC dependencies from the code.  A patch by cras.
850
851 Fri Jul  6 09:39:35 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
852
853         * Do not show the error "Error receiving packet bla bla"
854           in server if it really was not an error (-2 means that reading
855           is pending).  Affected file silcd/server.c.
856
857 Thu Jul  5 21:22:32 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
858
859         * Fixed a possible crash in silc_server_remove_clients_by_server
860           in silcd/server.c.  Fixed there also some memory leaks.
861
862         * Fixed the silc_idlist_replace_client_id.  It could replace
863           wrong key in the hash table.  Affected file silcd/idlist.c.
864
865         * Do not check whether there are global users on the channel
866           if the channel->global_users is FALSE.  Affected functions
867           silc_server_remove_from_one_channel and
868           silc_server_remove_from_channels in silcd/server.c.  Also,
869           do not check if the removed client is local as we can be
870           sure that global client was not removed from the channel
871           and checking for global users is not needed.
872
873         * The silc_server_remove_clients_by_server now re-generates
874           the channel keys correctly for those channels that had
875           clients removed from them.  Affected file silcd/server.c.
876
877 Tue Jul  3 11:39:20 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
878
879         * Found the reason of random crashes in the server.  We weren't
880           ignoring the SIGPIPE signal (which can be sent in write())
881           and it crashed the server.  Affected file silcd/silcd.c.
882
883 Fri Jun 29 20:05:25 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
884
885         * Assure that sock->user_data is not NULL in the function
886           silc_server_packet_send in silcd/packet_send.c.
887
888         * Disconnect the remote connection if it could not be added
889           to any ID lists in the server.  The affected file is
890           silcd/server.c.
891
892         * Check in silc_server_packet_send[_real/dest] that the
893           socket is not disconnecting and ignore the data if it is.
894           Affected file silcd/packet_send.c.
895
896         * Define inline to __inline on native WIN32 compilation.
897           Affected file includes/silcwin32.h.
898
899         * Added some explicit type casts for inline code since MSVC
900           require them.  Affected files lib/silcutil/silcbuffer.h,
901           lib/trq/silcdlist.h and lib/trq/silclist.h.
902
903         * Print warning in log files from now on if the packet
904           decryption fails.  Affected file silcd/server.c.
905
906 Thu Jun 28 21:30:39 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
907
908         * Changed the `say' client operation's interface to accept
909           new `type' argument to indicate the type of the message sent
910           by the library.  The application may filter the library's
911           messages according the type.  The affected file is the
912           lib/silcclient/silcapi.h.
913
914         * Added two new functions to lib/silcclient/silcapi.h:
915           silc_client_del_client and silc_client_del_client_by_id.
916           Affected file lib/silcclient/idlist.c.
917
918         * Moved the clientincludes.h from includes/ to silc/ and
919           serverincludes.h from includes/ to silcd/.
920
921         * The modes for the CMODE and CUMODE are now passed as
922           uint32 for application with COMMAND_REPLY.  The affected
923           file is lib/silcclient/command_reply.c.
924
925 Wed Jun 27 22:24:47 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
926
927         * /WHOIS without arguments shows client's own information.
928           Affected file lib/silcclient/command.c.
929
930         * Changed PING to not accept any arguments.  The specs
931           says that client can ping only the connected server so
932           requiring an argument is not needed.  Affected file is
933           lib/silcclient/command.c.
934
935 Wed Jun 27 00:10:33 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
936
937         * Fixed a fatal bug in private message sending and reception
938           encryption and decryption when using private message keys.
939           The implementation was incorrect and did not follow the
940           specification.  It causd that some of the message were
941           lost since it did not use the sending and receiving keys
942           as the protocol suggests.  This has been fixed and will cause
943           incompatibilities with older clients when sending private
944           message encrypted with private message keys.  Affected files
945           lib/silcclient/client_prvmsg.c, lib/silcclient/client_keyagr.c
946           and various other in Irssi SILC Client.
947
948           Added `responder' boolean argument to the functions
949           silc_client_add_private_message_key[_ske] to indicate when
950           the key is added as responder or initiator of the key
951           negotiation.
952
953 Tue Jun 26 19:23:07 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
954
955         * Removed the silc_ske_check_version function and created
956           a SilcSKECheckVersion callback.  Added also a function
957           silc_ske_set_callbacks that is now used to set all SKE
958           callbacks.  The callback functions are not given to
959           the SKE functions anymore, but this function is used to
960           set the callbacks.
961
962         * Fixed the WIN32 DLL generation in lib/Makefile.am.pre.
963
964         * Added `silc_version' argument to the silc_client_alloc
965           to define the version of the application for the library.
966           The library will use the version string to compare it
967           against the remote host's (usually a server) version
968           string.  Affected file lib/silcclient/silcapi.h
969
970         * Added the KE protocol context to Key Agreement context
971           in client library so that we can abort the SKE if it
972           is in process when we get timeout.  Affected file is
973           lib/silcclient/client_keyagr.c.
974
975         * Do not resolve the client ID forever if it returns in the
976           first time that such client does not exist.  This was done
977           for example with private message.  Affected file is
978           lib/silcclient/client_prvmsg.c.
979
980 Mon Jun 25 21:42:51 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
981
982         * Do not add regex.h for WIN32.  The affected file
983           includes/silcincludes.h.
984
985         * Added WIN32 DLL generation to lib/Makefile.am.pre.  It might
986           not work yet 100%.  It generates the DLL's automatically
987           when compiling with --with-win32 under cygwin.
988
989 Sun Jun 24 19:49:23 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
990
991         * lib/contrib/regex.c is not compiled on WIN32.
992
993         * Added silc_net_get_socket_opt function to the
994           lib/silcutil/silcnet.h.
995
996         * Added includes/silcwin32.h for WIN32 specific includes
997           and definitions.
998
999         * Do not use ptime structure or any of the posix process
1000           functions on WIN32 in lib/silccrypt/silrng.c.
1001
1002         * Added silc_gettimeofday to provide generic function
1003           for struct timeval on all platforms.  Added the function
1004           to lib/silcutil/silcutil.h.
1005
1006 Sun Jun 24 12:19:52 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
1007
1008         * Moved the lib/silccore/silcsockconn.[ch] to the utility
1009           library as they clearly belong there.  As a plus side we
1010           can make the actual socket connection routines platform
1011           specific.
1012
1013           Added also new generic function silc_socket_read and
1014           silc_socket_write (that used to be silc_packet_[read/write].
1015           The implementation of these are platform specific.
1016
1017         * Added WIN32 specific routines of silc_socket_[read/write]
1018           to lib/silcutil/win32/silcwin32sockconn.c.
1019
1020 Sat Jun 23 16:01:00 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
1021
1022         * Added preliminary support for native WIN32 compilation under
1023           cygwin (using the -mno-cygwin option for GCC) to the
1024           ./configure.in.pre.  The --with-win32 now prepares the
1025           compilation for native WIN32.
1026
1027         * Rewrote the SILC Scheduler interface in the file
1028           lib/silcutil/silcschedule.h.  The scheduler is now context
1029           based and does not have anymore any global static scheduler.
1030           Moved the Unix scheduler to the lib/silcutil/unix/ directory
1031           and created lib/silcutil/win32 directory for WIN32 based
1032           scheduler.
1033
1034         * Added Unix specific network routines to the
1035           lib/silcutil/unix/silcunixnet.c and the old
1036           lib/silcutil/silcnet.c includes now only generic routines.
1037
1038           Added WIN32 specific network routines to the
1039           lib/silcutil/win32/silcwin32net.c.
1040
1041         * Added Unix specific utility functions from the
1042           lib/silcutil/silcutil.c to lib/silcutil/unix/silcunixutil.c.
1043
1044         * Added WIN32 SILC Scheduler to the file
1045           lib/silcutil/win32/silcwin32schedule.c. The code is of course
1046           untested.
1047
1048 Fri Jun 22 10:44:14 EEST 2001  Pekka Riikonen <priikone@silcnet.org>
1049
1050         * Do not handle JOIN notify in the server if the target client
1051           is not registered (idata->registered == FALSE).  The affected
1052           file is silcd/packet_receive.c.
1053
1054         * Update the nickrec->founder in event_cumode in the Irssi SILC
1055           client.  Affected file irssi/src/silc/core/silc-channels.c.
1056
1057         * Fixed the CUMODE_CHANGE notify handling in the server when
1058           server and router are announcing their clients on channels.
1059           Now the mode changes are saved and notified correctly.  The
1060           affected file is /silcd/packet_receive.c.
1061
1062         * Fixed silc_idlit_replace_[server/client/channel]_id functions.
1063           They really did not replace the cache entry in the ID Cache.
1064           Now they do that.  Affected file silcd/idlist.c.
1065
1066         * Fixed the KICK notify handling in the Irssi SILC client to
1067           update the channel records so that the kicked client does not
1068           appear to be on the channel.  The affected file is 
1069           irssi/src/silc/core/silc-channels.c.
1070
1071         * Always update the conn->current_channel when executing command
1072           on a channel.  Affected file irssi/src/silc/core/silc-servers.c.
1073
1074         * Fixed the KILL notify handling in Irssi SILC client to remove
1075           the killed client on all channels.
1076
1077 Thu Jun 21 17:10:08 CEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1078
1079         * Fixed the silc_parse_command_line to remove extra spaces
1080           from the start and end of the arguments.  Affected file is
1081           lib/silcutil/silcutil.c.
1082
1083         * Cancel and free any active protocol in the function
1084           silc_server_close_connection.  Affected file silcd/server.c.
1085
1086         * Cancel and free any active protocol in the function
1087           silc_client_close_connction.  Affected file is
1088           lib/silcclient/client.c.
1089
1090         * Do not execute the KILL command for clients that are in
1091           history (ie. they are not in the network).  Affected file is
1092           silcd/command.c.
1093
1094         * Fixed KILL notify handling, client does not crash anymore.
1095           Affected file irssi/src/silc/core/silc-channels.c.
1096
1097         * Reduced the default packet buffer size from 2048 to 1024 in   
1098           lib/silccore/silcpacket.c.
1099
1100         * Added SILC_SKE_STATUS_FREED SKE status type and a reference
1101           counter to the SKE context that is incresed when the SKE library
1102           performs async operation outside the library.  If the outside
1103           process frees the SKE context and FREED status will be set 
1104           and the library will detect after the sync operation that the
1105           libary is freed.  The affected files are
1106           lib/silcske/silcske[_status].[ch].
1107
1108         * Resolve the client entry information in the function
1109           silc_client_channel_message to assure that NULL pointer is not
1110           passed as client entry to the application. */
1111
1112         * Fixed the task timeout calculation to assure that there is
1113           never negative timeouts.  The affected file is 
1114           lib/silcutil/silcschedule.c.
1115
1116         * Fixed the channel user mode notification sending in server.
1117           It was sent point-to-point to the router (or to server by router)
1118           but it needs to be destined to a channel.  The routines now
1119           supports sending the channel user mode notifys to the channels
1120           when announcing clients and channels.  Affected files are
1121           silcd/server.c and silcd/packet_receive.c.
1122
1123         * Fixed the CHANNEL_CHANGE notify handling in the client libary.
1124           It did not actually replace the old channel entry in the cache.
1125           Affected file lib/silcclient/client_notify.c.
1126
1127 Tue Jun 19 22:10:36 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1128
1129         * Fixed a possible crash in silc_packet_send_prepare.  It now
1130           assures always that there is enough space in the buffer and
1131           at the tail area of the buffer (for MAC). 
1132
1133           Fixed the inbound buffer reallocation in silc_packet_read.
1134           It was old code and did not handle the reallocation correctly.
1135           Affected
1136
1137           The affected file is lib/silccore/silcpacket.c.
1138
1139         * Fixed buffer overflow in silc_parse_nickname in the file
1140           lib/silcutil/silcutil.c.
1141
1142 Tue Jun 19 13:40:09 CEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1143
1144         * make install generates new server keys only if there is not
1145           keys already.
1146
1147 Mon Jun 18 18:49:07 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1148
1149         * Set SILC_MESSAGE_FLAG_NOREPLY when sending the away message.
1150           Added check that if the NOREPLY is set then we will not send
1151           the away message.  This avoids infinite loop of away messages
1152           if both clients are away.  The affected file is
1153           lib/silcclient/client_prvmsg.c.
1154
1155         * Fixed client crash if /NICK was given without arguments.
1156           Affected file lib/silcclient/command.c.
1157
1158         * Server does not send the invite list in INVITE command back
1159           to the client if the list was not altered.  Added this notion
1160           to the protocol spec as well.  Affected file silcd/command.c.
1161
1162           Fixed possible crash in INVITE command by checking the
1163           value of silc_server_get_client_route command.
1164
1165         * Fixed the INVITE notify type handling.  The arguments are now
1166           taken in correct order and client does not crash.  The affected
1167           file is irssi/src/silc/core/silc-channels.c.
1168
1169           Removed the "Inviting xxx to channel" message from the
1170           client library away and let the application handle it.
1171           Affected file lib/silcclient/command.c.  Added that message
1172           to Irssi SILC client's message formats.
1173
1174         * Fixed CMODE command crash in client.  It now checks the
1175           amount of arguments correctly and does not crash.  The affected
1176           file is lib/silcclient/command.c.
1177
1178         * Do not create new channel automatically in silc_channels_join
1179           but check whether the channel by that name already exists.
1180           Affected file irssi/silc/core/silc-channels.c.
1181
1182         * Do not send the SERVER_SIGNOFF to router if the disconnected
1183           entity was the router.  Affected file silcd/server.c.
1184
1185         * Added the handling of the SERVER_SIGNOFF notify to the Irssi
1186           SILC client as it was missing from there.
1187
1188           Added the handling of the KICK notify to the Irssi SILC client
1189           as it was missing.  Added "you have been kicked" message to
1190           Irssi SILC client's message modules formats.
1191
1192           Added the handing of the KILL notify to the Irssi SILC client
1193           as it was missing.  Added the kill message module formats 
1194           as well.
1195
1196           The affected file is irssi/src/silc/core/silc-channels.c.
1197
1198         * The router did not save the channel mode the server announced.
1199           Affected file silcd/packet_receive.c.
1200
1201         * Fixed a possible crash in INFO command in server.  If the
1202           server did not provide the server info it crashed.  Affected
1203           file silcd/command.c.
1204
1205 Sun Jun 17 15:26:05 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1206
1207         * Fixed the GETKEY command in the server to check also the
1208           global list.  Otherwise the GETKEY would not work correctly
1209           in normal SILC server.  Affected file silcd/command.c.
1210
1211 Sat Jun 16 18:00:00 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1212
1213         * Fixed GETKEY crash, it crashed if the command did not succseed.
1214
1215 Tue Jun 12 21:36:18 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1216
1217         * Redefined the SILC MP API in lib/silcmath/silcmp.h. The API
1218           is now real and not just an macro interface to GMP.
1219
1220           Removed the entire GMP from the source tree and imported new
1221           NSS MPI library instead.  Reason for removing GMP is that it is
1222           extremely large and compiles extremely slow.  The NSS MPI
1223           is only a few files and compiles in less than 10 seconds.
1224           The speed is also about the same as GMP.  The MPI is imported
1225           to lib/silcmath/mpi.
1226
1227           If the system has GMP installed we will still use the GMP.
1228           If it is not then the NSS MPI will be compiled.
1229
1230 Mon Jun 11 18:07:24 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1231
1232         * Merged a long nickname (127 characters long) crash bugfix from
1233           Irssi CVS tree.  Affected file irssi/src/core/misc.c.
1234
1235         * Merged a freed memory reference bugfix from Irssi CVS tree.
1236           Affected file irssi/src/core/commands.c.
1237
1238 Sun Jun 10 16:08:35 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1239
1240         * Added the server's public key sving and verification to the
1241           server when performing the SKE.  This was missing and the
1242           remote server's (or router's) public key was accepted without
1243           checking whether we have it previously or trust it at all.
1244           Affected file silcd/protocol.c.
1245
1246 Sat Jun  9 20:17:30 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1247
1248         * Check in the silc_server_timeout_remote if protocol is active
1249           and make sure that the protocol's final callback is called so
1250           that all memory if freed.  Affected file silcd/server.c.
1251
1252 Sat Jun  9 12:51:27 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1253
1254         * silc_server_whois_send_reply crashed the server if the nickname
1255           was 127 characters long.  Affected file silcd/command.c.
1256
1257 Thu Jun  7 16:29:56 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1258
1259         * Added sanity check to the silc_server_new_client. If the hostname
1260           is provided inside username then check that the provided hostname
1261           really is the same as the resolved one.  If the hostname was not
1262           resolved then check it from the public key.  Affected file is
1263           silcd/packet_receive.c.
1264
1265         * Fixed a fatal bug in Irssi SILC client. Do not send QUIT command
1266           if the server disconnected us and the connection is not valid
1267           anymore.  Affected file irssi/src/silc/core/silc-channels.c.
1268
1269         * Moved the silc_client_[chmode|chumode|chumode_char] away from
1270           the library to the lib/silcutil/silcutil.[ch].
1271
1272 Thu Jun  7 08:57:16 CEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1273
1274         * Close log file after open.  Affected file 
1275           lib/silcutil/silclog.c.
1276
1277         * Check whether sock == NULL in silc_client_send_packet and return
1278           if it is.  Affected file lib/silcclient/silcclient.c.
1279
1280         * Check rec->entry == NULL in the Irssi SILC Client before
1281           sending the channel message.  Affecte file is
1282           irssi/src/silc/core/silc-servers.c.
1283
1284 Tue Jun  5 08:08:21 CEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1285
1286         * Merged a splitted window bugfix from Irssi CVS tree.  The 
1287           affected file is irssi/src/fe-text/textbuffer-view.c.
1288
1289         * Fixed the ME, ACTION and NOTICE printing in Irssi Client.
1290           It did not print nickname.
1291
1292         * Improved the distributions system a bit.
1293
1294 Mon Jun  4 17:57:16 CEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1295
1296         * Merged /WINDOW bugfix from irssi CVS tree. Affected file is
1297           irssi/src/fe-text/gui-window.c.
1298
1299         * Fixed a fatal bug in Irssi SILC client. Crashed if sent message
1300           to in-active server.  The affected file is
1301           irssi/src/silc/core/client_ops.c.
1302
1303         * Resolve the client in USERS command reply if the entry does
1304           not have username resolved.  The affected file is
1305           lib/silcclient/command_reply.c.  Also, changed the IDENTIFY
1306           command to WHOIS command to really resolve stuff.  The USERS
1307           is not used any more in any critical section so WHOIS can
1308           be used even though it might be slower than IDENTIFY.
1309
1310         * Changed the lib/silcutil/silchashtable.h header to ROBODoc
1311           format.
1312
1313 Sun Jun  3 14:21:32 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1314
1315         * Changed the protocol API a bit more consistent in the
1316           lib/silccore/silcprotocol.[ch].
1317
1318         * Changed the following headers to ROBODoc format:
1319
1320                 lib/silccore/silcpayload.h
1321                 lib/silccore/silcprotocol.h
1322                 lib/silccore/silcsockconn.h
1323
1324           All core library headers are now formatted.
1325
1326 Sat Jun  2 10:45:09 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1327
1328         * Fixed a bug in Irssi SILC client; do not show that you are
1329           server/router operator if you really are not.  Affected file is
1330           irssi/src/silc/core/client_ops.c.
1331
1332         * Renamed silc_command_free_payload to silc_command_payload_free.
1333           Affected file lib/silccore/silccommand.h
1334
1335         * Added silcmath.h to include the prototoypes of various routines
1336           in the lib/silcmath.  Removed the old modinv.h, mpbin.h and
1337           silcprimegen.h.
1338
1339         * Changed the following headers to ROBODoc format:
1340
1341                 lib/silccore/silcchannel.h
1342                 lib/silccore/silccommand.h
1343                 lib/silccore/silcid.h
1344                 lib/silccore/silcidcache.h
1345                 lib/silccore/silcmode.h
1346                 lib/silccore/silcnotify.h
1347                 lib/silccore/silcpacket.h
1348                 lib/silcmath/silcmath.h
1349
1350 Fri Jun  1 22:19:37 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1351
1352         * Added checking to the server code not to start the server if
1353           ciphers and stuff are not configured properly.  Affected files
1354           silcd/serverconfig.[h] and silcd/server.c.
1355
1356         * Changed the layout of the header files of the public interfaces
1357           in the SILC libraries.  The new layout supports ROBODoc 
1358           documentation tool (and some others) so that it is easy to create
1359           a library reference manual.  All the other headers and source
1360           code must still follow the CodingStyle document.  Also source
1361           code must not include these ROBODoc stuffs, only the headers.
1362           Furthermore, all public interface headers must now be named
1363           by using `silc' prefix, example: silcapi.h, silccipher.h.
1364           Some files were renamed due to this.  All the other headers
1365           must not be used as public interfaces.  I will update the
1366           CodingStyle document later.  Changed following headers, so far:
1367
1368                 lib/silcclient/silcapi.h
1369                 lib/silccore/silcauth.h
1370                 lib/silccore/silcprivate.h
1371                 lib/silccrypt/silcdh.h
1372
1373 Fri Jun  1 10:28:09 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1374
1375         * Updated TODO.
1376
1377         * Removed silc_client_packet_send_flush from the client library
1378           as it is not needed.  Affected file lib/silcclient/client.[ch].
1379
1380         * Added printing of message of unresolved authentication method
1381           to the Irssi SILC client.  Added it to the module formats.
1382           Removed the same message from the client library.
1383
1384 Thu May 31 13:57:33 CEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1385
1386         * Added new distribution feature, DISTLABEL.  Every distribution
1387           can define own preprocessor label that can be used in the
1388           source code.  For example: #ifdef SILC_DIST_CLIENT.  Affected
1389           file distributions, acconfig.h.pre and prepare.
1390
1391 Tue May 29 22:16:40 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1392
1393         * Added Makefile.defines_int to include the actual definitions
1394           for Makefile.defines.in.  Tested the new distribution system,
1395           created distributions and tested installation.
1396
1397         * Added AWAY message printing to the Irssi SILC client.  Added
1398           the messages to the irssi/src/fe-common/silc/module-formats.[ch].
1399
1400         * Added SCONNECT command to call the SILC's CONNECT command.
1401           Cannot use CONNECT directly since Irssi uses that internally.
1402           Affected file irssi/src/silc/core/silc-servers.c.
1403
1404           Added ACTION local command.  It is same as ME command but takes
1405           the channel as mandatory argument.
1406
1407           Rewrote some of the Irssi's help files to suite for SILC
1408           protocol.
1409
1410 Mon May 28 19:05:22 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1411
1412         * Added Makefile.defines[.in] that should for now on be included
1413           in all Makefile.am file in the source tree.  That file includes
1414           all common compilation definitions for SILC source tree.
1415
1416 Mon May 28 10:30:51 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1417
1418         * Minor changes to the ./prepare script to change the package
1419           name according the distribution name to the configure.in.
1420
1421 Sun May 27 22:24:57 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1422
1423         * Created new distribution system.  Added file `distributions'
1424           that defines all the distributions that can be created out of
1425           the SILC source tree.  The ./prepare script now reads that
1426           file to determine how to prepare the distributions.  The
1427           first argument to the ./prepare is the name of the distribution
1428           and second is the version of the distribution.  If given
1429           without arguments it creates the default (toolkit) distribution
1430           with the default version (defined in ./prepare).
1431
1432           All Makefile.am files that are subject to the distributions
1433           are now named as Makefile.am.pre.  These are ./Makefile.am
1434           and lib/Makefile.am.  Others may be changed later.
1435
1436 Sun May 27 15:57:17 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1437
1438         * Added invite list, ban list, some key management and connection
1439           error message printing to module formats in the Irssi SILC client.
1440
1441         * Added new silc_client_set_away_message to set the away message
1442           that is back to the person who sent private message.  The 
1443           affected file lib/silcclient/silcapi.h and the
1444           lib/silcclient/client_prvmsg.c.
1445
1446 Sun May 27 12:39:48 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1447
1448         * Fixed the private message sending in the Irssi SILC client,
1449           added local command KEY to the Irssi SILC client.
1450
1451           Added key management and key agreement message formats to the
1452           irssi/src/fe-common/silc/module-formats.[ch].
1453
1454           Added USERS (alias WHO) printing, server/router operator
1455           indication and LIST command printing to the module formats.
1456
1457 Sat May 26 17:43:42 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1458
1459         * Fixed channel joining notify handling, cumode notify handling
1460           from Irssi SILC client.
1461
1462         * Added SILC specific module-formats to the Irssi SILC client so
1463           that SILC specific message hilighting, colors etc is possible.
1464           Affected file irssi/src/fe-common/silc/module-formats.[ch].
1465
1466           Added channel mode, channel user mode, actions, notices,
1467           whois and whowas printing to the the module-formats.c.
1468
1469         * Fixed a bug in channel deletion in the server.  The channel
1470           is not left to the cache even if the channel founder auth mode
1471           is set when there are no users anymore on the channel.  Affected
1472           file silcd/server.c.
1473
1474         * The silc_net_localhost now resolves the entire hostname including
1475           the domain name.  Affected file lib/silcutil/silcnet.c.
1476
1477 Sat May 26 12:13:37 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1478
1479         * Changed the ask_passphrase client operation to be ascynchronous.
1480           It has now a completion callback and a context that the 
1481           application must call after it has got the passphrase from
1482           the user.  Affected files lib/silcclient/silcapi.h,
1483           lib/silcclient/protocol.c, lib/silcclient/command.c and
1484           silc/client_ops.c.
1485
1486           Added SilcAskPassphrase callback that the application calls
1487           to deliver the passphrase to the library.
1488
1489         * Changed the SKE protocol's SilcSKEVerifyCb to be asynchronous.
1490           The public key verification and especially a certificate
1491           verification is asynchronous procedure.
1492
1493           Added new SILC_SKE_STATUS_PENDING status to indicate the
1494           request is pending and a callback will be called to finalize
1495           the request.
1496
1497           Added also SILC_SKE_STATUS_PUBLIC_KEY_NOT_PROVIDED status to
1498           indicate that remote end did not send its public key (or
1499           certificate), even though we require it.  Added check for this
1500           condition in the SKE.  This was a security bug, now fixed.
1501
1502           Defined new SilcSKEVerifyCbCompletion callback that is called
1503           when the verification process is completed.
1504
1505           The affected files lib/silcske/silcske_status.h and
1506           lib/silcske/silcske.[ch].
1507
1508         * Changed the verify_public_key client operation to be async
1509           as well.  Defined SilcVerifyPublicKey callback that is used to
1510           indicate the success of the public key verification process.
1511
1512           Changed the server and client to use the new async client 
1513           operations.
1514
1515         * Changed the Irssi SILC client's internal scheduler to be called
1516           twice as many times as it used to be.  As a result the client
1517           should be a bit faster now.  Affected file is
1518           irssi/src/silc/core/silc-core.c.
1519
1520         * Added support to Irssi SILC client of asynchronous public key
1521           verification and passphrase inquiry.  Affected file is
1522           irssi/src/silc/core/silc-core.c.
1523
1524 Fri May 25 14:38:38 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1525
1526         * Do not say "You have left channel %s" in client library.
1527           Moved it to the application.  Affected files are
1528           lib/silcclient/command.c and silc/client_ops.c.
1529
1530         * Fixed silc_client_get_clients.  Command context was not
1531           duplicated and was freed memory in the callback.  Affected
1532           file lib/silcclient/idlist.c.
1533
1534         * Do not say "you are now talking..." on JOIN command in the
1535           client library.  The appliation must handle it.
1536
1537         * Do not say ".. changed topic to" in command reply in the
1538           client libary.  The application must handle it.
1539
1540         * Fixed TOPIC command sending in the client library.
1541
1542         * Fixed a memory leak in silc_client_command_free in the file
1543           lib/silcclient/command.c.
1544
1545 Thu May 24 19:08:55 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1546
1547         * Imported a modified version of Irssi client to the source tree.
1548           The Irssi will be used to create a new client called
1549           Irssi SILC.  Imported to irssi/.
1550
1551           Added silc_core_init_finish function to the Irssi.  Affected
1552           file irssi/configure.in.
1553
1554           A lot changes in the Makefile.ams around the irssi tree.
1555
1556 Tue May 22 22:23:49 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1557
1558         * Do not rehash if the new size is same as the old size of the
1559           hash table, in the silc_hash_table_rehash*.  The affected file
1560           lib/silcutil/silchashtable.c.
1561
1562         * Replaced hash_table_del_by_context calls from the server
1563           (when channel->user_list and client->channels) to the
1564           hash_table_del as it is sufficient and faster.
1565
1566 Tue May 22 17:27:16 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1567
1568         * Added silc_hash_table_list, silc_hash_table_get and the
1569           SilcHashTableList structure to provide an alternative way to
1570           traverse the hash table.  The affected files are
1571           lib/silcutil/silchashtable.[ch].
1572
1573         * Changed the server's idlist routines to use the hash table
1574           routines to optimize the code.
1575
1576 Mon May 21 21:46:20 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1577
1578         * Replaced the client entry's `channel' list and channel entry's
1579           `user_list' list to hash tables for optimized lookup.  Changed
1580           the code to use the hash table interface around the code. 
1581           Affected file lib/silcd/idlist.[ch].
1582
1583         * Added `auto_rehash' boolean argument to the function
1584           silc_hash_table_alloc to indicate whether the hash table should
1585           auto-rehash when it thinks is appropriate time.  It will
1586           increase the hash table size if the there is twice as much
1587           entries in the table than the size of the table, and will
1588           decrease the size if there are twice as less entries than
1589           the size of the table.
1590
1591 Mon May 21 09:51:11 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1592
1593         * Fixed silc_xxx_get_supported to not crash at some circumstances.
1594
1595 Sun May 20 13:45:58 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1596
1597         * silc_idcache_purge_by_context deletes the entry now by context
1598           as it is supposed to do.  Affected file lib/silccore/idcache.c.
1599
1600         * Send the ERR_NO_SUCH_NICK in the WHOIS command reply if the
1601           client is not anymore valid (WHOWAS givens the info) and not
1602           the ERR_NO_SUCH_CLIENT_ID if the nickname still exists.
1603
1604 Sat May 19 16:30:03 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1605
1606         * Removed the `data' and `data_len' arguments from the ID Cache
1607           interfaces and added `name' argument.  ID Cache does not handle
1608           anymore the binary data only a names associated with given ID.
1609
1610         * When hashing a Client ID with silc_hash_id the entire ID is
1611           not hashed anymore, instead only the hash of the Client ID is
1612           hashed.  This way we can access the Client ID from the cache
1613           with Client ID but with the hash of the ID (which is a hash of
1614           the nickname) as well without any difference in performance.
1615
1616           Added also silc_idcache_find_by_id_one_ext to do one on one 
1617           searching when we have the actual ID.  Added also function
1618           silc_hash_client_id_compare.  The affected files are
1619           lib/silccore/idcache.[ch] and lib/silcutil/silcutil.[ch].
1620
1621         * When hashing the name associated with a ID it is always done
1622           in lowercase.  This way we can access the cache without worrying
1623           about case-sensitivity, even though, for example nicknames are
1624           case sensitive.
1625
1626         * Fixed a bug in server with channel message sending.  It put
1627           wrong ID type as destination ID.  The affected file 
1628           silcd/packet_send.c.
1629
1630         * silc_idcache_del_by_context now deletes from all hash tables
1631           by context.  Affected file lib/silccore/idcache.c.
1632
1633 Fri May 18 17:42:00 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1634
1635         * Changed the client library to use the new ID Cache interface.
1636           Changes around the source tree.
1637
1638         * Added silc_hash_table_rehash_ext to rehash with specific
1639           hash function.  Affected file lib/silcutil/silchashtable.[ch].
1640
1641         * Added silc_hash_string_compare to compare two strings in the
1642           hash table.  Affected file lib/silcutil/silcutil.[ch].
1643
1644 Fri May 18 11:18:45 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1645
1646         * Added new function silc_idcache_del_by_context into the
1647           lib/silccore/idcache.[ch].
1648
1649         * Changed the server's ID list routines to use the new ID Cache
1650           interface.  Changes around the source tree.
1651
1652 Fri May 18 08:35:31 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1653
1654         * Added silc_hash_table_del[_by_context]_ext functions in to the
1655           lib/silcutil/silchashtable.[ch].
1656
1657           Removed silc_hash_table_find_all* routines and added new
1658           silc_hash_table_find_foreach to replace them.
1659
1660           Added silc_hash_table_replace_ext function as extended
1661           replacing function.  Separated the simple hash table interface
1662           from the extended hash table interface in the file
1663           lib/silcutil/silchashtable.h.
1664
1665         * Fixed minor bugs and changed it to use some of the new
1666           hash table functions in lib/silccore/idcache.c
1667
1668 Thu May 17 18:15:12 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1669
1670         * Added new function silc_hash_table_find_all to return all keys
1671           in the hash table by the specified key.  As the hash table is
1672           collision resistant it also makes it possible to have several
1673           duplicate keys in the hash table.  This function may be used to
1674           find all of the keys from the hash.
1675
1676           Added user_context arguments to the SilcHashFunction,
1677           SilcHashCompare and SilcHashDestructor to deliver user specified
1678           context.
1679
1680           Added new fuctions silc_hash_table_find[_all]_ext to do
1681           extended lookup with specified hash and compare functions and
1682           specified user contexts.
1683
1684           Added new function silc_hash_table_add_ext to add the key
1685           with specified hash function and user context.
1686
1687           Added new function silc_hash_table_foreach to traverse all
1688           entrys in the hash table.  Added SilcHashForeach callback
1689           function.
1690
1691           Added new function silc_hash_table_del_by_context to delete
1692           the entry only if the context associated with the key matches.
1693
1694           Affected files are lib/silcutil/silchashtable.[ch].
1695
1696         * Removed silc_hash_[server/client/channel]_id and added just
1697           silc_hash_id to the lib/silcutil/silcutil.[ch].  Added also
1698           silc_hash_id_compare to compare two ID's using as the hash table
1699           comparison function.  Added also silc_hash_data to hash
1700           binary data and silc_hash_data_compare to compare it.
1701
1702         * Removed silc_idlist_find_client_by_hash as it is not needed
1703           anymore.  Affected file silcd/idlist.[ch].
1704
1705         * Rewrote the entire ID Cache system (in lib/silccore/idcache.[ch])
1706           to use internally the SilcHashTable.  The new ID Cache is a lot
1707           faster than the old one.  Some of the ID Cache interface was also
1708           rewritten and obsolete and stupid functions were removed.
1709
1710 Wed May 16 23:03:30 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1711
1712         * Added entry_count field to the SilcHashTable to keep the number
1713           of the entries in the table.  Implemented the function
1714           silc_hash_table_rehash.  Added new function
1715           silc_hash_table_count.  Affected file lib/silcutil/silchashtable.c.
1716
1717           Fixed a minor bug in silc_hash_table_free.
1718
1719         * Added silc_hash_string, silc_hash_uint, silc_hash_ptr,
1720           silc_hash_client_id, silc_hash_server_id and silc_hash_channel_id
1721           into the lib/silcutil/silcutil.[ch].
1722
1723 Wed May 16 20:02:47 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1724
1725         * Implemented a collision resistant hash table into the
1726           lib/silcutil/silchashtable[ch].  See the header and the source
1727           for the SilcHashTable API.
1728
1729 Tue May 15 22:05:46 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1730
1731         * Merged dotconf version 1.0.2 into lib/dotconf.
1732
1733 Sun May 13 19:32:09 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1734
1735         * Do not compile anything in lib/silcsim/* if the SIM support
1736           is not enabled.  The tree should now compile without problems
1737           under cygwin.
1738
1739 Thu May 10 22:49:51 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1740
1741         * Compiled the SILC under cygwin.  Compiled and tested briefly
1742           without problems.  More tests needed.  The SIMs didn't compile
1743           though.
1744
1745         * Added various #ifdef HAVE_* stuff to lib/silccrypt/silrng.c.
1746
1747         * Fixed possible crash in silc_get_username in the
1748           lib/silcutil/silcutil.c.
1749
1750 Tue May  8 09:04:03 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1751
1752         * Fixed a va_arg in silc/client_ops.c.
1753
1754         * Oops, RC5 routines were named AES and caused some problems
1755           when not using SIM's.  Affected file lib/silccrypt/rc5.c.
1756
1757 Sun May  6 13:59:48 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1758
1759         * Added new SilcIDIP structure into the lib/silccore/id.h and
1760           replaced the old `ip' fields from all SILC ID's to that type.
1761           This is a step towards IPv6 support.
1762
1763           The silc_id_get_len takes now the ID as an extra argument.
1764           The silc_id_id2str, silc_id_str2id and silc_id_dup now supports
1765           both IPv4 and IPv6 based ID's.
1766
1767           The affected files are lib/silccore/id.[ch] and other files
1768           around the tree using these routines.
1769
1770         * Removed the ID length arguments in server from various 
1771           silc_server_send_notify_* routines -> they are not needed 
1772           anymore.
1773
1774 Sat May  5 13:56:33 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1775
1776         * Fixed memory leak in silc_encode_pem_file in the file
1777           lib/silcutil/silcutil.c.
1778
1779 Thu May  3 21:23:50 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1780
1781         * Check minor version as well in the SKE.  Affected files are
1782           silcd/protocol.c and lib/silcclient/protocol.c.
1783
1784         * Added --identifier option to the server so that an identifier
1785           can be when creating the public key for the server.  Affected
1786           file is silcd/silcd.c.
1787
1788         * Fixed minor decoding bug in silc_pkcs_decode_identifier in
1789           lib/silccrypt/silcpkcs.c.
1790
1791 Wed May  2 20:50:49 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1792
1793         * Register default ciphers and stuff when using -C option with
1794           the server.  Affected file sildc/silcd.c.
1795
1796         * Put back the servers public key filename format, it is better
1797           than the new one.  For now, the client keys are saved with the
1798           new filename format.  The affected file silc/client_ops.c.
1799
1800         * Implemented the Cipher API for the rest of the ciphers that
1801           did not implement it or implemented it the wrong way.
1802
1803 Wed May  2 13:31:26 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1804
1805         * Register default ciphers and stuff when using the -S option
1806           in the client.  Affected file silc/silc.c.  Same also when
1807           creating new key pair with -C option.
1808
1809 Tue May  1 14:18:13 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1810
1811         * Fixed the silc_verify_public_key client operation function to
1812           save the public keys differently.  The fingerprint is now 
1813           used as filename and not the hostname.  This way also the
1814           client keys are saved uniquely and not with hostnames.  The
1815           affected file is silc/client_ops.c.
1816
1817         * Trimmed the silc_hash_fingerprint function to remove extra
1818           whitespaces from the end of the fingerprint.  The affected
1819           file is lib/silccrypt/silchash.c.
1820
1821         * Updated TODO.
1822
1823         * Added silc_cipher_register_default function to register all
1824           default ciphers.  It can be used when configuration files
1825           does not exist and the application does not want any specific
1826           ciphers in any specific order.
1827
1828           The SilcDList is now used as silc_cipher_list dynamically
1829           allocated cipher list.  Removed the static list all together
1830           and now all ciphers must be allocated to the dynamic list.
1831           The silc_cipher_alloc routine was changed to check only the
1832           dynamic list.
1833
1834           All silc_cipher_* routines that used to return int returns
1835           now bool.
1836
1837           The affected files lib/silccrypt/silccrypt.[ch].
1838
1839         * The same thing was done to silc_hash_* as for silc_cipher_*
1840           routines.  Affected files lib/silccrypt/silchash.[ch].
1841
1842         * The same thing was done to silc_pkcs_* as for silc_cipher_*
1843           routines.  Affected files lib/silccrypt/silcpkcs.[ch].
1844           Added also silc_pkcs_[un]register[_default] functions.
1845           Removed the data_context from the PKCS API.
1846
1847         * Added silc_hmac_register_default function to register default
1848           hmacs.  Affected files lib/silccrypt/silchmac.[ch].  Added also
1849           SILC_ALL_HMACS macro that can be used with silc_hmac_unregister
1850           to unregister all hmacs at once.
1851
1852         * Register the default ciphers, hash functions, PKCSs and HMACs
1853           if client's configuration file does not exist.  The affected
1854           file silc/silc.c.
1855
1856         * The client did not load the hash functions from the SIM
1857           modules at all.  Added support for this.  Affected file is
1858           silc/clientconfig.c.
1859
1860         * When decoding public key with silc_pkcs_public_key_decode, check
1861           the supported algorithm only if PKCS are registered.  Affected
1862           file lib/silccrypt/silcpkcs.c.  The same was done with the
1863           silc_pkcs_private_key_decode.
1864
1865         * Fixed the SILC List routines to keep the list always in order.
1866           It used to change the list's order when traversing the list but
1867           not it preserves the order.  Affected file lib/trq/silclist.h.
1868
1869 Mon Apr 30 17:29:03 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1870
1871         * Added the client library to use the SilcSocketConnection's
1872           reference counter (by silc_socket_dup) to prevent the bug that
1873           the socket object may be freed underneath async operation.
1874
1875         * The name resolv library checking fixes in the configure.in.pre.
1876           The patch by salo.
1877
1878         * Created new version of the protocol drafts for future
1879           development. The -03 drafts are the ones that will be changed
1880           in the trunk now and the -02 will remain as they are.
1881
1882         * Send list of CUMODE notifys to the router when announcing
1883           the channel users to the router.  Affected file silcd/server.c.
1884           If the router receiving channel founder CUMODE for a channel
1885           that already has channel founder it will send CUMODE notify
1886           to the sender to remove the channel founder rights from the
1887           announced client.  Affected file silcd/packet_receive.c.
1888
1889         * The CUMODE notify may now use Server ID as well as the entity
1890           who changes the mode.  Updated protocool specs.
1891
1892         * Updated INSTALL and README files.
1893
1894 Sun Apr 29 23:17:50 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1895
1896         * New web pages in the http://silc.pspt.fi.  The pages was
1897           designed by salo.
1898
1899         * Updated CREDITS.
1900
1901 Sun Apr 29 13:33:41 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1902
1903         * Implemented the [DenyConnectin] config section in the server.
1904           Added silc_server_config_denied_conn to check whether incoming
1905           connection is denied.  Affected file silcd/serverconfig.[ch].
1906
1907         * Do not check the ports when checking the incoming configuration
1908           data if the port is 0, meaning any.  Affected file is
1909           silcd/serverconfig.c.
1910
1911 Fri Apr 20 18:58:43 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1912
1913         * Fixed buffer overflow in silc_string_compare in the file
1914           lib/silcutil/silcutil.c.
1915
1916         * Fixed double free in silc_server_command_leave in the file
1917           silcd/command.c.
1918
1919 Fri Apr 20 14:00:11 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1920
1921         * Fixed the version checking in the server.  Affected file is
1922           silcd/protocol.c.
1923
1924 Thu Apr 19 19:52:46 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1925
1926         * Fixed the configuration data fetching when accepting new
1927           connections in the server.  Affected file silcd/server.c.
1928
1929 Thu Apr 19 11:40:20 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1930
1931         * Added `sender_entry' argument to the function
1932           silc_server_packet_relay_to_channel so that we can check
1933           whether some destination actually belongs to the same route
1934           the sender belongs (ie, we must not resend the packet to the
1935           sender).  Affected file silcd/packet_send.[ch].
1936
1937         * Added `servername' field to the SilcClientEntry in the server
1938           to hold the name of the server where client is from.  Affected
1939           file is silcd/idlist.h.
1940
1941 Wed Apr 18 22:19:03 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1942
1943         * Moved the channel message encrypting in the router betwen
1944           router connections from silc_server_channel_message to the
1945           silc_server_packet_relay_to_channel since we want to check
1946           whether we have anybody channel before encrypting anything.
1947           Affected files silcd/packet_[receive/send].c.
1948
1949 Tue Apr 17 21:18:19 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
1950
1951         * Fixed the [AdminConnection] server config section to support
1952           multiple entries.  Affected file silcd/serverconfig.c.
1953
1954         * Added support into the server to check the validity of the
1955           incoming connection before executing any KE or authentication
1956           protocols.
1957
1958         * The connection configuration is now saved to the KE and 
1959           connection auth protocol contexts and not fetched anymore in 
1960           the protocol.  Affected files silcd/server.c, silcd/protocol.[ch].
1961
1962         * The local hosts listenning address and port is also resolved
1963           now when starting the server.  We want to have the socket object
1964           to include the real address and port for the listener.  Added
1965           new function silc_net_check_local_by_sock into the files
1966           lib/silcutil/silcnet.[ch].
1967
1968         * Fixed a broadcast bug in server -> do not broadcast if we
1969           are standalone.
1970
1971         * Fixed a routing bug.  Do not route broadcast packets ever.
1972           Broadcast packets must be processed always and not routed since
1973           they may be destined to some other host than yourself and thus
1974           would get routed without no good reason.  Affected file is
1975           silcd/server.c.
1976
1977         * Added function silc_server_config_is_primary_route to check
1978           whether primary router connection has been configured (a router
1979           configuration that we are initiating).  If there is not, we 
1980           will assume that there is only two routers in the SILC network
1981           and we will use the incoming router connection as our primary
1982           route.  Affected files silcd/serverconfig.[ch], silcd/server.c.
1983
1984         * Changed the order of the broadcasting.  Broadcast _after_ the
1985           packet has been processed not before.  Affected file is
1986           silcd/server.c.
1987
1988         * Fixed a [ClientConnection] parsing bug.  The port was never
1989           parsed correctly thus resulting to port 0.  Affected file
1990           silcd/serverconfig.c.
1991
1992         * Fixed silc_server_send_notify_args -> it ignored the `broadcast'
1993           argument and did not set the broadcast packet flag.  Affected
1994           file silcd/packet_send.c.  Fixed same bug in the function
1995           silc_server_send_notify as well.
1996
1997         * If we receive NEW_ID packet for our own ID in the server, ignore
1998           the packet.
1999
2000 Mon Apr 16 12:10:33 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2001
2002         * Updated TODO.
2003
2004         * Removed the nickname from the Private Message Payload.
2005           Updated the code and the protocol specs.
2006
2007         * Updated protocol specs for submitting to the IETF.
2008
2009         * Tweaked the Random Number Generator a bit.  Affected file
2010           lib/silccrypt/silcrng.c.  Exported a new function
2011           silc_rng_[global]_add_noise which can be used to add more
2012           noise to the RNG.
2013
2014 Sat Apr 14 16:21:32 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2015
2016         * Do not parse packets with different timeout when protocol
2017           is active -> may cause problem with rekey.  Affected file
2018           silcd/server.c.
2019
2020         * When server receives signoff notify it must not create
2021           new channel key if the client is on any channels since the
2022           sender of the signoff notify will create it.
2023
2024 Fri Apr 13 17:12:46 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2025
2026         * Added printing of error messages during SKE protocol from the
2027           failure packet sent by server during SKE.  Affected file
2028           silc/client_ops.c.
2029
2030         * Removed the client's failure_callback handling with timeout
2031           and handle it immediately when received.
2032
2033         * The SKE library returned wrong type in SUCCESS and FAILURE 
2034           packets.  They must be 32 bit MSB not 16 bit MSB.
2035
2036 Fri Apr 13 00:09:08 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2037
2038         * Ok, rewrote the logic of the re-key and now it seems to work.
2039           I tested it on high traffic with frequent re-keys without
2040           problems.  Added hmac_receive (and renamed hmac to hmac_send)
2041           in SilcClientConnection in lib/silcclient/client.h and
2042           in SilcIDListData in silcd/idlist.h.  Also, removed the
2043           SilcPacketParserContext's cipher and hmac fields as they are
2044           not needed anymore and actually caused some problems when
2045           the ciphers and hmac's changed underneath the packet parser.
2046
2047 Thu Apr 12 14:42:51 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2048
2049         * If re-key protocol is active then process the incoming packets
2050           synchronously since we must assure that icoming packets encrypted
2051           with the old key is processed before the new keys is set to
2052           use.  This is true other packets than for REKEY packets.
2053           Affected file silcd/server.c.  The same was done to client library
2054           as well, affected file lib/silcclient/client.c.
2055
2056 Thu Apr 12 12:01:52 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2057
2058         * Fixed bug in client and server to accept the force send if
2059           the packet is send from silc_[server/client]_packet_process
2060           function.  Otherwise the packets are never delivered, oops.
2061
2062 Wed Apr 11 22:10:15 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2063
2064         * Disable force sending of packets when REKEY protocol is active.
2065           We must assure that no packet is sent directly when rekey is
2066           performed.  All packets must be sent through packet queue.
2067           Added macro SILC_SERVER_IS_REKEY to silcd/server.h and
2068           SILC_CLIENT_IS_REKEY to lib/silcclient/client.h.  Affected
2069           function is silc_[server/client]_packet_send_real to check
2070           the situation.
2071
2072         * Replaced the SIM paths from example config files to 
2073           /usr/local/modules.  Also, make install creates now
2074           /usr/local/silc/logs directory to hold all the SILC server
2075           logs.
2076
2077 Wed Apr 11 16:59:59 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2078
2079         * Made the configure.in.pre work on Solaris.  Patch by salo.
2080
2081         * Made all ciphers compatible with non-x86 machines.  Defined
2082           CBC mode macros into lib/silccrypt/ciphers_def.h.
2083
2084 Tue Apr 10 20:32:44 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2085
2086         * Fixed the make install.
2087
2088 Tue Apr 10 16:20:34 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2089
2090         * When MAC computation fails the silc_packet_decrypt returned 0
2091           even though it was supposed to return -1.  Fixed this.  The
2092           affected file is lib/silccore/silcpacket.c.
2093
2094         * Do not replace the config files in /etc/silc (in make install)
2095           if they already exist.  Affected file ./Makefile.am.
2096
2097         * Do not send re-key packets immediately but through packet queue.
2098           Affected file silcd/protocol.c and lib/silcclient/protocol.c.
2099
2100         * Changed silc_net_check_host_by_sock to return FALSE if the
2101           IP/DNS could not be resolved.  Though, it returns the IP address
2102           now even if it could not resolve it (but returns also FALSE).
2103           Affected file lib/silcutil/silcnet.[ch].
2104
2105 Mon Apr  9 21:54:44 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2106
2107         * Added silc_pkcs_decode_identifier to decode the public key's
2108           identifier.  Affected file lib/silccrypt/silpkcs.[ch].
2109           Added also silc_pkcs_free_identifier.  Added also new context
2110           SilcPublicKeyIdentifier.
2111
2112         * Added -S option to the silc client.  It is used to dump the
2113           contents of the specified public key file.
2114
2115         * Changed the PKCS api to return the public key length when
2116           setting the public key.
2117
2118         * Fixed a fatal bug in the public and private key file loading.
2119           Affected file lib/silccrypt/silcpkcs.c.
2120
2121         * Execute the packet parsing for client with zero (0) timeout
2122           if the protocol is active.  Affected file silcd/server.c.
2123
2124 Sun Apr  8 19:30:56 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2125
2126         * Made the key generation options to the silcd program.  Added
2127           -C option, equivalent to client's option.
2128
2129         * Added new [ServerKeys] config section to the server.  It
2130           configures the server's public and private key.
2131
2132         * Defined generic Public Key Payload into the protocol
2133           specification to send specific type of public keys and
2134           certificates.
2135
2136         * Defined new command SILC_COMMAND_GETKEY to fetch a client's
2137           public key or certificate.
2138
2139         * Implemented the GETKEY command to the server and to the
2140           client library and on user interface.
2141
2142 Sun Apr  8 01:37:21 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2143
2144         * Made preliminary `make install' work.
2145
2146 Thu Apr  5 17:42:30 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2147
2148         * Added SilcServerRekey context into silcd/idlist.h.
2149
2150         * Added the PFS support as defined in the specification to the
2151           SKE protocol.  Affected files lib/silcske/*.c.
2152
2153         * Added `ske_group' field to the SilcServerRekey context to hold
2154           the number of the SKE group that is used with PFS in re-key.
2155           Affected file silcd/idlist.h.
2156
2157         * Added PFS re-key support to the server.  Affected file is
2158           silcd/protocol.c.
2159
2160         * Added silc_protocol_cancel to cancel execution of the next
2161           state of the protocol.  Affected file is
2162           lib/silccore/silcprotocol.[ch].
2163
2164         * Added the re-key support with and without PFS to the client
2165           library.  Re-key is performed once in an hour, by default.
2166
2167           Added new protocol type SILC_PROTOCOL_CLIENT_REKEY.
2168           Added silc_client_rekey_callback and silc_client_rekey_final.
2169           Affected files are lib/silcclient/protocol.[ch] and
2170           lib/silcclient/client.[ch].
2171
2172         * Removed the `hmac_key' and `hmac_key_len' fields from the
2173           SilcClientConnection structure; not needed.  Affected file is
2174           lib/silcclient/client.h.
2175
2176         * Updated TODO.
2177
2178 Wed Apr  4 16:32:31 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2179
2180         * Do not ask whether user wants to use the negotiated private key
2181           for private messages, just use it.  Affected file is 
2182           silc/local_command.c.
2183
2184         * Added `send_enc_key' and `enc_key_len' fields to the 
2185           SilcIDListData structure since they are needed in the re-key
2186           phase.  Affected file is silcd/idlist.[ch].
2187
2188         * Implemented the simple re-key protocol into the server.
2189           Affected files silcd/server.c and silcd/protocol.[ch].  The
2190           re-key will be performed once in an hour, by default.
2191
2192           Added new protocol type SILC_PROTOCOL_SERVER_REKEY.
2193           Added silc_server_rekey, silc_server_rekey_callback and
2194           silc_server_rekey_final.
2195
2196         * Removed Tunneled flag from the protocol.  Updated the code
2197           and the specifications.
2198
2199         * Adde `pfs' field to the SilcIDListData to indicate whether
2200           the PFS is to be performed in the re-key.  Affected file is
2201           silcd/idlist.h.
2202
2203 Tue Apr  3 21:52:42 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2204
2205         * Defined uint8, int8, uint16, int16, uint32, int32, uint64 and
2206           int64 of at least the xintXX size.  If void * is less that 4
2207           bytes uint32 * will be used.  Defined bool as boolean.
2208
2209         * Changed _ALL_ unsigned long and unsigned int to uint32, 
2210           unsgined short to uint16 in the source tree.
2211
2212         * Fixed a fatal bug in silc_server_remove_clients_by_server.  Do
2213           not handle clients that has entry->data.registered == FALSE.
2214           They are not in the network anymore.  Affected file is
2215           silcd/server.c.
2216
2217 Tue Apr  3 16:39:19 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2218
2219         * Implemented the sending of the SERVER_SIGNOFF notify in the
2220           server.  Affected file is silcd/server.c.
2221
2222         * Added silc_server_send_notify_args into silcd/packet_send.[ch].
2223           Added also silc_notify_payload_encode_args into the
2224           lib/silccore/silcnotify.[ch].
2225
2226         * Implemented ther SERVER_SIGNOFF notify handling in the server.
2227           Affected file silcd/packet_receive.c.
2228
2229         * Implemented the SERVER_SIGNOFF notify handling in the client
2230           library.  Affected file lib/silcclient/client_notify.c.  Also,
2231           implemnted the printing of the SERVER_SIGNOFF info to the
2232           application.  Affected file silc/client_ops.c.
2233
2234         * The silc_idlist_del_server now returns TRUE or FALSE to indicate
2235           if the deleting was successful.  Affected file silcd/idlist.[ch].
2236
2237         * Added support for public key authentication in the connection
2238           authentication protocol in the client library.  Affected file
2239           lib/silcclient/protocol.c.
2240
2241         * Changed the server's silc_idlist_get_clients_by_* interface
2242           to support already allocated array so that new entries may be
2243           added to pre-allocated array.  Affected file silcd/idlist.[ch].
2244           This fixes some bugs with WHOIS, WHOWAS and IDENTIFY commands
2245           and command replies.
2246
2247         * All command reply functions in the server now calls the 
2248           pending command callback even if error occured.  This way the
2249           error will be delivered to the client as well.  Affected files
2250           silcd/command.c and silcd/command_reply.c.
2251
2252         * Fixed INFO command to return local server's info if no server
2253           was provided.  Affected file lib/silcclient/command.c.
2254
2255         * Removed RESTART command for good.  Updated the code and the
2256           protocol specs.
2257
2258         * Rewrote parts of the task system.  It is a bit simpler now.
2259           Removed unsued task priorities. The affected files are
2260           lib/silcutil/silctask.[ch].
2261
2262 Mon Apr  2 20:02:33 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2263
2264         * Moved the USERS printing from the library to the application.
2265           Affected files lib/silcclient/command.c and silc/client_ops.c.
2266
2267 Mon Apr  2 13:13:23 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2268
2269         * Updated TODO.
2270
2271         * Added channel key re-key support.  The re-key is perfomed
2272           only by the router and is done once in an hour.  Added `rekey'
2273           field to the SilcChannelEntry in the server.  Affected files
2274           silcd/server.c and silcd/idlist.h.
2275
2276         * Added silc_task_unregister_by_context into the file
2277           lib/silcutil/silctask.[ch].
2278
2279 Sun Apr  1 19:49:34 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2280
2281         * Added SILC_UMODE_GONE mode to indicate when the client is not
2282           present in the SILC network.  Added also support to the local
2283           command AWAY that will set this mode.  Added support of showing
2284           "xxx is gone" in WHOIS command.  The USERS command shows the
2285           gone status as well.
2286
2287         * Fixed setting server and router operator privileges in the
2288           server's UMODE command.  Affected file silcd/command.c.
2289
2290         * Merged the SKE KE1 and KE2 payloads into one payload.  The
2291           new KE payload is equivalent to the old KE2 payload.
2292
2293           Cleaned up the SKE Start Payload parsing.  It now uses the
2294           simple buffer unformatting to do the parsing.  A lot faster
2295           now.
2296
2297           Added new Mutual Authentication flag (SILC_SKE_SP_FLAG_MUTUAL)
2298           to the SKE that is used to indicate whether both of the SKE
2299           parties should perform authentication.  By default only the
2300           responder performs authentication.  By setting this flag also
2301           the initiator must do authentication.  By default it is unset
2302           since in normal SKE case, client to server connection, only
2303           the responder should do authentication.  When doing SKE between
2304           two clients both should perform authentication.  Updated the
2305           code and the protocol specs.
2306
2307         * A little fix to IDENTIFY command in the server.  Search the
2308           client first by hash not nickname.  Affected file is 
2309           silcd/command.c.
2310
2311         * Fixed the silc_client_close_connection to support closing
2312           the client to client connections wihtout deleting too much
2313           data.  Affected file lib/silcclient/client.c.
2314
2315         * Fixed a fatal bug in server and client; if KE1 or KE2 packets
2316           are received if protocol used to be active but is not anymore
2317           the application would crash due to NULL pointer dereference.
2318           Affected files silcd/server.c and lib/silcclient/client.c.
2319
2320         * Added `hash' field to the SilcClientConnection to include
2321           the hash function negotiated in the SKE protocol.
2322
2323         * Added new channel mode SILC_CMODE_FOUNDER_AUTH that is used
2324           to set the channel founder authentication data.  A client can
2325           claim the founder rights later by providing the authentication
2326           data to the CUMODE command using SILC_CUMODE_FOUNDER mode.
2327           This way the channel founder can regain the channel founder
2328           privileges even it is left the channel.  This works only on
2329           local server and the client must be connected to the same
2330           server to be able to regain the founder rights.  Updated the
2331           protocol specs accordingly.
2332
2333           Added support to the CMODE command in the client to set the
2334           founder auth data.  Read the README to see how to set it.
2335
2336           Added support to the CUMODE command to claim the founder
2337           rights.  Read the README to see how to do it.
2338
2339           Added support for the founder authentication to the Channel
2340           Entry in the server.  Affected file silcd/idlist.h.
2341
2342           Added support for the SILC_CMODE_FOUNDER_AUTH mode in the
2343           server's CMODE command.  Affected file silcd/command.c.
2344
2345         * Added the following new functions into lib/silccore/silcauth.[ch]:
2346           silc_auth_get_method and silc_auth_get_data.    
2347
2348         * The server now saves the remote hosts public key to the
2349           SilcIDListData pointer.  Affected file silcd/protocol.c.
2350
2351         * The normal server now does not remove the channel entry from
2352           the cache if the founder authentication data is set.  It used
2353           to remove it if the founder was the last one on the channel on 
2354           the server and left the channel.  The auth data is saved and
2355           if the channel is re-joined later the old entry is used with
2356           the old auth data.  Affected files silcd/command_reply.c and
2357           silcd/server.c.
2358
2359         * Removed the `pkcs' field from the SilcIDListData structure
2360           in the server; it is not used.  Affected file silcd/idlist.h.
2361
2362 Sat Mar 31 15:38:36 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2363
2364         * Fixed packet processing on slow links.  Partial packets were
2365           never re-processed because the incoming data buffer was cleared
2366           by the application.  Application must not directly clear the
2367           sock->inbuf, the packet processing routines handle it.  Fixed
2368           this in client library and in server.
2369
2370 Fri Mar 30 16:35:27 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2371
2372         * Fixed the WHOIS and IDENTIFY send reply function to really
2373           check whether to send list or just one entry.  Affected file
2374           silcd/command.c.
2375
2376         * Cleaned up the LEAVE command's channel key distribution.  The
2377           affected file silcd/command.c.
2378
2379         * Changed CMODE_CHANGE's <Client ID> to <ID Payload> as server
2380           can enforce the channel mode as well.  In that case the ID
2381           includes the ID of the server.  The code now enforces the
2382           mode change if the router have different mode than the server.
2383
2384         * The notify client operation with CMODE_CHANGE notify can now
2385           return NULL client_entry pointer if the CMODE was not changed
2386           by client.  Application must check for this.
2387
2388         * Added <Server ID> argument to INFO command to support server
2389           info fetching by Server ID.
2390
2391         * Added silc_server_announce_get_channel_users to get assembled
2392           packets of channel users of the specified channel.  Affected
2393           file silcd/server.[ch].
2394
2395         * Fixed bug in CHANNEL_CHANGE notify in the server.  The new ID
2396           was freed underneath the ID Cache.
2397
2398         * Re-announce clients when the server received CHANNEL_CHANGE
2399           notify from the router.  Affected file silcd/packet_send.c.
2400
2401 Thu Mar 29 19:10:28 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2402
2403         * Fixed a fatal bug when client does /join 1 2 3 4 5 6 the server
2404           crashed since it did not handle the fact that there is no cipher
2405           called "3" and didn't check the error condition.  Now fixed.
2406
2407         * Added SILC_MESSAGE_FLAG_REQUEST message flag as generic request
2408           flag.  It can be used to send message requests.
2409
2410 Thu Mar 29 12:26:25 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2411
2412         * Implemented the RESTART command in the client.
2413
2414         * Added SILC_MESSAGE_FLAG_NOTICE message flag for informational
2415           notice type messages.  Added notice printing to the user
2416           interface.
2417
2418         * The channel keys are not re-generated if the channel's mode
2419           is PRIVKEY, ie private key on the channel exists.  Affected
2420           files silcd/server.c and silcd/command.c.
2421
2422         * Fixed a little bug in channel message delivery when channel
2423           private keys are set in the server.  Affected file is
2424           silcd/packet_send.c.
2425
2426         * Changed the setting on channel->on_channel = TRUE from the
2427           silc_client_save_channel_key to the JOIN command reply.  The
2428           key payload is not received if the private channel key is set.
2429           Affected file lib/silcclient/command_reply.c and the
2430           lib/silcclient/client_channel.c.
2431
2432         * When the CMODE_CHANGE notify is sent and the channel private
2433           key mode is removed the channel key must be re-generated in
2434           other cells as well.  Added this support for the router in the
2435           silcd/packet_receive.c.
2436
2437         * Added new local command NOTICE to send notice message on
2438           channel.  Affected file silc/local_command.[ch].
2439
2440 Wed Mar 28 23:55:54 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2441
2442         * Added new local command ME to the client.  It is used to send
2443           message to a channel with SILC_MESSAGE_FLAG_ACTION to indicate
2444           some action.  Affected file silc/local_command.[ch].
2445
2446         * Changed channel_message and private_message client operations 
2447           to deliver the message flags to the application.  Added also
2448           the `flags' arguments to the silc_client_send_channel_message
2449           and silc_client_send_private_message functions.  Affected file
2450           silcapi.h.
2451
2452 Wed Mar 28 20:50:47 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2453
2454         * Redefined the Private Message Payload to support private message
2455           keys and to support the new private message flags.  Updated
2456           the protocol specs.  Flags makes it possible to have for example
2457           CTCP style messages.
2458
2459         * Added new type SilcPrivateMessagePayload and defined an API
2460           for it in the lib/silcclient/silcprivate.[ch].
2461
2462         * Tested private message private keys successfully.  Tested the
2463           private message key set, unset and list commands with the new
2464           KEY command.
2465
2466         * Redefined the Channel Message Payload to include the channel
2467           message flags (equal with private message flags) to support
2468           for example CTCP style messages.
2469
2470         * Defined some of the message (for channel and private message)
2471           flags.  Updated the protocol specs and added the flags to the
2472           lib/silccore/silcchannel.h.  The type is SilcMessageFlags.
2473
2474 Wed Mar 28 15:52:36 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2475
2476         * Added SilcKeyAgreementStatus type to the key agreement routines
2477           to indicate the current status and error if one occured.
2478           The status types are defined in the lib/silcclient/silcapi.h.
2479
2480         * Added new local command KEY that is used to set and unset private
2481           keys for channels, set and unset private keys for private messages
2482           with remote clients and to send key agreement requests and
2483           negotiate the key agreement protocol with remote client.  The
2484           key agreement is supported only to negotiate private message keys,
2485           it currently cannot be used to negotiate private keys for channels,
2486           as it is not convenient for that purpose.
2487
2488         * Fixed a minor pending callback setting bug in the function
2489           silc_client_get_client_by_id_resolve, now the function works.
2490           Affected file lib/silcclient/idlist.c.
2491
2492         * Added function silc_net_get_local_port to get local bound
2493           port by socket.  Added to lib/silcutil/silcnet.[ch].
2494
2495         * Added `sockets' and `sockets_count' fields to the SilcClient
2496           object.  They hold the sockets of the listenning sockets in
2497           the client.  Listenning sockets may be for example the key 
2498           agreement server.  Affected file lib/silcclient/client.[ch].
2499           Added functions the silc_client_add_socket and the
2500           silc_client_del_socket.  They are exported to the application
2501           as well.
2502
2503         * Added ~./silc/clientkeys to support other client's public keys.
2504
2505         * Renamed verify_server_key client operation to verify_public_key
2506           and added one argument to indicate the type of the connection
2507           (server, client etc.).
2508
2509 Tue Mar 27 22:22:38 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2510
2511         * Added silc_server_connection_auth_request to handle the
2512           incoming CONNECTION_AUTH_REQUEST packet.  Affected file is
2513           silcd/packet_receive.[ch].
2514
2515         * Added silc_server_send_connection_auth_request into the
2516           silcd/packet_send.c to send the connection auth request packet.
2517
2518         * Cleaned up the silcd/protocol.c a bit and fixed some memory
2519           leaks.
2520
2521         * Fixed the public key authentication in responder side in the
2522           server.  The `auth_data' pointer includes the SilcPublicKey
2523           not the path to the public key.  Affected file silcd/protocol.c.
2524
2525         * Implemented the public key authentication in the initiator side
2526           in the server.  Affected file silcd/protocol.c.
2527
2528         * Removed the [RedirectClient] config section from the server
2529           configuration.  Is not needed and I don't want to implement it.
2530
2531 Tue Mar 27 12:49:56 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2532
2533         * Cleaned up the CMODE command in the server.  It now works
2534           correctly and supports all the modes defined in the protocol.
2535           Affected file is silcd/command.c.
2536
2537         * Added `hmac_name' field to the SilcChannelEntry in the server
2538           to hold the default HMAC of the channel.  It can be set when
2539           creating the channel (with JOIN command).  Affected files
2540           silcd/idlist.[ch].
2541
2542         * Added <cipher> and <hmac> argument to the CMODE_CHANGE notify
2543           type to indicate the change of the current cipher and hmac
2544           on the channel.  Client can safely ignore the <cipher> argument
2545           (if it chooses to do so) since the CHANNEL_KEY packet will 
2546           force the channel key change anyway.  The <hmac> argument is
2547           important since the client is responsible of setting the new
2548           HMAC and the hmac key into use.
2549
2550         * Fixed the CMODE command in the client library as well.
2551
2552         * Tested CMODE command in router environment successfully.
2553
2554 Mon Mar 26 14:39:48 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2555
2556         * Show the version of the remote client (or server) when connecting
2557           to the server.  It is logged to the log file.  Affected file
2558           is silcd/protocol.c.
2559
2560         * Fixed the KILLED notify handling in the client library.  The
2561           client must be removed from all channels when receiving the
2562           KILLED notify.
2563
2564           Also, do not remove the client entry when giving the KILL 
2565           command but when the KILLED notify is received.
2566
2567         * Removed silc_idlist_find_client_by_nickname from the server.
2568           Not needed anymore.  Affected files silcd/idlist.[ch].
2569
2570         * Implemented the CHANNEL_CHANGE notify type handling to the
2571           server.  Affected file silcd/server.c.
2572
2573         * Updated TODO.
2574
2575 Mon Mar 26 12:11:14 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2576
2577         * Added silc_server_send_notify_invite to send the INVITE
2578           notify between routers.
2579
2580         * Implemented the INVITE command correctly to the server.
2581
2582         * Implemented the INVITE notify type handling in the server.
2583
2584         * Implemented the INVITE command to the client library and on the
2585           user interface.
2586
2587 Sun Mar 25 20:27:09 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2588
2589         * Added function silc_server_get_client_resolve to find the
2590           client entry by ID from all ID lists and then resolve it
2591           (using WHOIS) if it cannot be found.  Affected file is
2592           silcd/server.[ch].
2593
2594 Sun Mar 25 13:52:51 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2595
2596         * Implemented the BAN command to the client library.
2597
2598         * The JOIN command in the server now checks the invite list
2599           and the ban list.
2600
2601         * Changed the silc_command_reply_payload_encode_va and the
2602           silc_command_payload_encode_va to support that if argument is
2603           NULL it ignores and checks the next argument.  Affected file
2604           lib/silccore/silccommand.c.
2605
2606         * Added silc_server_send_notify_ban to send the BAN notify
2607           type between routers.
2608
2609         * Chaned the silc_notify_payload_encode to support that if 
2610           argument is NULL it ignores and checks the next argument.
2611           Affected file lib/silccore/silcnotify.c.
2612
2613         * Tested ban lists in router environment successfully.
2614
2615 Sat Mar 24 14:47:25 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2616
2617         * Implemented BAN command to the server, in silcd/command.[ch].
2618
2619         * Removed the BAN and INVITE_LIST modes from the CMODE command
2620           in the server code.
2621
2622         * Added function silc_string_match to regex match two strings.
2623           Affected files lib/silcutil/silcutil.[ch].
2624
2625 Fri Mar 23 22:02:40 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2626
2627         * Redefined parts of the SilcChannelEntry in the server to support
2628           the new ban and invite lists.
2629
2630 Fri Mar 23 16:25:11 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2631
2632         * Redefined the INVITE command.  The same command can be used to
2633           invite individuals to the channel but also to manage the invite
2634           list of the channel (to add to and remove from the invite list).
2635           Updated the protocol specs.
2636
2637         * Added new command SILC_COMMAND_BAN that can be used to manage
2638           the ban list of the channel.  Updated the protocol specs.
2639
2640         * Removed the channel modes: the SILC_CMODE_BAN and the 
2641           SILC_CMODE_INVITE_LIST as they were a bit kludge to be included
2642           in the CMODE command.  The equivalent features are now available
2643           using INVITE and BAN commands.  Updated the protocol specs.
2644
2645         * Added new SILC_NOTIFY_TYPE_BAN notify type to notify routers
2646           in the network about change in the current ban list.  The notify
2647           type is not used by the client.
2648
2649         * Redefined parts of the SILC_NOTIFY_TYPE_INVITE command to 
2650           support the invite lists.
2651
2652 Thu Mar 22 22:52:23 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2653
2654         * Added new function silc_string_regexify that converts string
2655           including wildcard characters into regex string that can
2656           be used by the GNU regex library.  Added into the file
2657           lib/silcutil/silcutil.[ch].
2658
2659           Added silc_string_regex_combine to combine to regex strings
2660           into one so that they can be used as one regex string by
2661           the GNU regex library.  Added into the file
2662           lib/silcutil/silcutil.[ch].
2663
2664           Added silc_string_regex_match to match two strings.  It returns
2665           TRUE if the strings match.  Added into lib/silcutil/silcutil.[ch].
2666
2667 Thu Mar 22 15:29:42 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2668
2669         * Imported GNU regex to the soruce tree into lib/contrib.
2670           Fixed some compiler warning from the regex.c.
2671
2672 Wed Mar 21 15:27:58 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2673
2674         * Fixed MOTD command in the server to work in router environment.
2675
2676         * Fixed the MOTD command in the client library to support
2677           the server argument in the command.
2678
2679         * Added `nickname_len' argument to the silc_idlist_add_client
2680           in the server, as the `nickname' argument may be binary data
2681           (it may be hash).
2682
2683         * Added silc_idlist_get_channels to return all channels from
2684           the ID list.
2685
2686         * Implemented LIST command to the server.  Affected file is
2687           silcd/command.c.
2688
2689         * Implemented the LIST command to the client library and on the
2690           user interface.
2691
2692         * Added [<user count>] argument to the LIST command reply.
2693           With private channels the user count is not shown.
2694
2695         * Updated TODO and README.
2696
2697 Tue Mar 20 21:05:57 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2698
2699         * The client entry's data.registered must be TRUE even with
2700           global client entry on global client list.  The data.registered
2701           is used to check whether the client is anymore in the network,
2702           for example with WHOWAS command so it must be valid.
2703
2704         * Fixed the WHOWAS command in the server.  It now actually works
2705           in router environment.  Added function into silcd/command_reply.c
2706           silc_server_command_reply_whowas_save.
2707
2708         * Added silc_idlist_purge function to the silcd/idlist.c
2709           to periodically purge the ID Cache.
2710
2711         * Fixed INFO command in the server.  It works now in router
2712           environment.  Added <server name> argument to the INFO command
2713           reply.  Updated the protocol specs.
2714
2715         * Fixed minor bug in silc_idcache_purge to not purge if the
2716           expire value is zero.
2717
2718         * Fixed various bugs in WHOIS and IDENTIFY command handling as
2719           they were buggy because of the WHOWAS information.
2720
2721         * Fixed local command MSG to handle the async resolving of 
2722           the remote client properly.  It used to fail the first MSG.
2723           Affected file silc/local_command.c.
2724
2725         * Added `data_len' field to SilcIDCache context.
2726
2727 Tue Mar 20 16:29:00 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2728
2729         * Update TODO.  Todo in commands in the server.
2730
2731 Tue Mar 20 15:45:14 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2732
2733         * Added new notify type SILC_NOTIFY_TYPE_UMODE_CHANGE that is
2734           used by routers as broadcast packet to inform other routers
2735           about the changed user mode.
2736
2737           Implemented the notify handling in the server.  Affected file is
2738           silcd/packet_receive.c.  Added the function 
2739           silc_server_send_notify_umode to the silcd/packet_send.[ch].
2740
2741         * Added new generic Channel Payload and deprecated the New Channel
2742           Payload.  The New Channel Payload is now the generic Channel
2743           Payload.
2744
2745         * Added new argument `mode' to the silc_server_send_new_channel
2746           as it is required in the Channel Payload now.
2747
2748         * Renamed the SilcChannelPayload to SilcChannelMessagePayload
2749           and created a new and real SilChannelPayload to represent the
2750           new generic Channel Payload.  Implemented the encode/decode
2751           for Channel Payload.  Affected file lib/silccore/silcchannel.[ch].
2752
2753         * Added silc_server_get_client_channel_list to return the list
2754           of channels the client has joined for WHOIS command reply.
2755           Affected file silcd/server.[ch].
2756
2757         * Implemented the channel list sending in the WHOIS command reply
2758           in server and in the client.
2759
2760           Implemented the channel list displaying on the user interface
2761           as well.  Affected file silc/client_ops.c.
2762
2763         * Added silc_channel_payload_parse_list to parse list of Channel
2764           Payloads.  It returns SilcDList list of SilcChannelPayloads.
2765           Client for example can use this function to parse the list of
2766           channels it receives in the WHOIS command reply.  The caller
2767           must free the list by calling silc_channel_payload_list_free.
2768           Affected files lib/silccore/silcchannel.[ch].
2769
2770 Mon Mar 19 21:39:15 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2771
2772         * Added one new argument <user mode> to the WHOIS command reply
2773           to return the mode of the user in SILC.  Updated the protocol
2774           specs.
2775
2776           Implemented it to the server and client.
2777
2778 Mon Mar 19 18:43:06 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2779
2780         * Fixed the mode printing on the user interface on joining.
2781           Affected file silc/client_ops.c.
2782
2783         * Implemented the UMODE command and user modes in general to the
2784           client library and to the user interface.
2785
2786         * Implemented the UMODE command to the server.
2787
2788         * The server now sends UNKNOWN_COMMAND error status if client sends
2789           unknown command.  Affected file silcd/command.c.
2790
2791         * All server commands now handle the command identifier the right
2792           way when sending the command reply to the client.  The client can
2793           use to identify the command replies with the identifier.
2794
2795 Mon Mar 19 16:13:07 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2796
2797         * Added silc_server_get_client_route to resolve the route to
2798           the client indicated by the client ID.  Affected file is
2799           silcd/server.[ch].
2800
2801         * Added silc_server_relay_packet as general function to relay
2802           packet to arbitrary destination.  This deprecates functions
2803           like _send_private_message_key, _relay_notify etc.  Affected
2804           file is silcd/packet_send.[ch].
2805
2806           Removed silc_server_send_key_agreement, 
2807           silc_server_send_private_message_key and
2808           silc_server_packet_relay_notify functions from the file
2809           silcd/packet_send.[ch].
2810
2811         * Updated TODO.
2812
2813         * Implemented the SILC_NOTIFY_TYPE_KILLED notify handling in the
2814           server.  Affected file silcd/packet_receive.[ch].
2815
2816         * Implemented the KILL command to the client.  Implemented the
2817           SILC_NOTIFY_TYPE_KILLED notify handling in the client library.
2818           Affected files lib/silcclient/command[_reply].c and
2819           lib/silcclient/client_notify.c.  Implemented the KILL notify
2820           printing in the user inteface.
2821
2822         * Fixed a lot silc_parse_nick memory leaks from the client
2823           library in the file lib/silcclient/command.c.
2824
2825         * Changed the silc_server_send_notify_on_channels's `sender'
2826           argument from SilcSocketConnection to SilcClientEntry to 
2827           check the sender as entry and not as connection object and not
2828           to send to the client provided as argument.  The affected file
2829           is silcd/packet_send.[ch].
2830
2831         * The notify packets that are destined directly to the client used
2832           to not to be processed by the server.  Now changed that and the
2833           server processes all notify packets.  After relaying the packet
2834           to the client the notify packet is processed in the server.
2835
2836         * The silc_server_free_client_data now checks whether there is
2837           pending outgoing traffic for the client and purges the data to
2838           the network before removing the client entry.
2839
2840 Sun Mar 18 21:02:47 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2841
2842         * Added SILC_NOTIFY_TYPE_KILLED notify type.  It is sent when
2843           an client is killed from the SILC Network.  Updated the protocol
2844           specs accordingly.
2845
2846           Added new function silc_server_send_notify_killed to the
2847           silcd/packet_send.[ch].
2848
2849         * Added function silc_server_packet_relay_notify to relay notify
2850           packets that are destined directly to a client.  In this case
2851           the server does not process the notify packets but merely relays
2852           it to the client.  Affected file silcd/packet_send.[ch].
2853
2854           Added also silc_server_packet_process_relay_notify to check
2855           whereto relay the notify.  Affected file is 
2856           silcd/packet_receive.[ch].
2857
2858         * Implemented the KILL command to the server.
2859
2860         * Updated TODO.
2861
2862         * Added the backup schema desgined last fall to the protocol
2863           specs for everyone to see.  The specification is in the
2864           *-spec-xx.txt draft and the packet type definitions for the
2865           backup routers is in *-pp-xx.txt draft.  Thusly, added also
2866           new packet type SILC_PACKET_CELL_ROUTERS.
2867
2868         * A big security problem in the implementation discovered.  The
2869           signoff of an client did not cause new channel key generation
2870           which it of course should've done.  The channel keys must be
2871           always re-generated when client leaves (or signoffs) the channel.
2872           The silc_server_remove_from_channels funtion now handles
2873           the channel key re-generation.
2874
2875         * Added `sender' argument to the silc_server_send_notify_on_channels
2876           to not to send the client provided as argument.  Affected file
2877           silcd/packet_send.[ch].
2878
2879 Fri Mar 16 15:52:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2880
2881         * Implemented OPER and SILCOPER commands into the server and
2882           the client library.
2883
2884         * Added silc_auth_verify and silc_auth_verify_data to verify
2885           the authentication directly from the authentication payload.
2886           It supports verifying both passphrase and public key based
2887           authentication.  Affected file lib/silccore/silcauth.[ch].
2888
2889         * Added `hash' field to the SilcIDListData structure.  It is the
2890           hash negotiated in the SKE protocol.  Affected file is
2891           silcd/idlist.[ch].
2892
2893         * Slight redesigning of the SilcAuthPayload handling routines.
2894           Do not send SilcPKCS but SilcPublicKey as argument.
2895
2896         * Implemented the public key authentication support to the
2897           serverconfig.  The public key is loaded from the provided path
2898           and saved as authentication data to void * pointer.  Thus,
2899           changed the unsigned char *auth_data to void *auth_data;
2900
2901         * Fixed SHUTDOWN command to send the reply before the server
2902           is shutdown. :)  Affected file silcd/command.c.
2903
2904         * Fixed fatal bug in CONNECT command.  The hostname was invalid
2905           memory and server crashed.  Affected file silcd/command.c.
2906
2907         * Fixed fatal bug in CLOSE command.  The server_entry became
2908           invalid but was referenced later in the command.  Affected file
2909           silcd/command.c.
2910
2911 Thu Mar 15 12:46:58 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2912
2913         * Fixed fatal bug in failure packet handling.  Server ignored
2914           the failure and thus crashed when it came.
2915
2916         * Updated TODO.
2917
2918 Wed Mar 14 20:37:35 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2919
2920         * Added new SILC_CF_LAG_STRICT command flag that strictly forces
2921           that the command may be executed only once in (about) 2 seconds.
2922           The old SILC_CF_LAG flag is same but allows command bursts up
2923           to five before limiting.
2924
2925           Added the support for CF_LAG and CF_LAG_STRICT flags to the
2926           server code.  Various commands now includes the CF_LAG_STRICT
2927           flag to disallow any kind of miss-use of the command.
2928
2929         * Fixed the silc_buffer_unformat to not to allocate any data
2930           if the length of the data is zero.  It used to allocate the
2931           length + 1.  Affected file lib/silcutil/silcbuffmt.c.
2932
2933 Wed Mar 14 16:10:30 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2934
2935         * Changed the format of AdminConnection configuration section
2936           in the server.  Added username of the admin to the format.
2937           Affected files silcd/serverconfig.[ch].
2938
2939           Added silc_server_config_find_admin into silcd/serverconfig.[ch]
2940           to return admin configuration data by host, username and/or
2941           nickname.
2942
2943 Wed Mar 14 13:18:16 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2944
2945         * Implemented WHOWAS command to the server.  Added the functions:
2946
2947           silc_server_command_whowas_parse,
2948           silc_server_command_whowas_send_reply,
2949           silc_server_command_whowas_from_client and
2950           silc_server_command_whowas_from_server
2951
2952         * Added <Client ID> argument to the WHOWAS command reply.  Updated
2953           the protocol specs accordingly.
2954
2955         * Implemented WHOWAS command and command_reply to the client
2956           library.
2957
2958           Implemented the WHOWAS printing on the user interface.
2959
2960 Tue Mar 13 22:17:34 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2961
2962         * Added new argument to the WHOWAS command reply, the real name.
2963           It is an optional argument.  Updated the protocol specs.
2964
2965         * Added SilcIDCacheDestructor callback that is registered when
2966           the SilcIDCache is allocated.  The callback is called when
2967           an cache entry in the ID Cache expires, or is purged from the
2968           cache.  Added into lib/silccore/idcache.[ch].
2969
2970           Added silc_idlist_client_destructor to the silcd/idlist.[ch]
2971           to destruct the client entries when the cache entry expires.
2972           Other ID Cache's in server and in the client library ignores
2973           the destructor.
2974
2975         * If the ID Cache entry's `expire' field is zero then the entry
2976           never expires.  Added boolean `expire' argument to the
2977           silc_idcache_add function in the lib/silccore/idcache.[ch].
2978           If it is TRUE the default expiry value is used.
2979
2980         * Added silc_server_free_client_data_timeout that is registered
2981           when client disconnects.  By default for 5 minutes we preserve
2982           the client entry for history - for WHOWAS command.
2983
2984 Tue Mar 13 13:26:18 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
2985
2986         * Added support to the server to enforce that commands are not
2987           executed more than once in 2 seconds.  If server receives 
2988           commands from client more frequently, timeout is registered
2989           to process the commands.  Affected file silcd/command.c.
2990           Added new function silc_server_command_process_timeout.
2991
2992         * Changed NICK_NOTIFY handling in client library to check that
2993           if the client's nickname was changed, so there is no need to
2994           resolve anything from the server.
2995
2996         * Removed error printing from the WHOIS and IDENTIFY commands.
2997           If error occurs then it is ignored silently in the client library.
2998           The application, however, may map the received error to 
2999           human readable error string.  The application currently maps
3000           the NO_SUCH_NICKNAME error to string.
3001
3002         * Made the command status message public to the application.  Moved
3003           them from lib/silcclient/command_reply.c to 
3004           lib/silcclient/command_reply.h.  The application can map the
3005           received command status to the string with the
3006           silc_client_command_status_message function.
3007
3008         * Added check to the server to check that client's ID is same
3009           as the Source ID in the packet the client sent.  They must
3010           match.
3011
3012 Tue Mar 13 12:49:21 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3013
3014         * Added dist-bzip hook to the Makefile.am to make bzip2
3015           compressed distributions.
3016
3017 Mon Mar 12 18:43:38 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3018
3019         * Server now enforces the maximum length for the nickname and
3020           the channel as protocol specification dictates.  128 bytes for
3021           nickname and 256 bytes for channel name.
3022
3023         * Moved the WHOIS printing to the application.  The client libary
3024           does not print out the WHOIS information anymore, the application
3025           must do it.  Renamed silc_client_command_reply_whois_print to
3026           the silc_client_command_reply_whois_save.
3027
3028           The client's idle time is also sent to the application now, and
3029           the idle is shown on screen.
3030
3031         * Added silc_client_command_reply_identify_save to save the
3032           received IDENTIFY entries.
3033
3034         * Do not check for channel private keys in message sending and
3035           reception if the channel does not have the PRIVKEY mode set.
3036           Affected file lib/silclient/client_channel.c.
3037
3038 Sun Mar 11 20:25:06 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3039
3040         * Fixed a minor bug if WHOIS and IDENTIFY command parsing that
3041           just surfaced after chaning the JOIN procedure.
3042
3043 Sun Mar 11 14:59:05 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3044
3045         * Added silc_client_get_clients_by_list to get client entries
3046           from Client ID list, that is returned for example by JOIN
3047           and USERS command replies.  The application should use this
3048           function for example when JOIN command reply is received to
3049           resolve the clients already on the channel (library does not
3050           do that anymore as USERS command reply is not used in the JOIN
3051           procedure anymore).  Affected files lib/silcclient/silcapi.h and
3052           lib/silcclient/idlist.c.
3053
3054         * JOIN command reply and USERS command reply returns now SilcBuffer
3055           pointers instead of unsigned char pointers when returning
3056           the client list and mode list.
3057
3058         * Added <Client ID> argument to the JOIN command reply, mainly
3059           for the server to identify for which client the command was
3060           originally sent.  Updated protocol specs accordingly.
3061
3062         * Added SilcDlist private_key pointer to the SilcChannelEntry
3063           in the client to support the channel private keys.  Affected
3064           file is lib/silcclient/idlist.h.
3065
3066         * Added SilcChannelPrivateKey argument to the function
3067           silc_client_send_channel_message so that application can choose
3068           to use specific private ke if it wants to.  If it is not provided,
3069           the normal channel key is used, unless private keys are set. 
3070           In this case the first (key that was added first) is used 
3071           as the encryption key.
3072
3073         * Implemented the support for channel private key handling.
3074           Implemented the following functions:
3075
3076           silc_client_add_channel_private_key,
3077           silc_client_del_channel_private_keys,
3078           silc_client_del_channel_private_key,
3079           silc_client_list_channel_private_keys and
3080           silc_client_free_channel_private_keys
3081
3082           Affected file lib/silcclient/client_channel.c.
3083
3084         * Added the support for the private keys in the channel message
3085           sending and encryption and in the message reception and
3086           decryption.  Affected funtions are
3087           silc_client_send_channel_message and silc_client_channel_message.
3088
3089 Sat Mar 10 21:36:22 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3090
3091         * Added SKE's key verify callback to the client library's
3092           KE protocol context. Affected files lib/silcclient/protocol.[ch].
3093
3094         * Removed the statement that server (or router) must send USERS
3095           command reply when joining to the channel so that the client
3096           knows who are on the channel.  Instead, the client list and 
3097           client's mode list is now sent in the JOIN command reply to the
3098           client who joined channel.  This is better solution.
3099
3100         * Added function silc_server_get_users_on_channel and function
3101           silc_server_save_users_on_channel to the silcd/server.[ch].
3102
3103         * Removed function silc_server_command_send_users from the
3104           silcd/command.c.
3105
3106         * Do not show topic on the client library anymore.  The topic is
3107           sent in the command reply notify to the application and the
3108           application must show the topic now.
3109
3110 Sat Mar 10 00:07:37 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3111
3112         * Added client searching by nickname hash into the IDENTIFY and
3113           WHOIS commands in the server as they were clearly missing from
3114           them.  Affected file is silcd/command.c.
3115
3116         * Fixed a bug in private message receiving in the client library.
3117           The remote ID was freed and it wasn't supposed, now it is
3118           duplicated.
3119
3120 Fri Mar  9 12:40:42 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3121
3122         * Minor fix to the channel payload; allocate the data area, as it
3123           needs to be of specific length.
3124
3125         * If the key agreement port is zero then the operating
3126           system will define the bound port.  Affected files are
3127           lib/silcclient/silcapi.h and lib/silcclient/client_keyagr.c.
3128
3129         * Added new function silc_channel_payload_decrypt into the file
3130           lib/silccore/silcchannel.[ch].
3131
3132         * Moved the channel message etc, check from silc_packet_decrypt
3133           to applications.  The library calls now a generic 
3134           SilcPacketCheckDecrypt callback which is to return TRUE or FALSE
3135           when the packet is either normal or special.  This was done to
3136           allow more wide range of checking that was not allowed when
3137           the code was in library.  Now applications can do virtually any
3138           checks to the packet and return to the library the decision how
3139           the packet should be processed.  Affected files are
3140           lib/silccore/silcpacket.[ch].
3141
3142           Added silc_server_packet_decrypt_check to the server and
3143           silc_client_packet_decrypt_check to the client library.
3144
3145         * Added silc_server_packet_send_srcdest into silcd/packet_send.[ch]
3146           to send with specified source and destination information.
3147
3148         * Channel message delivery between routers was broken after the
3149           channel key distribution was fixed earlier.  The channel key
3150           was used be to distributed to other routers as well which is not
3151           allowed by the protocol.  Now this is fixed and channel keys
3152           really are cell specific and the channel message delivery between
3153           routers comply with the protocol specification.
3154
3155         * Fixed various commands in server to check also the global list
3156           for the channel entry and not just the local list.  The affected
3157           file silcd/command.c.
3158
3159 Thu Mar  8 21:39:03 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3160
3161         * Added assert()s to buffer formatting and unformatting routines
3162           to assert (if --enable-debug) when error occurs.  Affected
3163           file: lib/silcutil/silcbuffmt.c.
3164
3165         * Changed to auto-reconnect to check whether the remote host is
3166           router and register the re-connect timeout if it is.  It used 
3167           to check that whether we are normal server, but router must do
3168           auto-reconnect with another router as well.  Affected file
3169           silcd/server.c.
3170
3171         * Removed the [<key len>] option from CMODE command as the cipher
3172           name decides the key length, nowadays.  See the defined ciphers
3173           from the protocol specification.
3174
3175         * Added [<hmac>] option to the CMODE command to define the HMAC
3176           for the channel.  Added SILC_CMODE_HMAC channel mode.
3177
3178         * Added [<hmac>] option for the JOIN command so that user can
3179           select which HMAC is used to compute the MACs of the channel
3180           messages.
3181
3182         * Added Hmac field to the Channel Message Payload.  The integrity
3183           of plaintext channel messages are now protected by computing
3184           MAC of the message and attaching the MAC to the payload.  The
3185           MAC is encrypted.  Now, it is clear that this causes some
3186           overhead to the size of the packet but rationale for this is that
3187           now the receiver can verify whether the channel message decrypted
3188           correctly and also when private keys are set for the channel the
3189           receiver can decrypt the packet with several keys and check from
3190           the MAC which key decrypted the message correctly.
3191
3192         * Added silc_cipher_encrypt and silc_cipher_decrypt into the
3193           lib/silccrypt/silccipher.[ch].
3194
3195         * Added silc_hash_len to return the digest length into the
3196           lib/silcrypt/silchash.[ch].
3197
3198         * Rewrote parts of Silc Channel Payload interface in the
3199           lib/silccore/silcchannel.[ch].  The encode function now also
3200           encrypts the packet and parse function decrypts it.
3201
3202 Wed Mar  7 20:58:50 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3203
3204         * Fixed a minor formatting bug in the SKE's key material processing.
3205           It actually might have processed the keys wrong way resulting
3206           into wrong keys.
3207
3208         * Redefined the mandatory HMAC algorithms and added new algorithms.
3209           Added hmac-sha1-96 and hmac-md5-96 which are normal hmac-sha1
3210           and hmac-md5 truncated to 96 bits.  The mandatory is now 
3211           hmac-sha1-96.  Rest are optional (including the one that used
3212           to be mandatory).  Rationale for this is that the truncated HMAC
3213           length is sufficient from security point of view and can actually
3214           make the attack against the HMAC harder.  Also, the truncated
3215           HMAC causes less overhead to the packets.  See the RFC2104 for
3216           more information.
3217
3218         * Added new [hmac] configuration section.  The SKE used to use
3219           the hash names (md5 and sha1) in the SKE proposal as HMCAS which
3220           is of course wrong.  The official names that must be proposed in
3221           the SKE are the ones defined in the protocol specification
3222           (hmac-sha1-96 for example).  The user can configure any hmac
3223           using any hash function configured in the [hash] section.  At
3224           least, the mandatory must be configured.
3225
3226           Rewrote the HMAC interface in lib/silccrypt/silchmac.[ch].
3227
3228         * Added HMAC list to the SKE proposal list.  It has now both
3229           hash algorithm list and HMAC list.  This makes the protocol
3230           incompatible with previous versions.  The SKE now seems to work
3231           the way it is supposed to work, for the first time actually.
3232
3233         * Defined plain Hash algorithms to the protocol specification.
3234           Added sha1 and md5.
3235
3236 Tue Mar  6 15:36:11 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3237
3238         * Implemented support for key agreement packets into the server.
3239           Added functions silc_server_key_agreement and
3240           silc_server_send_key_agreement.  Other than these functions,
3241           server has nothing to do with this packet.
3242
3243         * Added support for private message key packets into the server.
3244           Added functions silc_server_private_message_key and
3245           silc_server_send_private_message_key.
3246
3247         * Updated TODO.
3248
3249         * Changed the silc_[client|server]_protocol_ke_set_keys to be
3250           called in the protocol's final callback instead in the END
3251           protocol state.  This makes a little more sense and in the same
3252           time in client we can use the same protocol routines for normal
3253           key exchange and to key agreement packet handling as well.
3254
3255         * Added to both client's and server's KE protocol context the
3256           SilcSKEKeyMaterial pointer to save the key material.  We will
3257           bring the key material to the protocol's final callback by doing
3258           this.  The final callback must free the key material.
3259
3260         * Added SKE's packet_send callback into client's KE protocol
3261           context so that the caller can choose what packet sending function
3262           is used.  This way we can use different packet sending when
3263           doing normal SKE when doing key agreement packet handling (in
3264           the key agreement packet handling we do not want to encrypt
3265           the packets).
3266
3267         * Implemented the responder side of the key agreement routines
3268           in the client.  The client can now bind to specified port and
3269           accept incoming key negotiation.  The key material is passed
3270           to the application after the protocol is over.
3271
3272         * Implemented the processing of incoming Key Agreement packet
3273           in the client.  Added function silc_client_key_agreement to
3274           process the packet.
3275
3276         * Implemented the intiator side of the key agreement routines
3277           in the client.  The client can now initiate key agreement with
3278           another remote client.  The key material is passed to the
3279           application after the protocol is over.
3280
3281         * Created client_keyagr.c to include all the key agreement 
3282           routines.
3283
3284         * Added macro SILC_TASK_CALLBACK_GLOBAL which is equal to the
3285           SILC_TASK_CALLBACK except that it is not static.
3286
3287         * Created client_notify.c and moved the Notify packet handling
3288           from the client.[ch] into that file.
3289
3290         * Created client_prvmsg.c and moved all private message and
3291           private message key routines from the client.[ch] into that file.
3292
3293         * Create client_channel.c and moved all channel message and
3294           channel private key routines from the client.[ch] into that file.
3295
3296         * Changed silc_client_get_client_by_id_resolve to resolve with
3297           WHOIS command instead of IDENTIFY command, in the file
3298           lib/silclient/idlist.c.
3299
3300 Mon Mar  5 18:39:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3301
3302         * Implemented the SKE's responder side to the Client library.
3303
3304         * When FAILURE is received to the protocol do not trust it
3305           blindly.  Register a timeout to wait whether the remote closes
3306           the connection as it should do it, only after that process the
3307           actual failure.  This was changed to both client and server.
3308
3309         * Added client_internal.h to include some of the structures
3310           there instead of client.h in lib/silcclient/.
3311
3312         * Added function silc_task_unregister_by_callback to unregister
3313           timeouts by the callback function.
3314
3315 Sat Mar  3 19:15:43 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3316
3317         * Some "Incomplete WHOIS info" errors has been appearing on the
3318           log files.  Took away the entry->userinfo check from WHOIS
3319           reply sending.  The entry->userinfo is now " " if client did not
3320           provide one.  I thought this was fixed earlier but something
3321           is wrong still.  Let's see if the error still appears.
3322
3323 Wed Feb 28 20:56:29 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3324
3325         * Fixed a minor bug in the login when the channel key is
3326           re-generated in the server.  It used to generate the key in
3327           wrong order and thus caused problems in the channel traffic.
3328
3329         * Fixed a minor bug in channel key distsribution after
3330           KICK command.  The key was not sent to the router even though
3331           it should've been.
3332
3333 Tue Feb 27 20:24:25 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3334
3335         * Added silc_ske_process_key_material_data as generic routine
3336           to process any key material as the SILC protocol dictates.  The
3337           function is used by the actual SKE library but can be used by
3338           applications as well.  This relates to the private message keys
3339           and the channel private keys since they must be processed the
3340           same way the normal SILC session keys.  The protocol dictates
3341           this.  Affected files: lib/silcske/silcske.[ch].
3342
3343           Added also silc_ske_free_key_material to free the
3344           SilcSKEKeyMaterial structure.
3345
3346         * Defined silc_cipher_set_key function to set the key for
3347           cipher without using the object's method function.  The affected
3348           files: lib/silccrypt/silccipher.[ch].
3349
3350         * Implemented silc silc_client_add_private_message_key,
3351           silc_client_add_private_message_key_ske, 
3352           silc_client_del_private_message_key,
3353           silc_client_list_private_message_keys and
3354           silc_client_free_private_message_keys functions in the
3355           client library.
3356
3357           Added functions silc_client_send_private_message_key to send
3358           the Private Message Key payload and silc_client_private_message_key
3359           to handle incoming Private Message Key payload.
3360
3361         * Added Cipher field to the Private Message Key payload to set
3362           the cipher to be used.  If ignored, the default cipher defined
3363           in the SILC protocol (aes-256-cbc) is used.
3364
3365 Tue Feb 27 13:30:52 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3366
3367         * Removed lib/silcclient/ops.h file.
3368
3369           Redefined parts of the SILC Client Library API. Created new
3370           file silcapi.h that deprecates the ops.h file and defines the
3371           published Client Library API.  Defined also private message key
3372           API and channel private key API into the file.
3373
3374           This is the file that the application must include from the
3375           SILC Client Library.  Other files need not be included by
3376           the application anymore.
3377
3378         * Added new key_agreement client operation callback and also
3379           defined the Key Agreement library API for the application.
3380
3381 Tue Feb 27 11:28:31 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3382
3383         * Added new packet type: SILC_PACKET_KEY_AGREEMENT.  This packet
3384           is used by clients to request key negotiation  between another
3385           client in the SILC network.  If the negotiation is started it
3386           is performed using the SKE protocol.  The result of the
3387           negotiation, the secret key material, can be used for example
3388           as private message key.
3389
3390           Implemented the Key Agreement payload into the files
3391           lib/silccore/silauth.[ch].
3392
3393 Mon Feb 26 12:13:58 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3394
3395         * Redefined ciphers for the SILC protocol.  Added some new ciphers
3396           and defined the key lengths for the algorithms.  Changed the
3397           code accordingly.  The default key length is now 256 bits.
3398
3399         * Fixed SKE key distribution function silc_ske_process_key_material
3400           when the key length is more than 128 bits.  The default key 
3401           length in SILC is now 256 bits.
3402
3403         * Added new command status type: SILC_STATUS_ERR_UNKOWN_ALGORITHM
3404           to indicate unsupported algorithm.
3405
3406         * Renamed rijndael.c to aes.c and all functions as well.
3407
3408         * Fixed a long standing channel key setting bug in client library.
3409           Weird that it has never surfaced before.
3410
3411         * Fixed bug in channel deletion.  If the entire channel is removed
3412           then it must also delete the references of the channel entry
3413           from the client's channel list as the client's channel entry and
3414           the channel's client entry share same memory.
3415
3416 Sun Feb 25 20:47:29 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3417
3418         * Implemented CONNECT and SHUTDOWN commands in the client.
3419
3420         * Implemented CLOSE command to the client.
3421
3422         * Added the function silc_idlist_find_server_by_name into the
3423           files silcd/idlist.[ch].
3424
3425           Added the function silc_idlist_find_server_by_conn into the
3426           files silcd/idlist.[ch].
3427
3428 Sat Feb 24 23:45:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3429
3430         * DIE command was renamed to SHUTDOWN.  Updated the both code
3431           and protocol specs.
3432
3433         * Defined SILC_UMODE_NONE, SILC_UMODE_SERVER_OPERATOR and
3434           SILC_UMODE_ROUTER_OPERATOR modes into lib/silccore/silcmode.h.
3435
3436         * Implemented CONNECT, CLOSE and SHUTDOWN commands to the server
3437           side.
3438
3439         * Added function silc_server_create_connection function to create
3440           connection to remote router.  My server implementation actually
3441           does not allow router to connect to normal server (it expects
3442           that normal server always initiates the connection to the router)
3443           so the CONNECT command is only good for connecting to another
3444           router.
3445
3446 Sat Feb 24 16:03:45 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3447
3448         * Added SILC_NOTIFY_TYPE_KICKED to indicate that the client
3449           or some other client was kicked from the channel.
3450
3451           Implemented the handling of the notify type to both client
3452           and server.
3453
3454           Implemented silc_server_send_notify_kicked to send the KICKED
3455           notify.  It is used to send it to the server's primary router.
3456
3457         * Implemented the KICK command into server and client.
3458
3459         * Added `query' argument to the silc_idlist_get_client function
3460           to indicate whether to query the client from server or not if
3461           it was not found.
3462
3463         * Added new command status type SILC_STATUS_ERR_NO_CHANNEL_FOPRIV
3464           to indicate that the client is not channel founder.
3465
3466         * Updated TODO.
3467
3468 Sat Feb 24 00:00:55 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3469
3470         * Removed the rng context from SilcPacketContext structure and
3471           changed that the packet routine uses the Global RNG API.
3472
3473 Fri Feb 23 11:22:57 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3474
3475         * Added support for quit message that client can "leave" on the
3476           channel when it quits the SILC.  It is ditributed inside the
3477           SILC_NOTIFY_TYPE_SIGNOFF notify type.
3478
3479           Added silc_server_free_client_data that will take the
3480           signoff message as argument.
3481
3482         * Changed SKE routines to use the silc_pkcs_sign/verify routines.
3483
3484 Thu Feb 22 23:05:36 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3485
3486         * Updated parts of the protocol specification to keep it up
3487           to date.
3488
3489 Thu Feb 22 15:08:20 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3490
3491         * Added List flag (SILC_PACKET_FLAG_LIST) to indicate list of
3492           payloads in one packet.
3493
3494         * Deprecated following packet types: NEW_ID_LIST, NEW_CHANNEL_LIST,
3495           NEW_CHANNEL_USER_LIST, SET_MODE and SET_MODE_LIST.  List packets
3496           use now the new List flag.
3497
3498         * Also deprecated the following packet types: REPLACE_ID,
3499           NEW_CHANNEL_USER and REMOVE_CHANNEL_USER packet types.
3500          
3501         * Added list support for Notify packet in server.
3502
3503         * Added silc_server_send_notify_channel_change to send the
3504           CHANNEL_CHANGE notify type to replace channel ID's.  Deprecates
3505           the silc_server_send_replace_id.
3506
3507         * Added silc_server_send_notify_nick_change to send the
3508           NICK_CHANGE notify type.  Deprecates the function
3509           silc_server_send_replace_id.
3510
3511         * Added silc_server_send_notify_join to send the JOIN notify type.
3512           Deprecates the function silc_server_send_new_channel_user.
3513
3514         * Added silc_server_send_notify_leave to send LEAVE notify type.
3515           Deprecates the function silc_server_send_remove_channel_user.
3516
3517         * Added silc_server_send_notify_cmode and 
3518           silc_server_send_notify_cumode to send CMODE and CUMODE notify
3519           types.  Deprecates the silc_server_send_set_mode function.
3520
3521         * Added SERVER_SIGNOFF notify type to indicate that server has
3522           quit.  This means that all clients on the channel from that 
3523           server will drop.  This can be also used when netsplit happens.
3524
3525           Deprecated REMOVE_ID packet type since it is not needed anymore
3526           even from server.
3527
3528           Added silc_server_send_notify_server_signoff to send the
3529           SERVER_SIGNOFF notify type.  Deprecates the function
3530           silc_server_send_remove_id.
3531
3532           Added also silc_server_send_notify_signoff to send the
3533           SIGNOFF notify type.
3534
3535         * Employed the PKCS #1. It is the mandatory way to do RSA in the
3536           SILC protocol from this day on.  Changed the protocol 
3537           specification as well.
3538
3539         * Added silc_server_send_notify_topic_set to send TOPIC_SET
3540           notify type.  It is used between routers to notify about
3541           topic changes on a channel.
3542
3543         * Added silc_id_dup into lib/silccore/id.[ch] to duplicate
3544           ID data.
3545
3546         * Partly updated the protocol specification to comply with the
3547           changes now made.  It is still though a bit outdated.
3548
3549         * The JOIN notify type now takes one extra argument <Channel ID>.
3550           The packet used to be destined to the channel but now the
3551           JOIN type may be sent as list thus it is impossible to 
3552           destine it to any specific channel.  By adding this argument
3553           it is again possible.
3554
3555 Wed Feb 21 22:39:30 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3556
3557         * Added CREDITS file.  The CHANGES and CREDITS file will appear
3558           in the distribution as well.
3559
3560 Wed Feb 21 14:17:04 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3561
3562         * Implemented CMODE_CHANGE, CUMODE_CHANGE and TOPIC_SET notify
3563           types in the server's silcd/packet_receive.c.
3564
3565         * Implemented CMODE and CUMODE to work in router environment.
3566
3567         * Fixed minor encoding and decoding buglet from the
3568           lib/silccore/silcmode.c.
3569
3570         * Fixed buffer overflow from lib/silcclient/command.c in USERS
3571           command parsing.
3572
3573 Wed Feb 21 12:44:00 EET 2001  Mika Boström <bostik@lut.fi>
3574
3575         * Changed all SilcConfigServer* and silc_config_server* to
3576           SilcServerConfig* and silc_server_config*, respectively.
3577           Patch by Bostik.
3578
3579 Wed Feb 21 00:10:00 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3580
3581         * Associated the ID (client or server ID) to the Authentication
3582           Payload to avoid any possibility of forging.  Updated the
3583           protocol specification and the code accordingly.
3584
3585 Tue Feb 20 14:14:14 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3586
3587         * The RSA key length is now save to the RsaKey context in the
3588           key generation process in lib/silccrypt/rsa.c.  The key length
3589           is now used to figure out the maximum size of the block allowed
3590           to be encrypted/signed.
3591
3592         * Added silc_mp_mp2bin_noalloc into lib/silcmath/mpbin.[ch].  It
3593           is equivalent to the silc_mp_mp2bin but does not allocate any
3594           memory.
3595
3596         * Changed silc_mp_mp2bin API to take length argument.  If it is
3597           non-zero then the buffer is allocated that large.  If zero, then
3598           the size is approximated using silc_mp_sizeinbase, which however
3599           is not relieable.
3600
3601         * Created Global RNG API which is global RNG that application can
3602           initialize.  After initializing, any routine anywhere in the
3603           code (including library) can use RNG without allocating a new
3604           RNG object.  This was done to allow this sort of use of the 
3605           RNG in code that has no chance to allocate RNG object.  All
3606           applications currently allocate this and many routines in the
3607           library use this.  Affected file lib/silccrypt/silcrng.[ch].
3608
3609         * Removed the RNG kludge from lib/silcmath/primegen.c and changed
3610           it to use the Global RNG API.
3611
3612         * Defined Authentication Payload into protocol specification that
3613           is used during SILC session to authenticate entities.  It is
3614           used for example by client to authenticate itself to the server
3615           to obtain server operator privileges.
3616
3617           Implemented this payload into the lib/silccore/silcauth.[ch].
3618           Implemented also routines for public key based authentication
3619           as the new protocol specification dictates.
3620
3621           Moved definitions of different authentication methods from
3622           lib/silccore/silcprotocol.h into lib/silccore/silcauth.h.
3623
3624         * Added silc_pkcs_encrypt, silc_pkcs_decrypt, silc_pkcs_sign,
3625           silc_pkcs_verify and silc_pkcs_sign_with_hash and
3626           silc_pkcs_verify_with_hash functions into the file 
3627           lib/silccrypt/silcpkcs.[ch].
3628
3629 Mon Feb 19 19:59:28 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3630
3631         * The client entry's userinfo pointer must be always valid. 
3632           Otherwise the [<unknown>] bug will surface beacuse the WHOIS
3633           will fail since it requires the userinfo.  Now, the userinfo
3634           is allocated as "" if actual userinfo does not exist.  Actually,
3635           it must exist and it is totally Ok to drop client connections
3636           that does not announce the userinfo.  However, we will make
3637           this workaround for now.
3638
3639         * Added silc_net_get_remote_port into lib/silcutil/silcnet.[ch]
3640           to return the remote port by socket.
3641
3642 Mon Feb 19 14:26:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3643
3644         * Changed SILC_SERVER_COMMAND_EXEC_PENDING macro to the name
3645           SILC_SERVER_PENDING_EXEC and added an new macro
3646           SILC_SERVER_PENDING_DESTRUCTOR which is called to free the
3647           data or when error occurs while processing the pending command.
3648
3649           Added new argument `destructor' into silc_server_command_pending
3650           and to the SilcServerCommandPending object.  This destructor is
3651           now called after calling the pending callback or if error occurs
3652           immediately.  If error occurs the actual pending callback won't
3653           be called at all - only the destructor.  The destructor may be
3654           NULL if destructor is not needed.
3655
3656           All this applies for client library code as well.  Similar
3657           changes were made there as well for the pending commands.
3658
3659           In the client, the application must now allocate the 
3660           SilcClientCommandContext with the silc_client_command_alloc
3661           function.
3662
3663         * Added reference counter to the SilcServerCommandContext.  Added
3664           function silc_server_command_alloc and silc_server_command_dup 
3665           functions.
3666
3667           Same type of functions added to the client library for the same
3668           purpose as well.
3669
3670         * Removed the cmd_ident from IDListData away since it is now 
3671           global for all connections.  It is the command identifier used
3672           in command sending and with pending commands.  The affected file
3673           is silcd/idlist.h.
3674
3675         * Added reference counter to the SilcSocketConnection objecet to
3676           indicate the usage count of the object.  The object won't be
3677           freed untill the reference counter hits zero.  Currently only
3678           server uses this, and client ignores it.  The client must be
3679           set to use this too later.  The affected files are
3680           lib/silccore/silcsockconn.[ch].  Added also the function
3681           silc_socket_dup to increase the reference counter.
3682
3683           This was mainly added because it is possible that the socket
3684           is removed underneath of pending command or other async
3685           operation.  Now it won't be free'd and proper DISCONNECTING
3686           flags, etc. can be set to avoid sending data to connection that
3687           is not valid anymore.
3688
3689         * Added SILC_SET_DISCONNECTING to server.c when EOF is read from
3690           the connection.  After that it sets SILC_SET_DISCONNECTED.
3691           It is, however, possible that the socket data is not still freed.
3692           The silc_server_packet_process now checks that data is not
3693           read or written to connection that is DISCONNECTED.  The socket
3694           get's freed when the reference counter hits zero.
3695
3696 Mon Feb 19 00:50:57 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3697
3698         * Changed the client operation API: channel_message operation's
3699           `sender' is now the client entry of the sender, not the nickname
3700           and the `channel' is the channel entry, not the channel name.
3701
3702           In the private_message operation the `sender' is now also the
3703           client entry of the sender not the nickname.
3704
3705           Affected file is lib/silcclient/ops.h and all applications
3706           using the client operations.
3707
3708 Sat Feb 17 22:11:50 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3709
3710         * Moved the calling of ops->connect() from connect_to_server_final
3711           into receive_new_id functin since that is the point when the
3712           client is actually allowed to send traffic to network.  The
3713           affected file is lib/silcclient/client.c.
3714
3715 Sat Feb 17 13:15:35 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3716
3717         * When receiving NEW_CHANNEL_LIST, NEW_CHANNEL_USER_LIST,
3718           NEW_ID_LIST and SET_MODE_LIST packets, broadcast the list packet
3719           (if needs broadcasting) instead of broadcasting the packets one
3720           by one which would make a burst in the network traffic.
3721
3722         * Added `broadcast' argument to the functions in silcd/server.[ch]
3723           silc_server_create_new_channel[_with_id] to indicate whether
3724           to send New Channel packet to primary router.
3725
3726 Sat Feb 17 01:06:44 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3727
3728         * Added new function into the silcd/server.[ch] files:
3729           silc_server_create_new_channel_with_id to create new channel with
3730           already existing Channel ID.
3731
3732         * Added new packet type SILC_PACKET_SET_MODE_LIST into the file
3733           lib/silccore/silcpacket.h.  This packet is used t send list of
3734           Set Mode payloads inside one packet.  Server uses this to set
3735           the modes for the channels and clients on those channels, that it
3736           announced to the router when it connected to it.  The protocol
3737           specification has been updated accordingly.
3738
3739         * The silc_server_new_channel did not handle the packet coming
3740           from normal server as it normally does not send that.  However,
3741           when it announces its channels it does send it.  Implemented
3742           the support for that.
3743
3744         * Added SILC_ID_CHANNEL_COMPARE macro to compare to Channel ID's
3745           into the file lib/silccore/id.h.
3746
3747 Fri Feb 16 23:57:29 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3748
3749         * Fixed memory leaks in the functions silc_idlist_del_client,
3750           silc_idlist_del_channel and silc_idlist_del_server in the file
3751           silcd/idlist.c.  All of those leaked like a sieve.
3752
3753         * Fixed some small memory leaks in the client's function
3754           silc_client_notify_by_server.
3755
3756         * Added functions into silcd/server.c: silc_server_announce_clients,
3757           silc_server_announce_channels and silc_server_announce_server.
3758           These functions are used by normal and router server to announce
3759           to its primary router about clients, channels and servers (when
3760           router) that we own.  This is done after we've connected to the
3761           router.
3762
3763           These functions effectively implements the following packet types:
3764           SILC_PACKET_NEW_CHANNEL_LIST, SILC_PACKET_NEW_CHANNEL_USER_LIST
3765           and SILC_PACKET_NEW_ID_LIST.
3766
3767         * Added new functions into the silcd/packet_receive.[ch]:
3768           silc_server_new_id_list, silc_server_new_channel_list and
3769           silc_server_new_channel_user_list to handle the incoming 
3770           NEW_ID_LIST, NEW_CHANNEL_LIST and NEW_CHANNEL_USER_LIST packets.
3771
3772         * Added support of changing Channel ID in the function
3773           silc_server_replace_id.  If the server that announces a channel
3774           to the router already exists in the router (with same name but
3775           with different Channel ID), router is responsible to send
3776           Replace ID packet to the server and force the server to change
3777           the Channel ID to the one router has.
3778
3779         * Added new notify type SILC_NOTIFY_TYPE_CHANNEL_CHANGE to notify
3780           client that the Channel ID has been changed by the router.  The
3781           normal server sends this to the client.  Client must start using
3782           the new Channel ID as the channel's ID.
3783
3784           Implemented handling of this new type into lib/silcclient/client.c
3785           into the function silc_client_notify_by_server.
3786
3787         * Added new function silc_idlist_replace_channel_id into the files
3788           silcd/idlist.[ch] to replace the Channel ID.
3789
3790 Fri Feb 16 14:14:00 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3791
3792         * Call silc_server_command_identify_check always when processing
3793           the IDENTIFY command in silcd/command.c
3794
3795 Thu Feb 15 20:07:37 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3796
3797         * Added new packet type SILC_PACKET_HEARTBEAT that is used to
3798           send keepalive packets.  The packet can be sent by clients, 
3799           servers and routers.
3800
3801           Added function silc_socket_set_heartbeat into the file
3802           lib/silccore/silcsockconn.[ch] to set the heartbeat timeout.
3803           If not set, the heartbeat is not performed.  The actual 
3804           heartbeat is implemented in the low level socket connection
3805           library.  However, application is responsible of actually
3806           sending the packet.
3807
3808           Added silc_server_send_heartbeat to send the actual heartbeat
3809           packet into silcd/packet_send.[ch].  Server now performs
3810           keepalive with all connections.
3811
3812         * Added silc_task_get_first function into lib/silcutil/silctask.c
3813           to return the timeout task with shortest timeout.  There was a bug
3814           in task unregistration that caused problems.  TODO has been
3815           updated to include that task system must be rewritten.
3816
3817         * The client library will now resolve the client information when
3818           receiving JOIN notify from server for client that we know but
3819           have incomplete information.
3820
3821         * Rewrote parts of silc_server_remove_from_channels and
3822           silc_server_remove_from_one_channel as they did not remove the
3823           channel in some circumstances even though they should've.
3824
3825         * Encryption problem encountered in server:
3826
3827           The LEAVE command used to send the Channel Key packet to the
3828           router immediately after generating it.  However, the code
3829           had earlier sent Remove Channel user packet but not immediately,
3830           ie. it was put to queue.  The order of packets in the router
3831           was that Channel Key packet was first and Remove Channel User
3832           packet was second, even though they were encrypted in the
3833           reverse order.  For this reason, MAC check failed.  Now, this
3834           is fixed by not sending the Channel Key packet immediately but
3835           putting it to queue.  However, this is more fundamental problem:
3836           packets that are in queue should actually not be encrypted 
3837           because packets that are sent immediately gets encrypted
3838           actually with wrong IV (and thus MAC check fails).  So, packets
3839           that are in queue should be encrypted when they are sent to
3840           the wire and not when they put to the queue.
3841
3842           However, the problem is that the current system has not been
3843           designed to work that way.  Instead, the packet is encrypted
3844           as soon as possible and left to the queue.  The queue is then
3845           just purged into wire.  There won't be any fixes for this
3846           any time soon.  So, the current semantic for packet sending
3847           is as follows:
3848
3849           o If you send packet to remote host and do not force the send
3850           (the packet will be in queue) then all subsequent packets to the
3851           same remote host must also be put to the queue.  Only after the
3852           queue has been purged is it safe again to force the packet
3853           send immediately.
3854
3855           o If you send all packets immediately then it safe to send
3856           any of subsequent packets through the queue, however, after
3857           the first packet is put to queue then any subsequent packets
3858           must also be put to the queue.
3859
3860           Follow these rules and everything works fine.
3861
3862 Thu Feb 15 14:24:32 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3863
3864         * Added new function silc_server_remove_clients_by_server to
3865           remove all client entries from ID list when the server connection
3866           is lost.  In this case it is also important to invalidate all
3867           client entires as they hold the invalid server entry.  This
3868           fixes fatal bug when server has lost connection and will reconnect
3869           again.
3870
3871 Wed Feb 14 16:03:25 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3872
3873         * Made some sanity checks to silc_server_daemonise like to check
3874           whether the requested user and group actually exists.
3875
3876         * Added sanity check to SKE's silc_ske_responder_finish to check
3877           that the public and private key actually is valid. 
3878
3879         * Invalidate the client's nickname when receiving Replace ID
3880           packet and the Client ID is being replaced.  This means that the
3881           server will query the nickname if someone needs it (client)
3882           a bit later.
3883
3884         * Sort the ID Cache in client library when the ID Cache data
3885           has changed (needs sorting).
3886
3887         * Do not allow for SILC client to create several connections to
3888           several servers.  The client does not support windows right now
3889           and generating multiple connections causes weird behaviour.
3890
3891           Irssi-silc client does support windows and can handle several
3892           connections without problems, see: www.irssi.org and SILC plugin.
3893
3894         * Fixed some places where client was added to the IDList.  The
3895           rule of thumb is following (in order to get everything right):
3896           If the client is directly connected local client then the 
3897           `connection' argument must be set and `router' argument must be 
3898           NULL to silc_idlist_add_client function.  If the client is not
3899           directly connected client then the `router' argument must
3900           bet set and the `connection' argument must be NULL to the
3901           silc_idlist_add_client function.
3902
3903         * The funtion silc_server_packet_send_local_channel actually did
3904           not check whether the client was locally connected or not.  It
3905           does that now.  Fixed a bug related to LEAVE command.
3906
3907         * Fixed Remove Channel User payload parsing bug in server's
3908           silcd/packet_receive.c.  Fixed a bug related to LEAVE command.
3909
3910         * The server's silc_server_save_channel_key now checks also the
3911           global ID list for the channel as it might not be in the local
3912           list.  Fixed a bug related to LEAVE command.
3913
3914         * Is this the end of the [<unknown>] buglet that has been lurking
3915           around for a long time?  A little for loop fix in server's
3916           silc_server_command_whois_parse that is used by both IDENTIFY
3917           and WHOIS command.  At least, this was a clear bug and a cause
3918           of one type of [<unknown>] buglet.
3919
3920         * WHOIS and IDENTIFY commands call the function
3921           silc_server_command_[whois/identify]_check function even if
3922           we are not router server.
3923
3924 Tue Feb 13 19:55:59 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3925
3926         * Added --with-gmp configuration option.  If set the GMP
3927           is always compiled in the SILC source tree.  If not set then
3928           it is checked whether the system has the GMP3 installed.  If
3929           it has then the GMP won't be compiled (the system's headers
3930           and library is used), if it doesn't have it then the GMP is
3931           compiled in the SILC source tree.
3932
3933 Mon Feb 12 11:20:32 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3934
3935         * Changed RSA private exponent generation to what PKCS #1
3936           suggests.  We try to find the smallest possible d by doing
3937           modinv(e, lcm(phi)) instead of modinv(e, phi).  Note: this is
3938           not security fix but optimization.
3939
3940 Sun Feb 11 18:19:51 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3941
3942         * Added new config entry [Identity] to fork the server and run
3943           it as specific user and group.  A patch from Bostik.
3944
3945         * Imported Dotconf configuration library into lib/dotconf.
3946           This will be used to create the SILC configuration files later.
3947           It will appear in the distsribution after this commit.
3948
3949 Sat Feb 10 21:13:45 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3950
3951         * A big code auditing weekend happening.  Auditing code for 
3952           obvious mistakes, bugs and errors.  Also, removing any code
3953           that is obsolete.
3954
3955           Removed files for being obsolete:
3956
3957           o lib/silcutil/silcbuffer.c (the buffer interface is entirely in
3958           inline in the file lib/silcutil/silcbuffer.h)
3959
3960           o lib/silcutil/silcbufutil.c (the header has inline versions)
3961
3962           Changed code to fix possible error conditions:
3963
3964           o The buffer formatting routines now check that the destination
3965           buffer really has enough space to add the data.  This applies for
3966           both buffer formatting and unformatting 
3967           (lib/silcutil/silcbuffmt.[ch]).  Also, the entire buffer
3968           unformatting was changed to accomodate following rules: 
3969           XXX_*STRING_ALLOC will allocate space for the data into the pointer
3970           sent to the function while XXX_*STRING will not allocate or copy 
3971           the data into the buffer.  Instead it sets the pointer from the
3972           buffer into the pointer sent as argument (XXX_*STRING used to
3973           require that the pointer must be allocated already).  This change
3974           makes this whole thing a bit more consistent and more optimized
3975           (note that the data returned in the unformatting with XXX_*STRING
3976           must not be freed now).  The routines return now -1 on error.
3977
3978           o Tried to find all code that use buffer_format and buffer_unformat
3979           and added return value checking to prevent formatting and
3980           especially unformatting errors and possible subsequent fatal
3981           errors.
3982
3983           o Changed ske->x and ske->KEY to mallocated pointers in
3984           lib/silcske/silcske.h.  Fixed possible data and memory leak.
3985
3986           o Added return value checking to all *_parse* functions.  Fixed
3987           many memory leaks as well.
3988
3989           o Added length argument to silc_id_str2id in lib/silccore/id.[ch]
3990           so that buffer overflows would not happen.  All code now also
3991           checks the return value as it can fail.
3992
3993 Mon Feb  5 20:08:30 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
3994
3995         * Added reconnection support to server if the normal server looses
3996           its connection to the router (for example if router is rebooted).
3997           The server performs normal reconnection strategy implemented
3998           to the server.  Affected file silcd/server.c.
3999
4000 Sun Feb  4 13:18:32 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4001
4002         * Added new packet type SILC_PACKET_SET_MODE that is used to
4003           distribute the information about changed modes (for clients,
4004           channels and clients channel modes) to all routers in the
4005           network.  Updated the protocol specification accordingly.
4006
4007           Added functions into silcd/packet_send.c and 
4008           silcd/packet_receive.c: silc_server_send_set_mode, 
4009           silc_server_set_mode.
4010
4011           Added new files silcmode.[ch] into lib/silccore that implements
4012           the encoding and decoding of Set Mode Payload.  Added new type
4013           SilcSetModePayload.  Moved the definitions of different modes
4014           from lib/silccore/silcchannel.h into lib/silccore/silcmode.h.
4015
4016 Sat Feb  3 15:44:54 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4017
4018         * Oops, a little mistake in server's connection authentication 
4019           protocol.  The protocol is not ended with FAILURE but with
4020           SUCCESS if the authentication is Ok. :)  Affected file is
4021           silcd/protocol.c.
4022
4023         * Implemented NICK_CHANGE notify handling in server in the file
4024           silcd/packet_receive.c  The NICK_CHANGE notify is distributed to
4025           the local clients on the channel.  After the changing nickname
4026           in router environment snhould work and the [<unknown>] nickname
4027           should appear no more.
4028  
4029           The silc_server_replace_id function that receives the Replace ID
4030           payload now sends the NICK_CHANGE notify type also in the file
4031           silcd/packet_receive.c
4032
4033         * Changed WHOIS and IDENTIFY command to support the maximum amount
4034           of arguments defined in protocol specs (3328 arguments).  This 
4035           fixed a bug that caused problems when there were more than three
4036           users on a channel.
4037
4038 Fri Feb  2 11:42:56 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4039
4040         * Added extra parameter, command identifier, to the
4041           silc_client_send_command so that explicit command identifier
4042           can be defined.
4043
4044           Changed that ID list routines uses specific command identifier
4045           when sending WHOIS/IDENTIFY requests to the server so that they
4046           can be identified when the reply comes back.
4047
4048           Affected files lib/silcclient/command.[ch],
4049           lib/silcclient/client.c and lib/silcclient/idlist.[ch].
4050
4051         * Added `sender' argument to silc_server_packet_send_to_channel
4052           to indicaet the sender who originally sent the packet to us
4053           that we are now re-sending.  Ignored if NULL.  Affected file
4054           silcd/packet_send.[ch].
4055
4056         * Added some server statistics support in silcd/server_internal.h
4057           SilcServerStatistics structure and around the server code.  Also
4058           send some nice statistics information when client is connecting
4059           to the client.
4060
4061 Thu Feb  1 23:31:21 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4062
4063         * Fixed channel ID decoding in server's JOIN command reply in
4064           silcd/command_reply.c
4065
4066         * Fixed braodcasting of replace ID payload to not to send it if
4067           we are standalone server in silcd/packet_receive.c.
4068
4069         * Fixed all channel message sending routines to not to send
4070           packets to clients that has router set, since they are routed
4071           separately in the same function earlier.  Affects file
4072           silcd/packet_send.c and all channel packet sending functions.
4073
4074         * In USERS reply, res_argv[i] are not allocated, the table
4075           is allocated.  Thus changed that free the table, not its
4076           internals.
4077
4078         * In server's whois_check and identify_check if the client is
4079           locally connected do not send any WHOIS commands - they are not
4080           needed.
4081
4082 Thu Feb  1 21:32:27 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4083
4084         * Fixed some minor bugs in client when sending WHOIS command.  The
4085           arguments was in wrong order.
4086
4087         * Removed statis function add_to_channel from server in 
4088           silcd/command.c that was previously used with the joining but
4089           is obsolete now.
4090
4091         * Tested USERS command in router environment successfully with two
4092           routers, two servers and two clients.
4093
4094 Thu Feb  1 00:54:26 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4095
4096         * Reorganized the USERS command and command reply in client library
4097           in lib/silcclient/command.c and lib/silcclient/command_reply.c.
4098           When the command is given by user we register a pending command
4099           callback that will reprocess the command after the reply has been
4100           received from the server.  When reprocessing the packet we then
4101           display the information.  Thus, the USERS information is displayed
4102           now in the command callback instead of in the command reply
4103           callback.  The processing of the command is same as previously
4104           when server has sent the command reply in the JOINing process.
4105
4106         * Added to USERS command in silcd/command_reply.c to join the client,
4107           we didn't use to know about, to the channel after we've created
4108           a client entry for it.  Also, for clienet we did know already still
4109           check whether it is on the channel or not and add it if not.
4110
4111         * Removed silc_server_command_join_notify as the function and its
4112           use was obsolete.
4113
4114 Tue Jan 30 22:39:15 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4115
4116         * Changed the client's pending command handling to the same as the
4117           server's pending command handling.  It is also now possible to
4118           execute command reply functions from other command reply
4119           function as the function callbacks for commands and command
4120           replies are one and same.  The pending commands are not static
4121           list anymore, it is mallocated SilcDList in lib/silcclient/client.h
4122           in client connection context.  Thus, pending commands are server
4123           connection specific as it is convenient.
4124
4125           Changed the function silc_client_command_pending and
4126           silc_client_command_pending_del and added new function
4127           silc_client_command_pending_check.  Removed the 
4128           SILC_CLIENT_CMD_REPLY_EXEC, and SILC_CLIENT_PENDING_COMMAND_CHECK
4129           macros.
4130
4131         * Added cmd_ident, current command identifier, to the client
4132           connection context in lib/silcclient/client.h to keep track on
4133           command identifiers used in command sending.  Client's command reply
4134           function handling now supports the mandatory command identifiers.
4135
4136         * Added SILC_CLIENT_COMMAND_EXEC_PENDING macros to all command reply
4137           funtions in client to fully support pending command callbacks.
4138
4139         * NOTE: the name_list in USERS (old NAMES) command is NOT sent anymore
4140           as one of the arguments to the application in the command reply
4141           client operation.
4142
4143         * NOTE: The FORWARDED flag is depracated.  It used to be depracated
4144           before first releasing SILC but came back.  Now it is removed again
4145           and should come back nomore.  The FORWARDED flag was used only
4146           by the JOINing procedure by forwarding the command packet to router.
4147           Now, the JOINing procedure has been changed to more generic (due
4148           to various router environment issues) and FORWARDED is not needed
4149           anymore for anything.  The protocol specification is yet to be
4150           updated.
4151
4152           Now, removed silc_server_packet_forward from server and the flag
4153           SILC_PACKET_FORWARDED from lib/silccore/silcpacket.h.
4154
4155 Tue Jan 30 00:05:05 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4156
4157         * Renamed NAMES command to USERS command.  The NAMES was named that
4158           due to historical reasons.  Now it is renamed.  Also, rewrote
4159           parts of the USERS command.  The nickname list is not sent anymore
4160           by the server.  Only Client ID and mode lists are sent in the USERS
4161           command.  Changed this also to the protocol specification.
4162
4163           The client now resolves the names and stuff after it receives
4164           the USERS list from the server when joining to the channel.
4165
4166         * WHOIS and IDENTIFY commands has been changed to support multiple
4167           Client ID's per command.  One can now search for multiple users
4168           in the network by sending only one WHOIS or IDENTIFY command.
4169           Changed the code and the protocol specifications.
4170
4171         * Removed silc_server_command_identify_parse and changed that IDENTIFY
4172           uses silc_server_command_whois_parse to parse the request. */
4173
4174         * If normal server, do not parse the WHOIS and IDENTIFY requests
4175           before sending it to the router.  Saves some time.
4176
4177 Sun Jan 28 16:19:49 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4178
4179         * Fixed JOIN command on client library.  Wrong number of arguments
4180           used to crash the client.
4181
4182         * Added silc_server_channel_has_global function to check whether
4183           channel has global users or not.
4184
4185         * Added silc_server_channel_has_local function to check whether channel
4186           has locally connected clients on the channel.
4187
4188         * The silc_server_remove_from_one_channel now checks whether the
4189           channel has global users or not after given client was removed from
4190           the channel.  It also checks whether the channel has local clients
4191           on the channel anymore.  If it does not have then the channel entry
4192           is removed as it is not needed anymore.
4193
4194         * The silc_server_notify now checks on JOIN notify whether the joining
4195           client is one of locally connected or global.  If it is global then
4196           the channel has now global users on the channel and that is marked
4197           to the channel entry.  Also, it now saves the global client to
4198           global list who is joining and JOINs it to the channel.  This is
4199           for normal server, that is.
4200
4201           Changed silc_server_send_notify_on_channel, 
4202           silc_server_packet_relay_to_channel and 
4203           silc_server_packet_send_to_channel check if we are normal server
4204           and client has router set (ie. global client) do not send the
4205           message to that client, as it is already routed to our router.
4206
4207         * Implemented LEAVE notify type handling in silc_server_notify 
4208           function.
4209
4210         * Tested LEAVE command in router environment successfully.  Tested
4211           with two routers, two servers and two clients.
4212
4213         * Updated TODO.
4214
4215         * idlist_find_xxx_by_id routines now dumps the ID on the debug mode.
4216
4217         * Implemented SIGNOFF notify type handling in silc_server_notify
4218           function.
4219
4220         * silc_server_remove_id now removes the client entry from all channels
4221           it has joined and thusly sends SIGNOFF notify type.
4222
4223         * Rewrote the NAMES list generation in server by removing two excess
4224           loops.  The lists are created now inside one loop.
4225
4226 Sat Jan 27 22:34:56 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4227
4228         * silc_server_remove_channel_user checks now also global list
4229           for channel and client.
4230
4231         * silc_server_new_channel_user checks now both local and global
4232           list for channel and client.  Fixed a bug in client id decoding.
4233           Used to decode wrong buffer.
4234
4235         * silc_server_channel_message checks now both local and global
4236           list for channel entry.
4237
4238         * Tested channel joining (hence JOIN) in router environment
4239           successfully.  Tested with two routers, two servers and two
4240           clients.
4241
4242         * Tested channel message sending in router environment successfully.
4243
4244 Thu Jan 11 03:22:57 EET 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
4245
4246         * Added silc_server_save_channel_key into server.[ch] to save the
4247           received channel key in Channel Key payload processing. It is
4248           also used in JOIN command reply handling.
4249
4250           Equivalent function silc_client_save_channel_key added into
4251           client.[ch] into client library.
4252
4253         * Changed JOIN command reply to send information whether the channel
4254           was created or not (is existing already) and the channel key 
4255           payload.  Changed protocol specs accordingly.
4256
4257         * Fixed bugs in WHOIS and IDENTIFY command reply sending when
4258           the request was sent by ID and not by nickname.  Crashed on
4259           NULL dereference.
4260
4261 Sat Dec 23 21:55:07 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4262
4263         * Fixed a bug in Client library.  IDENTIFY and WHOIS reply functions
4264           now correctly save the received data.
4265
4266         * silc_server_free_sock_user_data now notifies routers in the 
4267           network about entities leaving the network.
4268
4269           At the same time implemented functions silc_server_remove_id
4270           and silc_server_send_remove_id to receive and send REMOVE_ID
4271           packets.  The packet is used to notify routers in the network
4272           about leaving entities.  The ID removed will become invalid in
4273           the network.
4274
4275         * Added function silc_idlist_del_server into server. Removes and
4276           free's server entry from ID list.
4277
4278         * silc_server_private_message function now checks, if we are router,
4279           that the destination ID really is valid ID, naturally.
4280
4281         * In router when NEW_ID packet is received (for new client) the
4282           hash of the Client ID is saved in the ID Cache but the
4283           client->nickname is set to NULL, instead of putting the hash
4284           to it as well.
4285
4286           IDENTIFY command now also checks that client->nickname must be
4287           valid. If it is not if will request the data from the server who
4288           owns the client.  Added new function 
4289           silc_server_command_identify_check.
4290
4291         * Added silc_command_set_command into lib/silccore/silcommand.[ch]
4292           to set the command to already allocated Command Payload.
4293
4294         * Tested private message sending in router environment with two
4295           routers, two servers and two clients.  Fixed minor bugs and now
4296           it works fine.
4297
4298         * Fixed segfault from client's NAMES command. Used to crash if
4299           not on any channel.
4300
4301         * Forwarded packets must not be routed even if it is not destined
4302           to the receiver.  Changed server code comply with this.
4303
4304 Sun Dec 17 14:40:08 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4305
4306         * Added `require_reverse_mapping' boolean value to ServerParams
4307           structure. If TRUE (not default) the server will require that
4308           the connecting host has fully qualified domain name.
4309
4310           If the reverse mapping is not required and hostname could not be
4311           found the IP address is used as hostname.
4312
4313 Sat Dec 16 17:39:54 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4314
4315         * Implemented version string checking to both client and server.
4316           The check is incomplete currently due to the abnormal version 
4317           strings used in development version of SILC.
4318
4319         * Changed all command functions in server to use the new
4320           CHECK_ARGS macro.
4321
4322 Fri Dec 15 15:55:12 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4323
4324         * Changed char *data to unsigned char *data in ID Cache system to
4325           support binary data as ID Cache data. Changed code to support
4326           binary data in lib/silccore/idcache.c.
4327
4328         * Renamed silc_server_packet_relay_command_reply to 
4329           silc_server_command_reply as it is normal packet receiving
4330           function. Rewrote the function to accept command replys for
4331           servers and not only for clients.
4332
4333         * Mark remote router always as registered server if we are connecting
4334           to it.  Otherwise, commands sent by the router to us are ignored.
4335
4336         * All ID List find routines now returns the ID Cache Entry pointer
4337           as well if requested.
4338
4339         * WHOIS command works now in router environment, tested with two
4340           routers, two servers and two clients.
4341
4342         * Cleaned up and rewrote IDENTIFY command. IDENTIFY should work now
4343           in router environment (as it is almost equivalent to WHOIS) but
4344           hasn't been tested thoroughly.  Added new functions:
4345
4346           silc_server_command_identify_parse
4347           silc_server_command_identify_send_reply
4348           silc_server_command_identify_from_client
4349           silc_server_command_identify_from_server
4350
4351         * Disabled route cache adding because adding two different ID's with
4352           same IP replaces the old cache entry thus giving wrong route.
4353           The entry->router->connection is always the fastest route anyway
4354           so route cache may not be needed.  Of course, new routes maybe
4355           established after receiving the ID when the entry->router->connection
4356           might not be anymore the most optimal.
4357
4358 Thu Dec 14 15:55:35 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4359
4360         * Add route cache for received ID for fast routing.
4361
4362         * Added silc_server_packet_route to route received packet on router
4363           that is not destined to us.
4364
4365         * Renamed silc_server_get_route to silc_server_route_get.
4366
4367         * Added id_string and id_string_len fields into SilcServer to
4368           include encoded ServerID for fast comparing without excess
4369           encoding of the ID's.
4370
4371         * Cleaned up WHOIS command on server side. Added following static
4372           functions:
4373
4374           silc_server_command_whois_parse
4375           silc_server_command_whois_check
4376           silc_server_command_whois_send_reply
4377           silc_server_command_whois_from_client
4378           silc_server_command_whois_from_server
4379
4380         * Added macro SILC_SERVER_COMMAND_CHECK_ARGC to check mandatory
4381           arguments in command replies. All command functions should be
4382           updated to use this macro.
4383
4384 Sun Dec 10 23:52:00 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4385
4386         * Minor typo fixes on command reply handling on server.
4387
4388 Tue Nov 28 11:05:39 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4389
4390         * Added silc_server_command_add_to_channel internal routine to add
4391           the client to the channel after router has created the channel and
4392           sent command reply to the server.
4393
4394         * Added generic silc_server_send_command to send any command from
4395           server.
4396
4397         * Use static buffer with ID rendering instead of duplicating data.
4398
4399 Mon Nov 27 21:39:40 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4400
4401         * Fixed a channel user mode bug when joining to a channel server gave
4402           everybody channel founder rights, oops.
4403
4404         * We mark ourselves as the router of the incoming server connection
4405           if we are router ourselves.  This way we can check in some packet
4406           sending functions whether it is locally connected server.  For
4407           incoming router connections we put NULL.
4408
4409         * For router sending packets locally means now always sending the
4410           packet cell wide; to local clients and local servers.  For normal
4411           server sending packet locally means sending it to only local
4412           clients.
4413
4414         * Fixed the JOIN command to really work in router environment.  If the
4415           channel is created it is always created by the router.  Router is
4416           also responsible of making the initial joining to the channel,
4417           sending JOIN notify to the sending server and distributing 
4418           NEW_CHANNEL and NEW_CHANNEL_USER packets.  Hence, if the channel
4419           does not exist server doesn't do anything else but forward the
4420           command to the router which performs everything.
4421
4422         * Added silc_server_send_channel_key function to send the Channel Key
4423           payload.
4424
4425         * Added silc_server_create_channel_key to create new channel key.  The
4426           channel key is now re-generated everytime someone joins or leaves
4427           a channel, as protocol dictates.  Note: channel->key_len is the
4428           key length in bits.
4429
4430 Wed Nov 22 22:14:19 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4431
4432         * Splitted server.[ch] finally.  Created now packet_send.[ch] and
4433           packet_receive.[ch] to separate packet sending and receiving
4434           routines.  The server.[ch] now includes everything else including
4435           actual packet processing (writing and reading data) and other
4436           server issues.
4437
4438           Renamed silc_server_private_message_send_internal to
4439           silc_server_send_private_message.  The routine is still though
4440           used only to relay private messages as server does not send
4441           private messages itself.
4442
4443           Renamed silc_server_new_channel to silc_server_create_new_channel
4444           and added new function sicl_server_new_channel that handles the
4445           incoming New Channel packet.  Added also new sending function
4446           silc_server_send_new_channel to send New Channel Payload.
4447
4448         * Added new function silc_server_notify to process incoming notify
4449           packet to the server/router. Server may then relay the notify
4450           to clients if needed.
4451
4452         * Added new function silc_server_new_channel_user to process incoming
4453           New Channel User packet.  Router will redistribute the packet and
4454           send JOIN notify to its local clients and locally connected servers
4455           if needed.  Normal server will send JOIN notify to its local client
4456           on same channel when received this packet.  Added also corresponding
4457           sending function silc_server_send_new_channel_user to sent the
4458           payload.
4459
4460         * Added boolean route argument to send_notif_to_channel and
4461           packet_send_to_channel functions to attempt to route the packet
4462           if it is TRUE and send only locally if it is FALSE.
4463
4464 Tue Nov 21 19:49:31 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4465
4466         * silc_server_replace_id now broadcasts the received replace ID
4467           packet if it is not broadcast packet already. The router must
4468           broadcast to inform other routers about changed ID.
4469
4470         * Added backpointer to server's router into SilcServer context in
4471           silcd/server_internal.h.
4472
4473         * Fixed silc_server_packet_broadcast to send correct broadcast
4474           packets.
4475
4476         * The channel key is now distributed to the local client as soon
4477           as it is received from the router (in router environment) so that
4478           no other packet may be sent for the channel until client has 
4479           received the key.
4480
4481         * silc_server_remove_channel_user now broadcasts the received
4482           Remove Channel User packet if it is not broadcast packet already.
4483           The router must broadcast to inform other routers about removed
4484           channel user.
4485
4486         * Added users field into SilcPacketContext that is a reference count
4487           of the context.  One can increase the reference count by calling
4488           silc_packet_context_dup which is now changed to just increase the
4489           reference count instead of duplicating the data.  The reference
4490           count is decresed by calling silc_packet_context_free that will
4491           free the data after the reference count hits zero.
4492
4493           For now on the packet context and everything allocated into it
4494           (including the raw packet from network) must be freed by calling
4495           the new silc_packet_context_free function.  Added also new function
4496           silc_packet_context_alloc that must be used now to allocate the
4497           context.  This also means that if a routine is asynchronous from
4498           silc_[client/server]_packet_parse_type the packet context must
4499           be duplicated by calling silc_packet_context_dup.  Otherwise it
4500           gets free'd after silc_[client/server]_packet_parse_type returns.
4501           Also, one must remember that if packet is duplicated then its 
4502           reference count must be decresed by calling the free function as
4503           many times as it was duplicated.
4504
4505         * Changed SilcBuffer field from protocol contexts to SilcPacketContext
4506           from both client and server.
4507
4508 Mon Nov 20 23:47:03 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4509
4510         * Made joining to a channel working in router environment.
4511
4512         * Cleaned up JOIN command on server side and create function
4513           silc_server_command_join_channel internal routine to make the
4514           joining happen.
4515
4516 Thu Nov  9 21:12:39 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4517
4518         * Changed silc_command_pending list to SilcDList.  Also, added
4519           `ident' field to SilcServerCommandPending structure to identify
4520           the reply and to call correct callback.
4521
4522           Added silc_server_command_pending_check function to replace the
4523           corresnponding macro.  The silc_command_pending list is not
4524           extern anymore.
4525
4526         * Added silc_command_set_ident into lib/silccore/silccommand.[ch]
4527           to set identifier to previously allocated Command Payload.  It
4528           is used to set identifier for command when resending Command
4529           Payload.
4530
4531         * Added silc_command_payload_encode_payload to encode Command
4532           Payload buffer from SilcCommandPayload structure.
4533
4534         * Added silc_argument_payload_encode_payload to encode Argument
4535           payload buffer from SilcArgumentPayload structure.
4536
4537 Wed Nov  8 21:03:28 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4538
4539         * Changed WHOIS command to support router connection on server side.
4540           The whois request is always sent to router unless the server is
4541           standalone server.  After server has received the reply from the
4542           router will it send the reply to the client.
4543
4544         * Added silc_server_packet_broadcast into silcd/server.[ch] to
4545           broadcast received broadcast packet.  The function is used only
4546           by router.  The broadcast packet is always sent to the router's
4547           primary route.
4548
4549         * Added silc_id_render function in lib/silcutil/silcutil.[ch] to
4550           render given ID to printable string, for log files for example.
4551
4552 Tue Nov  7 22:14:19 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4553
4554         * Made basic router to router connections working.  At least they
4555           can now connect to each other but nothing really works the way
4556           they are supposed - yet.
4557
4558         * Added new initiator token to RouterConnection configuration
4559           file in silcd/serverconfig.[ch].  It is used to tell whether we
4560           are the initiator to the remote router or whether we'll expect
4561           the other end to connect.
4562
4563         * Moved registering of listener task to silc_server_init, hence
4564           the server starts listenning as soon as it is run, even if it
4565           does not have connections to other routers.  Let's see how well
4566           this will work.
4567
4568         * Changed default connection retry timeouts for more suitable in
4569           silcd/server.h.
4570
4571         * Removed cipher and such arguments from silc_idlist_add_client
4572           and silc_idlist_add_server prototypes from silcd/idlist.[ch].
4573           Added new function silc_idlist_add_data to add the keys and stuff
4574           to any ID entry.
4575
4576         * Added SilcIDListData structure and added it to SilcClientEntry
4577           and SilcServerEntry as their first field in the structure.  This
4578           way we can explicitly cast the ID entries to the SilcIDListData
4579           structure and get common data for the entries.  In past, we had
4580           to first check what type of connection it is and then cast it to
4581           correct ID entry type.  Now, we can directly cast the opaque
4582           pointer to the SilcIDListData (no matter what ID entry it actually
4583           is) and get the data needed.
4584
4585 Mon Nov  6 21:56:12 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4586
4587         * Wow, found a bug in scheduler.  The scheduler uninitialized itself
4588           in some circumstances even if threre were timeout tasks, though not
4589           IO tasks, but tasks anyway.  Now fixed.
4590
4591         * Defined SilcServerConnection structure to hold connection specific
4592           stuff about directly connected servers and routers.  The definition
4593           is currently in silcd/server_internal.h.  I thought about having
4594           a bit more important role fro this struct but for now it is used
4595           only when connecting to other server (or router actually).
4596
4597         * Added connecting retry support in server when connecting to
4598           router(s).  The retry feature implement exponential backoff
4599           algorithm.  Also, added SilcServerParams structure to hold default
4600           parameters for server.  For now, it include these retry settings
4601           and are hard coded.  After server is moded to be as Silc Server
4602           Library this structure will be more important.
4603
4604 Sun Nov  5 22:28:44 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4605
4606         * Changed client librarys channel->clients table to SilcList and
4607           changed code accordingly.
4608
4609 Thu Nov  2 16:28:01 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4610
4611         * Changed client's channel table to SilcList and changed code 
4612           accordingly.  Also changed SilcChannelClientEntry to include back-
4613           pointer to the channel so that client entry can use that structure
4614           as list as well and we have fast cross-reference to the channel.
4615           This change dramatically decreased the complexity of channel
4616           handling with client entry and vice versa (removed one extra
4617           loop when searching for channel entry from many functions).
4618
4619         * Changed server->sim from table to SilcDList and changed code
4620           accordingly.
4621
4622         * NAMES command can now be used from user interface.  It will show
4623           the user list on the channel, neatly.
4624
4625         * Added realname pointer to SilcClientEntry in lib/silcclient/idlist.h.
4626           Code now saves realname of the user if it becomes available.
4627
4628         * Renamed configure.in to configure.in.pre and made ./prepare
4629           script to automatically add correct version string to
4630           configure.in which it creates from configure.in.pre.
4631
4632 Wed Nov  1 17:21:26 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4633
4634         * NAMES command reply now shows users mode with the nickname when
4635           joining to channel.
4636
4637         * Moved silc_client_ch[u]mode[_char] functions from 
4638           silc/clientutil.[ch] to lib/silcclient/client.[ch].  Though, that
4639           place sucks, they are utility functions and should be in some
4640           other file.
4641
4642         * Fixed some unsigned int's to unsigned short's.  Patch by cras.
4643
4644         * Fixed contrib/getopt*.[ch] to not require config.h.  Patch by
4645           cras.
4646
4647 Tue Oct 31 20:10:37 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4648
4649         * Updated README.
4650
4651         * Added TRQ (efficient deque and list library) into lib/trq.  This is
4652           a very good list library that is currently used in the SILC.  Defined
4653           SilcList API over the library because I didn't like the API very
4654           much.  See lib/trq/silclist.h for the API and examples of how to
4655           use the API.  Fixed various places in the code to use the new
4656           SilcList API. The SilcList is meant for lists that has a structure
4657           already defined as a list.  It is not suitable to add just some
4658           context to the list (in TRQ, the context is the list actually).
4659
4660           So, I defined SilcDList that can be used for the purpose where 
4661           predefined list structure does not exit.  This can be used as
4662           such list.  Now some context just can be added to the SilcDList.
4663           Currently this list is not used in the SILC just yet, though there
4664           are a lot places where this can replace dynamically allocated
4665           tables and I will fix these places, later, to use SilcDList.
4666           See lib/trq/silcdlist.h for SilcDList (they are all inline functions,
4667           and use TRQ internally).
4668
4669           Also fixed some annoying warning messages that the original TRQ
4670           code generated.  Also minor changes to TRQ's Makefile.in.
4671
4672         * Added support for querying by Client ID to both WHOIS and 
4673           IDENTIFY commands into server, as required by the protocol.
4674
4675         * Removed method function pointers from SilcBuffer structure. They
4676           weren't used to anything and just increased the context size for
4677           no good reason.  This change also made silc_buffer_alloc and
4678           silc_buffer_free functions inline functions.
4679
4680         * Disabled command flooding detection support until it's fixed so 
4681           that it accepts commands in but does not execute them more than once
4682           in two seconds.
4683
4684         * Added silc_net_localhost(), to return local hostname, into
4685           lib/silcutil/silcnet.[ch].  Also added client->hostname pointer
4686           that must be initialized before calling silc_client_init.
4687
4688         * Added new function: silc_server_send_notify_on_channels to send
4689           notify messages to all channels client has joined.  It is assured
4690           that the message is sent only once per client.
4691
4692         * Moved silc_log_format (from lib/silcutil/silclog.[ch] into
4693           lib/silcutil/silcutil.[ch] as silc_format function.  The new 
4694           function is generic and is used by server as well, not only by
4695           the logging routines.
4696
4697         * Added new SKE status type: SILC_SKE_STATUS_BAD_VERSION to indicate
4698           the provided version string was not acceptable.  Added new function:
4699           silc_ske_check_version into lib/silcske/silcske.h.  The function
4700           must be implemented by the application (client or server) and it
4701           does not reside in the SKE library.  The function checks the version
4702           string remote end sent.
4703
4704         * Added back pointers (to opaque context and to SilcSocketConnection) 
4705           into SilcPacketContext structure into lib/silccore/silcpacket.h.
4706
4707         * Added silc_packet_context_dup into lib/silccore/silcpacket.[ch] to
4708           duplicate packet context structure.
4709
4710         * Changed `notify' client operation to send same arguments as client
4711           receives from server except for ID's.  ID's are mapped to correct
4712           ID entry and that is returned.  Also, if channel entry is not sent
4713           by server but the notify is for channel the channel entry is sent
4714           to application (otherwise application doesn't know that it is for
4715           channel (library gets it from packet's Destination ID)).
4716
4717         * Added silc_client_remove_from_channels into client library to 
4718           remove a client from all channels it has joined to.  Used when 
4719           received SIGNOFF notify from server.  Added also new function
4720           silc_client_replace_from_channels to replace old ID entry with
4721           new ID entry on all channels.  Used when received NICK_CHANGE
4722           notify from server.
4723
4724         * Fixed ID Cache list handling in silc_idlist_get_client in 
4725           lib/silcclient/idlist.c.  Also, added silc_idlist_get_client_by_id
4726           to get (or query) client by ID.
4727
4728         * Updated TODO list.
4729
4730         * Added connection authentication status message defined by the
4731           protocol: SILC_CONN_AUTH_OK and SILC_CONN_AUTH_FAILED and added the
4732           support for these into the code in client and server side.
4733
4734         * Added generic function silc_client_send_command to send any command
4735           with variable argument list.  Application should use this function
4736           to send commands if the command functions provided by the library
4737           does not suite for the application's user interface needs.
4738
4739         * Added new `failure' client operation.  Application is notified about
4740           received failure packet if client is executing a protocol.  In this
4741           case the protocol's execution has failed.
4742
4743         * Added SKE's end notify to send the SKE_SUCCESS notify message that
4744           is required by the protocol.
4745
4746         * Added SILC_PROTOCOL_STATE_FAILURE to indicate received failure
4747           packet from remote.  SILC_PROTOCOL_STATE_ERROR indicates local
4748           error at our end.
4749
4750         * Added status flag to SilcSKE object to indicate realtime status
4751           of the SKE protocol.
4752
4753         * Application receives now exactly same command reply arguments as
4754           the library receives from server.  However, if ID is received the
4755           corresponding ID entry is returned to the application (eg. Client
4756           ID is mapped to correct SilcClientEntry entry and that is returned).
4757           Changed command_reply client operation due to this change.
4758
4759         * Changed all ID's in commands and in command replys as ID Payloads.
4760           Change affected both client and server side codes.
4761
4762           All ID's sent in SILC network (with execption of ID's in SILC
4763           Packet header) are sent in ID Payload to support variable length
4764           ID's.
4765
4766         * Server now notifies nick changes and notifies all clients on
4767           the channels about the new nickname (about the new Client ID,
4768           actually).
4769
4770         * Implemented CMODE command to change channel modes. Supports all
4771           channel modes defined by the protocol specs except ban and invite
4772           lists. (Also, private channel key mode is supported but support for
4773           setting private channel key in client is missing, thus, this mode
4774           has no effect on client side (except that server requires that the
4775           client uses private channel key and normal channel traffic does not
4776           work anymore)).
4777
4778           Also, invite mode works per se, but INVITE command does not work
4779           yet correctly, so you can set channel as invite only channel but
4780           inviting clients to the channel does not work (it is yet to be
4781           thought what's the best way to do it).
4782
4783         * Added new command SILC_COMMAND_CUMODE to change user mode on the
4784           channel.  Defined user modes: CHANNEL_FOUNDER and CHANNEL_OPERATOR.
4785           Implemented CUMODE command to change user's mode on the channel.
4786           Supports all modes defined by the protocol specs.
4787
4788         * Added NAMES command reply to return users modes on the channel.
4789
4790         * Removed unnecessary and slow ciphers from lib/silccrypt.
4791
4792         * Set SO_KEEPALIVE option to connection sockets by default.
4793
4794         * Added new command reply status: SILC_STATUS_USER_NOT_ON_CHANNEL.
4795
4796         * Added notify types: MOTD, CMODE_CHANGE and CUMODE_CHANGE.  Also,
4797           redefined the Notify Payload into protocol specs.
4798
4799         * Added silc_id_payload_parse_id to get ID directly from raw
4800           ID payload data.
4801
4802 Mon Oct  9 20:57:02 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4803
4804         * Changed SILC_COMMAND_IDENTIFY in protocol specification to 
4805           accept searching by Client ID as well.
4806
4807         * Added support for LEAVE and SIGNOFF notify types in client library.
4808
4809         * Added silc_id_payload_parse_data into lib/silccore/silcpayload.[ch]
4810           to parse ID Payload from raw data.
4811
4812 Sun Oct  8 19:33:08 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4813
4814         * Added flags parameter into silc_ske_assemble_security_properties
4815           function in lib/silcske/silcske.[ch].
4816
4817         * Changed notify client operation to fit better for notify messages
4818           sent by server.  The notify payload received from server is now
4819           passed to the application (after parsing it to SilcNotifyPayload).
4820           It is application's responsibility to retrieve the arguments
4821           from the payload and show the message the way it wants.  The message
4822           sent by server is implementation specific.
4823
4824         * Changed public keys to comply with the protocol specification.
4825           Old public keys are not supported anymore and are not compatible.
4826
4827         * Removed nickname from Channel Payload as the latest draft removed
4828           it.  The client must resolve the nickname from the NAMES command
4829           reply received when it joined the channel.
4830
4831           Also, changed all channel_xxxx_payload to channel_payload_xxxx.
4832
4833 Sat Oct  7 21:55:01 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4834
4835         * Fixed some errors in protocol specification drafts.
4836
4837         * Created lib/silccore/silcnotify.c to implement Notify Payload
4838           encoding and decoding, lib/silccore/silcpayload.[ch] to implement
4839           generic payloads described by protocol specifications.  The file
4840           includes implementations for ID Payload and Argument Payload.
4841
4842         * Changed Command Payload implementation to use the new Argument
4843           Payload.  Changed command_xxxx_payload to command_payload_xxxx
4844           to comply with SILC coding conventions.
4845
4846         * Added suppport for Argument Payload handling in Notify Payload
4847           implementation as protocol requires it.  Added the new support
4848           into server and client lib as well.
4849
4850 Thu Oct  5 21:16:28 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4851
4852         * Added support for multiple nicknames on same channel.  [n] is
4853           added locally to the nickname if there are more than one same
4854           nicknames on the channel.
4855
4856         * Server now sends all nicknames that matched WHOIS request.
4857           Client also shows the list received from server.
4858
4859         * Added TOPIC command to client side.  User can now set and show
4860           current topic on channel.
4861
4862         * Added MOTD command to client and server.  Also, server sends the
4863           motd when client connects to the server.
4864
4865         * Changed version strings to comply ISO 8601.
4866
4867 Wed Oct  4 23:29:06 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4868
4869         * Fixed protocol error handling in client library.  It should now
4870           cope even if the SKE fails for some reason.
4871
4872         * Made new protocol specification drafts for submitting to IETF.
4873
4874         * Implemented TOPIC command to server in silcd/command.c.
4875
4876         * Added two new notify types into lib/silccore/silcnotify.h:
4877           SILC_NOTIFY_TYPE_NICK_CHANGE and SILC_NOTIFY_TYPE_TOPIC_SET to
4878           notify nickname change and topic setting/change on a channel.
4879
4880         * API change of command_reply operation in client library.  The
4881           application gets now the status type received from server as well.
4882
4883 Sat Sep 30 16:57:42 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4884
4885         * Removed the function just added to lib/silcutil/silcschedule.[ch].
4886
4887         * Cras fixed and optimized the packet handling even further and
4888           it should work now.  Minor change to the prototype of function
4889           silc_packet_receive_process in lib/silccore/silcpacket.[ch].
4890
4891 Sat Sep 30 08:48:47 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4892
4893         * Added new function into lib/silcutil/silcschedule.[ch]:
4894           silc_schedule_with_fd to select() a specified fd.  The function
4895           returns after timeout expires or data arrives or goes.  The
4896           function is used by packet routines to wait that all data is
4897           received from network.
4898
4899         * Fixed data reading from network in lib/silccore/silcpacket.c.
4900           The code now assures that all data is read from the fd and then
4901           continues packet processing.  This was a bug fix since the code
4902           used to drop some data in some circumstances.
4903
4904         * Added new function into lib/silcclient/client.[ch]:
4905           silc_client_start_key_exchange to start key exchange after
4906           connection has been established to server.  The code internally
4907           now uses this funtion but its main purpose was to provide it
4908           for applications that perform their own connecting.  After
4909           application has created a connection it merely calls this
4910           function to start the key exchange between client and server.
4911           The library takes care of everything else after that.
4912
4913           Updated also lib/silcclient/README to explain the usage of
4914           this new function.
4915
4916         * Do not send to application information that connection has
4917           been established.  Application gets notified it by connect
4918           operation anyway.
4919
4920 Thu Sep 28 23:40:19 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4921
4922         * Applied cras's patch to add silc_schedule_one function.  The
4923           function runs scheduler once and returns.
4924
4925         * Fixed the scheduler after cras messed it up.  The timeout
4926           handling works now as it's supposed to work.
4927
4928         * Added into lib/silccore/ silcnotify.h to include notify
4929           message types support.  Changed silc_server_send_notify*
4930           functions, in server.[ch], to support those new notify types.
4931           Added the support for the notify types into client library,
4932           as well.  Added new notify client operation into ops.h in
4933           lib/silcclient/.
4934
4935         * Changed silc_server_packet_send_to_channel to send normal
4936           packets instead of just channel message packets.  The function
4937           is now used to send the notify packets to channels.  It is not
4938           used to send channel message packets anymore, as server never
4939           sends them anymore.
4940
4941         * Added explicit casting into lib/silcutil/silcbuffmt.c to few
4942           va_arg()s as it seems to require it nowadays.  I guess, if SILC
4943           is compiled with older va_arg() the new code should work anyway.
4944
4945 Wed Sep 13 18:10:14 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
4946
4947         * Splitted core library.  Core library (lib/silccore) includes
4948           now only SILC protocol specific core (and common) components.
4949           Created new utility library (lib/silcutil) that includes more
4950           generic purpose stuff.  The stuff for util library was taken
4951           from the old core library.  This was minor and easy split.
4952
4953         * Created SILC Client Library (lib/silcclient) that includes
4954           implementation of the SILC client without user interface.  This
4955           was major move from silc/ directory.  The code has been changed
4956           so that it is transparent towards the user interface.  The
4957           silc/ directory includes now the same user interface as before
4958           and it uses the new client library.  Read lib/silcclient/README.
4959           Basicly, the client library performs everything else related
4960           to SILC except user interface handling.  Also, configuration
4961           files are considered to be part of user interface and library
4962           does not handle them.
4963
4964           This change also changed a lot of structures, function naming etc.
4965           Most important change was that SilcClientWindow object was
4966           renamed to SilcClientConnection in the client library.  Created
4967           also new file lib/silcclient/ops.h.  Also added new files
4968           silc/local_command.[ch] and silc/client_ops.[ch].
4969
4970           All these changes were made to make it easier for user interface
4971           designers to create what ever user interface for the SILC client
4972           they want.
4973
4974           It is also expected that the server will be moved to lib
4975           directory as well and SILC Server Library will be created;
4976           sometimes in the future.
4977
4978         * Removed Local commands from lib/silccore/silccommand.h as
4979           they are application specific and new client library does not
4980           handle any of those anymore.
4981
4982         * Several functions moved to lib/silcutil/silcutilc.[ch] from
4983           old client implementation in silc/.
4984
4985         * Added support for callback functions in SILC_LOG_* macros.
4986           Application can now set its own callbacks that will be called
4987           instead of using the default functions that will always print
4988           the debug messages to stderr (or stdout).  Also, debugging can
4989           now be disabled by setting silc_debug to FALSE and re-enabled by
4990           setting it to TRUE.  Note, that logging will still work even
4991           if debugging is disabled.
4992
4993           New functions in lib/silcutil/silclog.[ch]: silc_log_set_callbacks,
4994           silc_log_reset_callbacks, silc_log_set_debug_callbacks and
4995           silc_log_reset_debug_callbacks.
4996
4997         * To enable debugging in silc client one must give now -d
4998           option on command line.
4999
5000         * Changed silc_schedule_init to automatically allocate task queues
5001           if they are not allocated before calling it.
5002
5003 Thu Sep  7 10:49:33 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5004
5005         * Added GMP 3.1 into math library.
5006
5007 Sun Aug 20 21:27:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5008
5009         * Added SILC_PACKET_REMOVE_CHANNEL_USER to remove a client from
5010           a channel in SILC network.  The packet is used by servers and
5011           routers to notify other routers that user has left a channel.
5012           This little feature was missing until now.  Added the feature
5013           to protocol specification as well.
5014
5015           Added functions: silc_server_send_remove_channel_user and
5016           silc_server_remove_channel_user into server.[ch].
5017
5018         * Added SILC_PACKET_REKEY and SILC_PACKET_REKEY_DONE into
5019           lib/silccore/silcpacket.h.  However, they are not implemented
5020           yet.
5021
5022 Sat Aug 19 23:04:16 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5023
5024         * Fixed joining to a channel and sending channel messages
5025           between server and router.  The channel message sending should
5026           now work inside a cell.
5027
5028 Tue Jul 25 20:46:13 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5029
5030         * Fixed the private message sending between server and router.
5031           The private message sending should now work inside a cell.
5032
5033         * Added silc_server_replace_id into server.[ch] to replace
5034           existing ID in the SILC network.
5035
5036         * Added silc_idlist_find_server_by, silc_idlist_replace_client_id
5037           and silc_idlist_replace_server_id into idlist.[ch] in server.
5038
5039 Mon Jul 24 18:33:31 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5040
5041         * Fixed the server to server connections.  Server can again now
5042           connect to router.  Router to router connections probably does
5043           not work just yet.
5044
5045 Thu Jul 20 13:15:01 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5046
5047         * Added dynamic protocol registering support.  Now protocols can
5048           registered and unregistered on the fly.  Patch by cras.
5049
5050 Wed Jul 19 19:08:46 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5051
5052         * Added lib/contrib directory to hold routines that some platforms
5053           don't have but are needed by SILC.
5054
5055         * Added getopt.c, getopt1.c and getopt.h from GNU C library
5056           into lin/contrib to provide getopt() and getopt_long() for
5057           those who don't have it.
5058
5059 Tue Jul 18 20:41:20 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5060
5061         * Added AWAY command to client.  When away message is set and
5062           client receives a private message packet the client automatically
5063           replies to the sender with the away message.
5064
5065         * Fixed a bug in lib/silcmath/mpbin.c: silc_mp_mp2bin.  This
5066           bug seemed to be the cause of recent problems when compiling
5067           with gcc-2.95.
5068
5069         * Added version detection support to SKE protocol specification
5070           and added the new changes to the SKE implementation as well.
5071           There were other minor changes in the SKE protocol as well.
5072
5073           Many changes in lib/silcske/silcske.[ch] and in
5074           lib/silcske/payload.[ch].
5075
5076         * Added ^U functionality, clear input line.  Patch from cras.
5077
5078 Mon Jul 17 23:33:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5079
5080         * Mainly small bugfixes on core library.  Fixed some debugging
5081           logging and buffer overflow in silclog.c.
5082
5083         * Updated config.sub and config.guess on the distribution tree.
5084
5085 Sat Jul 15 15:33:48 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5086
5087         * Added command lagging support in server. Client may execute
5088           commands now only once in two seconds.
5089
5090 Thu Jul 13 22:10:21 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5091
5092         * Optimized packet reception. MAC computation and checking is now
5093           also more optimized.  A lot previously duplicated code is now
5094           used as generic by both client and server.
5095
5096         * Fixed key pair generation in clientutil.c
5097
5098 Wed Jul 12 18:28:07 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5099
5100         * Added into lib/silccore/silcbufutil.[ch] new function;
5101           silc_buffer_realloc.
5102
5103         * Moved generic packet sending/encryption functions to 
5104           lib/silccore/silcpacket.[ch] from client and server.  Some
5105           rewriting of the functions.
5106
5107         * Moved all generic packet reception/decryption functions to
5108           lib/silccore/silcpacket.[ch] from client and server.  The
5109           packet processing is now much cleaner in both client and server.
5110           These were major changes in both client and server.
5111
5112         * Created many common functions in server to do packet sending.
5113           Previously code were duplicated a lot, this has been removed
5114           with these changes.
5115
5116 Tue Jul 11 20:27:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5117
5118         * Rewrote major parts of the ID cache system.  Don't know 
5119           whether it is better now or not but at least the API is more
5120           cleaner now.
5121
5122         * Major rewrite on ID cache stuff on client because of the ID
5123           cache API changes.  Added idlist.c to client.
5124
5125         * Also major rewrite on ID cache stuff on server as well.
5126           Major rewrite of idlist.[ch]. SilcXXXList's are now named
5127           SilcXXXEntry's.  We won't keep anymore idlist specific pointers
5128           in hand, instead they are all put into the ID cache system now.
5129           All server_idlist_* routines uses ID cache now instead of
5130           traversing its own lists (those lists does not exist anymore).
5131           SilcIDList though still exists.  Also, SilcXXXEntry's are
5132           now pointers.
5133
5134 Sun Jul  9 15:19:24 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5135
5136         * Finally made the SKE implementation compliant to the protocol
5137           specification.  All mp integers are now binary encoded as
5138           opposed being HEX encoded.
5139
5140         * Added lib/silcmath/mpbin.[ch].  Encoding mp intergers to and
5141           from binary data.
5142
5143         * Added into lib/silccore/silcutil.[ch] PEM encoding/decoding
5144           functions: silc_[encode/decode]_pem.  Also added function
5145           silc_encode_pem_file to PEM encode with newlines ('\n') for
5146           saving into a file.
5147
5148         * SILC public keys are now encoded either PEM or binary.  Same
5149           option is for private keys as well.  By default private keys
5150           are binary encoded and public keys PEM encoded.  Silly HEX
5151           encoding were removed.
5152
5153         * Added into lib/silccrypt/silchash.[ch] silc_hash_fingerprint
5154           function to create fingerprints.
5155
5156         * Fixed a bug in SHA1; does not change the original data anymore.
5157
5158         * Partly implemented INFO command on client and server side.
5159           Fixed CLEAR command.  Changes to SERVER command; show current
5160           server(s) when giving command without arguments.  Added
5161           VERSION command to client.
5162
5163         * Added check to server that unregistered connections cannot
5164           execute commands (unless it is specificly allowed).
5165
5166 Thu Jul  6 18:12:24 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5167
5168         * Fixed screen refresh.
5169
5170         * Fixed channel joining bug from client.  On some circumstances
5171           client tried to join to a channel it had already joined.
5172
5173         * Added public key verification process into client's protocol.c.
5174           The client now verifies the public key from user and saves
5175           it into ~./silc/serverkeys/ directory. 
5176
5177           Added into: clientutil.[ch]: silc_client_verify_server_key.
5178
5179         * Changed SKE protocol's silc_ske_initiator_finish function
5180           to accept callback function that verifies the received public
5181           key.  Removed old silc_ske_verify_public_key function.
5182
5183 Wed Jul  5 19:19:02 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5184
5185         * Added into silcpkcs[ch]: silc_pkcs_public_key[_data]_set and
5186           silc_pkcs_private_key[_data]_set.
5187
5188         * Made the password and public authentication more cleaner in
5189           server's protocol.c.
5190
5191         * Removed historic and obsolete protocol `channel_auth' from
5192           both client and server.
5193
5194         * Removed wrong way of sending command status messages from
5195           server to client in server's command.c.  The old way violated
5196           protocol specification.  
5197
5198           Changes to silccore/silccommand.[ch]: removed
5199           silc_command_encode_status_payload -> not needed anymore,
5200           changed silc_command_encode_payload_va to accept extra
5201           argument on variable argument list.  The argument type must
5202           now be provided to the function.  Also, added new function:
5203           silc_command_encode_reply_payload_va which is same as
5204           normal command_encode_payload_va except command status type
5205           is provided as extra argument.
5206
5207 Tue Jul  4 18:26:39 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5208
5209         * Added ~./silc directory handling.  The directory includes the
5210           public and private keys for the client.
5211
5212           Added silc_client_check_silc_dir, silc_client_create_identifier
5213           and silc_client_load_keys.
5214
5215         * Implemented SILC protocol compliant public key.  Added public
5216           and private key saving to and loading from files.
5217
5218           Added into silcpkcs.[ch]: silc_pkcs_encode_identifier,
5219           silc_pkcs_public_key_encode[_data], silc_pkcs_public_key_decode,
5220           silc_pkcs_private_key_encode[_data], silc_pkcs_private_key_decode,
5221           silc_pkcs_public_key_alloc, silc_pkcs_public_key_free,
5222           silc_pkcs_private_key_alloc and silc_pkcs_private_key_free.
5223
5224           Implemented: silc_pkcs_save_[public/private]_key[_data] and
5225           silc_pkcs_load_[public/private]_key.
5226
5227 Mon Jul  3 18:51:27 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5228
5229         * Added silc_server_get_route (route.[ch]) to get connection
5230           data for the fastest route for given ID.
5231
5232         * Implemented INVITE command on client and server.  The command
5233           were re-defined in the SILC Protocol Specification and the
5234           implementation now complies with the specification.
5235
5236         * Implemented PING command on client and server.
5237
5238         * Implemented NAMES command on client and server.  The server side
5239           supports currently only normal server not router server yet.
5240           Some changes to NAMES definition in SILC protocol specification.
5241
5242 Sun Jul  2 18:23:01 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5243
5244         * Implemented LEAVE command on client and server.
5245
5246         * Previously deprecated SILC_PACKET_FORWARDED flag is now in use 
5247           again.  This change was made to the protocol as well.  Server
5248           should not violate the protocol specification anymore.
5249
5250 Fri Jun 30 14:03:26 EEST 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
5251
5252         * Added SOCKS4 and SOCKS5 support to SILC client.  SOCKS5
5253           was tested.  SOCKS4 was not but should work anyway.