mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
added a function to immediately return
This commit is contained in:
parent
3666da8a4b
commit
96f6cad341
4 changed files with 40 additions and 7 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit 7497b116a019beb26215cbea4028df068dea06be
|
||||
Subproject commit b5eb9900ee2147b40d3e681fe86efa4fd693959a
|
||||
|
|
@ -21,15 +21,16 @@ import (
|
|||
"encoding/binary"
|
||||
"fmt"
|
||||
|
||||
"github.com/syndtr/goleveldb/leveldb"
|
||||
"github.com/syndtr/goleveldb/leveldb/errors"
|
||||
"github.com/syndtr/goleveldb/leveldb/opt"
|
||||
"github.com/syndtr/goleveldb/leveldb/util"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/rlp"
|
||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||
"github.com/syndtr/goleveldb/leveldb"
|
||||
"github.com/syndtr/goleveldb/leveldb/errors"
|
||||
"github.com/syndtr/goleveldb/leveldb/opt"
|
||||
"github.com/syndtr/goleveldb/leveldb/util"
|
||||
)
|
||||
|
||||
// WMailServer represents the state data of the mailserver.
|
||||
|
|
@ -122,9 +123,28 @@ func (s *WMailServer) DeliverMail(peer *whisper.Peer, request *whisper.Envelope)
|
|||
}
|
||||
|
||||
ok, lower, upper, bloom := s.validateRequest(peer.ID(), request)
|
||||
if ok {
|
||||
s.processRequest(peer, lower, upper, bloom)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
s.processRequest(peer, lower, upper, bloom)
|
||||
}
|
||||
|
||||
|
||||
// DeliverMail responds with saved messages upon request by the
|
||||
// messages' owner.
|
||||
func (s *WMailServer) DeliverResponsiveMail(peer *whisper.Peer, request *whisper.Envelope) []*whisper.Envelope {
|
||||
if peer == nil {
|
||||
log.Error("Whisper peer is nil")
|
||||
return nil
|
||||
}
|
||||
|
||||
ok, lower, upper, bloom := s.validateRequest(peer.ID(), request)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
return s.processRequest(nil, lower, upper, bloom)
|
||||
}
|
||||
|
||||
func (s *WMailServer) processRequest(peer *whisper.Peer, lower, upper uint32, bloom []byte) []*whisper.Envelope {
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ const (
|
|||
messagesCode = 1 // normal whisper message
|
||||
powRequirementCode = 2 // PoW requirement
|
||||
bloomFilterExCode = 3 // bloom filter exchange
|
||||
requestMessages = 100 // peer-to-peer message, used by Dapp protocol
|
||||
p2pRequestCode = 126 // peer-to-peer message, used by Dapp protocol
|
||||
p2pMessageCode = 127 // peer-to-peer message (to be consumed by the peer, but not forwarded any further)
|
||||
NumberOfMessageCodes = 128
|
||||
|
|
@ -89,4 +90,5 @@ const (
|
|||
type MailServer interface {
|
||||
Archive(env *Envelope)
|
||||
DeliverMail(whisperPeer *Peer, request *Envelope)
|
||||
DeliverResponsiveMail(whisperPeer *Peer, request *Envelope) []*Envelope
|
||||
}
|
||||
|
|
|
|||
|
|
@ -768,6 +768,17 @@ func (whisper *Whisper) runMessageLoop(p *Peer, rw p2p.MsgReadWriter) error {
|
|||
}
|
||||
whisper.mailServer.DeliverMail(p, &request)
|
||||
}
|
||||
case requestMessages:
|
||||
if whisper.mailServer != nil {
|
||||
var request Envelope
|
||||
if err := packet.Decode(&request); err != nil {
|
||||
log.Warn("failed to decode p2p request message, peer will be disconnected", "peer", p.peer.ID(), "err", err)
|
||||
return errors.New("invalid p2p request")
|
||||
}
|
||||
r := whisper.mailServer.DeliverResponsiveMail(p, &request)
|
||||
|
||||
p2p.Send(p.ws, messagesCode, r)
|
||||
}
|
||||
default:
|
||||
// New message types might be implemented in the future versions of Whisper.
|
||||
// For forward compatibility, just ignore.
|
||||
|
|
|
|||
Loading…
Reference in a new issue