erigon-pulse/cmd/lightclient/sentinel/handlers/heartbeats.go
Enrique Jose Avila Asapche ff2e763a98
fixed disconnecting and now nimbus happy with us (#5662)
Added no disconnecting with metadata requests, and we answer now with a
bogus status call and proper prefix for both status and metadata
request. This changes allows for nimbus nodes to connect to us and
actually stay connected.
2022-10-07 18:40:18 +02:00

57 lines
1.7 KiB
Go

package handlers
import (
"github.com/ledgerwatch/erigon/cmd/lightclient/sentinel/communication"
"github.com/ledgerwatch/erigon/cmd/lightclient/sentinel/communication/p2p"
"github.com/ledgerwatch/erigon/cmd/lightclient/utils"
"github.com/ledgerwatch/log/v3"
)
// These below are the handlers for heartbeat functions
func (c *ConsensusHandlers) goodbyeHandler(ctx *communication.StreamContext, dat *p2p.Goodbye) error {
//log.Info("[Lightclient] Received", "goodbye", dat.Reason)
defer c.peers.DisconnectPeer(ctx.Stream.Conn().RemotePeer())
_, err := ctx.Codec.WritePacket(dat, SuccessfullResponsePrefix)
if err != nil {
return err
}
return nil
}
// type safe handlers which all have access to the original stream & decompressed data
// ping handler
func pingHandler(ctx *communication.StreamContext, dat *p2p.Ping) error {
// since packets are just structs, they can be resent with no issue
_, err := ctx.Codec.WritePacket(dat, SuccessfullResponsePrefix)
if err != nil {
return err
}
return nil
}
func (c *ConsensusHandlers) metadataHandlerV1(ctx *communication.StreamContext, dat *communication.EmptyPacket) error {
_, err := ctx.Codec.WritePacket(c.metadataV1, SuccessfullResponsePrefix)
if err != nil {
return err
}
return nil
}
// TODO: Actually respond with proper status
func statusHandler(ctx *communication.StreamContext, dat *p2p.Status) error {
log.Debug("[ReqResp] Status",
"epoch", dat.FinalizedEpoch,
"final root", utils.BytesToHex(dat.FinalizedRoot),
"head root", utils.BytesToHex(dat.HeadRoot),
"head slot", dat.HeadSlot,
"fork digest", utils.BytesToHex(dat.ForkDigest),
)
_, err := ctx.Codec.WritePacket(dat, SuccessfullResponsePrefix)
if err != nil {
return err
}
return nil
}