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