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