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