-PHASE #1: (Goal: settle key design questions)
-
-core:
-- test fails with fresh /tmp directory (but passes when run a second time)
- problem seems to be caused by HELLO validation (unvalidated
- HELLO not used to connect for good, then somehow SETKEY never happens);
- * double-check crypto involved in HELLO validation (PONG signature check;
- what about MiM? Might be trivial right now; adding source IP-address
- to PONG signature might help? How would we validate that (given that
- we may be learning our source IP address(es) the same way...))
- + if we add address to transport-level PONG, we may be able to simplify
- WELCOME messages (no need to add addresses there anymore, right?);
- + we probably want some kind of voting/counting for learning IP addresses
- (maybe including IP addresses in ads proportional to how often others
- report them? we at least need some protection against >64k HELLOs!),
- + provide a way to give the user a list of "learned" IP addresses and
- a way to easily "veto" addresses off the list!
- => If MiM attacker uses vetoed address, blacklist the specific IP for
- the presumed neighbour!
- * Use special, non-WELCOMEing TCP-connection for HELLO/address validation;
- that way, we can avoid confusion between a dozen parallel validating connections
- and the real one, avoid queueing messages on validating connections and
- shut those down immediately after sending/receiving the PONG
- (and maybe avoid some signalling about connections to the other layers)
- * core notifies clients about "encrypted" connections being up well before
- we get the encrypted PONG; sometimes this may be OK (for topology killing
- unwanted connnections), but of course not in general. I suspect we want
- to signal on PONG and have topology hook directly into transport to
- kill plaintext connections before they have a chance to become encrypted
- (may require minor hack in transport API)
-
-Util:
-* improve disk API [Nils] (Nils, is this done? -Christian)
-* Windows: use events instead of pipes to signal select()s [Nils]
-* only connect() sockets that are ready (select()) [Nils]
- [On W32, we need to select after calling socket before
- doing connect etc.]
-
-TESTCASES WANTED:
-For these functions, it would be nice if we had testcases ("make check")
-that would cause them to be executed and check that they are working:
-* gnunet-service-peerinfo:
- - change_host_trust / flush_trust
- - remove_garbage /
- - discard_hosts_helper / cron_clean_data_hosts
-* gnunet-service-transport:
- - try_unvalidated_addresses
- - lookup_address_callback
- - lookup_hello_callback
- - plugin_env_lookup_address
- - notify_clients_disconnect
- - list_validated_addresses
- - cleanup_validation
- - disconnect_neighbour
- - handle_set_quota
-* plugin_transport_tcp.c:
- - tcp_plugin_cancel
- - tcp_plugin_address_pretty_printer / append_port
- - tcp_plugin_set_receive_quota
- - delayed_done
-* transport_api:
- - GNUNET_TRANSPORT_set_qutoa / send_set_quota
- - hello_wait_timeout
- - transmit_ready
- - transmit_timeout
- - remove_from_any_list / remove_neighbour
- - GNUNET_TRANSPORT_notify_transmit_ready_cancel
-* core_api:
- - timeout_request
- - solicit_traffic / copy_and_free
- - GNUNET_CORE_peer_configure / produce_configure_message
-* gnunet-service-core:
- - update_window
- - find_client
- - handle_client_request_configure
- - set_key_retry_task
- - align_and_deliver
- - handle_transport_notify_disconnect
-* hostlist (everything)
-* topology (everything)
-
-
-
-PHASE #2: (Goal: recover basic file-sharing functionality)
-
-Datastores:
-* implement sqlite-based sqstore/datastore service
- + implement service (datastore + talks to plugin)
- + implement library (talks to service)
- + implement sqlite plugin (talks to DB)
- + fix testcases (make them use CPS, complete their inner workings...)
-* implement sqlite-based dstore services
- + design API
- + implement library (talks to service)
- + implement service (talks to plugin)
- + implement sqlite plugin (talks to DB)
-
-Applications:
-* DHT, DV
-* FS / fs-libs
-
-
-
-PHASE #3: (Goal: ready for pre-release) [completion-goal: end of 2009]
-
-* testing
-* setup
-* gtk, qt GUIs
-* tbench
-* tracekit
-* vpn
-
-Transports:
-* UDP backend (need LIBRARY to support (de)fragmentation!)
-* HTTP backend
-* Testing:
- + Testcases for set_quota, timeouts, disconnects, transmit_ready_cancel
- + Better coverage of gnunet-service-transport (hello validation)
- + direct test of plugins compliance to plugin API
-
-Databases:
-* sqlite, mysql & postgres backend
-
+Implementable right now (but not necessarily important), with caveats
+(unavailable components that will limit what can be implemented right
+away), in order in which they will likely be done:
+* TESTING-TESTBED [Nate]
+* SETUP
+* DV [Nate]
+* TBENCH
+* TRACEKIT
+* FRAGMENTATION [Ji Lu]
+* HTTP transport
+* MySQL / Postgres plugins (datastore, datacache)
+* UPNP [Milan]
+* ARM [Safey]
+
+Urgent items (before announcing ng.gnunet.org):
+* FS (basic anonymous FS only)
+ - test multi-peer search/download
+ + existing bandwidth-reservation code does not work with FS: don't get
+ DBLOCK size bandwidth for reply for a while => trouble for testcase
+ => need to more aggressively increase bandwidth per connection
+ => need to check that bandwidth is assigned properly to begin with
+ + Even with bandwidth-reservation code restricted, message is not
+ delivered to other core/peer/fs. Why?
+ + Same query is sent to the same peer in rather rapid succession (10x/minute?),
+ should tune code to reduce repetition...
+* new webpage
+ - run peer => have a 0.9.x hostlist
+=> Deploy(able) development network