Skip to content
This repository was archived by the owner on Sep 9, 2022. It is now read-only.

Commit ac02326

Browse files
authored
Merge pull request #75 from libp2p/feat/conn-tags
Tag peers with live hop streams
2 parents 24bc85b + 8cebd56 commit ac02326

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require (
55
github.com/ipfs/go-log v0.0.1
66
github.com/libp2p/go-buffer-pool v0.0.1
77
github.com/libp2p/go-libp2p-blankhost v0.0.1
8-
github.com/libp2p/go-libp2p-host v0.0.1
8+
github.com/libp2p/go-libp2p-host v0.0.3
99
github.com/libp2p/go-libp2p-net v0.0.2
1010
github.com/libp2p/go-libp2p-peer v0.0.1
1111
github.com/libp2p/go-libp2p-peerstore v0.0.1

go.sum

+6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE
1212
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
1313
github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY=
1414
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
15+
github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a h1:U0BbGfKnviqVBJQB4etvm+mKx53KfkumNLBt6YeF/0Q=
16+
github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
1517
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1618
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
1719
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -76,8 +78,12 @@ github.com/libp2p/go-libp2p-crypto v0.0.1 h1:JNQd8CmoGTohO/akqrH16ewsqZpci2CbgYH
7678
github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE=
7779
github.com/libp2p/go-libp2p-host v0.0.1 h1:dnqusU+DheGcdxrE718kG4XgHNuL2n9eEv8Rg5zy8hQ=
7880
github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go=
81+
github.com/libp2p/go-libp2p-host v0.0.3 h1:BB/1Z+4X0rjKP5lbQTmjEjLbDVbrcmLOlA6QDsN5/j4=
82+
github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8=
7983
github.com/libp2p/go-libp2p-interface-connmgr v0.0.1 h1:Q9EkNSLAOF+u90L88qmE9z/fTdjLh8OsJwGw74mkwk4=
8084
github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
85+
github.com/libp2p/go-libp2p-interface-connmgr v0.0.4 h1:/LngXETpII5qOD7YjAcQiIxhVtdAk/NQe5t9sC6BR0E=
86+
github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
8187
github.com/libp2p/go-libp2p-interface-pnet v0.0.1 h1:7GnzRrBTJHEsofi1ahFdPN9Si6skwXQE9UqR2S+Pkh8=
8288
github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k=
8389
github.com/libp2p/go-libp2p-loggables v0.0.1 h1:HVww9oAnINIxbt69LJNkxD8lnbfgteXR97Xm4p3l9ps=

relay.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,15 @@ func NewRelay(ctx context.Context, h host.Host, upgrader *tptu.Upgrader, opts ..
118118

119119
func (r *Relay) addLiveHop(from, to peer.ID) {
120120
atomic.AddInt32(&r.liveHopCount, 1)
121+
r.host.ConnManager().UpsertTag(from, "relay-hop-stream", func(v int) int { return v + 1 })
122+
r.host.ConnManager().UpsertTag(to, "relay-hop-stream", func(v int) int { return v + 1 })
121123
}
122124

123125
func (r *Relay) rmLiveHop(from, to peer.ID) {
124126
atomic.AddInt32(&r.liveHopCount, -1)
127+
r.host.ConnManager().UpsertTag(from, "relay-hop-stream", func(v int) int { return v - 1 })
128+
r.host.ConnManager().UpsertTag(to, "relay-hop-stream", func(v int) int { return v - 1 })
129+
125130
}
126131

127132
func (r *Relay) GetActiveHops() int32 {
@@ -364,10 +369,18 @@ func (r *Relay) handleHopStream(s inet.Stream, msg *pb.CircuitRelay) {
364369

365370
r.addLiveHop(src.ID, dst.ID)
366371

372+
goroutines := new(int32)
373+
*goroutines = 2
374+
done := func() {
375+
if atomic.AddInt32(goroutines, -1) == 0 {
376+
r.rmLiveHop(src.ID, dst.ID)
377+
}
378+
}
379+
367380
// Don't reset streams after finishing or the other side will get an
368381
// error, not an EOF.
369382
go func() {
370-
defer r.rmLiveHop(src.ID, dst.ID)
383+
defer done()
371384

372385
buf := pool.Get(HopStreamBufferSize)
373386
defer pool.Put(buf)
@@ -386,6 +399,8 @@ func (r *Relay) handleHopStream(s inet.Stream, msg *pb.CircuitRelay) {
386399
}()
387400

388401
go func() {
402+
defer done()
403+
389404
buf := pool.Get(HopStreamBufferSize)
390405
defer pool.Put(buf)
391406

0 commit comments

Comments
 (0)