diff TODO @ 0:d39e1d0d75b6

initial add
author paulo@hit-nxdomain.opendns.com
date Sat, 20 Feb 2010 21:18:28 -0800
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/TODO	Sat Feb 20 21:18:28 2010 -0800
     1.3 @@ -0,0 +1,138 @@
     1.4 +$Id: TODO,v 1.11 2004/06/04 16:31:08 hipnod Exp $
     1.5 +
     1.6 +0.0.11
     1.7 +------
     1.8 +	o test short-writing of packets and make sure it works
     1.9 +	o rename gt_conn_ -> gt_node_list_
    1.10 +	o limit outgoing push upload rate
    1.11 +	o use GtTransfer by splitting up gt_transfer_new instead of
    1.12 +	  http_incoming thing
    1.13 +	o insert incoming HTTP server connections into server connection list,
    1.14 +	  to ensure the connection will get closed if there are too many
    1.15 +	o optimize away extra packet allocations
    1.16 +	o support basic packet routing
    1.17 +	o implement simple flow-control
    1.18 +	o make QRP implementation more complete
    1.19 +	o support QRP for reducing queries to nodes
    1.20 +	o implement GGEP properly
    1.21 +	o make generic 3-way handshake for features that have a version
    1.22 +	  number (Vendor-Message, X-Query-Routing, GGEP)
    1.23 +	o make sure all global symbols are prefixed with gt_, GT_, or gnutella_
    1.24 +	o move handshake code into handshake/
    1.25 +	o rename gnutella_* handshake functions to gt_handshake_*
    1.26 +	o maybe rewrite the handshaking code completely
    1.27 +	o fix packet parsing when string is at the end; need to fix 
    1.28 +	  io_buf_resize to terminate
    1.29 +	o merge dev-intset-search branch
    1.30 +	o make web cache index requests once in a while
    1.31 +	o keep queue of outgoing pushed connects, retry
    1.32 +	o rename gt_search_exec gt_share_db
    1.33 +	o implement an abstract GtHttpHeader type
    1.34 +	o eliminate extra list len calc in gt_node_list_foreach()
    1.35 +	o test and possibly incorporate SHA1 code from Linux
    1.36 +	o do tests on new searching code in dev-intset-search branch
    1.37 +	o fix node->share_state being NULL if handshaking hasn't completed
    1.38 +	o use callback system for running code when connection has completed
    1.39 +	o fix gt_share_state.c for ultrapeer mode
    1.40 +
    1.41 +0.0.12
    1.42 +------
    1.43 +	o support downloading from push proxies
    1.44 +	o refactor HTTP code and merge gt_http_client.c and http_request.c
    1.45 +	o maybe do browsing
    1.46 +	o break transfer code into transfer/
    1.47 +	o break http code into http/
    1.48 +	o break sharing code into share/
    1.49 +	o break searching code into search/
    1.50 +	o chop off gt_ prefixes in move
    1.51 +
    1.52 +0.0.13
    1.53 +------
    1.54 +	o implement basic download mesh
    1.55 +	o limit outgoing push uploads
    1.56 +
    1.57 +0.1.0
    1.58 +-----
    1.59 +	o support dynamic querying
    1.60 +	o send out XML metadata
    1.61 +
    1.62 +{******************************************************************************}
    1.63 +
    1.64 +HTTP
    1.65 +----
    1.66 +
    1.67 +	o probably rename GtTransfer to GtHttpTransfer
    1.68 +	o use a new type GtHttpHeader instead of Dataset for xfer->header
    1.69 +	o generalize http handling and separate transfer code into callbacks
    1.70 +	o make GtHttpConnection type to cleanup gt_transfer_cancel()
    1.71 +	o make GtHttpConnectionCache for unifying pushed and non-pushed caches
    1.72 +	o maybe separate GtHttpTransfer into GtHttpRequest/Response
    1.73 +
    1.74 +
    1.75 +TRANSFER
    1.76 +--------
    1.77 +
    1.78 +	o slap push proxies in source url; have to remove them too
    1.79 +
    1.80 +{******************************************************************************}
    1.81 +
    1.82 +THINGS NEEDED FROM THE DAEMON
    1.83 +-----------------------------
    1.84 +	
    1.85 +	* make search object persistent in front-end space, and require
    1.86 +	  explicit free from front-end, or front-end disconnect
    1.87 +	  
    1.88 +	  Would be better if searches were a handle existing in front-end
    1.89 +	  space, that stuck around after search completion, and had to be
    1.90 +	  explicitly cleaned up by a front-end.  This way we could still send
    1.91 +	  results that come in after a search has timed out to the front-end,
    1.92 +	  and let it decide what to do with them after a search has
    1.93 +	  entered the "completed" (but still allocated) state. 
    1.94 +	  
    1.95 +	  Haven't seen those post-completion results actually happen in a
    1.96 +	  while, though..I would like to think this means the search timeout
    1.97 +	  logic is good, but since there is no tracking I've no precise idea
    1.98 +	  how often it happens, except i don't usually see them on the debug
    1.99 +	  console. Should really add something to check for them...
   1.100 +
   1.101 +	* interactive searches need hash-type
   1.102 +	
   1.103 +	  Interactive locate searches always assume sha1, because hash-type is
   1.104 +	  null. The interface protocol should support a way to enumerate the
   1.105 +	  supported hashes and pass a hash-type parameter from the user to
   1.106 +	  locate.
   1.107 +
   1.108 +	* protocol callback for adding new sources, that doesn't cancel
   1.109 +	  existing transfers
   1.110 +
   1.111 +	  This is needed for download mesh support. download_add_source will
   1.112 +	  cancel existing transfers, which is not good because one source may
   1.113 +	  end up cancelling an ongoing transfer if it sends another source in
   1.114 +	  the alternate location that is currently actively transfering. So, a
   1.115 +	  new function is needed for use in the callback to skip ongoing
   1.116 +	  transfers.
   1.117 +
   1.118 +	* queueing w/ MAX_DOWNLOADS_PERUSER == 1 doesn't always work
   1.119 +	
   1.120 +	  Because transfer_length() operates on chunks rather than sources,
   1.121 +	  sometimes more than one download per source gets started if the
   1.122 +	  Chunk isn't active. Need to assess the impact of changing
   1.123 +	  transfer_length() to use Sources instead of Chunks.
   1.124 +
   1.125 +	* need some way to enforce MAX_DOWNLOADS_PERUSER on per-source basis
   1.126 +
   1.127 +	  Active-queueing depends on MAX_DOWNLOADS_PERUSER == 1. If
   1.128 +	  MAX_DOWNLOADS_PERUSER changes, active-queueing breaks and downloads
   1.129 +	  will fail all the time. Should enforce MAX_DOWNLOADS_PERUSER on 
   1.130 +	  a per-source basis at runtime.
   1.131 +
   1.132 +	  Hmm, this may require a User abstraction. There was something else I
   1.133 +	  was thinking would require that too, perhaps related to upload
   1.134 +	  queueing and how doing p->user_cmp there is bad...
   1.135 +
   1.136 +	* push downloads need a way to initiate transfer when no Chunk is
   1.137 +	  allocated
   1.138 +
   1.139 +	* some way to enforce a minimum retry wait on sources
   1.140 +
   1.141 +	* configurable source timeouts to protect push downloads