I would skip the lines where it says the servents must not share partial files without tiger tree hash. With tiger tree you can download from those hosts as well, since you will see quickly if the data is not what you want.
Before downloading a file, always get the tiger tree hash (of the 1MB chunks) first. Then simply download the file from any location you find and calculate the hash of each new MB you downloaded, so you can quickly verify you are downloading the right stuff.
QueryReplies shouldn't contain Alternate-Locations.
Another idea which saves gnutella-traffic: Servents should not return queryreplies for incomplete files at all. - If X-Alternate-Locations it HTTP- Headers work alright, each location having the complete file, will return X-Alternate-Locations of all servents that accessed the file recently, so you should be able to gather the locations quickly while connecting to all the hosts having the file.
Servents may NOT search by sub-hash. Let's say you are sharing 20Gigs of data, that means you would have to keep 20,000 subhashes in a library and even search through this library.
When a servent requests a file, he does request all the ranges he needs. The remote servent answers with either HTTP 206 including the ranges it has and including sending one the ranges or with HTTP 416 if it cannot satisfy the request. I would prefer it, if the ranges were requested and sent by one by one.
Servents should not upload ranges of the file randomly but satisfy the ranges of the as they were requested, since I wouldn't want to break HTTP here.
Servent settings (e.g. if they share partial files by default) don't belong into this protocol. |