New BuildHandler banning code not required
The new code in BuildHandler from about lines 470-520 is not necessary.
The rejection for CAPABILITY_NO_TUNNELS is not, because that's only set for extremely low bandwidth or for max tunnels == 0; those cases are already caught elsewhere.
The banning and sending RI for "disregarding our congestion caps" is misguided because:
- the code is commented out;
- the check is based on the version of the previous hop, which is most likely not the originator, and there's no requirement or code now that a previous hop should drop a build request based on the congestion cap of the next hop, and I don't think it would be a good idea to do so;
- the originator (or previous hop) may have a router info for you that's minutes, hours, or days old, and does not reflect your current congestion cap
- the "knocks" counter is a lifetime counter, never cleared
- the "knocks" RateStat which is formed from a string concatenation with the from-hash is never created, so the code is going to NPE, so it hasn't been tested. If you did create it first, it would be a massive memory drain/leak because RateStats are BIG
- Ditto with the other RateStats formed from DrioTunnel..., plus hash and version variants... these are terrible and broken uses of the statmanager subsystem
- the min version is currently set to 0.9.58 but it should be 0.9.60
So it does nothing, and even the parts that are uncommented are inefficient and harmful.