annotate TODO @ 0:d39e1d0d75b6

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