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