interface.go 1.02 KB
Newer Older
1 2 3
package strategy

import (
Jeromy's avatar
Jeromy committed
4 5
	"time"

6 7 8 9 10 11
	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 {
12
	// Returns a slice of Peers with whom the local node has active sessions
13
	Peers() []peer.Peer
14

15 16
	// BlockIsWantedByPeer returns true if peer wants the block given by this
	// key
17
	BlockIsWantedByPeer(u.Key, peer.Peer) bool
18 19

	// ShouldSendTo(Peer) decides whether to send data to this Peer
20
	ShouldSendBlockToPeer(u.Key, peer.Peer) bool
21 22 23 24 25

	// Seed initializes the decider to a deterministic state
	Seed(int64)

	// MessageReceived records receipt of message for accounting purposes
26
	MessageReceived(peer.Peer, bsmsg.BitSwapMessage) error
27 28

	// MessageSent records sending of message for accounting purposes
29
	MessageSent(peer.Peer, bsmsg.BitSwapMessage) error
30

31
	NumBytesSentTo(peer.Peer) uint64
32

33
	NumBytesReceivedFrom(peer.Peer) uint64
Jeromy's avatar
Jeromy committed
34 35 36 37

	// Values determining bitswap behavioural patterns
	GetBatchSize() int
	GetRebroadcastDelay() time.Duration
38
}