diff options
author | b00ris <b00ris@mail.ru> | 2018-09-05 16:57:45 +0800 |
---|---|---|
committer | Guillaume Ballet <gballet@gmail.com> | 2018-09-05 16:57:45 +0800 |
commit | 8711e2b6366109912057e8fb20add325a1051a4e (patch) | |
tree | 70ad2598573f8774ec77acf57598e24d7200634b /whisper/whisperv6/peer.go | |
parent | cf33d8b83ce78d1e79cd8c43a21070b2050d5c7e (diff) | |
download | go-tangerine-8711e2b6366109912057e8fb20add325a1051a4e.tar go-tangerine-8711e2b6366109912057e8fb20add325a1051a4e.tar.gz go-tangerine-8711e2b6366109912057e8fb20add325a1051a4e.tar.bz2 go-tangerine-8711e2b6366109912057e8fb20add325a1051a4e.tar.lz go-tangerine-8711e2b6366109912057e8fb20add325a1051a4e.tar.xz go-tangerine-8711e2b6366109912057e8fb20add325a1051a4e.tar.zst go-tangerine-8711e2b6366109912057e8fb20add325a1051a4e.zip |
whisper: add light mode check to handshake (#16725)
Diffstat (limited to 'whisper/whisperv6/peer.go')
-rw-r--r-- | whisper/whisperv6/peer.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/whisper/whisperv6/peer.go b/whisper/whisperv6/peer.go index 79cc21270..621d51208 100644 --- a/whisper/whisperv6/peer.go +++ b/whisper/whisperv6/peer.go @@ -79,11 +79,14 @@ func (peer *Peer) stop() { func (peer *Peer) handshake() error { // Send the handshake status message asynchronously errc := make(chan error, 1) + isLightNode := peer.host.LightClientMode() + isRestrictedLightNodeConnection := peer.host.LightClientModeConnectionRestricted() go func() { pow := peer.host.MinPow() powConverted := math.Float64bits(pow) bloom := peer.host.BloomFilter() - errc <- p2p.SendItems(peer.ws, statusCode, ProtocolVersion, powConverted, bloom) + + errc <- p2p.SendItems(peer.ws, statusCode, ProtocolVersion, powConverted, bloom, isLightNode) }() // Fetch the remote status packet and verify protocol match @@ -127,6 +130,11 @@ func (peer *Peer) handshake() error { } } + isRemotePeerLightNode, err := s.Bool() + if isRemotePeerLightNode && isLightNode && isRestrictedLightNodeConnection { + return fmt.Errorf("peer [%x] is useless: two light client communication restricted", peer.ID()) + } + if err := <-errc; err != nil { return fmt.Errorf("peer [%x] failed to send status packet: %v", peer.ID(), err) } |