@@ -930,6 +930,13 @@ pub(super) struct ReestablishResponses {
930930 pub shutdown_msg: Option<msgs::Shutdown>,
931931}
932932
933+ /// The first message we send to our peer after connection
934+ pub(super) enum ReconnectionMsg {
935+ Reestablish(msgs::ChannelReestablish),
936+ Open(OpenChannelMessage),
937+ None,
938+ }
939+
933940/// The result of a shutdown that should be handled.
934941#[must_use]
935942pub(crate) struct ShutdownResult {
@@ -1296,40 +1303,42 @@ impl<SP: Deref> Channel<SP> where
12961303 }
12971304 }
12981305
1299- pub fn maybe_get_open_channel<L: Deref>(
1306+ /// Should be called when the peer re-connects, returning an initial message which we should
1307+ /// send our peer to begin the channel reconnection process.
1308+ pub fn peer_connected_get_handshake<L: Deref>(
13001309 &mut self, chain_hash: ChainHash, logger: &L,
1301- ) -> Option<OpenChannelMessage> where L::Target: Logger {
1310+ ) -> ReconnectionMsg where L::Target: Logger {
13021311 match self {
1303- Channel::Funded(_) => None,
1312+ Channel::Funded(chan) =>
1313+ ReconnectionMsg::Reestablish(chan.get_channel_reestablish(logger)),
13041314 Channel::UnfundedOutboundV1(chan) => {
1305- let logger = WithChannelContext::from(logger, & chan.context, None);
1306- chan.get_open_channel(chain_hash, &&logger )
1307- .map(|msg| OpenChannelMessage::V1(msg) )
1315+ chan.get_open_channel(chain_hash, logger)
1316+ .map(|msg| ReconnectionMsg::Open(OpenChannelMessage::V1(msg)) )
1317+ .unwrap_or(ReconnectionMsg::None )
13081318 },
13091319 Channel::UnfundedInboundV1(_) => {
13101320 // Since unfunded inbound channel maps are cleared upon disconnecting a peer,
13111321 // they are not persisted and won't be recovered after a crash.
13121322 // Therefore, they shouldn't exist at this point.
13131323 debug_assert!(false);
1314- None
1324+ ReconnectionMsg:: None
13151325 },
13161326 #[cfg(dual_funding)]
13171327 Channel::UnfundedV2(chan) => {
13181328 if chan.context.is_outbound() {
1319- Some(OpenChannelMessage::V2(chan.get_open_channel_v2(chain_hash)))
1329+ ReconnectionMsg::Open(OpenChannelMessage::V2(
1330+ chan.get_open_channel_v2(chain_hash)
1331+ ))
13201332 } else {
13211333 // Since unfunded inbound channel maps are cleared upon disconnecting a peer,
13221334 // they are not persisted and won't be recovered after a crash.
13231335 // Therefore, they shouldn't exist at this point.
13241336 debug_assert!(false);
1325- None
1337+ ReconnectionMsg:: None
13261338 }
13271339 },
13281340 #[cfg(not(dual_funding))]
1329- Channel::UnfundedV2(_) => {
1330- debug_assert!(false);
1331- None
1332- },
1341+ Channel::UnfundedV2(_) => ReconnectionMsg::None,
13331342 }
13341343 }
13351344
@@ -7984,7 +7993,7 @@ impl<SP: Deref> FundedChannel<SP> where
79847993
79857994 /// May panic if called on a channel that wasn't immediately-previously
79867995 /// self.remove_uncommitted_htlcs_and_mark_paused()'d
7987- pub fn get_channel_reestablish<L: Deref>(&mut self, logger: &L) -> msgs::ChannelReestablish where L::Target: Logger {
7996+ fn get_channel_reestablish<L: Deref>(&mut self, logger: &L) -> msgs::ChannelReestablish where L::Target: Logger {
79887997 assert!(self.context.channel_state.is_peer_disconnected());
79897998 assert_ne!(self.context.cur_counterparty_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
79907999 // This is generally the first function which gets called on any given channel once we're
0 commit comments