Browse Source

Incoporate review feedback

pull/1520/head
Alexander Simmerl 7 years ago
parent
commit
01fd102dba
No known key found for this signature in database GPG Key ID: 4694E95C9CC61BDA
3 changed files with 13 additions and 16 deletions
  1. +9
    -9
      p2p/peer.go
  2. +1
    -3
      p2p/peer_set_test.go
  3. +3
    -4
      p2p/switch.go

+ 9
- 9
p2p/peer.go View File

@ -41,7 +41,7 @@ type peerConn struct {
persistent bool persistent bool
config *PeerConfig config *PeerConfig
conn net.Conn // source connection conn net.Conn // source connection
ips []net.IP
ip net.IP
} }
// ID only exists for SecretConnection. // ID only exists for SecretConnection.
@ -52,16 +52,16 @@ func (pc peerConn) ID() ID {
// Return the IP from the connection RemoteAddr // Return the IP from the connection RemoteAddr
func (pc peerConn) RemoteIP() net.IP { func (pc peerConn) RemoteIP() net.IP {
if len(pc.ips) > 0 {
return pc.ips[0]
if pc.ip != nil {
return pc.ip
} }
// In test cases a conn could not be present at all or be an in-memory
// implementation where we want to return a fake ip.
if pc.conn == nil || pc.conn.RemoteAddr().String() == "pipe" { if pc.conn == nil || pc.conn.RemoteAddr().String() == "pipe" {
pc.ips = []net.IP{
net.IP{172, 16, 0, byte(atomic.AddUint32(&testIPSuffix, 1))},
}
pc.ip = net.IP{172, 16, 0, byte(atomic.AddUint32(&testIPSuffix, 1))}
return pc.ips[0]
return pc.ip
} }
host, _, err := net.SplitHostPort(pc.conn.RemoteAddr().String()) host, _, err := net.SplitHostPort(pc.conn.RemoteAddr().String())
@ -74,9 +74,9 @@ func (pc peerConn) RemoteIP() net.IP {
panic(err) panic(err)
} }
pc.ips = ips
pc.ip = ips[0]
return ips[0]
return pc.ip
} }
// peer implements Peer. // peer implements Peer.


+ 1
- 3
p2p/peer_set_test.go View File

@ -26,9 +26,7 @@ func randPeer(ip net.IP) *peer {
}, },
} }
p.ips = []net.IP{
ip,
}
p.ip = ip
return p return p
} }


+ 3
- 4
p2p/switch.go View File

@ -534,8 +534,6 @@ func (sw *Switch) addPeer(pc peerConn) error {
return err return err
} }
// dont connect to multiple peers on the same IP
// NOTE: if AuthEnc==false, we don't have a peerID until after the handshake. // NOTE: if AuthEnc==false, we don't have a peerID until after the handshake.
// If AuthEnc==true then we already know the ID and could do the checks first before the handshake, // If AuthEnc==true then we already know the ID and could do the checks first before the handshake,
// but it's simple to just deal with both cases the same after the handshake. // but it's simple to just deal with both cases the same after the handshake.
@ -578,8 +576,9 @@ func (sw *Switch) addPeer(pc peerConn) error {
return ErrSwitchDuplicatePeerID{peerID} return ErrSwitchDuplicatePeerID{peerID}
} }
// check ips for both the connection addr and the self reported addr
if sw.peers.HasIP(pc.RemoteIP()) {
// Check for duplicate connection or peer info IP.
if sw.peers.HasIP(pc.RemoteIP()) ||
sw.peers.HasIP(peerNodeInfo.NetAddress().IP) {
return ErrSwitchDuplicatePeerIP{pc.RemoteIP()} return ErrSwitchDuplicatePeerIP{pc.RemoteIP()}
} }


Loading…
Cancel
Save