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