@@ -930,6 +930,13 @@ pub(super) struct ReestablishResponses {
930
930
pub shutdown_msg: Option<msgs::Shutdown>,
931
931
}
932
932
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
+
933
940
/// The result of a shutdown that should be handled.
934
941
#[must_use]
935
942
pub(crate) struct ShutdownResult {
@@ -1296,40 +1303,42 @@ impl<SP: Deref> Channel<SP> where
1296
1303
}
1297
1304
}
1298
1305
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>(
1300
1309
&mut self, chain_hash: ChainHash, logger: &L,
1301
- ) -> Option<OpenChannelMessage> where L::Target: Logger {
1310
+ ) -> ReconnectionMsg where L::Target: Logger {
1302
1311
match self {
1303
- Channel::Funded(_) => None,
1312
+ Channel::Funded(chan) =>
1313
+ ReconnectionMsg::Reestablish(chan.get_channel_reestablish(logger)),
1304
1314
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 )
1308
1318
},
1309
1319
Channel::UnfundedInboundV1(_) => {
1310
1320
// Since unfunded inbound channel maps are cleared upon disconnecting a peer,
1311
1321
// they are not persisted and won't be recovered after a crash.
1312
1322
// Therefore, they shouldn't exist at this point.
1313
1323
debug_assert!(false);
1314
- None
1324
+ ReconnectionMsg:: None
1315
1325
},
1316
1326
#[cfg(dual_funding)]
1317
1327
Channel::UnfundedV2(chan) => {
1318
1328
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
+ ))
1320
1332
} else {
1321
1333
// Since unfunded inbound channel maps are cleared upon disconnecting a peer,
1322
1334
// they are not persisted and won't be recovered after a crash.
1323
1335
// Therefore, they shouldn't exist at this point.
1324
1336
debug_assert!(false);
1325
- None
1337
+ ReconnectionMsg:: None
1326
1338
}
1327
1339
},
1328
1340
#[cfg(not(dual_funding))]
1329
- Channel::UnfundedV2(_) => {
1330
- debug_assert!(false);
1331
- None
1332
- },
1341
+ Channel::UnfundedV2(_) => ReconnectionMsg::None,
1333
1342
}
1334
1343
}
1335
1344
@@ -7984,7 +7993,7 @@ impl<SP: Deref> FundedChannel<SP> where
7984
7993
7985
7994
/// May panic if called on a channel that wasn't immediately-previously
7986
7995
/// 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 {
7988
7997
assert!(self.context.channel_state.is_peer_disconnected());
7989
7998
assert_ne!(self.context.cur_counterparty_commitment_transaction_number, INITIAL_COMMITMENT_NUMBER);
7990
7999
// This is generally the first function which gets called on any given channel once we're
0 commit comments