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