Explain/document what various hidden service close reasons mean
Phil and Rob fetched a bunch of hidden services, and watched the controller events while doing so. They saw a bunch of REMOTE_REASONS that were not self-evident in what they mean happened, or what it means their fetcher should do:
RESOLVEFAILED - Crawler should not return to this onion for
this round, or forever?
EXITPOLICY - Crawler should try again, but should target a
different Hidden Service port, as the HS in
not using port 80 as its virtual port.
INTERNAL - should the crawler try again...try diff RP?
DESTROY - should the crawler try again...try diff RP?
MISC - should the crawler try again...try diff RP?
CONNRESET - should the crawler try again...try diff RP?
NOROUTE - should the crawler try again...try diff RP?
CANT_ATTACH - should the crawler try again...try diff RP?
CONNECTREFUSED - should the crawler try again...try diff RP?
TIMEOUT - should the crawler try again...try diff RP?
For example, RESOLVEFAILED is what Tor says when it tried to fetch the hidden service descriptor from the hsdirs but none of them had it. This is not obvious.
Whereas CONNECTREFUSED means, I think, that every step of the rendezvous worked great, and that the hidden service was indeed configured to use virtual port 80, but there was nothing listening on the other end of that virtual port.
What do the other cases mean? And what do they imply about whether a retry is likely to work?