c40d291488
Add new value for ChanStatus without changing any existing functionality. The new value indicates that a user manually requested disabling a channel.
96 lines
3.2 KiB
Go
96 lines
3.2 KiB
Go
package netann
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/btcsuite/btcd/wire"
|
|
)
|
|
|
|
// ChanStatus is a type that enumerates the possible states a ChanStatusManager
|
|
// tracks for its known channels.
|
|
type ChanStatus uint8
|
|
|
|
const (
|
|
// ChanStatusEnabled indicates that the channel's last announcement has
|
|
// the disabled bit cleared.
|
|
ChanStatusEnabled ChanStatus = iota
|
|
|
|
// ChanStatusPendingDisabled indicates that the channel's last
|
|
// announcement has the disabled bit cleared, but that the channel was
|
|
// detected in an inactive state. Channels in this state will have a
|
|
// disabling announcement sent after the ChanInactiveTimeout expires
|
|
// from the time of the first detection--unless the channel is
|
|
// explicitly reenabled before the disabling occurs.
|
|
ChanStatusPendingDisabled
|
|
|
|
// ChanStatusDisabled indicates that the channel's last announcement has
|
|
// the disabled bit set.
|
|
ChanStatusDisabled
|
|
|
|
// ChanStatusManuallyDisabled indicates that the channel's last
|
|
// announcement had the disabled bit set, and that a user manually
|
|
// requested disabling the channel. Channels in this state will ignore
|
|
// automatic / background attempts to re-enable the channel.
|
|
//
|
|
// Note that there's no corresponding ChanStatusManuallyEnabled state
|
|
// because even if a user manually requests enabling a channel, we still
|
|
// DO want to allow automatic / background processes to disable it.
|
|
// Otherwise, the network might be cluttered with channels that are
|
|
// advertised as enabled, but don't actually work or even exist.
|
|
ChanStatusManuallyDisabled
|
|
)
|
|
|
|
// ChannelState describes the ChanStatusManager's view of a channel, and
|
|
// describes the current state the channel's disabled status on the network.
|
|
type ChannelState struct {
|
|
// Status is the channel's current ChanStatus from the POV of the
|
|
// ChanStatusManager.
|
|
Status ChanStatus
|
|
|
|
// SendDisableTime is the earliest time at which the ChanStatusManager
|
|
// will passively send a new disable announcement on behalf of this
|
|
// channel.
|
|
//
|
|
// NOTE: This field is only non-zero if status is
|
|
// ChanStatusPendingDisabled.
|
|
SendDisableTime time.Time
|
|
}
|
|
|
|
// channelStates is a map of channel outpoints to their channelState. All
|
|
// changes made after setting an entry initially should be made using receiver
|
|
// methods below.
|
|
type channelStates map[wire.OutPoint]ChannelState
|
|
|
|
// markEnabled creates a channelState using ChanStatusEnabled.
|
|
func (s *channelStates) markEnabled(outpoint wire.OutPoint) {
|
|
(*s)[outpoint] = ChannelState{
|
|
Status: ChanStatusEnabled,
|
|
}
|
|
}
|
|
|
|
// markDisabled creates a channelState using ChanStatusDisabled.
|
|
func (s *channelStates) markDisabled(outpoint wire.OutPoint) {
|
|
(*s)[outpoint] = ChannelState{
|
|
Status: ChanStatusDisabled,
|
|
}
|
|
}
|
|
|
|
// markManuallyDisabled creates a channelState using
|
|
// ChanStatusManuallyDisabled.
|
|
func (s *channelStates) markManuallyDisabled(outpoint wire.OutPoint) {
|
|
(*s)[outpoint] = ChannelState{
|
|
Status: ChanStatusManuallyDisabled,
|
|
}
|
|
}
|
|
|
|
// markPendingDisabled creates a channelState using ChanStatusPendingDisabled
|
|
// and sets the ChannelState's SendDisableTime to sendDisableTime.
|
|
func (s *channelStates) markPendingDisabled(outpoint wire.OutPoint,
|
|
sendDisableTime time.Time) {
|
|
|
|
(*s)[outpoint] = ChannelState{
|
|
Status: ChanStatusPendingDisabled,
|
|
SendDisableTime: sendDisableTime,
|
|
}
|
|
}
|