mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-15 20:09:18 +01:00
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:
parent
275d59ead4
commit
0498695f1f
4 changed files with 39 additions and 30 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue