Skip to content

Commit a7ad65b

Browse files
committed
Merge pull request #151 from ariard/channel_manager_refactor
Refactor handle_accept_channel to wrapper error handling function
2 parents 60e0ab1 + 8c2f0c3 commit a7ad65b

File tree

1 file changed

+27
-21
lines changed

1 file changed

+27
-21
lines changed

src/ln/channelmanager.rs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,6 +1446,32 @@ impl ChannelManager {
14461446
Ok(accept_msg)
14471447
}
14481448

1449+
fn internal_accept_channel(&self, their_node_id: &PublicKey, msg: &msgs::AcceptChannel) -> Result<(), MsgHandleErrInternal> {
1450+
let (value, output_script, user_id) = {
1451+
let mut channel_state = self.channel_state.lock().unwrap();
1452+
match channel_state.by_id.get_mut(&msg.temporary_channel_id) {
1453+
Some(chan) => {
1454+
if chan.get_their_node_id() != *their_node_id {
1455+
//TODO: see issue #153, need a consistent behavior on obnoxious behavior from random node
1456+
return Err(MsgHandleErrInternal::send_err_msg_no_close("Got a message for a channel from the wrong node!", msg.temporary_channel_id));
1457+
}
1458+
chan.accept_channel(&msg).map_err(|e| MsgHandleErrInternal::from_maybe_close(e))?;
1459+
(chan.get_value_satoshis(), chan.get_funding_redeemscript().to_v0_p2wsh(), chan.get_user_id())
1460+
},
1461+
//TODO: same as above
1462+
None => return Err(MsgHandleErrInternal::send_err_msg_no_close("Failed to find corresponding channel", msg.temporary_channel_id))
1463+
}
1464+
};
1465+
let mut pending_events = self.pending_events.lock().unwrap();
1466+
pending_events.push(events::Event::FundingGenerationReady {
1467+
temporary_channel_id: msg.temporary_channel_id,
1468+
channel_value_satoshis: value,
1469+
output_script: output_script,
1470+
user_channel_id: user_id,
1471+
});
1472+
Ok(())
1473+
}
1474+
14491475
fn internal_announcement_signatures(&self, their_node_id: &PublicKey, msg: &msgs::AnnouncementSignatures) -> Result<(), MsgHandleErrInternal> {
14501476
let (chan_announcement, chan_update) = {
14511477
let mut channel_state = self.channel_state.lock().unwrap();
@@ -1652,27 +1678,7 @@ impl ChannelMessageHandler for ChannelManager {
16521678
}
16531679

16541680
fn handle_accept_channel(&self, their_node_id: &PublicKey, msg: &msgs::AcceptChannel) -> Result<(), HandleError> {
1655-
let (value, output_script, user_id) = {
1656-
let mut channel_state = self.channel_state.lock().unwrap();
1657-
match channel_state.by_id.get_mut(&msg.temporary_channel_id) {
1658-
Some(chan) => {
1659-
if chan.get_their_node_id() != *their_node_id {
1660-
return Err(HandleError{err: "Got a message for a channel from the wrong node!", action: None})
1661-
}
1662-
chan.accept_channel(&msg)?;
1663-
(chan.get_value_satoshis(), chan.get_funding_redeemscript().to_v0_p2wsh(), chan.get_user_id())
1664-
},
1665-
None => return Err(HandleError{err: "Failed to find corresponding channel", action: None})
1666-
}
1667-
};
1668-
let mut pending_events = self.pending_events.lock().unwrap();
1669-
pending_events.push(events::Event::FundingGenerationReady {
1670-
temporary_channel_id: msg.temporary_channel_id,
1671-
channel_value_satoshis: value,
1672-
output_script: output_script,
1673-
user_channel_id: user_id,
1674-
});
1675-
Ok(())
1681+
handle_error!(self, self.internal_accept_channel(their_node_id, msg), their_node_id)
16761682
}
16771683

16781684
fn handle_funding_created(&self, their_node_id: &PublicKey, msg: &msgs::FundingCreated) -> Result<msgs::FundingSigned, HandleError> {

0 commit comments

Comments
 (0)