From fc11dbc6b8cedb3dc5d8cda241261b471cd8c996 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Wed, 23 Dec 2015 01:48:55 +0100 Subject: [PATCH] p2p: EIP-8 changes for protocol handshake --- p2p/peer.go | 3 +++ p2p/rlpx.go | 4 ---- p2p/rlpx_test.go | 10 ++++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/p2p/peer.go b/p2p/peer.go index 72ed4069c9..9776031472 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -56,6 +56,9 @@ type protoHandshake struct { Caps []Cap ListenPort uint64 ID discover.NodeID + + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:".."` } // Peer represents a connected remote node. diff --git a/p2p/rlpx.go b/p2p/rlpx.go index 8f429d6ec1..c35853e42e 100644 --- a/p2p/rlpx.go +++ b/p2p/rlpx.go @@ -151,10 +151,6 @@ func readProtocolHandshake(rw MsgReader, our *protoHandshake) (*protoHandshake, if err := msg.Decode(&hs); err != nil { return nil, err } - // validate handshake info - if hs.Version != our.Version { - return nil, DiscIncompatibleVersion - } if (hs.ID == discover.NodeID{}) { return nil, DiscInvalidIdentity } diff --git a/p2p/rlpx_test.go b/p2p/rlpx_test.go index 7cc7548e2b..054666afa6 100644 --- a/p2p/rlpx_test.go +++ b/p2p/rlpx_test.go @@ -162,6 +162,7 @@ func TestProtocolHandshake(t *testing.T) { wg.Add(2) go func() { defer wg.Done() + defer fd1.Close() rlpx := newRLPX(fd0) remid, err := rlpx.doEncHandshake(prv0, node1) if err != nil { @@ -178,6 +179,7 @@ func TestProtocolHandshake(t *testing.T) { t.Errorf("dial side proto handshake error: %v", err) return } + phs.Rest = nil if !reflect.DeepEqual(phs, hs1) { t.Errorf("dial side proto handshake mismatch:\ngot: %s\nwant: %s\n", spew.Sdump(phs), spew.Sdump(hs1)) return @@ -186,6 +188,7 @@ func TestProtocolHandshake(t *testing.T) { }() go func() { defer wg.Done() + defer fd1.Close() rlpx := newRLPX(fd1) remid, err := rlpx.doEncHandshake(prv1, nil) if err != nil { @@ -202,6 +205,7 @@ func TestProtocolHandshake(t *testing.T) { t.Errorf("listen side proto handshake error: %v", err) return } + phs.Rest = nil if !reflect.DeepEqual(phs, hs0) { t.Errorf("listen side proto handshake mismatch:\ngot: %s\nwant: %s\n", spew.Sdump(phs), spew.Sdump(hs0)) return @@ -216,7 +220,6 @@ func TestProtocolHandshake(t *testing.T) { func TestProtocolHandshakeErrors(t *testing.T) { our := &protoHandshake{Version: 3, Caps: []Cap{{"foo", 2}, {"bar", 3}}, Name: "quux"} - id := randomID() tests := []struct { code uint64 msg interface{} @@ -242,11 +245,6 @@ func TestProtocolHandshakeErrors(t *testing.T) { msg: []byte{1, 2, 3}, err: newPeerError(errInvalidMsg, "(code 0) (size 4) rlp: expected input list for p2p.protoHandshake"), }, - { - code: handshakeMsg, - msg: &protoHandshake{Version: 9944, ID: id}, - err: DiscIncompatibleVersion, - }, { code: handshakeMsg, msg: &protoHandshake{Version: 3},