aboutsummaryrefslogtreecommitdiffstats
path: root/p2p/handshake.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2015-04-30 17:41:27 +0800
committerPéter Szilágyi <peterke@gmail.com>2015-04-30 21:06:47 +0800
commit1528dbc17101597348eefe3f3fb8d4f0d5c54b3c (patch)
tree20f7fb8fa6d850ebc1b72740c7f9abaf548c16d5 /p2p/handshake.go
parent14f32a0c3a30c172c62272aa93f97e8a3d72ddcb (diff)
downloaddexon-1528dbc17101597348eefe3f3fb8d4f0d5c54b3c.tar
dexon-1528dbc17101597348eefe3f3fb8d4f0d5c54b3c.tar.gz
dexon-1528dbc17101597348eefe3f3fb8d4f0d5c54b3c.tar.bz2
dexon-1528dbc17101597348eefe3f3fb8d4f0d5c54b3c.tar.lz
dexon-1528dbc17101597348eefe3f3fb8d4f0d5c54b3c.tar.xz
dexon-1528dbc17101597348eefe3f3fb8d4f0d5c54b3c.tar.zst
dexon-1528dbc17101597348eefe3f3fb8d4f0d5c54b3c.zip
p2p: add trust check to handshake, test privileged connectivity
Conflicts: p2p/server_test.go
Diffstat (limited to 'p2p/handshake.go')
-rw-r--r--p2p/handshake.go14
1 files changed, 7 insertions, 7 deletions
diff --git a/p2p/handshake.go b/p2p/handshake.go
index 79395f23f..280b5068e 100644
--- a/p2p/handshake.go
+++ b/p2p/handshake.go
@@ -70,21 +70,21 @@ type protoHandshake struct {
// If dial is non-nil, the connection the local node is the initiator.
// If atcap is true, the connection will be disconnected with DiscTooManyPeers
// after the key exchange.
-func setupConn(fd net.Conn, prv *ecdsa.PrivateKey, our *protoHandshake, dial *discover.Node, atcap bool) (*conn, error) {
+func setupConn(fd net.Conn, prv *ecdsa.PrivateKey, our *protoHandshake, dial *discover.Node, atcap bool, trust map[discover.NodeID]bool) (*conn, error) {
if dial == nil {
- return setupInboundConn(fd, prv, our, atcap)
+ return setupInboundConn(fd, prv, our, atcap, trust)
} else {
- return setupOutboundConn(fd, prv, our, dial, atcap)
+ return setupOutboundConn(fd, prv, our, dial, atcap, trust)
}
}
-func setupInboundConn(fd net.Conn, prv *ecdsa.PrivateKey, our *protoHandshake, atcap bool) (*conn, error) {
+func setupInboundConn(fd net.Conn, prv *ecdsa.PrivateKey, our *protoHandshake, atcap bool, trust map[discover.NodeID]bool) (*conn, error) {
secrets, err := receiverEncHandshake(fd, prv, nil)
if err != nil {
return nil, fmt.Errorf("encryption handshake failed: %v", err)
}
rw := newRlpxFrameRW(fd, secrets)
- if atcap {
+ if atcap && !trust[secrets.RemoteID] {
SendItems(rw, discMsg, DiscTooManyPeers)
return nil, errors.New("we have too many peers")
}
@@ -99,13 +99,13 @@ func setupInboundConn(fd net.Conn, prv *ecdsa.PrivateKey, our *protoHandshake, a
return &conn{rw, rhs}, nil
}
-func setupOutboundConn(fd net.Conn, prv *ecdsa.PrivateKey, our *protoHandshake, dial *discover.Node, atcap bool) (*conn, error) {
+func setupOutboundConn(fd net.Conn, prv *ecdsa.PrivateKey, our *protoHandshake, dial *discover.Node, atcap bool, trust map[discover.NodeID]bool) (*conn, error) {
secrets, err := initiatorEncHandshake(fd, prv, dial.ID, nil)
if err != nil {
return nil, fmt.Errorf("encryption handshake failed: %v", err)
}
rw := newRlpxFrameRW(fd, secrets)
- if atcap {
+ if atcap && !trust[secrets.RemoteID] {
SendItems(rw, discMsg, DiscTooManyPeers)
return nil, errors.New("we have too many peers")
}