status-im/status-go

View on GitHub
waku/common/protocol.go

Summary

Maintainability
A
0 mins
Test Coverage
package common

import (
    "net"

    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/p2p"
    "github.com/ethereum/go-ethereum/p2p/enode"
    "github.com/ethereum/go-ethereum/rlp"
)

// Peer represents a remote Waku client with which the local host waku instance exchanges data / messages.
type Peer interface {
    // Start performs the handshake and initialize the broadcasting of messages
    Start() error
    Stop()
    // Run start the polling loop
    Run() error

    // NotifyAboutPowRequirementChange notifies the peer that POW for the host has changed
    NotifyAboutPowRequirementChange(float64) error
    // NotifyAboutBloomFilterChange notifies the peer that bloom filter for the host has changed
    NotifyAboutBloomFilterChange([]byte) error
    // NotifyAboutTopicInterestChange notifies the peer that topics for the host have changed
    NotifyAboutTopicInterestChange([]TopicType) error

    // SetPeerTrusted sets the value of trusted, meaning we will
    // allow p2p messages from them, which is necessary to interact
    // with mailservers.
    SetPeerTrusted(bool)
    // SetRWWriter sets the socket to read/write
    SetRWWriter(p2p.MsgReadWriter)

    RequestHistoricMessages(*Envelope) error
    SendHistoricMessageResponse([]byte) error
    SendP2PMessages([]*Envelope) error
    SendRawP2PDirect([]rlp.RawValue) error

    SendBundle(bundle []*Envelope) (rst common.Hash, err error)

    // Mark marks an envelope known to the peer so that it won't be sent back.
    Mark(*Envelope)
    // Marked checks if an envelope is already known to the remote peer.
    Marked(*Envelope) bool

    ID() []byte
    IP() net.IP
    EnodeID() enode.ID

    PoWRequirement() float64
    BloomFilter() []byte
    ConfirmationsEnabled() bool
}

// WakuHost is the local instance of waku, which both interacts with remote clients
// (peers) and local clients (through RPC API)
type WakuHost interface {
    // HandlePeer handles the connection of a new peer
    HandlePeer(Peer, p2p.MsgReadWriter) error
    // MaxMessageSize returns the maximum accepted message size.
    MaxMessageSize() uint32
    // LightClientMode returns whether the host is running in light client mode
    LightClientMode() bool
    // Mailserver returns whether the host is running a mailserver
    Mailserver() bool
    // LightClientModeConnectionRestricted indicates that connection to light client in light client mode not allowed
    LightClientModeConnectionRestricted() bool
    // ConfirmationsEnabled returns true if message confirmations are enabled.
    ConfirmationsEnabled() bool
    // PacketRateLimits returns the current rate limits for the host
    PacketRateLimits() RateLimits
    // BytesRateLimits returns the current rate limits for the host
    BytesRateLimits() RateLimits
    // MinPow returns the MinPow for the host
    MinPow() float64
    // BloomFilterMode returns whether the host is using bloom filter
    BloomFilterMode() bool
    // BloomFilter returns the bloom filter for the host
    BloomFilter() []byte
    //TopicInterest returns the topics for the host
    TopicInterest() []TopicType
    // IsEnvelopeCached checks if envelope with specific hash has already been received and cached.
    IsEnvelopeCached(common.Hash) bool
    // Envelopes returns all the envelopes queued
    Envelopes() []*Envelope
    SendEnvelopeEvent(EnvelopeEvent) int
    // OnNewEnvelopes handles newly received envelopes from a peer
    OnNewEnvelopes([]*Envelope, Peer) ([]EnvelopeError, error)
    // OnNewP2PEnvelopes handles envelopes received though the P2P
    // protocol (i.e from a mailserver in most cases)
    OnNewP2PEnvelopes([]*Envelope) error
    // OnMessagesResponse handles when the peer receive a message response
    // from a mailserver
    OnMessagesResponse(MessagesResponse, Peer) error
    // OnMessagesRequest handles when the peer receive a message request
    // this only works if the peer is a mailserver
    OnMessagesRequest(MessagesRequest, Peer) error
    // OnDeprecatedMessagesRequest handles when the peer receive a message request
    // using the *Envelope format. Currently the only production client (status-mobile)
    // is exclusively using this one.
    OnDeprecatedMessagesRequest(*Envelope, Peer) error

    OnBatchAcknowledged(common.Hash, Peer) error
    OnP2PRequestCompleted([]byte, Peer) error
}