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