whisper: add light mode check to handshake (#16725)
This commit is contained in:
@@ -49,12 +49,14 @@ type Statistics struct {
|
||||
}
|
||||
|
||||
const (
|
||||
maxMsgSizeIdx = iota // Maximal message length allowed by the whisper node
|
||||
overflowIdx // Indicator of message queue overflow
|
||||
minPowIdx // Minimal PoW required by the whisper node
|
||||
minPowToleranceIdx // Minimal PoW tolerated by the whisper node for a limited time
|
||||
bloomFilterIdx // Bloom filter for topics of interest for this node
|
||||
bloomFilterToleranceIdx // Bloom filter tolerated by the whisper node for a limited time
|
||||
maxMsgSizeIdx = iota // Maximal message length allowed by the whisper node
|
||||
overflowIdx // Indicator of message queue overflow
|
||||
minPowIdx // Minimal PoW required by the whisper node
|
||||
minPowToleranceIdx // Minimal PoW tolerated by the whisper node for a limited time
|
||||
bloomFilterIdx // Bloom filter for topics of interest for this node
|
||||
bloomFilterToleranceIdx // Bloom filter tolerated by the whisper node for a limited time
|
||||
lightClientModeIdx // Light client mode. (does not forward any messages)
|
||||
restrictConnectionBetweenLightClientsIdx // Restrict connection between two light clients
|
||||
)
|
||||
|
||||
// Whisper represents a dark communication interface through the Ethereum
|
||||
@@ -82,8 +84,6 @@ type Whisper struct {
|
||||
|
||||
syncAllowance int // maximum time in seconds allowed to process the whisper-related messages
|
||||
|
||||
lightClient bool // indicates is this node is pure light client (does not forward any messages)
|
||||
|
||||
statsMu sync.Mutex // guard stats
|
||||
stats Statistics // Statistics of whisper node
|
||||
|
||||
@@ -113,6 +113,7 @@ func New(cfg *Config) *Whisper {
|
||||
whisper.settings.Store(minPowIdx, cfg.MinimumAcceptedPOW)
|
||||
whisper.settings.Store(maxMsgSizeIdx, cfg.MaxMessageSize)
|
||||
whisper.settings.Store(overflowIdx, false)
|
||||
whisper.settings.Store(restrictConnectionBetweenLightClientsIdx, cfg.RestrictConnectionBetweenLightClients)
|
||||
|
||||
// p2p whisper sub protocol handler
|
||||
whisper.protocol = p2p.Protocol{
|
||||
@@ -276,6 +277,31 @@ func (whisper *Whisper) SetMinimumPowTest(val float64) {
|
||||
whisper.settings.Store(minPowToleranceIdx, val)
|
||||
}
|
||||
|
||||
//SetLightClientMode makes node light client (does not forward any messages)
|
||||
func (whisper *Whisper) SetLightClientMode(v bool) {
|
||||
whisper.settings.Store(lightClientModeIdx, v)
|
||||
}
|
||||
|
||||
//LightClientMode indicates is this node is light client (does not forward any messages)
|
||||
func (whisper *Whisper) LightClientMode() bool {
|
||||
val, exist := whisper.settings.Load(lightClientModeIdx)
|
||||
if !exist || val == nil {
|
||||
return false
|
||||
}
|
||||
v, ok := val.(bool)
|
||||
return v && ok
|
||||
}
|
||||
|
||||
//LightClientModeConnectionRestricted indicates that connection to light client in light client mode not allowed
|
||||
func (whisper *Whisper) LightClientModeConnectionRestricted() bool {
|
||||
val, exist := whisper.settings.Load(restrictConnectionBetweenLightClientsIdx)
|
||||
if !exist || val == nil {
|
||||
return false
|
||||
}
|
||||
v, ok := val.(bool)
|
||||
return v && ok
|
||||
}
|
||||
|
||||
func (whisper *Whisper) notifyPeersAboutPowRequirementChange(pow float64) {
|
||||
arr := whisper.getPeers()
|
||||
for _, p := range arr {
|
||||
@@ -672,7 +698,7 @@ func (whisper *Whisper) runMessageLoop(p *Peer, rw p2p.MsgReadWriter) error {
|
||||
|
||||
trouble := false
|
||||
for _, env := range envelopes {
|
||||
cached, err := whisper.add(env, whisper.lightClient)
|
||||
cached, err := whisper.add(env, whisper.LightClientMode())
|
||||
if err != nil {
|
||||
trouble = true
|
||||
log.Error("bad envelope received, peer will be disconnected", "peer", p.peer.ID(), "err", err)
|
||||
|
Reference in New Issue
Block a user