forked from cometbft/cometbft
/
intercept_transport.go
92 lines (76 loc) · 1.96 KB
/
intercept_transport.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package p2p
import (
"net/http"
"github.com/zeu5/cometbft/p2p/conn"
)
type InterceptNetworkClient struct {
Addr string
server *http.Server
}
type InterceptConfig struct {
ChannelIDs map[byte]bool
}
type InterceptTransport struct {
*MultiplexTransport
cfg InterceptConfig
iClient *InterceptNetworkClient
peers map[string]*InterceptPeer
}
func NewInterceptTransport(nodeInfo NodeInfo, nodeKey NodeKey, mConfig conn.MConnConfig, iConfig InterceptConfig) *InterceptTransport {
return &InterceptTransport{
iClient: nil,
cfg: iConfig,
MultiplexTransport: NewMultiplexTransport(nodeInfo, nodeKey, mConfig),
peers: make(map[string]*InterceptPeer),
}
}
func (i *InterceptTransport) Accept(pConfig peerConfig) (Peer, error) {
p, err := i.MultiplexTransport.Accept(pConfig)
if err != nil {
return nil, err
}
peer := p.(*peer)
out := &InterceptPeer{
cfg: pConfig,
iTransport: i,
peer: peer,
}
i.peers[peer.String()] = out
return out, nil
}
func (i *InterceptTransport) Dial(addr NetAddress, pConfig peerConfig) (Peer, error) {
p, err := i.MultiplexTransport.Dial(addr, pConfig)
if err != nil {
return nil, err
}
peer := p.(*peer)
out := &InterceptPeer{
cfg: pConfig,
iTransport: i,
peer: peer,
}
i.peers[peer.String()] = out
return out, nil
}
func (i *InterceptTransport) sendMessage(e Envelope) bool {
// TODO:
// 1. Check if the message should be intercepted or not
// 2. Send with client if so
return false
}
func (i *InterceptTransport) receiveMessage() {
// TODO:
// 1. Need to poll the client for messages
// 2. Should be part of the transportLifecycle
}
var _ Transport = &InterceptTransport{}
var _ transportLifecycle = &InterceptTransport{}
type InterceptPeer struct {
cfg peerConfig
iTransport *InterceptTransport
*peer
}
var _ Peer = &InterceptPeer{}
// func (i *InterceptPeer) Send(e Envelope) bool {
// return i.iTransport.sendMessage(e)
// }