Skip to content
This repository has been archived by the owner on Apr 22, 2024. It is now read-only.

Commit

Permalink
It's ok for seed nodes to publish peer book entries
Browse files Browse the repository at this point in the history
  • Loading branch information
Vagabond committed Aug 12, 2021
1 parent 291ee0d commit ac2c148
Showing 1 changed file with 17 additions and 23 deletions.
40 changes: 17 additions & 23 deletions src/peerbook/libp2p_peerbook.erl
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,8 @@ put(#peerbook{tid=TID, stale_time=StaleTime}=Handle, PeerList0, Prevalidated) ->
-spec get(peerbook(), libp2p_crypto:pubkey_bin()) -> {ok, libp2p_peer:peer()} | {error, term()}.
get(#peerbook{tid=TID}=Handle, ID) ->
ThisPeerId = libp2p_swarm:pubkey_bin(TID),
SeedNode = application:get_env(libp2p, seed_node, false),
case fetch_peer(ID, Handle) of
{error, not_found} when ID == ThisPeerId, SeedNode == false ->
{error, not_found} when ID == ThisPeerId ->
gen_server:call(libp2p_swarm:peerbook_pid(TID), update_this_peer, infinity),
get(Handle, ID);
{error, Error} ->
Expand Down Expand Up @@ -584,27 +583,22 @@ mk_this_peer(CurrentPeer, State=#state{tid=TID}) ->

-spec update_this_peer(#state{}) -> #state{}.
update_this_peer(State=#state{tid=TID}) ->
case application:get_env(libp2p, seed_node, false) of
false ->
SwarmAddr = libp2p_swarm:pubkey_bin(TID),
case unsafe_fetch_peer(SwarmAddr, State#state.peerbook) of
{error, not_found} ->
NewPeer = mk_this_peer(undefined, State),
update_this_peer(NewPeer, get_async_signed_metadata(State));
{ok, OldPeer} ->
case mk_this_peer(OldPeer, State) of
{ok, NewPeer} ->
case libp2p_peer:is_similar(NewPeer, OldPeer) of
true -> State;
false -> update_this_peer({ok, NewPeer}, get_async_signed_metadata(State))
end;
{error, Error} ->
lager:notice("Failed to make peer: ~p", [Error]),
State
end
end;
true ->
State
SwarmAddr = libp2p_swarm:pubkey_bin(TID),
case unsafe_fetch_peer(SwarmAddr, State#state.peerbook) of
{error, not_found} ->
NewPeer = mk_this_peer(undefined, State),
update_this_peer(NewPeer, get_async_signed_metadata(State));
{ok, OldPeer} ->
case mk_this_peer(OldPeer, State) of
{ok, NewPeer} ->
case libp2p_peer:is_similar(NewPeer, OldPeer) of
true -> State;
false -> update_this_peer({ok, NewPeer}, get_async_signed_metadata(State))
end;
{error, Error} ->
lager:notice("Failed to make peer: ~p", [Error]),
State
end
end.

-spec update_this_peer({ok, libp2p_peer:peer()} | {error, term()}, #state{}) -> #state{}.
Expand Down

0 comments on commit ac2c148

Please sign in to comment.