Skip to content

Commit 4d1f5c3

Browse files
authored
fix: poximity transport creation (#106)
Signed-off-by: D4ryl00 <[email protected]>
1 parent b0c9131 commit 4d1f5c3

File tree

3 files changed

+32
-15
lines changed

3 files changed

+32
-15
lines changed

pkg/proximitytransport/conn.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func newConn(ctx context.Context, t *proximityTransport, remoteMa ma.Multiaddr,
5151
return nil, fmt.Errorf("invalid network direction")
5252
}
5353

54-
connScope, err := t.rcmgr.OpenConnection(netdir, false, remoteMa)
54+
connScope, err := t.swarm.ResourceManager().OpenConnection(netdir, false, remoteMa)
5555
if err != nil {
5656
return nil, fmt.Errorf("resource manager blocked connection : %w", err)
5757
}

pkg/proximitytransport/listener.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func newListener(ctx context.Context, localMa ma.Multiaddr, t *proximityTranspor
4848
// Starts the native driver.
4949
// If it failed, don't return a error because no other transport
5050
// on the libp2p node will be created.
51-
t.driver.Start(t.host.ID().String())
51+
t.driver.Start(t.swarm.LocalPeer().String())
5252

5353
return listener
5454
}

pkg/proximitytransport/transport.go

+30-13
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import (
55
"fmt"
66
"sync"
77

8-
host "github.com/libp2p/go-libp2p/core/host"
98
network "github.com/libp2p/go-libp2p/core/network"
109
peer "github.com/libp2p/go-libp2p/core/peer"
1110
pstore "github.com/libp2p/go-libp2p/core/peerstore"
1211
tpt "github.com/libp2p/go-libp2p/core/transport"
12+
"github.com/libp2p/go-libp2p/p2p/net/swarm"
1313
ma "github.com/multiformats/go-multiaddr"
1414
mafmt "github.com/multiformats/go-multiaddr-fmt"
1515
"github.com/pkg/errors"
@@ -50,9 +50,8 @@ type ProximityTransport interface {
5050
}
5151

5252
type proximityTransport struct {
53-
host host.Host
53+
swarm *swarm.Swarm
5454
upgrader tpt.Upgrader
55-
rcmgr network.ResourceManager
5655

5756
connMap map[string]*Conn
5857
connMapMutex sync.RWMutex
@@ -64,7 +63,7 @@ type proximityTransport struct {
6463
ctx context.Context
6564
}
6665

67-
func NewTransport(ctx context.Context, l *zap.Logger, driver ProximityDriver) func(h host.Host, u tpt.Upgrader, rcmgr network.ResourceManager) (*proximityTransport, error) {
66+
func NewTransport(ctx context.Context, l *zap.Logger, driver ProximityDriver) func(swarm *swarm.Swarm, u tpt.Upgrader) (*proximityTransport, error) {
6867
if l == nil {
6968
l = zap.NewNop()
7069
}
@@ -76,12 +75,12 @@ func NewTransport(ctx context.Context, l *zap.Logger, driver ProximityDriver) fu
7675
driver = &NoopProximityDriver{}
7776
}
7877

79-
return func(h host.Host, u tpt.Upgrader, rcmgr network.ResourceManager) (*proximityTransport, error) {
78+
l.Debug("remi: transport.go: new Transport")
79+
return func(swarm *swarm.Swarm, u tpt.Upgrader) (*proximityTransport, error) {
8080
l.Debug("NewTransport called", zap.String("driver", driver.ProtocolName()))
8181
transport := &proximityTransport{
82-
host: h,
82+
swarm: swarm,
8383
upgrader: u,
84-
rcmgr: rcmgr,
8584
connMap: make(map[string]*Conn),
8685
cache: NewRingBufferMap(l, 128),
8786
driver: driver,
@@ -141,7 +140,7 @@ func (t *proximityTransport) CanDial(remoteMa ma.Multiaddr) bool {
141140
func (t *proximityTransport) Listen(localMa ma.Multiaddr) (tpt.Listener, error) {
142141
// localAddr is supposed to be equal to the localPID
143142
// or to DefaultAddr since multiaddr == /<protocol>/<peerID>
144-
localPID := t.host.ID().String()
143+
localPID := t.swarm.LocalPeer().String()
145144
localAddr, err := localMa.ValueForProtocol(t.driver.ProtocolCode())
146145
if err != nil || (localMa.String() != t.driver.DefaultAddr() && localAddr != localPID) {
147146
return nil, errors.Wrap(err, "error: proximityTransport.Listen: wrong multiaddr")
@@ -246,7 +245,7 @@ func (t *proximityTransport) HandleFoundPeer(sRemotePID string) bool {
246245
t.lock.RUnlock()
247246

248247
// Adds peer to peerstore.
249-
t.host.Peerstore().AddAddr(remotePID, remoteMa,
248+
t.swarm.Peerstore().AddAddr(remotePID, remoteMa,
250249
pstore.TempAddrTTL)
251250

252251
// Delete previous cache if it exists
@@ -259,13 +258,13 @@ func (t *proximityTransport) HandleFoundPeer(sRemotePID string) bool {
259258
// Needed to read and write during the connect handshake.
260259
go func() {
261260
// Need to use listener than t.listener here to not have to check valid value of t.listener
262-
err := t.host.Connect(listener.ctx, peer.AddrInfo{
261+
err := t.connect(listener.ctx, peer.AddrInfo{
263262
ID: remotePID,
264263
Addrs: []ma.Multiaddr{remoteMa},
265264
})
266265
if err != nil {
267266
t.logger.Error("HandleFoundPeer: async connect error", zap.Error(err))
268-
t.host.Peerstore().SetAddr(remotePID, remoteMa, -1)
267+
t.swarm.Peerstore().SetAddr(remotePID, remoteMa, -1)
269268
t.driver.CloseConnWithPeer(sRemotePID)
270269
}
271270
}()
@@ -287,6 +286,24 @@ func (t *proximityTransport) HandleFoundPeer(sRemotePID string) bool {
287286
}
288287
}
289288

289+
// Adapted from https://github.com/libp2p/go-libp2p/blob/v0.38.1/p2p/host/basic/basic_host.go#L795
290+
func (t *proximityTransport) connect(ctx context.Context, pi peer.AddrInfo) error {
291+
// absorb addresses into peerstore
292+
t.swarm.Peerstore().AddAddrs(pi.ID, pi.Addrs, pstore.TempAddrTTL)
293+
294+
forceDirect, _ := network.GetForceDirectDial(ctx)
295+
canUseLimitedConn, _ := network.GetAllowLimitedConn(ctx)
296+
if !forceDirect {
297+
connectedness := t.swarm.Connectedness(pi.ID)
298+
if connectedness == network.Connected || (canUseLimitedConn && connectedness == network.Limited) {
299+
return nil
300+
}
301+
}
302+
303+
_, err := t.swarm.DialPeer(ctx, pi.ID)
304+
return err
305+
}
306+
290307
// HandleLostPeer is called by the native driver when the connection with the peer is lost.
291308
// Closes connections with the peer.
292309
func (t *proximityTransport) HandleLostPeer(sRemotePID string) {
@@ -304,10 +321,10 @@ func (t *proximityTransport) HandleLostPeer(sRemotePID string) {
304321
}
305322

306323
// Remove peer's address to peerstore.
307-
t.host.Peerstore().SetAddr(remotePID, remoteMa, -1)
324+
t.swarm.Peerstore().SetAddr(remotePID, remoteMa, -1)
308325

309326
// Close the peer connection
310-
conns := t.host.Network().ConnsToPeer(remotePID)
327+
conns := t.swarm.ConnsToPeer(remotePID)
311328
for _, conn := range conns {
312329
if conn.RemoteMultiaddr().Equal(remoteMa) {
313330
conn.Close()

0 commit comments

Comments
 (0)