mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 09:53:54 +01:00
feec611531
This commit implements the new ping/pong messages along with their new behavior. The new set of ping/pong messages allow clients to generate fake cover traffic as the ping messages tells the pong message how many bytes to included and can also be padded itself.
72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package lnwire
|
|
|
|
import "io"
|
|
|
|
// PingPayload is a set of opaque bytes sent in response to a ping message.
|
|
type PongPayload []byte
|
|
|
|
// Pong defines a message which is the direct response to a received Ping
|
|
// message. A Pong reply indicates that a connection is still active. The Pong
|
|
// reply to a Ping message should contain the nonce carried in the original
|
|
// Pong message.
|
|
type Pong struct {
|
|
// PongBytes is a set of opaque bytes that corresponds to the
|
|
// NumPongBytes defined in the ping message that this this pong is
|
|
// replying to.
|
|
PongBytes PongPayload
|
|
}
|
|
|
|
// NewPong returns a new Pong message.
|
|
func NewPong(pongBytes []byte) *Pong {
|
|
return &Pong{
|
|
PongBytes: pongBytes,
|
|
}
|
|
}
|
|
|
|
// A compile time check to ensure Pong implements the lnwire.Message interface.
|
|
var _ Message = (*Pong)(nil)
|
|
|
|
// Decode deserializes a serialized Pong message stored in the passed io.Reader
|
|
// observing the specified protocol version.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (p *Pong) Decode(r io.Reader, pver uint32) error {
|
|
return readElements(r,
|
|
&p.PongBytes,
|
|
)
|
|
}
|
|
|
|
// Encode serializes the target Pong into the passed io.Writer observing the
|
|
// protocol version specified.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (p *Pong) Encode(w io.Writer, pver uint32) error {
|
|
return writeElements(w,
|
|
p.PongBytes,
|
|
)
|
|
}
|
|
|
|
// Command returns the integer uniquely identifying this message type on the
|
|
// wire.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (p *Pong) Command() uint32 {
|
|
return CmdPong
|
|
}
|
|
|
|
// MaxPayloadLength returns the maximum allowed payload size for a Pong
|
|
// complete message observing the specified protocol version.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (p *Pong) MaxPayloadLength(uint32) uint32 {
|
|
return 65532
|
|
}
|
|
|
|
// Validate performs any necessary sanity checks to ensure all fields present
|
|
// on the Pong are valid.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (p *Pong) Validate() error {
|
|
return nil
|
|
}
|