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  }