Skip to content

Commit 3070858

Browse files
committed
Rewrite ChannelManager::handle_error
Exposing ChannelPhase in ChannelManager has led to verbose match statements, which need to be modified each time a ChannelPhase is added. Making ChannelPhase an implementation detail of Channel would help avoid this. As a step in this direction, update ChannelManager::handle_error to use a new ChannelPhase::maybe_handle_error_without_close.
1 parent 754c96f commit 3070858

File tree

2 files changed

+40
-16
lines changed

2 files changed

+40
-16
lines changed

lightning/src/ln/channel.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,6 +1273,32 @@ impl<'a, SP: Deref> ChannelPhase<SP> where
12731273
},
12741274
}
12751275
}
1276+
1277+
pub fn maybe_handle_error_without_close<F: Deref, L: Deref>(
1278+
&mut self, chain_hash: ChainHash, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L,
1279+
) -> Result<Option<OpenChannelMessage>, ()>
1280+
where
1281+
F::Target: FeeEstimator,
1282+
L::Target: Logger,
1283+
{
1284+
match self {
1285+
ChannelPhase::Funded(_) => Ok(None),
1286+
ChannelPhase::UnfundedOutboundV1(chan) => {
1287+
let logger = WithChannelContext::from(logger, &chan.context, None);
1288+
chan.maybe_handle_error_without_close(chain_hash, fee_estimator, &&logger)
1289+
.map(|msg| Some(OpenChannelMessage::V1(msg)))
1290+
},
1291+
ChannelPhase::UnfundedInboundV1(_) => Ok(None),
1292+
ChannelPhase::UnfundedV2(chan) => {
1293+
if chan.context.is_outbound() {
1294+
chan.maybe_handle_error_without_close(chain_hash, fee_estimator)
1295+
.map(|msg| Some(OpenChannelMessage::V2(msg)))
1296+
} else {
1297+
Ok(None)
1298+
}
1299+
},
1300+
}
1301+
}
12761302
}
12771303

12781304
/// Contains all state common to unfunded inbound/outbound channels.

lightning/src/ln/channelmanager.rs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11759,28 +11759,26 @@ where
1175911759
let mut peer_state_lock = peer_state_mutex_opt.unwrap().lock().unwrap();
1176011760
let peer_state = &mut *peer_state_lock;
1176111761
match peer_state.channel_by_id.get_mut(&msg.channel_id) {
11762-
Some(ChannelPhase::UnfundedOutboundV1(ref mut chan)) => {
11763-
let logger = WithChannelContext::from(&self.logger, &chan.context, None);
11764-
if let Ok(msg) = chan.maybe_handle_error_without_close(self.chain_hash, &self.fee_estimator, &&logger) {
11762+
Some(chan) => match chan.maybe_handle_error_without_close(
11763+
self.chain_hash, &self.fee_estimator, &self.logger,
11764+
) {
11765+
Ok(Some(OpenChannelMessage::V1(msg))) => {
1176511766
peer_state.pending_msg_events.push(events::MessageSendEvent::SendOpenChannel {
1176611767
node_id: counterparty_node_id,
1176711768
msg,
1176811769
});
1176911770
return;
11770-
}
11771-
},
11772-
Some(ChannelPhase::UnfundedV2(ref mut chan)) => {
11773-
if chan.context.is_outbound() {
11774-
if let Ok(msg) = chan.maybe_handle_error_without_close(self.chain_hash, &self.fee_estimator) {
11775-
peer_state.pending_msg_events.push(events::MessageSendEvent::SendOpenChannelV2 {
11776-
node_id: counterparty_node_id,
11777-
msg,
11778-
});
11779-
return;
11780-
}
11781-
}
11771+
},
11772+
Ok(Some(OpenChannelMessage::V2(msg))) => {
11773+
peer_state.pending_msg_events.push(events::MessageSendEvent::SendOpenChannelV2 {
11774+
node_id: counterparty_node_id,
11775+
msg,
11776+
});
11777+
return;
11778+
},
11779+
Ok(None) | Err(()) => {},
1178211780
},
11783-
None | Some(ChannelPhase::UnfundedInboundV1(_) | ChannelPhase::Funded(_)) => (),
11781+
None => {},
1178411782
}
1178511783
}
1178611784

0 commit comments

Comments
 (0)