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