htlcswitch: add InterceptableSwitchConfig

Preparation for adding more config options.
This commit is contained in:
Joost Jager 2022-08-15 13:00:08 +02:00
parent 4fbd608b73
commit 4a3e90f4d0
No known key found for this signature in database
GPG Key ID: B9A26449A5528325
4 changed files with 43 additions and 12 deletions

View File

@ -111,19 +111,32 @@ type fwdResolution struct {
errChan chan error
}
// NewInterceptableSwitch returns an instance of InterceptableSwitch.
func NewInterceptableSwitch(s *Switch, cltvRejectDelta uint32,
requireInterceptor bool) *InterceptableSwitch {
// InterceptableSwitchConfig contains the configuration of InterceptableSwitch.
type InterceptableSwitchConfig struct {
// Switch is a reference to the actual switch implementation that
// packets get sent to on resume.
Switch *Switch
// CltvRejectDelta defines the number of blocks before the expiry of the
// htlc where we no longer intercept it and instead cancel it back.
CltvRejectDelta uint32
// RequireInterceptor indicates whether processing should block if no
// interceptor is connected.
RequireInterceptor bool
}
// NewInterceptableSwitch returns an instance of InterceptableSwitch.
func NewInterceptableSwitch(cfg *InterceptableSwitchConfig) *InterceptableSwitch {
return &InterceptableSwitch{
htlcSwitch: s,
htlcSwitch: cfg.Switch,
intercepted: make(chan *interceptedPackets),
onchainIntercepted: make(chan InterceptedForward),
interceptorRegistration: make(chan ForwardInterceptor),
holdForwards: make(map[channeldb.CircuitKey]InterceptedForward),
resolutionChan: make(chan *fwdResolution),
requireInterceptor: requireInterceptor,
cltvRejectDelta: cltvRejectDelta,
requireInterceptor: cfg.RequireInterceptor,
cltvRejectDelta: cfg.CltvRejectDelta,
quit: make(chan struct{}),
}

View File

@ -3846,7 +3846,10 @@ func TestSwitchHoldForward(t *testing.T) {
interceptedChan: make(chan InterceptedPacket),
}
switchForwardInterceptor := NewInterceptableSwitch(
s, cltvRejectDelta, false,
&InterceptableSwitchConfig{
Switch: s,
CltvRejectDelta: cltvRejectDelta,
},
)
require.NoError(t, switchForwardInterceptor.Start())
@ -4037,7 +4040,13 @@ func TestSwitchHoldForward(t *testing.T) {
require.NoError(t, switchForwardInterceptor.Stop())
// Test always-on interception.
switchForwardInterceptor = NewInterceptableSwitch(s, cltvRejectDelta, true)
switchForwardInterceptor = NewInterceptableSwitch(
&InterceptableSwitchConfig{
Switch: s,
CltvRejectDelta: cltvRejectDelta,
RequireInterceptor: true,
},
)
require.NoError(t, switchForwardInterceptor.Start())
// Forward a fresh packet. It is expected to be failed immediately,
@ -5329,7 +5338,11 @@ func testSwitchAliasInterceptFail(t *testing.T, zeroConf bool) {
t: t,
interceptedChan: make(chan InterceptedPacket),
}
interceptSwitch := NewInterceptableSwitch(s, 0, false)
interceptSwitch := NewInterceptableSwitch(
&InterceptableSwitchConfig{
Switch: s,
},
)
require.NoError(t, interceptSwitch.Start())
interceptSwitch.SetInterceptor(forwardInterceptor.InterceptForwardHtlc)

View File

@ -367,7 +367,9 @@ func createTestPeer(t *testing.T, notifier chainntnfs.ChainNotifier,
Switch: mockSwitch,
ChanActiveTimeout: chanActiveTimeout,
InterceptSwitch: htlcswitch.NewInterceptableSwitch(
nil, testCltvRejectDelta, false,
&htlcswitch.InterceptableSwitchConfig{
CltvRejectDelta: testCltvRejectDelta,
},
),
ChannelDB: dbAlice.ChannelStateDB(),
FeeEstimator: estimator,

View File

@ -667,8 +667,11 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
return nil, err
}
s.interceptableSwitch = htlcswitch.NewInterceptableSwitch(
s.htlcSwitch, lncfg.DefaultFinalCltvRejectDelta,
s.cfg.RequireInterceptor,
&htlcswitch.InterceptableSwitchConfig{
Switch: s.htlcSwitch,
CltvRejectDelta: lncfg.DefaultFinalCltvRejectDelta,
RequireInterceptor: s.cfg.RequireInterceptor,
},
)
s.witnessBeacon = newPreimageBeacon(