gossipd: have seeker quert interfaces take an id, not a struct peer.

Again, we don't necessarily have a peer pointer.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2024-01-31 14:58:33 +10:30
parent 275d59ead4
commit 0498695f1f
4 changed files with 39 additions and 30 deletions

View file

@ -239,7 +239,7 @@ static u8 *handle_channel_update_msg(struct peer *peer, const u8 *msg)
/* If it's an unknown channel, ask someone about it */
if (unknown_scid.u64 != 0)
query_unknown_channel(peer->daemon, peer, &unknown_scid);
query_unknown_channel(peer->daemon, &peer->id, unknown_scid);
return NULL;
}
@ -252,7 +252,7 @@ static u8 *handle_node_announce(struct peer *peer, const u8 *msg)
err = handle_node_announcement(peer->daemon->rstate, msg, &peer->id,
&was_unknown);
if (was_unknown)
query_unknown_node(peer->daemon->seeker, peer);
query_unknown_node(peer->daemon, &peer->id, NULL);
return err;
}

View file

@ -626,6 +626,18 @@ static void check_timestamps(struct seeker *seeker,
*stale |= query_flag;
}
static bool add_unknown_scid(struct seeker *seeker,
struct short_channel_id scid,
struct peer *peer)
{
/* Check we're not already getting this one. */
if (!uintmap_add(&seeker->unknown_scids, scid.u64, true))
return false;
set_preferred_peer(seeker, peer);
return true;
}
static void process_scid_probe(struct peer *peer,
u32 first_blocknum, u32 number_of_blocks,
const struct range_query_reply *replies)
@ -647,7 +659,8 @@ static void process_scid_probe(struct peer *peer,
continue;
}
new_unknown_scids |= add_unknown_scid(seeker, &replies[i].scid,
new_unknown_scids |= add_unknown_scid(seeker,
replies[i].scid,
peer);
}
@ -932,34 +945,26 @@ bool remove_unknown_scid(struct seeker *seeker,
return uintmap_del(&seeker->unknown_scids, scid->u64);
}
bool add_unknown_scid(struct seeker *seeker,
const struct short_channel_id *scid,
struct peer *peer)
{
/* Check we're not already getting this one. */
if (!uintmap_add(&seeker->unknown_scids, scid->u64, true))
return false;
set_preferred_peer(seeker, peer);
return true;
}
/* This peer told us about an update to an unknown channel. Ask it for a
* channel_announcement. */
void query_unknown_channel(struct daemon *daemon,
struct peer *peer,
const struct short_channel_id *id)
const struct node_id *source_peer,
struct short_channel_id unknown_scid)
{
/* Too many, or duplicate? */
if (!add_unknown_scid(daemon->seeker, id, peer))
return;
add_unknown_scid(daemon->seeker,
unknown_scid,
source_peer ? find_peer(daemon, source_peer) : NULL);
}
/* This peer told us about an unknown node. Start probing it. */
void query_unknown_node(struct seeker *seeker, struct peer *peer)
void query_unknown_node(struct daemon *daemon,
const struct node_id *source_peer,
const struct node_id *unknown_node)
{
seeker->unknown_nodes = true;
set_preferred_peer(seeker, peer);
daemon->seeker->unknown_nodes = true;
if (source_peer)
set_preferred_peer(daemon->seeker,
find_peer(daemon, source_peer));
}
/* Peer has died, NULL out any pointers we have */

View file

@ -3,25 +3,26 @@
#include "config.h"
struct daemon;
struct peer;
struct node_id;
struct short_channel_id;
struct seeker *new_seeker(struct daemon *daemon);
/* source_peer can be NULL! */
void query_unknown_channel(struct daemon *daemon,
struct peer *peer,
const struct short_channel_id *id);
const struct node_id *source_peer,
const struct short_channel_id unknown_scid);
void query_unknown_node(struct seeker *seeker, struct peer *peer);
/* source_peer can be NULL! */
void query_unknown_node(struct daemon *daemon,
const struct node_id *source_peer,
const struct node_id *unknown_node);
void seeker_setup_peer_gossip(struct seeker *seeker, struct peer *peer);
bool remove_unknown_scid(struct seeker *seeker,
const struct short_channel_id *scid,
bool found);
bool add_unknown_scid(struct seeker *seeker,
const struct short_channel_id *scid,
struct peer *peer);
void seeker_peer_gone(struct seeker *seeker,
const struct peer *peer);

View file

@ -26,6 +26,9 @@ bool blinding_next_pubkey(const struct pubkey *pk UNNEEDED,
const struct sha256 *h UNNEEDED,
struct pubkey *next UNNEEDED)
{ fprintf(stderr, "blinding_next_pubkey called!\n"); abort(); }
/* Generated stub for find_peer */
struct peer *find_peer(struct daemon *daemon UNNEEDED, const struct node_id *id UNNEEDED)
{ fprintf(stderr, "find_peer called!\n"); abort(); }
/* Generated stub for first_random_peer */
struct peer *first_random_peer(struct daemon *daemon UNNEEDED,
struct peer_node_id_map_iter *it UNNEEDED)