github.com/decred/dcrlnd@v0.7.6/lnwire/pong.go (about) 1 package lnwire 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 ) 8 9 // MaxPongBytes is the maximum number of extra bytes a pong can be requested to 10 // send. The type of the message (19) takes 2 bytes, the length field takes up 11 // 2 bytes, leaving 65531 bytes. 12 const MaxPongBytes = 65531 13 14 // ErrMaxPongBytesExceeded indicates that the NumPongBytes field from the ping 15 // message has exceeded MaxPongBytes. 16 var ErrMaxPongBytesExceeded = fmt.Errorf("pong bytes exceeded") 17 18 // PongPayload is a set of opaque bytes sent in response to a ping message. 19 type PongPayload []byte 20 21 // Pong defines a message which is the direct response to a received Ping 22 // message. A Pong reply indicates that a connection is still active. The Pong 23 // reply to a Ping message should contain the nonce carried in the original 24 // Pong message. 25 type Pong struct { 26 // PongBytes is a set of opaque bytes that corresponds to the 27 // NumPongBytes defined in the ping message that this pong is 28 // replying to. 29 PongBytes PongPayload 30 } 31 32 // NewPong returns a new Pong message. 33 func NewPong(pongBytes []byte) *Pong { 34 return &Pong{ 35 PongBytes: pongBytes, 36 } 37 } 38 39 // A compile time check to ensure Pong implements the lnwire.Message interface. 40 var _ Message = (*Pong)(nil) 41 42 // Decode deserializes a serialized Pong message stored in the passed io.Reader 43 // observing the specified protocol version. 44 // 45 // This is part of the lnwire.Message interface. 46 func (p *Pong) Decode(r io.Reader, pver uint32) error { 47 return ReadElements(r, 48 &p.PongBytes, 49 ) 50 } 51 52 // Encode serializes the target Pong into the passed io.Writer observing the 53 // protocol version specified. 54 // 55 // This is part of the lnwire.Message interface. 56 func (p *Pong) Encode(w *bytes.Buffer, pver uint32) error { 57 return WritePongPayload(w, p.PongBytes) 58 } 59 60 // MsgType returns the integer uniquely identifying this message type on the 61 // wire. 62 // 63 // This is part of the lnwire.Message interface. 64 func (p *Pong) MsgType() MessageType { 65 return MsgPong 66 }