@@ -1762,8 +1762,9 @@ impl ChannelManager {
17621762 Ok ( ( ) )
17631763 }
17641764
1765- fn internal_funding_locked ( & self , their_node_id : & PublicKey , msg : & msgs:: FundingLocked ) -> Result < Option < msgs:: AnnouncementSignatures > , MsgHandleErrInternal > {
1766- let mut channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
1765+ fn internal_funding_locked ( & self , their_node_id : & PublicKey , msg : & msgs:: FundingLocked ) -> Result < ( ) , MsgHandleErrInternal > {
1766+ let mut channel_state_lock = self . channel_state . lock ( ) . unwrap ( ) ;
1767+ let channel_state = channel_state_lock. borrow_parts ( ) ;
17671768 match channel_state. by_id . get_mut ( & msg. channel_id ) {
17681769 Some ( chan) => {
17691770 if chan. get_their_node_id ( ) != * their_node_id {
@@ -1772,10 +1773,16 @@ impl ChannelManager {
17721773 }
17731774 chan. funding_locked ( & msg)
17741775 . map_err ( |e| MsgHandleErrInternal :: from_chan_maybe_close ( e, msg. channel_id ) ) ?;
1775- return Ok ( self . get_announcement_sigs ( chan) ) ;
1776+ if let Some ( announcement_sigs) = self . get_announcement_sigs ( chan) {
1777+ channel_state. pending_msg_events . push ( events:: MessageSendEvent :: SendAnnouncementSignatures {
1778+ node_id : their_node_id. clone ( ) ,
1779+ msg : announcement_sigs,
1780+ } ) ;
1781+ }
1782+ Ok ( ( ) )
17761783 } ,
1777- None => return Err ( MsgHandleErrInternal :: send_err_msg_no_close ( "Failed to find corresponding channel" , msg. channel_id ) )
1778- } ;
1784+ None => Err ( MsgHandleErrInternal :: send_err_msg_no_close ( "Failed to find corresponding channel" , msg. channel_id ) )
1785+ }
17791786 }
17801787
17811788 fn internal_shutdown ( & self , their_node_id : & PublicKey , msg : & msgs:: Shutdown ) -> Result < ( Option < msgs:: Shutdown > , Option < msgs:: ClosingSigned > ) , MsgHandleErrInternal > {
@@ -2363,12 +2370,16 @@ impl ChainListener for ChannelManager {
23632370 channel_state. by_id . retain ( |_, channel| {
23642371 let chan_res = channel. block_connected ( header, height, txn_matched, indexes_of_txn_matched) ;
23652372 if let Ok ( Some ( funding_locked) ) = chan_res {
2366- let announcement_sigs = self . get_announcement_sigs ( channel) ;
23672373 pending_msg_events. push ( events:: MessageSendEvent :: SendFundingLocked {
23682374 node_id : channel. get_their_node_id ( ) ,
23692375 msg : funding_locked,
2370- announcement_sigs : announcement_sigs
23712376 } ) ;
2377+ if let Some ( announcement_sigs) = self . get_announcement_sigs ( channel) {
2378+ pending_msg_events. push ( events:: MessageSendEvent :: SendAnnouncementSignatures {
2379+ node_id : channel. get_their_node_id ( ) ,
2380+ msg : announcement_sigs,
2381+ } ) ;
2382+ }
23722383 short_to_id. insert ( channel. get_short_channel_id ( ) . unwrap ( ) , channel. channel_id ( ) ) ;
23732384 } else if let Err ( e) = chan_res {
23742385 pending_msg_events. push ( events:: MessageSendEvent :: HandleError {
@@ -2507,7 +2518,7 @@ impl ChannelMessageHandler for ChannelManager {
25072518 handle_error ! ( self , self . internal_funding_signed( their_node_id, msg) , their_node_id)
25082519 }
25092520
2510- fn handle_funding_locked ( & self , their_node_id : & PublicKey , msg : & msgs:: FundingLocked ) -> Result < Option < msgs :: AnnouncementSignatures > , HandleError > {
2521+ fn handle_funding_locked ( & self , their_node_id : & PublicKey , msg : & msgs:: FundingLocked ) -> Result < ( ) , HandleError > {
25112522 handle_error ! ( self , self . internal_funding_locked( their_node_id, msg) , their_node_id)
25122523 }
25132524
@@ -2954,30 +2965,27 @@ mod tests {
29542965
29552966 fn create_chan_between_nodes_with_value_confirm ( node_a : & Node , node_b : & Node , tx : & Transaction ) -> ( ( msgs:: FundingLocked , msgs:: AnnouncementSignatures ) , [ u8 ; 32 ] ) {
29562967 confirm_transaction ( & node_b. chain_monitor , & tx, tx. version ) ;
2957- let events_5 = node_b. node . get_and_clear_pending_msg_events ( ) ;
2958- assert_eq ! ( events_5. len( ) , 1 ) ;
2959- match events_5[ 0 ] {
2960- MessageSendEvent :: SendFundingLocked { ref node_id, ref msg, ref announcement_sigs } => {
2961- assert_eq ! ( * node_id, node_a. node. get_our_node_id( ) ) ;
2962- assert ! ( announcement_sigs. is_none( ) ) ;
2963- node_a. node . handle_funding_locked ( & node_b. node . get_our_node_id ( ) , msg) . unwrap ( )
2964- } ,
2965- _ => panic ! ( "Unexpected event" ) ,
2966- } ;
2968+ node_a. node . handle_funding_locked ( & node_b. node . get_our_node_id ( ) , & get_event_msg ! ( node_b, MessageSendEvent :: SendFundingLocked , node_a. node. get_our_node_id( ) ) ) . unwrap ( ) ;
29672969
29682970 let channel_id;
29692971
29702972 confirm_transaction ( & node_a. chain_monitor , & tx, tx. version ) ;
29712973 let events_6 = node_a. node . get_and_clear_pending_msg_events ( ) ;
2972- assert_eq ! ( events_6. len( ) , 1 ) ;
2973- ( match events_6[ 0 ] {
2974- MessageSendEvent :: SendFundingLocked { ref node_id, ref msg, ref announcement_sigs } => {
2974+ assert_eq ! ( events_6. len( ) , 2 ) ;
2975+ ( ( match events_6[ 0 ] {
2976+ MessageSendEvent :: SendFundingLocked { ref node_id, ref msg } => {
29752977 channel_id = msg. channel_id . clone ( ) ;
29762978 assert_eq ! ( * node_id, node_b. node. get_our_node_id( ) ) ;
2977- ( msg. clone ( ) , announcement_sigs. clone ( ) . unwrap ( ) )
2979+ msg. clone ( )
2980+ } ,
2981+ _ => panic ! ( "Unexpected event" ) ,
2982+ } , match events_6[ 1 ] {
2983+ MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } => {
2984+ assert_eq ! ( * node_id, node_b. node. get_our_node_id( ) ) ;
2985+ msg. clone ( )
29782986 } ,
29792987 _ => panic ! ( "Unexpected event" ) ,
2980- } , channel_id)
2988+ } ) , channel_id)
29812989 }
29822990
29832991 fn create_chan_between_nodes_with_value_a ( node_a : & Node , node_b : & Node , channel_value : u64 , push_msat : u64 ) -> ( ( msgs:: FundingLocked , msgs:: AnnouncementSignatures ) , [ u8 ; 32 ] , Transaction ) {
@@ -2987,11 +2995,9 @@ mod tests {
29872995 }
29882996
29892997 fn create_chan_between_nodes_with_value_b ( node_a : & Node , node_b : & Node , as_funding_msgs : & ( msgs:: FundingLocked , msgs:: AnnouncementSignatures ) ) -> ( msgs:: ChannelAnnouncement , msgs:: ChannelUpdate , msgs:: ChannelUpdate ) {
2990- let bs_announcement_sigs = {
2991- let bs_announcement_sigs = node_b. node . handle_funding_locked ( & node_a. node . get_our_node_id ( ) , & as_funding_msgs. 0 ) . unwrap ( ) . unwrap ( ) ;
2992- node_b. node . handle_announcement_signatures ( & node_a. node . get_our_node_id ( ) , & as_funding_msgs. 1 ) . unwrap ( ) ;
2993- bs_announcement_sigs
2994- } ;
2998+ node_b. node . handle_funding_locked ( & node_a. node . get_our_node_id ( ) , & as_funding_msgs. 0 ) . unwrap ( ) ;
2999+ let bs_announcement_sigs = get_event_msg ! ( node_b, MessageSendEvent :: SendAnnouncementSignatures , node_a. node. get_our_node_id( ) ) ;
3000+ node_b. node . handle_announcement_signatures ( & node_a. node . get_our_node_id ( ) , & as_funding_msgs. 1 ) . unwrap ( ) ;
29953001
29963002 let events_7 = node_b. node . get_and_clear_pending_msg_events ( ) ;
29973003 assert_eq ! ( events_7. len( ) , 1 ) ;
@@ -5034,9 +5040,14 @@ mod tests {
50345040
50355041 for chan_msgs in resp_1. drain ( ..) {
50365042 if pre_all_htlcs {
5037- let a = node_a. node . handle_funding_locked ( & node_b. node . get_our_node_id ( ) , & chan_msgs. 0 . unwrap ( ) ) ;
5038- let _announcement_sigs_opt = a. unwrap ( ) ;
5039- //TODO: Test announcement_sigs re-sending when we've implemented it
5043+ node_a. node . handle_funding_locked ( & node_b. node . get_our_node_id ( ) , & chan_msgs. 0 . unwrap ( ) ) . unwrap ( ) ;
5044+ let announcement_event = node_a. node . get_and_clear_pending_msg_events ( ) ;
5045+ if !announcement_event. is_empty ( ) {
5046+ assert_eq ! ( announcement_event. len( ) , 1 ) ;
5047+ if let MessageSendEvent :: SendAnnouncementSignatures { .. } = announcement_event[ 0 ] {
5048+ //TODO: Test announcement_sigs re-sending
5049+ } else { panic ! ( "Unexpected event!" ) ; }
5050+ }
50405051 } else {
50415052 assert ! ( chan_msgs. 0 . is_none( ) ) ;
50425053 }
@@ -5083,8 +5094,14 @@ mod tests {
50835094
50845095 for chan_msgs in resp_2. drain ( ..) {
50855096 if pre_all_htlcs {
5086- let _announcement_sigs_opt = node_b. node . handle_funding_locked ( & node_a. node . get_our_node_id ( ) , & chan_msgs. 0 . unwrap ( ) ) . unwrap ( ) ;
5087- //TODO: Test announcement_sigs re-sending when we've implemented it
5097+ node_b. node . handle_funding_locked ( & node_a. node . get_our_node_id ( ) , & chan_msgs. 0 . unwrap ( ) ) . unwrap ( ) ;
5098+ let announcement_event = node_b. node . get_and_clear_pending_msg_events ( ) ;
5099+ if !announcement_event. is_empty ( ) {
5100+ assert_eq ! ( announcement_event. len( ) , 1 ) ;
5101+ if let MessageSendEvent :: SendAnnouncementSignatures { .. } = announcement_event[ 0 ] {
5102+ //TODO: Test announcement_sigs re-sending
5103+ } else { panic ! ( "Unexpected event!" ) ; }
5104+ }
50885105 } else {
50895106 assert ! ( chan_msgs. 0 . is_none( ) ) ;
50905107 }
@@ -5390,9 +5407,8 @@ mod tests {
53905407 let events_1 = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
53915408 assert_eq ! ( events_1. len( ) , 1 ) ;
53925409 match events_1[ 0 ] {
5393- MessageSendEvent :: SendFundingLocked { ref node_id, msg : _, ref announcement_sigs } => {
5410+ MessageSendEvent :: SendFundingLocked { ref node_id, msg : _ } => {
53945411 assert_eq ! ( * node_id, nodes[ 1 ] . node. get_our_node_id( ) ) ;
5395- assert ! ( announcement_sigs. is_none( ) ) ;
53965412 } ,
53975413 _ => panic ! ( "Unexpected event" ) ,
53985414 }
@@ -5401,9 +5417,8 @@ mod tests {
54015417 let events_2 = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
54025418 assert_eq ! ( events_2. len( ) , 1 ) ;
54035419 match events_2[ 0 ] {
5404- MessageSendEvent :: SendFundingLocked { ref node_id, msg : _, ref announcement_sigs } => {
5420+ MessageSendEvent :: SendFundingLocked { ref node_id, msg : _ } => {
54055421 assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
5406- assert ! ( announcement_sigs. is_none( ) ) ;
54075422 } ,
54085423 _ => panic ! ( "Unexpected event" ) ,
54095424 }
0 commit comments