package wire import ( "fmt" "io" ) // MsgPong implements the Message interface and represents a bitcoin pong message which is used primarily to confirm // that a connection is still valid in response to a bitcoin ping message (MsgPing). This message was not added until // protocol versions AFTER BIP0031Version. type MsgPong struct { // Unique value associated with message that is used to identify specific ping message. Nonce uint64 } // BtcDecode decodes r using the bitcoin protocol encoding into the receiver. This is part of the Message interface // implementation. func (msg *MsgPong) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) (e error) { // NOTE: <= is not a mistake here. The BIP0031 was defined as AFTER the version unlike most others. if pver <= BIP0031Version { str := fmt.Sprintf("pong message invalid for protocol "+ "version %d", pver, ) return messageError("MsgPong.BtcDecode", str) } return readElement(r, &msg.Nonce) } // BtcEncode encodes the receiver to w using the bitcoin protocol encoding. This is part of the Message interface // implementation. func (msg *MsgPong) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) (e error) { // NOTE: <= is not a mistake here. The BIP0031 was defined as AFTER the version unlike most others. if pver <= BIP0031Version { str := fmt.Sprintf("pong message invalid for protocol "+ "version %d", pver, ) return messageError("MsgPong.BtcEncode", str) } return writeElement(w, msg.Nonce) } // Command returns the protocol command string for the message. This is part of the Message interface implementation. func (msg *MsgPong) Command() string { return CmdPong } // MaxPayloadLength returns the maximum length the payload can be for the receiver. This is part of the Message // interface implementation. func (msg *MsgPong) MaxPayloadLength(pver uint32) uint32 { plen := uint32(0) // The pong message did not exist for BIP0031Version and earlier. NOTE: > is not a mistake here. The BIP0031 was // defined as AFTER the version unlike most others. if pver > BIP0031Version { // Nonce 8 bytes. plen += 8 } return plen } // NewMsgPong returns a new bitcoin pong message that conforms to the Message interface. See MsgPong for details. func NewMsgPong(nonce uint64) *MsgPong { return &MsgPong{ Nonce: nonce, } }