Log which peer contributed what to a piece. Do not try to download the same piece from the same peers. Don't download at all from peers implicated in 3 bad pieces. When a previously bad piece has been downloaded successfully the bad peer(s) can be found and banned.
struct peer is now peer and meta_peer. meta_peer can be used as a handle that won't be affected if a peer vanishes. The meta_peers are kept in a hash table to enable fast lookup by peer id.
o Added ability to set the ratio items:buckets. o One can remove items while iterating. o _htbl_tov now allocates the result array, _htbl_fillv acts as the old _htbl_tov did.
The misalignment caused btpd to not work properly on machines like the NSLU2. Reported by John Caldwell.
Btpd will now be able to use high ports for itself and trackers again.
Unfortunately there are some useless IPv6 trackers that will be used instead of their more usefull IPv4 counterparts when IPv6 is enabled. The -4 and -6 options are tweaked once again. If -6 is given only IPv6 will be used. If both are given both will be used and otherwise only IPv4 will be used. The IPvX stuff should probably be set per torrent in the future.
Unfortunately many don't understand the tracker tiers and put unrelated trackers in the same tier. Thus btpd can't assume that a failure from one tracker in a tier is valid for all trackers in that tier.
The counts are for "reachable" trackers, ie. trackers that haven't timed out or been disabled for one reason or other.
Torrents are now considered stopped and may be restarted even if the stop event haven't been sent the trackers yet. The same holds for the del and add commands. A btpd process in shutdown mode that only have stopped torrents, but is still sending the stop event to trackers, will release resources that would block a new btpd to start. It will the silently exit when it's finished with the trackers. This also makes the timeout parameter for shutdown unnecessary.
Reported by <email@example.com>.
btpd now uses all tiers in parallel, so a torrent with two tiers will essentially be treated by btpd as a torrent with two trackers to send each event to. This is not quite what the multitrackes standard says, but it's much easier to implement reasonable behaviour this way. btpd is going to report the number of good trackers for a torrent instead of the number of errors, but for now just report zero errors.
Btpd can now use both ipv4 and ipv6. The new options -4 and -6 toggles use of ip v4 and v6 respectively. They are both used by default. Remove restrictions on the --ip option since the spec allows to be a dns name. Ultimately this option may need to be changed on a per tracker/torrent basis.
This enables us to report errors in the btpd init sequence to the shell by non zero exit code. Changed from flock to lockf because of solaris troubles. I may be confused though.