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