Handle stale nonces in ChannelBind, and add timer to renew bindings #481
+225
−73
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
While the issue was originally about discussing why turn would fall back to indications after a while in a long-lived connection, tracing down into the code revealed stale nonces aren't being handled whatsoever by the
bind()method, causing channel bindings to time out and transition to failed state, forcing the connection to go 2-way over indications for the rest of its life.This PR adds code handling stale nonce errors to ChannelBind requests. It also decouples logic related to binding lifecycle (initial binding & binding renewal) from
WriteToby carving out code into a timer, similar to the way perms and allocs work.Reference issue
Fixes #471