@@ -4796,11 +4796,14 @@ macro_rules! handle_chan_reestablish_msgs {
47964796 None
47974797 } ;
47984798
4799- if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, msg: _ } ) =
4799+ let mut announcement_sigs = None ; // May be now or later
4800+ if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } ) =
48004801 msg_events. get( idx)
48014802 {
48024803 idx += 1 ;
48034804 assert_eq!( * node_id, $dst_node. node. get_our_node_id( ) ) ;
4805+ assert!( announcement_sigs. is_none( ) ) ;
4806+ announcement_sigs = Some ( msg. clone( ) ) ;
48044807 }
48054808
48064809 let mut had_channel_update = false ; // ChannelUpdate may be now or later, but not both
@@ -4859,23 +4862,33 @@ macro_rules! handle_chan_reestablish_msgs {
48594862 }
48604863 }
48614864
4865+ if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } ) =
4866+ msg_events. get( idx)
4867+ {
4868+ idx += 1 ;
4869+ assert_eq!( * node_id, $dst_node. node. get_our_node_id( ) ) ;
4870+ assert!( announcement_sigs. is_none( ) ) ;
4871+ announcement_sigs = Some ( msg. clone( ) ) ;
4872+ }
4873+
48624874 if let Some ( & MessageSendEvent :: SendChannelUpdate { ref node_id, .. } ) = msg_events. get( idx)
48634875 {
48644876 assert_eq!( * node_id, $dst_node. node. get_our_node_id( ) ) ;
48654877 idx += 1 ;
48664878 assert!( !had_channel_update) ;
48674879 }
48684880
4869- assert_eq!( msg_events. len( ) , idx) ;
4881+ assert_eq!( msg_events. len( ) , idx, "{msg_events:?}" ) ;
48704882
4871- ( channel_ready, revoke_and_ack, commitment_update, order)
4883+ ( channel_ready, revoke_and_ack, commitment_update, order, announcement_sigs )
48724884 } } ;
48734885}
48744886
48754887pub struct ReconnectArgs < ' a , ' b , ' c , ' d > {
48764888 pub node_a : & ' a Node < ' b , ' c , ' d > ,
48774889 pub node_b : & ' a Node < ' b , ' c , ' d > ,
48784890 pub send_channel_ready : ( bool , bool ) ,
4891+ pub send_announcement_sigs : ( bool , bool ) ,
48794892 pub pending_responding_commitment_signed : ( bool , bool ) ,
48804893 /// Indicates that the pending responding commitment signed will be a dup for the recipient,
48814894 /// and no monitor update is expected
@@ -4894,6 +4907,7 @@ impl<'a, 'b, 'c, 'd> ReconnectArgs<'a, 'b, 'c, 'd> {
48944907 node_a,
48954908 node_b,
48964909 send_channel_ready : ( false , false ) ,
4910+ send_announcement_sigs : ( false , false ) ,
48974911 pending_responding_commitment_signed : ( false , false ) ,
48984912 pending_responding_commitment_signed_dup_monitor : ( false , false ) ,
48994913 pending_htlc_adds : ( 0 , 0 ) ,
@@ -4913,6 +4927,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49134927 node_a,
49144928 node_b,
49154929 send_channel_ready,
4930+ send_announcement_sigs,
49164931 pending_htlc_adds,
49174932 pending_htlc_claims,
49184933 pending_htlc_fails,
@@ -4994,7 +5009,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49945009 && pending_cell_htlc_fails. 1 == 0 )
49955010 ) ;
49965011
4997- for chan_msgs in resp_1. drain ( ..) {
5012+ for mut chan_msgs in resp_1. drain ( ..) {
49985013 if send_channel_ready. 0 {
49995014 node_a. node . handle_channel_ready ( node_b_id, & chan_msgs. 0 . unwrap ( ) ) ;
50005015 let announcement_event = node_a. node . get_and_clear_pending_msg_events ( ) ;
@@ -5009,6 +5024,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50095024 } else {
50105025 assert ! ( chan_msgs. 0 . is_none( ) ) ;
50115026 }
5027+ if send_announcement_sigs. 0 {
5028+ let announcement_sigs = chan_msgs. 4 . take ( ) . unwrap ( ) ;
5029+ node_a. node . handle_announcement_signatures ( node_b_id, & announcement_sigs) ;
5030+ let msg_events = node_a. node . get_and_clear_pending_msg_events ( ) ;
5031+ assert_eq ! ( msg_events. len( ) , 1 , "{msg_events:?}" ) ;
5032+ if let MessageSendEvent :: BroadcastChannelAnnouncement { .. } = msg_events[ 0 ] {
5033+ } else {
5034+ panic ! ( "Unexpected event! {:?}" , msg_events[ 0 ] ) ;
5035+ }
5036+ } else {
5037+ assert ! ( chan_msgs. 4 . is_none( ) ) ;
5038+ }
50125039 if pending_raa. 0 {
50135040 assert ! ( chan_msgs. 3 == RAACommitmentOrder :: RevokeAndACKFirst ) ;
50145041 node_a. node . handle_revoke_and_ack ( node_b_id, & chan_msgs. 1 . unwrap ( ) ) ;
@@ -5073,7 +5100,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50735100 }
50745101 }
50755102
5076- for chan_msgs in resp_2. drain ( ..) {
5103+ for mut chan_msgs in resp_2. drain ( ..) {
50775104 if send_channel_ready. 1 {
50785105 node_b. node . handle_channel_ready ( node_a_id, & chan_msgs. 0 . unwrap ( ) ) ;
50795106 let announcement_event = node_b. node . get_and_clear_pending_msg_events ( ) ;
@@ -5088,6 +5115,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50885115 } else {
50895116 assert ! ( chan_msgs. 0 . is_none( ) ) ;
50905117 }
5118+ if send_announcement_sigs. 1 {
5119+ let announcement_sigs = chan_msgs. 4 . take ( ) . unwrap ( ) ;
5120+ node_b. node . handle_announcement_signatures ( node_a_id, & announcement_sigs) ;
5121+ let mut msg_events = node_b. node . get_and_clear_pending_msg_events ( ) ;
5122+ assert_eq ! ( msg_events. len( ) , 1 , "{msg_events:?}" ) ;
5123+ if let MessageSendEvent :: BroadcastChannelAnnouncement { .. } = msg_events. remove ( 0 ) {
5124+ } else {
5125+ panic ! ( ) ;
5126+ }
5127+ } else {
5128+ assert ! ( chan_msgs. 4 . is_none( ) ) ;
5129+ }
50915130 if pending_raa. 1 {
50925131 assert ! ( chan_msgs. 3 == RAACommitmentOrder :: RevokeAndACKFirst ) ;
50935132 node_b. node . handle_revoke_and_ack ( node_a_id, & chan_msgs. 1 . unwrap ( ) ) ;
0 commit comments