mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-27 05:17:49 +08:00
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package strategy
|
|
|
|
import (
|
|
bsmsg "github.com/jbenet/go-ipfs/exchange/bitswap/message"
|
|
peer "github.com/jbenet/go-ipfs/peer"
|
|
u "github.com/jbenet/go-ipfs/util"
|
|
)
|
|
|
|
type Strategy interface {
|
|
// Returns a slice of Peers with whom the local node has active sessions
|
|
Peers() []*peer.Peer
|
|
|
|
// BlockIsWantedByPeer returns true if peer wants the block given by this
|
|
// key
|
|
BlockIsWantedByPeer(u.Key, *peer.Peer) bool
|
|
|
|
// ShouldSendTo(Peer) decides whether to send data to this Peer
|
|
ShouldSendBlockToPeer(u.Key, *peer.Peer) bool
|
|
|
|
// Seed initializes the decider to a deterministic state
|
|
Seed(int64)
|
|
|
|
// MessageReceived records receipt of message for accounting purposes
|
|
MessageReceived(*peer.Peer, bsmsg.BitSwapMessage) error
|
|
|
|
// MessageSent records sending of message for accounting purposes
|
|
MessageSent(*peer.Peer, bsmsg.BitSwapMessage) error
|
|
|
|
NumBytesSentTo(*peer.Peer) uint64
|
|
|
|
NumBytesReceivedFrom(*peer.Peer) uint64
|
|
}
|
|
|
|
type WantList interface {
|
|
// Peer returns the owner of the WantList
|
|
Peer() *peer.Peer
|
|
|
|
// Intersection returns the keys common to both WantLists
|
|
Intersection(WantList) WantList
|
|
|
|
KeySet
|
|
}
|
|
|
|
// TODO(brian): potentially move this somewhere more generic. For now, it's
|
|
// useful in BitSwap operations.
|
|
|
|
type KeySet interface {
|
|
Contains(u.Key) bool
|
|
Keys() []u.Key
|
|
}
|