@@ -1439,6 +1439,32 @@ impl ChannelManager {
1439
1439
Ok ( accept_msg)
1440
1440
}
1441
1441
1442
+ fn internal_accept_channel ( & self , their_node_id : & PublicKey , msg : & msgs:: AcceptChannel ) -> Result < ( ) , MsgHandleErrInternal > {
1443
+ let ( value, output_script, user_id) = {
1444
+ let mut channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
1445
+ match channel_state. by_id . get_mut ( & msg. temporary_channel_id ) {
1446
+ Some ( chan) => {
1447
+ if chan. get_their_node_id ( ) != * their_node_id {
1448
+ //TODO: see issue #153, need a consistent behavior on obnoxious behavior from random node
1449
+ return Err ( MsgHandleErrInternal :: send_err_msg_no_close ( "Got a message for a channel from the wrong node!" , msg. temporary_channel_id ) ) ;
1450
+ }
1451
+ chan. accept_channel ( & msg) . map_err ( |e| MsgHandleErrInternal :: from_maybe_close ( e) ) ?;
1452
+ ( chan. get_value_satoshis ( ) , chan. get_funding_redeemscript ( ) . to_v0_p2wsh ( ) , chan. get_user_id ( ) )
1453
+ } ,
1454
+ //TODO: same as above
1455
+ None => return Err ( MsgHandleErrInternal :: send_err_msg_no_close ( "Failed to find corresponding channel" , msg. temporary_channel_id ) )
1456
+ }
1457
+ } ;
1458
+ let mut pending_events = self . pending_events . lock ( ) . unwrap ( ) ;
1459
+ pending_events. push ( events:: Event :: FundingGenerationReady {
1460
+ temporary_channel_id : msg. temporary_channel_id ,
1461
+ channel_value_satoshis : value,
1462
+ output_script : output_script,
1463
+ user_channel_id : user_id,
1464
+ } ) ;
1465
+ Ok ( ( ) )
1466
+ }
1467
+
1442
1468
fn internal_announcement_signatures ( & self , their_node_id : & PublicKey , msg : & msgs:: AnnouncementSignatures ) -> Result < ( ) , MsgHandleErrInternal > {
1443
1469
let ( chan_announcement, chan_update) = {
1444
1470
let mut channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
@@ -1645,27 +1671,7 @@ impl ChannelMessageHandler for ChannelManager {
1645
1671
}
1646
1672
1647
1673
fn handle_accept_channel ( & self , their_node_id : & PublicKey , msg : & msgs:: AcceptChannel ) -> Result < ( ) , HandleError > {
1648
- let ( value, output_script, user_id) = {
1649
- let mut channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
1650
- match channel_state. by_id . get_mut ( & msg. temporary_channel_id ) {
1651
- Some ( chan) => {
1652
- if chan. get_their_node_id ( ) != * their_node_id {
1653
- return Err ( HandleError { err : "Got a message for a channel from the wrong node!" , action : None } )
1654
- }
1655
- chan. accept_channel ( & msg) ?;
1656
- ( chan. get_value_satoshis ( ) , chan. get_funding_redeemscript ( ) . to_v0_p2wsh ( ) , chan. get_user_id ( ) )
1657
- } ,
1658
- None => return Err ( HandleError { err : "Failed to find corresponding channel" , action : None } )
1659
- }
1660
- } ;
1661
- let mut pending_events = self . pending_events . lock ( ) . unwrap ( ) ;
1662
- pending_events. push ( events:: Event :: FundingGenerationReady {
1663
- temporary_channel_id : msg. temporary_channel_id ,
1664
- channel_value_satoshis : value,
1665
- output_script : output_script,
1666
- user_channel_id : user_id,
1667
- } ) ;
1668
- Ok ( ( ) )
1674
+ handle_error ! ( self , self . internal_accept_channel( their_node_id, msg) , their_node_id)
1669
1675
}
1670
1676
1671
1677
fn handle_funding_created ( & self , their_node_id : & PublicKey , msg : & msgs:: FundingCreated ) -> Result < msgs:: FundingSigned , HandleError > {
0 commit comments