Refactor handle_funding_signed to wrapper error handling function
authorAntoine Riard <ariard@student.42.fr>
Fri, 7 Sep 2018 02:45:07 +0000 (02:45 +0000)
committerAntoine Riard <ariard@student.42.fr>
Fri, 7 Sep 2018 02:45:07 +0000 (02:45 +0000)
src/ln/channelmanager.rs

index fe8f3fb2ae7d4f618025c85f46a69eab836a3b8d..754903cff072427f58743746583eb84b757dc2a7 100644 (file)
@@ -1511,6 +1511,32 @@ impl ChannelManager {
                Ok(funding_msg)
        }
 
+       fn internal_funding_signed(&self, their_node_id: &PublicKey, msg: &msgs::FundingSigned) -> Result<(), MsgHandleErrInternal> {
+               let (funding_txo, user_id, monitor) = {
+                       let mut channel_state = self.channel_state.lock().unwrap();
+                       match channel_state.by_id.get_mut(&msg.channel_id) {
+                               Some(chan) => {
+                                       if chan.get_their_node_id() != *their_node_id {
+                                               //TODO: here and below MsgHandleErrInternal, #153 case
+                                               return Err(MsgHandleErrInternal::send_err_msg_no_close("Got a message for a channel from the wrong node!", msg.channel_id));
+                                       }
+                                       let chan_monitor = chan.funding_signed(&msg).map_err(|e| MsgHandleErrInternal::from_maybe_close(e))?;
+                                       (chan.get_funding_txo().unwrap(), chan.get_user_id(), chan_monitor)
+                               },
+                               None => return Err(MsgHandleErrInternal::send_err_msg_no_close("Failed to find corresponding channel", msg.channel_id))
+                       }
+               };
+               if let Err(_e) = self.monitor.add_update_monitor(monitor.get_funding_txo().unwrap(), monitor) {
+                       unimplemented!();
+               }
+               let mut pending_events = self.pending_events.lock().unwrap();
+               pending_events.push(events::Event::FundingBroadcastSafe {
+                       funding_txo: funding_txo,
+                       user_channel_id: user_id,
+               });
+               Ok(())
+       }
+
        fn internal_announcement_signatures(&self, their_node_id: &PublicKey, msg: &msgs::AnnouncementSignatures) -> Result<(), MsgHandleErrInternal> {
                let (chan_announcement, chan_update) = {
                        let mut channel_state = self.channel_state.lock().unwrap();
@@ -1725,28 +1751,7 @@ impl ChannelMessageHandler for ChannelManager {
        }
 
        fn handle_funding_signed(&self, their_node_id: &PublicKey, msg: &msgs::FundingSigned) -> Result<(), HandleError> {
-               let (funding_txo, user_id, monitor) = {
-                       let mut channel_state = self.channel_state.lock().unwrap();
-                       match channel_state.by_id.get_mut(&msg.channel_id) {
-                               Some(chan) => {
-                                       if chan.get_their_node_id() != *their_node_id {
-                                               return Err(HandleError{err: "Got a message for a channel from the wrong node!", action: None})
-                                       }
-                                       let chan_monitor = chan.funding_signed(&msg)?;
-                                       (chan.get_funding_txo().unwrap(), chan.get_user_id(), chan_monitor)
-                               },
-                               None => return Err(HandleError{err: "Failed to find corresponding channel", action: None})
-                       }
-               };
-               if let Err(_e) = self.monitor.add_update_monitor(monitor.get_funding_txo().unwrap(), monitor) {
-                       unimplemented!();
-               }
-               let mut pending_events = self.pending_events.lock().unwrap();
-               pending_events.push(events::Event::FundingBroadcastSafe {
-                       funding_txo: funding_txo,
-                       user_channel_id: user_id,
-               });
-               Ok(())
+               handle_error!(self, self.internal_funding_signed(their_node_id, msg), their_node_id)
        }
 
        fn handle_funding_locked(&self, their_node_id: &PublicKey, msg: &msgs::FundingLocked) -> Result<Option<msgs::AnnouncementSignatures>, HandleError> {