Source File
routing.go
Belonging Package
github.com/libp2p/go-libp2p/core/routing
// Package routing provides interfaces for peer routing and content routing in libp2p.package routingimport (cicid)// ErrNotFound is returned when the router fails to find the requested record.var ErrNotFound = errors.New("routing: not found")// ErrNotSupported is returned when the router doesn't support the given record// type/operation.var ErrNotSupported = errors.New("routing: operation or key not supported")// ContentProviding is able to announce where to find content on the Routing// system.type ContentProviding interface {// Provide adds the given cid to the content routing system. If 'true' is// passed, it also announces it, otherwise it is just kept in the local// accounting of which objects are being provided.Provide(context.Context, cid.Cid, bool) error}// ContentDiscovery is able to retrieve providers for a given CID using// the Routing system.type ContentDiscovery interface {// Search for peers who are able to provide a given key//// When count is 0, this method will return an unbounded number of// results.FindProvidersAsync(context.Context, cid.Cid, int) <-chan peer.AddrInfo}// ContentRouting is a value provider layer of indirection. It is used to find// information about who has what content.//// Content is identified by CID (content identifier), which encodes a hash// of the identified content in a future-proof manner.type ContentRouting interface {ContentProvidingContentDiscovery}// PeerRouting is a way to find address information about certain peers.// This can be implemented by a simple lookup table, a tracking server,// or even a DHT.type PeerRouting interface {// FindPeer searches for a peer with given ID, returns a peer.AddrInfo// with relevant addresses.FindPeer(context.Context, peer.ID) (peer.AddrInfo, error)}// ValueStore is a basic Put/Get interface.type ValueStore interface {// PutValue adds value corresponding to given Key.PutValue(context.Context, string, []byte, ...Option) error// GetValue searches for the value corresponding to given Key.GetValue(context.Context, string, ...Option) ([]byte, error)// SearchValue searches for better and better values from this value// store corresponding to the given Key. By default, implementations must// stop the search after a good value is found. A 'good' value is a value// that would be returned from GetValue.//// Useful when you want a result *now* but still want to hear about// better/newer results.//// Implementations of this methods won't return ErrNotFound. When a value// couldn't be found, the channel will get closed without passing any resultsSearchValue(context.Context, string, ...Option) (<-chan []byte, error)}// Routing is the combination of different routing types supported by libp2p.// It can be satisfied by a single item (such as a DHT) or multiple different// pieces that are more optimized to each task.type Routing interface {ContentRoutingPeerRoutingValueStore// Bootstrap allows callers to hint to the routing system to get into a// Bootstrapped state and remain there. It is not a synchronous call.Bootstrap(context.Context) error// TODO expose io.Closer or plain-old Close error}// PubKeyFetcher is an interfaces that should be implemented by value stores// that can optimize retrieval of public keys.//// TODO(steb): Consider removing, see https://github.com/libp2p/go-libp2p-routing/issues/22.type PubKeyFetcher interface {// GetPublicKey returns the public key for the given peer.GetPublicKey(context.Context, peer.ID) (ci.PubKey, error)}// KeyForPublicKey returns the key used to retrieve public keys// from a value store.func ( peer.ID) string {return "/pk/" + string()}// GetPublicKey retrieves the public key associated with the given peer ID from// the value store.//// If the ValueStore is also a PubKeyFetcher, this method will call GetPublicKey// (which may be better optimized) instead of GetValue.func ( ValueStore, context.Context, peer.ID) (ci.PubKey, error) {switch , := .ExtractPublicKey(); {case peer.ErrNoPublicKey:// check the datastorecase nil:return , nildefault:return nil,}if , := .(PubKeyFetcher); {// If we have a DHT as our routing system, use optimized fetcherreturn .GetPublicKey(, )}:= KeyForPublicKey(), := .GetValue(, )if != nil {return nil,}// get PublicKey from node.Datareturn ci.UnmarshalPublicKey()}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |