@@ -687,25 +687,22 @@ static void stash_remote_announce_sigs(struct channel *channel,
687687 * - MUST NOT send the `announcement_signatures` message.
688688 */
689689
690- static void send_channel_announce_sigs (struct channel * channel )
690+ static bool send_channel_announce_sigs (struct channel * channel )
691691{
692692 /* First 2 + 256 byte are the signatures and msg type, skip them */
693693 const size_t offset = 258 ;
694694 struct lightningd * ld = channel -> peer -> ld ;
695695 struct sha256_double hash ;
696- secp256k1_ecdsa_signature local_node_sig , local_bitcoin_sig ;
697696 struct channel_gossip * cg = channel -> channel_gossip ;
697+ secp256k1_ecdsa_signature local_node_sig , local_bitcoin_sig ;
698698 const u8 * ca , * msg ;
699699
700700 /* Wait until we've exchanged reestablish messages */
701701 if (!channel -> reestablished ) {
702702 log_debug (channel -> log , "channel_gossip: not sending channel_announcement_sigs until reestablished" );
703- return ;
703+ return false ;
704704 }
705705
706- if (cg -> sent_sigs )
707- return ;
708-
709706 ca = create_channel_announcement (tmpctx , channel , * channel -> scid ,
710707 NULL , NULL , NULL , NULL );
711708
@@ -722,20 +719,30 @@ static void send_channel_announce_sigs(struct channel *channel)
722719 if (!check_signed_hash (& hash , & local_node_sig , & ld -> our_pubkey )) {
723720 channel_internal_error (channel ,
724721 "HSM returned an invalid node signature" );
725- return ;
722+ return false ;
726723 }
727724
728725 if (!check_signed_hash (& hash , & local_bitcoin_sig , & channel -> local_funding_pubkey )) {
729726 channel_internal_error (channel ,
730727 "HSM returned an invalid bitcoin signature" );
731- return ;
728+ return false ;
732729 }
733730
734731 msg = towire_announcement_signatures (NULL ,
735732 & channel -> cid , * channel -> scid ,
736733 & local_node_sig , & local_bitcoin_sig );
737734 msg_to_peer (channel -> peer , take (msg ));
738- cg -> sent_sigs = true;
735+ return cg -> sent_sigs = true;
736+ }
737+
738+ static bool send_channel_announce_sigs_once (struct channel * channel )
739+ {
740+ struct channel_gossip * cg = channel -> channel_gossip ;
741+
742+ if (cg -> sent_sigs )
743+ return false;
744+
745+ return send_channel_announce_sigs (channel );
739746}
740747
741748/* Sends channel_announcement */
@@ -829,7 +836,7 @@ static void set_gossip_state(struct channel *channel,
829836 case CGOSSIP_ANNOUNCED :
830837 /* In case this snuck up on us (fast confirmations),
831838 * make sure we sent sigs */
832- send_channel_announce_sigs (channel );
839+ send_channel_announce_sigs_once (channel );
833840
834841 /* BOLT #7:
835842 * A recipient node:
@@ -897,7 +904,7 @@ static void update_gossip_state(struct channel *channel)
897904 return ;
898905 case CGOSSIP_WAITING_FOR_MATCHING_PEER_SIGS :
899906 case CGOSSIP_WAITING_FOR_ANNOUNCE_DEPTH :
900- send_channel_announce_sigs (channel );
907+ send_channel_announce_sigs_once (channel );
901908 /* fall thru */
902909 case CGOSSIP_WAITING_FOR_SCID :
903910 case CGOSSIP_PRIVATE :
@@ -1005,7 +1012,7 @@ void channel_gossip_got_announcement_sigs(struct channel *channel,
10051012
10061013send_our_sigs :
10071014 /* This only works once, so we won't spam them. */
1008- send_channel_announce_sigs (channel );
1015+ send_channel_announce_sigs_once (channel );
10091016}
10101017
10111018/* Short channel id changed (splice, or reorg). */
@@ -1196,7 +1203,8 @@ static void channel_reestablished_stable(struct channel *channel)
11961203}
11971204
11981205/* Peer has connected and successfully reestablished channel. */
1199- void channel_gossip_channel_reestablished (struct channel * channel )
1206+ void channel_gossip_channel_reestablished (struct channel * channel ,
1207+ bool announcement_sigs_requested )
12001208{
12011209 channel -> reestablished = true;
12021210 tal_free (channel -> stable_conn_timer );
@@ -1214,6 +1222,9 @@ void channel_gossip_channel_reestablished(struct channel *channel)
12141222 /* We can re-xmit sigs once per reconnect */
12151223 channel -> channel_gossip -> sent_sigs = false;
12161224
1225+ if (announcement_sigs_requested )
1226+ send_channel_announce_sigs (channel );
1227+
12171228 /* BOLT #7:
12181229 * - Upon reconnection (once the above timing requirements have
12191230 * been met):
@@ -1234,7 +1245,7 @@ void channel_gossip_channel_reestablished(struct channel *channel)
12341245 check_channel_gossip (channel );
12351246 return ;
12361247 case CGOSSIP_WAITING_FOR_MATCHING_PEER_SIGS :
1237- send_channel_announce_sigs (channel );
1248+ send_channel_announce_sigs_once (channel );
12381249 /* fall thru */
12391250 case CGOSSIP_PRIVATE :
12401251 case CGOSSIP_WAITING_FOR_ANNOUNCE_DEPTH :
0 commit comments