(no commit message)
[oweals/gnunet.git] / TODO
1 0.9.0pre1:
2 * FS: [CG]
3   - Migration test error scenarios:
4     1) peers fail to connect (very, very rare) => maybe explained with bandwidth bug discovered with transport test
5     2) 1 out of 3 bits of content fails to migrate (destination peer never sees it);
6        suspicion: core packs two migration messages into one, and someone throws away the 2nd half!
7        => likely reproduced with new core api reliability test (which now passes but showed bugs)
8        => might be fixed now with util's server-nc and core's 'short-fuse' bugs begin fixed
9     3) client fails to connect to FS service for download (requests never make it to FS)
10        FS was running initially, but is shut down around the time the source peer (!)
11        is supposed to die; the OTHER FS service (the one that was supposed to die) is still up!
12   - TTL/priority calculations
13   - hot-path routing, load considerations
14   - statistics
15   - active reply route caching design & implementation of service; gap extension!
16 * TRANSPORT:
17   - HTTP backend [MW]
18 * DV: [Nate]
19   - write DV API (need to move declarations from dv_api.c to gnunet_dv_service.h!)
20   - implement DV service 
21   - implement DV library (looks done)
22   - implement DV transport plugin
23   - implement testcases 
24   - implement performance tests (needs tbench)
25 * TOPOLOGY:
26   - needs more testing (especially F2F topology) & transport blacklisting
27 * UTIL:
28   - only connect() sockets that are ready (select()) [Nils]
29     [On W32, we need to select after calling socket before doing connect etc.]
30   - add support for UNIX domain sockets [CG]
31 * GNUNET-GTK:
32   - write main loop: 
33     + use g_main_context_set_poll_func to integrate GTK with GNUnet Scheduler!? (YUCK!)
34     + OR: add scheduler API to enable integration with GTK main loop instead of doing our own select
35     + use g_main_context_pending, g_main_context_query / g_main_context_check / g_main_context_dispatch
36        and NEVER g_main_loop_run (can this be done? might be the clean way to do this! But how
37        to integrate this with "gtk_main"?  Docu says:
38        "It's OK to use the GLib main loop directly instead of gtk_main(), though it involves 
39         slightly more typing. See GMainLoop in the GLib documentation."
40        => so maybe it "just works"?
41   - implement glade loader
42   - implement main quit handler (file-quit and main window close) 
43   - implement about menu handler
44   - add license to about dialog  
45   - add authors to about dialog
46   - add translators to about dialog 
47   - add documenters to about dialog
48   - add artists to about dialog
49   - test logo in about dialog
50   - test logo in main dialog (window icon)
51   - implement search dialog opening and actual search
52   - NS list in search dialog should use colors to offset our own namespaces from the others
53   - double-clicking on NS list in search dialog should move 'root' to keyword line
54   - double-clicking on search result in master list should open save-as dialog for CHK/LOC URIs
55   - right-clicking on search result should open menu that allows:
56     + viewing full meta data 
57     + starting download
58     + starting recursive download 
59     + aborting active download
60   - right-clicking on NS list in search dialog should open menu that allows 
61     + viewing full meta data 
62     + deletion of namespace info
63   - master should add tab to main notebook with label with 'new' icon that allows starting of a search (same as via menu)
64   - tabs in notebook should contain:
65     + "X" to allow closing of tabs
66     + "play" to allow resuming of search OR "pause" to allow pausing of search
67   - implement open directory dialog
68   - implement new-pseudonym dialog
69   - implement publish dialog
70     + add (single file)
71     + edit (meta data add, meta data del, meta data type population, keyword add (button, activate entry line), 
72             keyword remove, anonymity level, priority, index/insert, normalize keywords, 
73             previews, preview widget for file chooser!?)
74     + mark 'insert file' button inconsistent for directories
75     + up
76     + down
77     + left
78     + right
79     + delete
80     + open (import directory structure)
81     + cancel
82     + execute (publish)
83   - pick appropriate sort-by columns for various tree view columns
84   - anonymity spin buttons should turn red on zero:
85     + search
86     + publish
87     + download
88
89 0.9.0pre2:
90 * CORE:
91   - transport-level disconnect (i.e. TCP) does not cause core-level
92     disconnect in a timely fashion (waits for connection timeout);
93     need to figure a way to make it near-instant in those cases 
94     (i.e. rapid reduction in timeout on transport-level disconnect)
95   - encrypted P2P transmission (loopback) tops at 2 MB/s on my quad-core;
96     why is it so slow? Fix! (see core_api_reliability test)
97 * TBENCH: [MW]
98   - good to have for transport/DV evaluation! 
99 * DHT: [Nate]
100   - implement DHT service 
101   - implement testcases
102   - implement performance tests
103 * ARM: [Safey]
104   - better crash management (attach debugging support, capture and analyze
105     debug output, detect random vs. deterministic crashes)
106   - discover dependencies between services
107     => need UNIX domain sockets first!
108   - handle gnunet-arm -k in combination with auto-start magic (what is the right thing here?)
109 * FS: [CG]
110   - datastore reservation (publishing)
111   - location URIs (publish, search, download)
112   - unindex on index failure
113   - utilize in-line files in meta data always (including in search results or
114     when download is triggered manually and for probes); currently the data is
115     only used when users do a general 'recursive' download
116   - non-anonymous FS service (needs DHT)
117     + DHT integration for search
118     + CS-DHT-functions (DHT-put of LOC)
119     + P2P-functions (DHT-get)
120   - collection API & tests
121     + gnunet-pseudonym (collection support)
122   - implement FS performance tests
123     + insert
124     + download
125     + search
126     + unindex
127 * GNUNET-GTK:
128   - handle view-metadata toggle
129   - handle view-preview toggle
130   - implement API to get notifications about bandwidth assignments to individual peers
131   - implement API to get notifications about updates to liveness of individual peers (before disconnect)
132   - handle view-neighbours toggle
133   - extend peer dialog with green-yellow-red connectivity status lights
134   - implement statistics tabs
135   - handle view-statistics toggle
136   - do meaningful update to status line (starting up, peer running, #connections, shutdown, ...)
137   - implement unindex operation (use dialog with all indexed files for selection)
138   - implement download by URI dialog; figure out where to display those downloads!
139   - figure out where in the GUI we should show active uploads/unindex operations and allow aborts
140 * SETUP:
141   - design & implement new setup tool
142
143 0.9.0pre3:
144 * TRACEKIT: [MW]
145   - good to have for DV/DHT evaluation!
146 * Determine RC bugs and fix those!
147 * DATASTORE:
148   - GNUNET_DATASTORE_cancel method not tested
149 * TESTING: [Nate]
150   - modify configuration to allow controlling connections for non-local starts
151   - testbed creation with topology (needs working F2F topology) 
152   - testbed with churn 
153   - implement testcases for distributed testing
154   - test basic peer re-configure 
155   - test topology creation 
156   - test churn generation 
157   - consider changing API for peer-group termination to 
158     call continuation when done
159 * NAT/UPNP: [MW]
160   - finalize API design
161   - code clean up
162   - testing
163   - integration with transport service
164 * MYSQL database backends: [CG]
165   - datacache
166   - datastore
167 * FS:
168   - reconstruct IBLOCKS from DBLOCKS if possible (during download; see FIXME in fs_download)
169   - add support for pushing "already seen" search results to FS service for bloomfilter (can wait)
170   - use different 'priority' for probe downloads vs. normal downloads
171 * ARM:
172   - better tracking of which config changes actually need to cause process restarts by ARM.
173
174 0.9.0:
175 * new webpage:
176   - expand bibliography
177   - convert documentation pages to books
178   - update books (especially for developers)
179   - create good Drupal theme for GNUnet
180   - make a NICE download page and figure out how to enable developers to publish TGZs nicely
181   - port "contact" page
182   - add content type for "todo" items?
183 * POSTGRES database backends: [CG]
184   - datacache
185   - datastore
186 * Determine RC bugs and fix those!
187
188 0.9.x:
189 * TRANSPORT: [MW]
190   - SMTP transport backend
191   - HTTPS transport backend
192     + improved HTTPS support in MHD
193     + actual plugin
194   - Implement method of learning our external addresses from
195     other peers; need some kind of threshold-based
196     scheme, limiting both the total number of addresses that we accept 
197     this way as well as requiring multiple confirmations; also, we
198     should possibly try to confirm that the given address works for
199     us ourselves (loopback-style) before adding it to the list
200     + we may be able to simplify WELCOME messages (no need to add 
201       addresses there anymore, but may help to learn them there anyway...).
202     + we probably want some kind of voting/counting for learning IP addresses
203       (maybe including IP addresses in ads proportional to how often others
204        report them? we at least need some protection against >64k HELLOs!),
205     + provide a way to give the user a list of "learned" IP addresses and
206       a way to easily "veto" addresses off the list!
207       => If MiM attacker uses vetoed address, blacklist the specific IP for
208          the presumed neighbour!
209   - implement gnunet-transport (transport configurator / tester)
210   - UPnP-based IP detection
211     (Note: build library always, build service when libxml2/etc. are available)
212 * FS: [CG]
213   - Remove KBlocks in gnunet-unindex (see discussion with Kenneth Almquist on gnunet-devs in 9/2009)
214 * PEERINFO: [CG]
215   - expire 'ancient' HELLOs (those without valid addresses AND that 
216     we have not 'used' (for their public keys) in a while; need a way
217     to track actual 'use')
218   - make sue we also trigger notifications whenever HELLOs expire
219 * VPN
220
221
222
223 Optimizations:
224 * TCP:
225   - should use hash map to look up sessions
226 * STATISTICS:
227   - should use BIO instead of mmap
228 * TRANSPORT:
229   - need to periodically probe latency/transport cost changes & possibly switch transport
230   - should use hash map to look up Neighbours (service AND plugins!)
231 * DATASTORE (?):
232   - check for duplicates on insertion (currently, same content is frequently
233     stored again [seen with KBLOCKS and SBLOCKS]!)
234 * PEERINFO:
235   - merge multiple HELLOs of the same peer in the transmission queue
236     (theoretically reduces overhead; bounds message queue size)
237   - merge multiple iteration requests over "all" peers in the queue
238     (theoretically reduces overhead; bounds messgae queue size)
239 * FS:
240   - use different queue prioritization for probe-downloads vs. normal downloads (!?)
241
242 Minor features:
243 * TCP:
244   - repeatedly resolve hostname and look up interfaces to determine our own IP
245   - [./transport/plugin_transport_tcp.c:391]: (style) struct or union member 'Plugin::address_update_task' is never used (related to issue above)
246 * TRANSPORT:
247   - [./transport/gnunet-service-transport.c:173]: (style) struct or union member 'TransportPlugin::rebuild' is never used (related to TCP not refreshing external addresses?)
248 * BLOCKS:
249   - testcase would be nice...