@@ -4741,11 +4741,14 @@ macro_rules! handle_chan_reestablish_msgs {
47414741 None
47424742 } ;
47434743
4744- if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, msg: _ } ) =
4744+ let mut announcement_sigs = None ; // May be now or later
4745+ if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } ) =
47454746 msg_events. get( idx)
47464747 {
47474748 idx += 1 ;
47484749 assert_eq!( * node_id, $dst_node. node. get_our_node_id( ) ) ;
4750+ assert!( announcement_sigs. is_none( ) ) ;
4751+ announcement_sigs = Some ( msg. clone( ) ) ;
47494752 }
47504753
47514754 let mut had_channel_update = false ; // ChannelUpdate may be now or later, but not both
@@ -4811,16 +4814,26 @@ macro_rules! handle_chan_reestablish_msgs {
48114814 assert!( !had_channel_update) ;
48124815 }
48134816
4814- assert_eq!( msg_events. len( ) , idx) ;
4817+ if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } ) =
4818+ msg_events. get( idx)
4819+ {
4820+ idx += 1 ;
4821+ assert_eq!( * node_id, $dst_node. node. get_our_node_id( ) ) ;
4822+ assert!( announcement_sigs. is_none( ) ) ;
4823+ announcement_sigs = Some ( msg. clone( ) ) ;
4824+ }
4825+
4826+ assert_eq!( msg_events. len( ) , idx, "{msg_events:?}" ) ;
48154827
4816- ( channel_ready, revoke_and_ack, commitment_update, order)
4828+ ( channel_ready, revoke_and_ack, commitment_update, order, announcement_sigs )
48174829 } } ;
48184830}
48194831
48204832pub struct ReconnectArgs < ' a , ' b , ' c , ' d > {
48214833 pub node_a : & ' a Node < ' b , ' c , ' d > ,
48224834 pub node_b : & ' a Node < ' b , ' c , ' d > ,
48234835 pub send_channel_ready : ( bool , bool ) ,
4836+ pub send_announcement_sigs : ( bool , bool ) ,
48244837 pub pending_responding_commitment_signed : ( bool , bool ) ,
48254838 /// Indicates that the pending responding commitment signed will be a dup for the recipient,
48264839 /// and no monitor update is expected
@@ -4839,6 +4852,7 @@ impl<'a, 'b, 'c, 'd> ReconnectArgs<'a, 'b, 'c, 'd> {
48394852 node_a,
48404853 node_b,
48414854 send_channel_ready : ( false , false ) ,
4855+ send_announcement_sigs : ( false , false ) ,
48424856 pending_responding_commitment_signed : ( false , false ) ,
48434857 pending_responding_commitment_signed_dup_monitor : ( false , false ) ,
48444858 pending_htlc_adds : ( 0 , 0 ) ,
@@ -4858,6 +4872,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
48584872 node_a,
48594873 node_b,
48604874 send_channel_ready,
4875+ send_announcement_sigs,
48614876 pending_htlc_adds,
48624877 pending_htlc_claims,
48634878 pending_htlc_fails,
@@ -4939,7 +4954,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49394954 && pending_cell_htlc_fails. 1 == 0 )
49404955 ) ;
49414956
4942- for chan_msgs in resp_1. drain ( ..) {
4957+ for mut chan_msgs in resp_1. drain ( ..) {
49434958 if send_channel_ready. 0 {
49444959 node_a. node . handle_channel_ready ( node_b_id, & chan_msgs. 0 . unwrap ( ) ) ;
49454960 let announcement_event = node_a. node . get_and_clear_pending_msg_events ( ) ;
@@ -4954,6 +4969,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49544969 } else {
49554970 assert ! ( chan_msgs. 0 . is_none( ) ) ;
49564971 }
4972+ if send_announcement_sigs. 0 {
4973+ let announcement_sigs = chan_msgs. 4 . take ( ) . unwrap ( ) ;
4974+ node_a. node . handle_announcement_signatures ( node_b_id, & announcement_sigs) ;
4975+ let msg_events = node_a. node . get_and_clear_pending_msg_events ( ) ;
4976+ assert_eq ! ( msg_events. len( ) , 1 , "{msg_events:?}" ) ;
4977+ if let MessageSendEvent :: BroadcastChannelAnnouncement { .. } = msg_events[ 0 ] {
4978+ } else {
4979+ panic ! ( "Unexpected event! {:?}" , msg_events[ 0 ] ) ;
4980+ }
4981+ } else {
4982+ assert ! ( chan_msgs. 4 . is_none( ) ) ;
4983+ }
49574984 if pending_raa. 0 {
49584985 assert ! ( chan_msgs. 3 == RAACommitmentOrder :: RevokeAndACKFirst ) ;
49594986 node_a. node . handle_revoke_and_ack ( node_b_id, & chan_msgs. 1 . unwrap ( ) ) ;
@@ -5018,7 +5045,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50185045 }
50195046 }
50205047
5021- for chan_msgs in resp_2. drain ( ..) {
5048+ for mut chan_msgs in resp_2. drain ( ..) {
50225049 if send_channel_ready. 1 {
50235050 node_b. node . handle_channel_ready ( node_a_id, & chan_msgs. 0 . unwrap ( ) ) ;
50245051 let announcement_event = node_b. node . get_and_clear_pending_msg_events ( ) ;
@@ -5033,6 +5060,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50335060 } else {
50345061 assert ! ( chan_msgs. 0 . is_none( ) ) ;
50355062 }
5063+ if send_announcement_sigs. 1 {
5064+ let announcement_sigs = chan_msgs. 4 . take ( ) . unwrap ( ) ;
5065+ node_b. node . handle_announcement_signatures ( node_a_id, & announcement_sigs) ;
5066+ let mut msg_events = node_b. node . get_and_clear_pending_msg_events ( ) ;
5067+ assert_eq ! ( msg_events. len( ) , 1 , "{msg_events:?}" ) ;
5068+ if let MessageSendEvent :: BroadcastChannelAnnouncement { .. } = msg_events. remove ( 0 ) {
5069+ } else {
5070+ panic ! ( ) ;
5071+ }
5072+ } else {
5073+ assert ! ( chan_msgs. 4 . is_none( ) ) ;
5074+ }
50365075 if pending_raa. 1 {
50375076 assert ! ( chan_msgs. 3 == RAACommitmentOrder :: RevokeAndACKFirst ) ;
50385077 node_b. node . handle_revoke_and_ack ( node_a_id, & chan_msgs. 1 . unwrap ( ) ) ;
0 commit comments