-
Notifications
You must be signed in to change notification settings - Fork 0
/
tcp.go
61 lines (50 loc) · 1.62 KB
/
tcp.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package wrap
import (
"context"
"time"
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/libp2p/go-libp2p-core/transport"
"github.com/libp2p/go-tcp-transport"
ma "github.com/multiformats/go-multiaddr"
"github.com/dennis-tra/optimistic-provide/pkg/models"
)
// TCPTransport is a thin wrapper around the actual *tcp.TcpTransport implementation.
// It intercepts calls to Dial to track when which peer was dialed.
type TCPTransport struct {
*Notifier
// The original TCP transport implementation
trpt *tcp.TcpTransport
}
func NewTCPTransport() (*TCPTransport, func(transport.Upgrader, network.ResourceManager, ...tcp.Option) (*TCPTransport, error)) {
t := &TCPTransport{
Notifier: newNotifier(models.DialTransportTCP),
}
return t, func(upgrader transport.Upgrader, rcmgr network.ResourceManager, opts ...tcp.Option) (*TCPTransport, error) {
trpt, err := tcp.NewTCPTransport(upgrader, rcmgr, opts...)
if err != nil {
return nil, err
}
t.trpt = trpt
return t, nil
}
}
func (t *TCPTransport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (transport.CapableConn, error) {
start := time.Now()
t.notifyDialStarted(raddr, p, start)
c, err := t.trpt.Dial(ctx, raddr, p)
t.notifyDialEnded(raddr, p, start, time.Now(), err)
return c, err
}
func (t *TCPTransport) CanDial(addr ma.Multiaddr) bool {
return t.trpt.CanDial(addr)
}
func (t *TCPTransport) Listen(laddr ma.Multiaddr) (transport.Listener, error) {
return t.trpt.Listen(laddr)
}
func (t *TCPTransport) Protocols() []int {
return t.trpt.Protocols()
}
func (t *TCPTransport) Proxy() bool {
return t.trpt.Proxy()
}