Fixed WATCH notify handling.
[silc.git] / TODO
1 TODO for 1.1 And Beyond
2 =======================
3
4 NOTE: Any item that doesn't have (***DONE) in it, isn't done yet.  The
5 (***TESTING NEEDED) means that the item has been done but not yet properly
6 tested.
7
8
9 SILC Client     ****PARTLY DONE****
10 ===========
11
12  o Porting to new Toolkit API and new Client Library API (***TESTING NEEDED)
13
14  o Improve help files, especially /cmode, /cumode and /key.
15
16
17 lib/silcclient, The Client Library      ***PARTLY DONE****
18 ==================================
19
20  o silcclient.h clean up and API rewrites.
21
22  o silcclient_entry.h finishing, all entry relates APIs to this header.
23
24  o SilcChannelEntry, SilcServerEntry, SilcChannelUser, allocating,
25    freeing, finding, etc. rewrite.  Also making them reference counted for
26    multi threads use. (***DONE)
27
28  o Rewrite silc_client_get_clients_by_channel.
29
30  o Rewrite client side WHOIS command (for whois -details).
31
32  o Finish all the missing SILC packet processings, rewrites. (***DONE)
33
34  o The client_notify.c rewrite. (***TESTING NEEDED)
35
36  o Resuming to client_register.c (remove client_resume.c)
37    (***TESTING NEEDED)
38
39  o Rekey rewrite. (***DONE)
40
41  o Remove protocol.[ch]. (***DONE)
42
43  o File transfer rewrite. (***DONE)
44
45  o File transfer API documentation.
46
47  o Connection auth request. (***DONE)
48
49  o Password auth test, public key auth test.
50
51  o Starting key exchange directly, rewrite. (***DONE)
52
53  o Channel messages, channel private keys, channel entires, channel
54    search, etc. rewrite. (***TESTING NEEDED */
55
56  o For many APIs leave the hash context allocations to the caller instead
57    of using client->sha1hash and client->md5hash, or some kind of thread
58    safe (no locking) concept.
59
60  o Key agreement rewrite. (***TESTING NEEDED)
61
62  o Connecting to remote client (***DONE)
63
64  o peer-to-peer private messages
65
66  o Private message waiting API (in threads)
67
68  o client_attrs.c, attributes rewrite. (***TESTING NEEDED)
69
70  o No SilcBuffer lists back to application in command_reply operations.
71    Convert them all to real lists and/or structures for easier use.
72    (***DONE)
73
74  o Nickname formatting rewrite. (***TESTING NEEDED)
75
76  o UDP connections. (***TESTING NEEDED)
77
78  o Message ACKing.
79
80  o in /cmode and /cumode with +r, maybe the public key and private key
81    could be just some "string", which would then match to "string.pub" and
82    "string.prv".
83
84  o All packet waiting timeout tests and error condition tests.
85
86
87 lib/silcsftp                    ****DONE****
88 ============
89
90  o Porting to use the new util library. (***DONE)
91
92
93 lib/silccore/silcpacket.[ch]    ****PARTLY DONE****
94 ============================
95
96  o Implement silc_packet_engine_stop and silc_packet_stream_destroy.
97
98  o Implement ACK packet and packet payload.
99
100  o SilcPacketEngine. (***DONE)
101
102  o New SILC Packet API. (***DONE)
103
104
105 lib/silccore/silcpacket.[ch]    ****PARTLY DONE****
106 ============================
107
108  o IV Included flag support, UDP transport support (***TESTING NEEDED)
109
110  o SILC_PACKET_FLAG_ACK support.
111
112
113 lib/silccore/silcid.[ch]        ****DONE****
114 ========================
115
116  o Add silc_id_str2id to accept the destination buffer as argument
117    and thus not require any memory allocation.  Same will happen
118    with silc_id_payload_* functions. (***DONE)
119
120  o silc_id_str2id, silc_id2str to non-allocating routines. (***DONE)
121
122
123 lib/silccore
124 ============
125
126  o All payload encoding routines should take SilcStack as argument.
127
128  o All payload test routines into lib/silccore/tests/.
129
130
131 lib/silcskr
132 ===========
133
134  o Removing key from the repository is not possible currently.  It should
135    be.
136
137
138 lib/silcske/silcske.[ch]        ****DONE****
139 ========================
140
141  o IV Included flag support in SKE (***DONE)
142
143  o UDP transport changes; retransmission support by using exponential
144    backoff algorithm. (***DONE)
145
146  o SilcConnAuth header file documentation. (***DONE)
147
148
149 lib/silccrypt                   ****PARTLY DONE****
150 =============
151
152  o Implement SILC Public Key Version 2 handling in sign/verify.  Implement
153    Version (V) identifier (***DONE)
154
155  o Add fingerprint to SilcSILCPublicKey and retrieval to silcpk.h.
156
157  o Implement PKCS #1 sign/verify with hash OID. (***TESTING NEEDED)
158
159  o Implement the defined SilcDH API.  The definition is in
160    lib/silccrypt/silcdh.h.
161
162  o SSH2 public keys support, allowing the use of SSH2 public keys in
163    SILC.
164
165  o OpenPGP certificate support, allowing the use of PGP public keys
166    in SILC.
167
168  o SILC PKCS (silcpkcs.h) reorganizing when other PK supports added.
169    Move the SILC Public Key routines away from the crypto library into
170    the core library (silccore).  silc_pkcs_public/private_key_* routines
171    to silc_public/private_key_* routines.  The silc_public_key_* routines
172    should also automatically handle SILC Public Keys, and other keys
173    and certificates as well.  Add fe. silcpk.h into silccore.  It should
174    also include the Public Key Payload encoding and decoding routines.
175    (***DONE)
176
177  o Add DSS support.
178
179  o Assembler AES (***DONE)
180
181  o ECDSA and ECDH.
182
183
184 lib/silcutil                    ****PARTLY DONE****
185 ============
186
187  o The regex code from lib/contrib might compile fine on all platforms.
188    No need to make it silcutil/unix/ specific.  Add them to generic
189    silcutil.c.
190
191  o Fix universal time decoding (doesn't accept all forms) in silctime.c.
192
193  o silc_stringprep to non-allocating version.
194
195  o Compression routines are missing.  The protocol supports packet
196    compression thus it must be implemented.  SILC Zip API must be
197    defined.
198
199  o Add builtin SOCKS and HTTP Proxy support, well the SOCKS at least.
200    SILC currently supports SOCKS4 and SOCKS5 but it needs to be compiled
201    in separately.
202
203  o bool -> SilcBool (***DONE)
204
205  o Silc FD Stream to WIN32 (lib/silcutil/silcfdstream.h)
206
207 lib/silcutil/silcbuffer.h       ****DONE****
208 =========================
209
210  o Remove the `truelen' field from SilcBuffer as it is entirely
211    redundant since we can get the true length of the buffer by
212    doing buffer->end - buffer->header.  Add silc_buffer_truelen
213    macro instead.  Consider also removing `len' field too since
214    it effectively is buffer->tail - buffer->data, and adding
215    silc_buffer_len macro can do the same.  These would save
216    totally 8 bytes of memory per buffer. (***DONE)
217
218
219 lib/silcutil/silcbuffmt.[ch]    ****DONE****
220 ============================
221
222  o SilcStack aware silc_buffer_unformat (***DONE)
223
224  o SilcStack aware silc_buffer_format (***DONE)
225
226  o silc_buffer_format reallocates automatically (***DONE)
227
228  o SILC_STR_OFFSET (***DONE)
229
230
231 lib/silcutil/silcstack.[ch]     ****DONE****
232 ===========================
233
234  o Data stack implementation (***DONE)
235
236
237 lib/silcutil/silcstream.[ch]    ****DONE****
238 ============================
239
240  o Add abstract SilcStream. (***DONE)
241
242
243 lib/silcutil/silcsocketstream.[ch]      ****PARTY DONE****
244 ==================================
245
246  o Add SilcSocketStream (***DONE)
247
248  o Add SilcSocketStream for WIN32
249
250  o Handle EOS sending to upper layer properly
251
252  o Test QoS after the changes made to socket stream
253
254
255 lib/silcutil/silcschedule*.[ch]         ****PARTLY DONE****
256 ===============================
257
258  o Scheduler can be optimized for FD tasks by changing the fd_queue
259    to SilcHashTable instead of using linked list.  We need to do
260    one-to-one mapping of FD to task and hash table is more efficient
261    for this usage.
262
263    Also redefine the silc_select to perhaps return a separate
264    structure of the events that actually occurred, instead of
265    returning the events in the fd_list which is then traversed
266    in the generic code to find the changed events.  This can be
267    made faster by having own struct which includes only the
268    changed events, thus the tarversing is faster since the whole
269    fd_list is not traversed anymore (it is still traversed in the
270    silc_select but at least it removes one extra tarversing later
271    for the same list).
272
273    Other task queues should be changed to use SilcList.  (***DONE)
274
275  o Add SILC scheduler's internal routines into a table of implementation
276    function pointers, that the generic code then takes as extern from
277    implementation.  These are the silc_schedule_internal_* routines.
278    (***DONE)
279
280  o Change SILC_TASK_CALLBACK to non-static, and remove the macro
281    SILC_TASK_CALLBACK_GLOBAL. (***DONE)
282
283  o SILC Schedule API changes to WIN32.
284
285
286 lib/silcutil/silcasync.[ch]     ****DONE****
287 ===========================
288
289  o Add SilcAsyncOperation to utility library.  Any function that takes
290    callback as an argument must/should return SilcAsyncOperation.
291    (***DONE)
292
293
294 lib/silcutil/silctime.[ch]      ****DONE****
295 ===========================
296
297  o SilcTime. (***DONE)
298
299  o system time, universal, generalized. (***DONE)
300
301
302 lib/silcutil/silcfsm.[ch]       ****DONE****
303 =========================
304
305  o SILC Finite State Machine API.  Replaces SILC Protocol API (***DONE)
306
307
308 lib/silcutil/silcnet*, lib/silcutil/*/silc*net*         ****PARTLY DONE****
309 ===============================================
310
311  o Add UDP interface (***DONE)
312
313  o Add UDP interface for WIN32
314
315  o New network interfaces (***DONE)
316
317
318 lib/silcmath
319 ============
320
321  o Import TFM.  Talk to Tom to add the missing functions.  Use TFM in
322    client and client library, but TMA in server, due to the significantly
323    increased memory consumption with TFM, and the rare need for public
324    key operations in server.
325
326  o Change LTM and TFM function names when importing to SILC tree to avoid
327    rare linking problems on system that has same named symbols already in
328    the system.
329
330  o The SILC MP API function must start returning indication of success
331    and failure of the operation.
332
333  o Do SilcStack support for silc_mp_init, silc_mp_init_size and other
334    any other MP function (including utility ones) that may allocate
335    memory.
336
337  o Test on x86_64.
338
339  o All utility functions should be made non-allocating ones.
340
341
342 lib/silcutil/symbian/           ****PARTLY DONE****
343 =====================
344
345   o lib/silcutil/symbian routines missing or not completed.
346     (****TESTING NEEDED)
347
348   o Something needs to be thought to the logging globals as well,
349     like silc_debug etc.  They won't work on EPOC.  Perhaps logging
350     and debugging is to be disabled on EPOC.
351
352
353 lib/silcasn1                    ****PARTLY DONE****
354 ============
355
356  o ASN.1 library (***DONE)
357
358  o Header documentation missing. (***DONE)
359
360  o Some string encodings missing (copy/paste matter). (***DONE)
361
362  o Negative integer encoding
363
364
365 lib/silcpkix
366 ============
367
368  o PKIX implementation
369
370
371 lib/silcserver
372 ==============
373
374  o (Re)write commands/command replys.
375
376  o (Re)write notify handling.
377
378  o The SERVER_SIGNOFF notify handing is not optimal, because it'll
379    cause sending of multiple SIGNOFF notify's instead of the one
380    SERVER_SIGNOFF notify that the server received.  This should be
381    optimized so that the only SERVER_SIGNOFF is sent and not
382    SIGNOFF of notify at all (using SIGNOFF takes the idea about
383    SERVER_SIGNOFF away entirely).
384
385  o Another SERVER_SIGNOFF opt/bugfix:  Currently the signoff is
386    sent to a client if it is on same channel as the client that
387    signoffed.  However, the entire SERVER_SIGNOFF list is sent to
388    the client, ie. it may receive clients that was not on the
389    same channel.  This is actually against the specs.  It must be
390    done per channel.  It shouldn't receive the whole list just
391    because one client happened to be on same channel.
392
393  o MAYBE: The SilcChannelClientEntry can be:
394         SilcUInt32 address;
395         SilcUInt32 mode;
396
397   where address is SilcClientEntry address XOR SilcChannelEntry.
398   You can get SilcClientEntry by doing client = chl->address XOR channel,
399   and SilcChannelEntry by doing channel = chl->address XOR client.
400   As long as the other pointer is always available when accessing the
401   structure this can be done.
402
403  o Add reference counters to all Silc*Entry structures
404
405  o SERVICEs support (plugin, SIM)
406
407  o If client's public key is saved in the server (and doing public key
408    authentication) then the hostname and the username information could
409    be taken from the public key.  Should be a configuration option!
410
411  o Add a timeout to handling incoming JOIN commands.  It should be
412    enforced that JOIN command is executed only once in a second or two
413    seconds.  Now it is possible to accept n incoming JOIN commands
414    and process them without any timeouts.  THis must be employed because
415    each JOIN command will create and distribute the new channel key
416    to everybody on the channel (Fix this to 0.9.x).
417
418  o Related to above.  If multiple JOINs are received in sequence perhaps
419    new key should be created only once, if the JOINs are handeled at the same
420    time.  Now we create multiple keys and never end up using them because
421    many JOINs are processed at the same time in sequence.  Only the last
422    key ends up being used.
423
424  o The CMODE cipher & hmac change problem (#101).