| 628 | } |
| 629 | |
| 630 | static void process_scid_probe(struct peer *peer, |
| 631 | u32 first_blocknum, u32 number_of_blocks, |
| 632 | const struct range_query_reply *replies) |
| 633 | { |
| 634 | struct seeker *seeker = peer->daemon->seeker; |
| 635 | bool new_unknown_scids = false; |
| 636 | |
| 637 | /* We might have given up on them, then they replied. */ |
| 638 | if (seeker->random_peer_softref != peer) |
| 639 | return; |
| 640 | |
| 641 | clear_softref(seeker, &seeker->random_peer_softref); |
| 642 | |
| 643 | for (size_t i = 0; i < tal_count(replies); i++) { |
| 644 | struct chan *c = get_channel(seeker->daemon->rstate, |
| 645 | &replies[i].scid); |
| 646 | if (c) { |
| 647 | check_timestamps(seeker, c, &replies[i].ts, peer); |
| 648 | continue; |
| 649 | } |
| 650 | |
| 651 | new_unknown_scids |= add_unknown_scid(seeker, &replies[i].scid, |
| 652 | peer); |
| 653 | } |
| 654 | |
| 655 | /* No new unknown scids, or no more to ask? We give some wiggle |
| 656 | * room in case blocks came in since we started. */ |
| 657 | if (new_unknown_scids |
| 658 | && next_block_range(seeker, number_of_blocks, |
| 659 | &first_blocknum, &number_of_blocks)) { |
| 660 | /* This must return a peer, since we have the current peer! */ |
| 661 | peer = random_seeker(seeker, peer_can_take_range_query); |
| 662 | assert(peer); |
| 663 | selected_peer(seeker, peer); |
| 664 | |
| 665 | query_channel_range(seeker->daemon, peer, |
| 666 | first_blocknum, number_of_blocks, |
| 667 | QUERY_ADD_TIMESTAMPS, |
| 668 | process_scid_probe); |
| 669 | return; |
| 670 | } |
| 671 | |
| 672 | /* Channel probe finished, try asking for 128 unannounced nodes. */ |
| 673 | if (!get_unannounced_nodes(seeker, seeker->daemon->rstate, 128, |
| 674 | &seeker->nannounce_scids, |
| 675 | &seeker->nannounce_query_flags)) { |
| 676 | /* No unknown nodes. Great! */ |
| 677 | set_state(seeker, NORMAL, NULL, "No unannounced nodes"); |
| 678 | return; |
| 679 | } |
| 680 | |
| 681 | peer_gossip_probe_nannounces(seeker); |
| 682 | } |
| 683 | |
| 684 | /* Pick a peer, ask it for a few scids, to check. */ |
| 685 | static void peer_gossip_probe_scids(struct seeker *seeker) |
nothing calls this directly
no test coverage detected