mirror of
https://github.com/status-im/whisper.git
synced 2025-02-01 05:24:56 +00:00
Apply mail server completion response
This commit is contained in:
parent
8ff11fbbc0
commit
07151c8376
@ -43,13 +43,14 @@ const (
|
|||||||
ProtocolName = "shh" // Nickname of the protocol in geth
|
ProtocolName = "shh" // Nickname of the protocol in geth
|
||||||
|
|
||||||
// whisper protocol message codes, according to EIP-627
|
// whisper protocol message codes, according to EIP-627
|
||||||
statusCode = 0 // used by whisper protocol
|
statusCode = 0 // used by whisper protocol
|
||||||
messagesCode = 1 // normal whisper message
|
messagesCode = 1 // normal whisper message
|
||||||
powRequirementCode = 2 // PoW requirement
|
powRequirementCode = 2 // PoW requirement
|
||||||
bloomFilterExCode = 3 // bloom filter exchange
|
bloomFilterExCode = 3 // bloom filter exchange
|
||||||
p2pRequestCode = 126 // peer-to-peer message, used by Dapp protocol
|
p2pRequestCompleteCode = 125 // 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)
|
p2pRequestCode = 126 // peer-to-peer message, used by Dapp protocol
|
||||||
NumberOfMessageCodes = 128
|
p2pMessageCode = 127 // peer-to-peer message (to be consumed by the peer, but not forwarded any further)
|
||||||
|
NumberOfMessageCodes = 128
|
||||||
|
|
||||||
SizeMask = byte(3) // mask used to extract the size of payload size field from the flags
|
SizeMask = byte(3) // mask used to extract the size of payload size field from the flags
|
||||||
signatureFlag = byte(4)
|
signatureFlag = byte(4)
|
||||||
|
@ -1,23 +1,27 @@
|
|||||||
package whisperv6
|
package whisperv6
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
)
|
)
|
||||||
|
|
||||||
// EventType used to define known envelope events.
|
// EventType used to define known envelope events.
|
||||||
type EventType string
|
type EventType string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// EventEnvelopeSent fires when envelope was sent to a peer.
|
// EventEnvelopeSent fires when envelope was sent to a peer.
|
||||||
EventEnvelopeSent EventType = "envelope.sent"
|
EventEnvelopeSent EventType = "envelope.sent"
|
||||||
// EventEnvelopeExpired fires when envelop expired
|
// EventEnvelopeExpired fires when envelop expired
|
||||||
EventEnvelopeExpired EventType = "envelope.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.
|
// EnvelopeEvent used for envelopes events.
|
||||||
type EnvelopeEvent struct {
|
type EnvelopeEvent struct {
|
||||||
Event EventType
|
Event EventType
|
||||||
Hash common.Hash
|
Hash common.Hash
|
||||||
Peer discover.NodeID
|
Peer discover.NodeID
|
||||||
}
|
}
|
||||||
|
@ -402,6 +402,15 @@ func (whisper *Whisper) RequestHistoricMessages(peerID []byte, envelope *Envelop
|
|||||||
return p2p.Send(p.ws, p2pRequestCode, envelope)
|
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.
|
// SendP2PMessage sends a peer-to-peer message to a specific peer.
|
||||||
func (whisper *Whisper) SendP2PMessage(peerID []byte, envelope *Envelope) error {
|
func (whisper *Whisper) SendP2PMessage(peerID []byte, envelope *Envelope) error {
|
||||||
p, err := whisper.getPeer(peerID)
|
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)
|
log.Warn("failed to decode p2p request message, peer will be disconnected", "peer", p.peer.ID(), "err", err)
|
||||||
return errors.New("invalid p2p request")
|
return errors.New("invalid p2p request")
|
||||||
}
|
}
|
||||||
|
|
||||||
whisper.mailServer.DeliverMail(p, &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:
|
default:
|
||||||
// New message types might be implemented in the future versions of Whisper.
|
// New message types might be implemented in the future versions of Whisper.
|
||||||
// For forward compatibility, just ignore.
|
// For forward compatibility, just ignore.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user