updates.
[silc.git] / TODO
1 TODO for 1.1
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 apps/silcd, The SILC Server     ****PARTLY DONE****
10 ===========================
11
12  o Port all code to use SILC Toolkit 1.1 APIs.
13
14  o Fix/test GETKEY.
15
16  o Fix/test MOTD.
17
18  o Remove protocol.[ch].  (***DONE)
19
20  o Rewrite connecting accepting. (***TESTING NEEDED)
21
22  o Rewrite async connecting. (***TESTING NEEDED)
23
24  o Connecting from SILC router to SILC server.
25
26  o Rewrite rehash, HUP.
27
28  o Heartbeat-keepalive.
29
30  o Test backup router resuming protocol.
31
32  o Check all packet receive routines that they call silc_packet_free.
33
34  o Add Web statistics module using lib/silchttp.  Give out server
35    statistics. (***DONE)
36
37
38 SILC Client     ****PARTLY DONE****
39 ===========
40
41  o Porting to new Toolkit API and new Client Library API (***DONE)
42
43  o Improve help files, especially /cmode, /cumode and /key.
44
45  o /listkeys crash when silc_pkcs_public_key_encode returns NULL.
46
47  o /key channel * list doesn't return aything when key is set and user
48    got "Private key set to channel xxx".
49
50
51 lib/silcclient, The Client Library      ***PARTLY DONE****
52 ==================================
53
54  o silcclient.h clean up and API rewrites. (***DONE)
55
56  o silcclient_entry.h finishing, all entry relates APIs to this header.
57    (***DONE)
58
59  o SilcChannelEntry, SilcServerEntry, SilcChannelUser, allocating,
60    freeing, finding, etc. rewrite.  Also making them reference counted for
61    multi threads use. (***DONE)
62
63  o Rewrite silc_client_get_clients_by_channel.
64
65  o Rewrite client side WHOIS command (for whois -details). (***DONE)
66
67  o Finish all the missing SILC packet processings, rewrites. (***DONE)
68
69  o The client_notify.c rewrite. (***DONE)
70
71  o Resuming to client_register.c (remove client_resume.c) (***DONE)
72
73  o Rekey rewrite. (***DONE)
74
75  o Remove protocol.[ch]. (***DONE)
76
77  o File transfer rewrite. (***DONE)
78
79  o File transfer API documentation. (***DONE)
80
81  o Connection auth request. (***DONE)
82
83  o Password auth test, public key auth test. (***TESTING NEEDED)
84
85  o Starting key exchange directly, rewrite. (***DONE)
86
87  o Channel messages, channel private keys, channel entires, channel
88    search, etc. rewrite. (***TESTING NEEDED)
89
90  o For many APIs leave the hash context allocations to the caller instead
91    of using client->sha1hash and client->md5hash, or some kind of thread
92    safe (no locking) concept. (***DONE)
93
94  o Key agreement rewrite. (***TESTING NEEDED)
95
96  o Connecting to remote client (***DONE)
97
98  o Private message waiting API (in threads) (***TESING NEEDED)
99
100  o client_attrs.c, attributes rewrite. (***TESTING NEEDED)
101
102  o No SilcBuffer lists back to application in command_reply operations.
103    Convert them all to real lists and/or structures for easier use.
104    (***DONE)
105
106  o Nickname formatting rewrite. (***TESTING NEEDED)
107
108  o UDP connections. (***TESTING NEEDED)
109
110
111 lib/silcsftp                    ****DONE****
112 ============
113
114  o Porting to use the new util library. (***DONE)
115
116
117 lib/silccore/silcpacket.[ch]    ****PARTLY DONE****
118 ============================
119
120  o SilcPacketEngine. (***DONE)
121
122  o New SILC Packet API. (***DONE)
123
124  o Implement silc_packet_engine_stop and silc_packet_stream_destroy. (***DONE)
125
126  o IV Included flag support, UDP transport support (***TESTING NEEDED)
127
128
129 lib/silccore/silcid.[ch]        ****DONE****
130 ========================
131
132  o Add silc_id_str2id to accept the destination buffer as argument
133    and thus not require any memory allocation.  Same will happen
134    with silc_id_payload_* functions. (***DONE)
135
136  o silc_id_str2id, silc_id2str to non-allocating routines. (***DONE)
137
138
139 lib/silcskr     ****DONE****
140 ===========
141
142  o Removing key from the repository is not possible currently.  It should
143    be. (***DONE)
144
145
146 lib/silcske/silcske.[ch]        ***PARTLY DONE****
147 ========================
148
149  o Responder rekey (***TESTING NEEDED)
150
151  o IV Included flag support in SKE (***DONE)
152
153  o UDP transport changes; retransmission support by using exponential
154    backoff algorithm. (***DONE)
155
156  o SilcConnAuth header file documentation. (***DONE)
157
158
159 lib/silccrypt                   ****PARTLY DONE****
160 =============
161
162  o Implement PKCS #1 sign/verify with hash OID. (***TESTING NEEDED)
163
164  o Implement SILC Public Key Version 2 handling in sign/verify.  Implement
165    Version (V) identifier (***DONE)
166
167  o SILC PKCS (silcpkcs.h) reorganizing when other PK supports added.
168    Move the SILC Public Key routines away from the crypto library into
169    the core library (silccore).  silc_pkcs_public/private_key_* routines
170    to silc_public/private_key_* routines.  The silc_public_key_* routines
171    should also automatically handle SILC Public Keys, and other keys
172    and certificates as well.  Add fe. silcpk.h into silccore.  It should
173    also include the Public Key Payload encoding and decoding routines.
174    (***DONE)
175
176  o Assembler AES (***DONE)
177
178
179 lib/silcutil                    ****PARTLY DONE****
180 ============
181
182  o The regex code from lib/contrib might compile fine on all platforms.
183    No need to make it silcutil/unix/ specific.  Add them to generic
184    silcutil.c. (***TESTNG NEEDED)
185
186  o Silc FD Stream to WIN32 (lib/silcutil/silcfdstream.h) (***TESTING NEEDED)
187
188  o bool -> SilcBool (***DONE)
189
190
191 lib/silcutil/silcbuffer.h       ****DONE****
192 =========================
193
194  o Remove the `truelen' field from SilcBuffer as it is entirely
195    redundant since we can get the true length of the buffer by
196    doing buffer->end - buffer->header.  Add silc_buffer_truelen
197    macro instead.  Consider also removing `len' field too since
198    it effectively is buffer->tail - buffer->data, and adding
199    silc_buffer_len macro can do the same.  These would save
200    totally 8 bytes of memory per buffer. (***DONE)
201
202
203 lib/silcutil/silcbuffmt.[ch]    ****DONE****
204 ============================
205
206  o SilcStack aware silc_buffer_unformat (***DONE)
207
208  o SilcStack aware silc_buffer_format (***DONE)
209
210  o silc_buffer_format reallocates automatically (***DONE)
211
212  o SILC_STR_OFFSET (***DONE)
213
214
215 lib/silcutil/silcstack.[ch]     ****DONE****
216 ===========================
217
218  o Data stack implementation (***DONE)
219
220
221 lib/silcutil/silcstream.[ch]    ****DONE****
222 ============================
223
224  o Add abstract SilcStream. (***DONE)
225
226
227 lib/silcutil/silcsocketstream.[ch]      ****PARTY DONE****
228 ==================================
229
230  o Add SilcSocketStream (***DONE)
231
232  o Add SilcSocketStream for WIN32 (***TESTING NEEDED)
233
234  o Test QoS after the changes made to socket stream
235
236
237 lib/silcutil/silcschedule*.[ch]         ****PARTLY DONE****
238 ===============================
239
240  o Scheduler can be optimized for FD tasks by changing the fd_queue
241    to SilcHashTable instead of using linked list.  We need to do
242    one-to-one mapping of FD to task and hash table is more efficient
243    for this usage.
244
245    Also redefine the silc_select to perhaps return a separate
246    structure of the events that actually occurred, instead of
247    returning the events in the fd_list which is then traversed
248    in the generic code to find the changed events.  This can be
249    made faster by having own struct which includes only the
250    changed events, thus the tarversing is faster since the whole
251    fd_list is not traversed anymore (it is still traversed in the
252    silc_select but at least it removes one extra tarversing later
253    for the same list).
254
255    Other task queues should be changed to use SilcList.  (***DONE)
256
257  o Add SILC scheduler's internal routines into a table of implementation
258    function pointers, that the generic code then takes as extern from
259    implementation.  These are the silc_schedule_internal_* routines.
260    (***DONE)
261
262  o Change SILC_TASK_CALLBACK to non-static, and remove the macro
263    SILC_TASK_CALLBACK_GLOBAL. (***DONE)
264
265  o SILC Schedule API changes to WIN32. (***TESTING NEEDED)
266
267
268 lib/silcutil/silcasync.[ch]     ****DONE****
269 ===========================
270
271  o Add SilcAsyncOperation to utility library.  Any function that takes
272    callback as an argument must/should return SilcAsyncOperation.
273    (***DONE)
274
275
276 lib/silcutil/silctime.[ch]      ****DONE****
277 ===========================
278
279  o SilcTime. (***DONE)
280
281  o system time, universal, generalized. (***DONE)
282
283
284 lib/silcutil/silcfsm.[ch]       ****DONE****
285 =========================
286
287  o SILC Finite State Machine API.  Replaces SILC Protocol API (***DONE)
288
289
290 lib/silcutil/silcnet*, lib/silcutil/*/silc*net*         ****PARTLY DONE****
291 ===============================================
292
293  o Add UDP interface (***DONE)
294
295  o Add UDP interface for WIN32 (***TESTING NEEDED)
296
297  o New network interfaces (***DONE)
298
299
300 lib/silcmath                    ****PARTLY DONE****
301 ============
302
303  o Test on x86_64.
304
305  o Change LTM and TFM function names when importing to SILC tree to avoid
306    rare linking problems on system that has same named symbols already in
307    the system. (***DONE)
308
309
310 lib/silcutil/symbian/           ****PARTLY DONE****
311 =====================
312
313   o lib/silcutil/symbian routines missing or not completed.
314     (****TESTING NEEDED)
315
316   o Something needs to be thought to the logging globals as well,
317     like silc_debug etc.  They won't work on EPOC.  Perhaps logging
318     and debugging is to be disabled on EPOC.
319
320
321 lib/silcasn1                    ****DONE****
322 ============
323
324  o ASN.1 library (***DONE)
325
326  o Header documentation missing. (***DONE)
327
328  o Some string encodings missing (copy/paste matter). (***DONE)