view TODO @ 0:d39e1d0d75b6

initial add
author paulo@hit-nxdomain.opendns.com
date Sat, 20 Feb 2010 21:18:28 -0800
parents
children
line source
1 $Id: TODO,v 1.11 2004/06/04 16:31:08 hipnod Exp $
3 0.0.11
4 ------
5 o test short-writing of packets and make sure it works
6 o rename gt_conn_ -> gt_node_list_
7 o limit outgoing push upload rate
8 o use GtTransfer by splitting up gt_transfer_new instead of
9 http_incoming thing
10 o insert incoming HTTP server connections into server connection list,
11 to ensure the connection will get closed if there are too many
12 o optimize away extra packet allocations
13 o support basic packet routing
14 o implement simple flow-control
15 o make QRP implementation more complete
16 o support QRP for reducing queries to nodes
17 o implement GGEP properly
18 o make generic 3-way handshake for features that have a version
19 number (Vendor-Message, X-Query-Routing, GGEP)
20 o make sure all global symbols are prefixed with gt_, GT_, or gnutella_
21 o move handshake code into handshake/
22 o rename gnutella_* handshake functions to gt_handshake_*
23 o maybe rewrite the handshaking code completely
24 o fix packet parsing when string is at the end; need to fix
25 io_buf_resize to terminate
26 o merge dev-intset-search branch
27 o make web cache index requests once in a while
28 o keep queue of outgoing pushed connects, retry
29 o rename gt_search_exec gt_share_db
30 o implement an abstract GtHttpHeader type
31 o eliminate extra list len calc in gt_node_list_foreach()
32 o test and possibly incorporate SHA1 code from Linux
33 o do tests on new searching code in dev-intset-search branch
34 o fix node->share_state being NULL if handshaking hasn't completed
35 o use callback system for running code when connection has completed
36 o fix gt_share_state.c for ultrapeer mode
38 0.0.12
39 ------
40 o support downloading from push proxies
41 o refactor HTTP code and merge gt_http_client.c and http_request.c
42 o maybe do browsing
43 o break transfer code into transfer/
44 o break http code into http/
45 o break sharing code into share/
46 o break searching code into search/
47 o chop off gt_ prefixes in move
49 0.0.13
50 ------
51 o implement basic download mesh
52 o limit outgoing push uploads
54 0.1.0
55 -----
56 o support dynamic querying
57 o send out XML metadata
59 {******************************************************************************}
61 HTTP
62 ----
64 o probably rename GtTransfer to GtHttpTransfer
65 o use a new type GtHttpHeader instead of Dataset for xfer->header
66 o generalize http handling and separate transfer code into callbacks
67 o make GtHttpConnection type to cleanup gt_transfer_cancel()
68 o make GtHttpConnectionCache for unifying pushed and non-pushed caches
69 o maybe separate GtHttpTransfer into GtHttpRequest/Response
72 TRANSFER
73 --------
75 o slap push proxies in source url; have to remove them too
77 {******************************************************************************}
79 THINGS NEEDED FROM THE DAEMON
80 -----------------------------
82 * make search object persistent in front-end space, and require
83 explicit free from front-end, or front-end disconnect
85 Would be better if searches were a handle existing in front-end
86 space, that stuck around after search completion, and had to be
87 explicitly cleaned up by a front-end. This way we could still send
88 results that come in after a search has timed out to the front-end,
89 and let it decide what to do with them after a search has
90 entered the "completed" (but still allocated) state.
92 Haven't seen those post-completion results actually happen in a
93 while, though..I would like to think this means the search timeout
94 logic is good, but since there is no tracking I've no precise idea
95 how often it happens, except i don't usually see them on the debug
96 console. Should really add something to check for them...
98 * interactive searches need hash-type
100 Interactive locate searches always assume sha1, because hash-type is
101 null. The interface protocol should support a way to enumerate the
102 supported hashes and pass a hash-type parameter from the user to
103 locate.
105 * protocol callback for adding new sources, that doesn't cancel
106 existing transfers
108 This is needed for download mesh support. download_add_source will
109 cancel existing transfers, which is not good because one source may
110 end up cancelling an ongoing transfer if it sends another source in
111 the alternate location that is currently actively transfering. So, a
112 new function is needed for use in the callback to skip ongoing
113 transfers.
115 * queueing w/ MAX_DOWNLOADS_PERUSER == 1 doesn't always work
117 Because transfer_length() operates on chunks rather than sources,
118 sometimes more than one download per source gets started if the
119 Chunk isn't active. Need to assess the impact of changing
120 transfer_length() to use Sources instead of Chunks.
122 * need some way to enforce MAX_DOWNLOADS_PERUSER on per-source basis
124 Active-queueing depends on MAX_DOWNLOADS_PERUSER == 1. If
125 MAX_DOWNLOADS_PERUSER changes, active-queueing breaks and downloads
126 will fail all the time. Should enforce MAX_DOWNLOADS_PERUSER on
127 a per-source basis at runtime.
129 Hmm, this may require a User abstraction. There was something else I
130 was thinking would require that too, perhaps related to upload
131 queueing and how doing p->user_cmp there is bad...
133 * push downloads need a way to initiate transfer when no Chunk is
134 allocated
136 * some way to enforce a minimum retry wait on sources
138 * configurable source timeouts to protect push downloads