ledger.go 891 Bytes
Newer Older
1
package decision
2 3

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

dirkmc's avatar
dirkmc committed
6
	pb "github.com/ipfs/go-bitswap/message/pb"
Jeromy's avatar
Jeromy committed
7
	wl "github.com/ipfs/go-bitswap/wantlist"
8

Jeromy's avatar
Jeromy committed
9
	cid "github.com/ipfs/go-cid"
Raúl Kripalani's avatar
Raúl Kripalani committed
10
	peer "github.com/libp2p/go-libp2p-core/peer"
11 12
)

13
func newLedger(p peer.ID) *ledger {
14
	return &ledger{
15 16
		wantList: wl.New(),
		Partner:  p,
17 18 19
	}
}

20
// Keeps the wantlist for the partner. NOT threadsafe!
21 22
type ledger struct {
	// Partner is the remote Peer.
23
	Partner peer.ID
24 25

	// wantList is a (bounded, small) set of keys that Partner desires.
Jeromy's avatar
Jeromy committed
26
	wantList *wl.Wantlist
27

dirkmc's avatar
dirkmc committed
28
	lk sync.RWMutex
29 30
}

31
func (l *ledger) Wants(k cid.Cid, priority int32, wantType pb.Message_Wantlist_WantType) {
32
	log.Debugf("peer %s wants %s", l.Partner, k)
dirkmc's avatar
dirkmc committed
33
	l.wantList.Add(k, priority, wantType)
Jeromy's avatar
Jeromy committed
34 35
}

dirkmc's avatar
dirkmc committed
36 37
func (l *ledger) CancelWant(k cid.Cid) bool {
	return l.wantList.Remove(k)
38 39
}

40
func (l *ledger) WantListContains(k cid.Cid) (wl.Entry, bool) {
Jeromy's avatar
Jeromy committed
41
	return l.wantList.Contains(k)
42
}