interface.go 1.05 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
	BlockSentToPeer(u.Key, peer.Peer)

Jeromy's avatar
Jeromy committed
37 38 39
	// Values determining bitswap behavioural patterns
	GetBatchSize() int
	GetRebroadcastDelay() time.Duration
40
}