added a function to immediately return

This commit is contained in:
decanus 2020-05-14 14:13:24 +02:00
parent 3666da8a4b
commit 96f6cad341
No known key found for this signature in database
GPG key ID: 3730AAF5D6589867
4 changed files with 40 additions and 7 deletions

@ -1 +1 @@
Subproject commit 7497b116a019beb26215cbea4028df068dea06be
Subproject commit b5eb9900ee2147b40d3e681fe86efa4fd693959a

View file

@ -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 {

View file

@ -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
}

View file

@ -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.