40a81dee50ef0aaa54dbabb58ad8456e50203e3b
[oweals/gnunet.git] / TODO
1 PHASE #1: (Goal: settle key design questions)
2
3 Core:
4 * Internal: topology
5 * Internal: advertising (propagate other peers' HELLOs, find new ones)
6 * Internal: bootstrapping
7   => bootstrap should use plugins, possible multiple at the same time!
8
9 Util:
10 * consider adding "get_time" to "configuration" API
11 * improve disk API [Nils]
12
13 TESTCASES WANTED:
14 For these functions, it would be nice if we had testcases ("make check")
15 that would cause them to be executed and check that they are working:
16 * gnunet-service-peerinfo:
17   - change_host_trust / flush_trust 
18   - remove_garbage / 
19   - discard_hosts_helper / cron_clean_data_hosts
20 * gnunet-service-transport:
21   - try_unvalidated_addresses
22   - lookup_address_callback
23   - lookup_hello_callback
24   - plugin_env_lookup_address
25   - notify_clients_disconnect
26   - list_validated_addresses
27   - cleanup_validation
28   - disconnect_neighbour
29   - handle_set_quota
30 * plugin_transport_tcp.c:
31   - tcp_plugin_cancel
32   - tcp_plugin_address_pretty_printer / append_port
33   - tcp_plugin_set_receive_quota
34   - delayed_done
35 * transport_api:
36   - GNUNET_TRANSPORT_set_qutoa / send_set_quota
37   - hello_wait_timeout 
38   - transmit_ready
39   - transmit_timeout
40   - remove_from_any_list / remove_neighbour
41   - GNUNET_TRANSPORT_notify_transmit_ready_cancel
42 * core_api:
43   - timeout_request
44   - solicit_traffic / copy_and_free
45   - GNUNET_CORE_peer_configure / produce_configure_message
46 * gnunet-service-core:
47   - update_window
48   - find_client
49   - handle_client_request_configure
50   - set_key_retry_task
51   - align_and_deliver
52   - handle_transport_notify_disconnect
53
54
55 PHASE #2: (Goal: recover basic core functionality)
56
57 Datastores:
58 * implement sqlite-based sqstore/datastore service
59   + implement library (talks to service)
60   + implement service (datastore + talks to plugin)
61   + implement sqlite plugin (talks to DB)
62 * implement sqlite-based dstore services
63   + implement library (talks to service)
64   + implement service (talks to plugin)
65   + implement sqlite plugin (talks to DB)
66
67 Applications:
68 * implement hostlist service (need to bootstrap!)
69 * DHT, DV
70 * FS / fs-libs
71
72 Databases:
73 * mysql & postgres backend
74
75 Transports:
76 * UDP backend (need LIBRARY to support (de)fragmentation!)
77 * HTTP backend
78 * Testing:
79   +  Testcases for set_quota, timeouts, disconnects, transmit_ready_cancel
80   + Better coverage of gnunet-service-transport (hello validation)
81   + direct test of plugins compliance to plugin API
82
83
84 PHASE #3: (Goal: ready for pre-release) [completion-goal: end of 2009]
85
86 * testing
87 * setup
88 * gtk, qt GUIs
89 * tbench
90 * tracekit
91 * vpn
92
93
94
95 Minor TODO items:
96 * SERVER:
97   - inefficient memmove
98 * TRANSPORT:
99   - transport_api: support forcing disconnects through low quotas!
100   - API: consider having core provide deadline information for each message
101     (likely important for DV plugin which wants to loop back!)
102   - implement transport API to pretty-print transport address 
103     + transport_api extension (API extension!)
104     + service-transport extension (protocol extension)
105   - add calls to statistics in various places
106   - implement gnunet-transport (transport configurator / tester)
107   - UPnP-based IP detection
108     (Note: build library always, build service when libxml2/etc. are available)
109   - instantly filter addresses from *other* peers that 
110     are *equal* to our own address + port (i.e., localhost:2086).  We 
111     no longer filter those for outgoing (helps with loopback testing
112     and keeps the code clean), but we should filter strictly *impossible*
113     incoming addresses!  This is for efficiency, not correctness.
114   - We currently are happy to take any address told to us in a WELCOME
115     to our set of addresses; we should have some minimal threshold-based
116     scheme, limiting both the total number of addresses that we accept 
117     this way as well as requiring multiple confirmations; also, we
118     should possibly try to confirm that the given address works for
119     us ourselves (loopback-style) before adding it to the list
120     [SECURITY issue]
121   - not sure current way of doing ACKs works well-enough 
122     with unreliable transports where the ACK maybe lost;
123     the "is_new" check would then possibly prevent future
124     ACKs to be delivered, all while we're happily 
125     receiving messages from that peer!  Worse, the other
126     peer won't generate another ACK since it thinks we're
127     connected just fine...
128     Key questions:
129     + How necessary is ACKing in the first place? (alternatives?)
130     + Should we transmit ACKs in response to every HELLO? (would that 
131       fully address the problem?)
132   - latency measurements implemented in the transport
133     plugins makes it only work for bi-di transports
134     and results in code replication
135   - should latency be included in the ReceiveCallback and
136     NotifyConnect or passed on request?
137 * SETUP:
138   - auto-generate "defaults.conf" using gnunet-setup from "config.scm"
139   - integrate all options into "config.scm"
140   - change config-file writing to exclude options set to default values
141 * ARM:
142   - implement exponential back-off for service restarts
143   - better tracking of which config changes actually need to cause process restarts by ARM.
144   - have way to specify dependencies between services (to manage ARM restarts better)
145 * PEERINFO:
146   - have gnunet-peerinfo print actual host addresses again
147   - add option to gnunet-peerinfo to modify trust value
148 * POSTGRES-DB:
149   - finish postgres implementation; simplify other SQLs using new stats
150 * HTTPS transport
151   - PolariSSL for MHD?
152   - https integration
153 * GAP improvements:
154   - active reply route caching design & implementation of service,
155     gap extension!
156
157 => PRE-RELEASE
158
159 PHASE #4: [completion-goal: mid 2010]
160 * Documentation
161 * new webpage
162
163
164
165
166 Stuff to remember:
167 * Features eliminated from util:
168   - threading (goal: good riddance!)
169   - complex logging features [ectx-passing, target-kinds] (goal: good riddance!)
170   - complex configuration features [defaults, notifications] (goal: good riddance!)
171   - network traffic monitors (goal: eliminate)
172   - IPC semaphores (goal: d-bus? / eliminate?)
173   - second timers
174   - DNS lookup (goal: have async service; issue: still need synchronous resolution in places, current code may not be portable)
175   => code shrunk from 61 files to 34, 22k LOC to 15k LOC, 470k to 330k (with symbols)
176 * New features in util:
177   - scheduler
178   - service and program boot-strap code
179 * Major changes in util:
180   - more expressive server (replaces selector)
181 * Open questions: 
182   - how to integrate scheduler with GTK event loop!
183
184
185
186 Test coverage:
187 * UTIL: 75%, 4914 out of 6463