Apply mail server completion response

This commit is contained in:
Dmitry 2018-09-25 09:35:03 +03:00
parent 8ff11fbbc0
commit 07151c8376
3 changed files with 44 additions and 16 deletions

View File

@ -47,6 +47,7 @@ const (
messagesCode = 1 // normal whisper message
powRequirementCode = 2 // PoW requirement
bloomFilterExCode = 3 // bloom filter exchange
p2pRequestCompleteCode = 125 // 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

View File

@ -13,6 +13,10 @@ const (
EventEnvelopeSent EventType = "envelope.sent"
// EventEnvelopeExpired fires when envelop expired
EventEnvelopeExpired EventType = "envelope.expired"
// EventMailServerRequestCompleted fires after mailserver sends all the requested messages
EventMailServerRequestCompleted EventType = "mailserver.request.completed"
// EventMailServerRequestExpired fires after mailserver the request TTL ends
EventMailServerRequestExpired EventType = "mailserver.request.expired"
)
// EnvelopeEvent used for envelopes events.

View File

@ -402,6 +402,15 @@ func (whisper *Whisper) RequestHistoricMessages(peerID []byte, envelope *Envelop
return p2p.Send(p.ws, p2pRequestCode, envelope)
}
func (whisper *Whisper) SendHistoricMessageResponse(peer *Peer, requestID common.Hash) error {
size, r, err := rlp.EncodeToReader(requestID)
if err != nil {
return err
}
return peer.ws.WriteMsg(p2p.Msg{Code: p2pRequestCompleteCode, Size: uint32(size), Payload: r})
}
// SendP2PMessage sends a peer-to-peer message to a specific peer.
func (whisper *Whisper) SendP2PMessage(peerID []byte, envelope *Envelope) error {
p, err := whisper.getPeer(peerID)
@ -843,8 +852,22 @@ func (whisper *Whisper) runMessageLoop(p *Peer, rw p2p.MsgReadWriter) error {
log.Warn("failed to decode p2p request message, peer will be disconnected", "peer", p.peer.ID(), "err", err)
return errors.New("invalid p2p request")
}
whisper.mailServer.DeliverMail(p, &request)
}
case p2pRequestCompleteCode:
if p.trusted {
var requestID common.Hash
if err := packet.Decode(&requestID); err != nil {
log.Warn("failed to decode response message, peer will be disconnected", "peer", p.peer.ID(), "err", err)
return errors.New("invalid request response message")
}
whisper.envelopeFeed.Send(EnvelopeEvent{
Hash: requestID,
Event: EventMailServerRequestCompleted,
})
}
default:
// New message types might be implemented in the future versions of Whisper.
// For forward compatibility, just ignore.