@@ -4771,11 +4771,14 @@ macro_rules! handle_chan_reestablish_msgs {
47714771 None
47724772 } ;
47734773
4774- if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, msg: _ } ) =
4774+ let mut announcement_sigs = None ; // May be now or later
4775+ if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } ) =
47754776 msg_events. get( idx)
47764777 {
47774778 idx += 1 ;
47784779 assert_eq!( * node_id, $dst_node. node. get_our_node_id( ) ) ;
4780+ assert!( announcement_sigs. is_none( ) ) ;
4781+ announcement_sigs = Some ( msg. clone( ) ) ;
47794782 }
47804783
47814784 let mut had_channel_update = false ; // ChannelUpdate may be now or later, but not both
@@ -4841,16 +4844,26 @@ macro_rules! handle_chan_reestablish_msgs {
48414844 assert!( !had_channel_update) ;
48424845 }
48434846
4844- assert_eq!( msg_events. len( ) , idx) ;
4847+ if let Some ( & MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } ) =
4848+ msg_events. get( idx)
4849+ {
4850+ idx += 1 ;
4851+ assert_eq!( * node_id, $dst_node. node. get_our_node_id( ) ) ;
4852+ assert!( announcement_sigs. is_none( ) ) ;
4853+ announcement_sigs = Some ( msg. clone( ) ) ;
4854+ }
4855+
4856+ assert_eq!( msg_events. len( ) , idx, "{msg_events:?}" ) ;
48454857
4846- ( channel_ready, revoke_and_ack, commitment_update, order)
4858+ ( channel_ready, revoke_and_ack, commitment_update, order, announcement_sigs )
48474859 } } ;
48484860}
48494861
48504862pub struct ReconnectArgs < ' a , ' b , ' c , ' d > {
48514863 pub node_a : & ' a Node < ' b , ' c , ' d > ,
48524864 pub node_b : & ' a Node < ' b , ' c , ' d > ,
48534865 pub send_channel_ready : ( bool , bool ) ,
4866+ pub send_announcement_sigs : ( bool , bool ) ,
48544867 pub pending_responding_commitment_signed : ( bool , bool ) ,
48554868 /// Indicates that the pending responding commitment signed will be a dup for the recipient,
48564869 /// and no monitor update is expected
@@ -4869,6 +4882,7 @@ impl<'a, 'b, 'c, 'd> ReconnectArgs<'a, 'b, 'c, 'd> {
48694882 node_a,
48704883 node_b,
48714884 send_channel_ready : ( false , false ) ,
4885+ send_announcement_sigs : ( false , false ) ,
48724886 pending_responding_commitment_signed : ( false , false ) ,
48734887 pending_responding_commitment_signed_dup_monitor : ( false , false ) ,
48744888 pending_htlc_adds : ( 0 , 0 ) ,
@@ -4888,6 +4902,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
48884902 node_a,
48894903 node_b,
48904904 send_channel_ready,
4905+ send_announcement_sigs,
48914906 pending_htlc_adds,
48924907 pending_htlc_claims,
48934908 pending_htlc_fails,
@@ -4969,7 +4984,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49694984 && pending_cell_htlc_fails. 1 == 0 )
49704985 ) ;
49714986
4972- for chan_msgs in resp_1. drain ( ..) {
4987+ for mut chan_msgs in resp_1. drain ( ..) {
49734988 if send_channel_ready. 0 {
49744989 node_a. node . handle_channel_ready ( node_b_id, & chan_msgs. 0 . unwrap ( ) ) ;
49754990 let announcement_event = node_a. node . get_and_clear_pending_msg_events ( ) ;
@@ -4984,6 +4999,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49844999 } else {
49855000 assert ! ( chan_msgs. 0 . is_none( ) ) ;
49865001 }
5002+ if send_announcement_sigs. 0 {
5003+ let announcement_sigs = chan_msgs. 4 . take ( ) . unwrap ( ) ;
5004+ node_a. node . handle_announcement_signatures ( node_b_id, & announcement_sigs) ;
5005+ let msg_events = node_a. node . get_and_clear_pending_msg_events ( ) ;
5006+ assert_eq ! ( msg_events. len( ) , 1 , "{msg_events:?}" ) ;
5007+ if let MessageSendEvent :: BroadcastChannelAnnouncement { .. } = msg_events[ 0 ] {
5008+ } else {
5009+ panic ! ( "Unexpected event! {:?}" , msg_events[ 0 ] ) ;
5010+ }
5011+ } else {
5012+ assert ! ( chan_msgs. 4 . is_none( ) ) ;
5013+ }
49875014 if pending_raa. 0 {
49885015 assert ! ( chan_msgs. 3 == RAACommitmentOrder :: RevokeAndACKFirst ) ;
49895016 node_a. node . handle_revoke_and_ack ( node_b_id, & chan_msgs. 1 . unwrap ( ) ) ;
@@ -5048,7 +5075,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50485075 }
50495076 }
50505077
5051- for chan_msgs in resp_2. drain ( ..) {
5078+ for mut chan_msgs in resp_2. drain ( ..) {
50525079 if send_channel_ready. 1 {
50535080 node_b. node . handle_channel_ready ( node_a_id, & chan_msgs. 0 . unwrap ( ) ) ;
50545081 let announcement_event = node_b. node . get_and_clear_pending_msg_events ( ) ;
@@ -5063,6 +5090,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50635090 } else {
50645091 assert ! ( chan_msgs. 0 . is_none( ) ) ;
50655092 }
5093+ if send_announcement_sigs. 1 {
5094+ let announcement_sigs = chan_msgs. 4 . take ( ) . unwrap ( ) ;
5095+ node_b. node . handle_announcement_signatures ( node_a_id, & announcement_sigs) ;
5096+ let mut msg_events = node_b. node . get_and_clear_pending_msg_events ( ) ;
5097+ assert_eq ! ( msg_events. len( ) , 1 , "{msg_events:?}" ) ;
5098+ if let MessageSendEvent :: BroadcastChannelAnnouncement { .. } = msg_events. remove ( 0 ) {
5099+ } else {
5100+ panic ! ( ) ;
5101+ }
5102+ } else {
5103+ assert ! ( chan_msgs. 4 . is_none( ) ) ;
5104+ }
50665105 if pending_raa. 1 {
50675106 assert ! ( chan_msgs. 3 == RAACommitmentOrder :: RevokeAndACKFirst ) ;
50685107 node_b. node . handle_revoke_and_ack ( node_a_id, & chan_msgs. 1 . unwrap ( ) ) ;
0 commit comments