| 706 | } |
| 707 | |
| 708 | static void process_scid_probe(struct peer *peer, |
| 709 | u32 first_blocknum, u32 number_of_blocks, |
| 710 | const struct range_query_reply *replies) |
| 711 | { |
| 712 | struct daemon *daemon = peer->daemon; |
| 713 | struct seeker *seeker = daemon->seeker; |
| 714 | bool new_unknown_scids = false; |
| 715 | struct gossmap *gossmap; |
| 716 | |
| 717 | /* We might have given up on them, then they replied. */ |
| 718 | if (seeker->random_peer != peer) |
| 719 | return; |
| 720 | |
| 721 | seeker->random_peer = NULL; |
| 722 | gossmap = gossmap_manage_get_gossmap(daemon->gm); |
| 723 | |
| 724 | for (size_t i = 0; i < tal_count(replies); i++) { |
| 725 | struct gossmap_chan *c = gossmap_find_chan(gossmap, |
| 726 | &replies[i].scid); |
| 727 | if (c) { |
| 728 | check_timestamps(seeker, gossmap, c, &replies[i].ts, peer); |
| 729 | continue; |
| 730 | } |
| 731 | |
| 732 | new_unknown_scids |= add_unknown_scid(seeker, |
| 733 | replies[i].scid, |
| 734 | peer); |
| 735 | } |
| 736 | |
| 737 | /* No new unknown scids, or no more to ask? We give some wiggle |
| 738 | * room in case blocks came in since we started. */ |
| 739 | if (new_unknown_scids |
| 740 | && next_block_range(seeker, number_of_blocks, |
| 741 | &first_blocknum, &number_of_blocks)) { |
| 742 | /* This must return a peer, since we have the current peer! */ |
| 743 | peer = random_seeker(seeker, peer_can_take_range_query); |
| 744 | assert(peer); |
| 745 | selected_peer(seeker, peer); |
| 746 | |
| 747 | query_channel_range(seeker->daemon, peer, |
| 748 | first_blocknum, number_of_blocks, |
| 749 | QUERY_ADD_TIMESTAMPS, |
| 750 | process_scid_probe); |
| 751 | return; |
| 752 | } |
| 753 | |
| 754 | /* Channel probe finished, try asking for 128 unannounced nodes. */ |
| 755 | if (!get_unannounced_nodes(seeker, seeker->daemon, 128, |
| 756 | &seeker->nannounce_scids, |
| 757 | &seeker->nannounce_query_flags)) { |
| 758 | /* No unknown nodes. Great! */ |
| 759 | set_state(seeker, NORMAL, NULL, "No unannounced nodes"); |
| 760 | return; |
| 761 | } |
| 762 | |
| 763 | peer_gossip_probe_nannounces(seeker); |
| 764 | } |
| 765 |
nothing calls this directly
no test coverage detected