package wire import ( "io" ) // MsgPing implements the Message interface and represents a bitcoin ping message. For versions BIP0031Version and // earlier, it is used primarily to confirm that a connection is still valid. A transmission error is typically // interpreted as a closed connection and that the peer should be removed. For versions AFTER BIP0031Version it contains // an identifier which can be returned in the pong message to determine network timing. The payload for this message // just consists of a nonce used for identifying it later. type MsgPing 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 *MsgPing) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) (e error) { // There was no nonce for BIP0031Version and earlier. NOTE: > is not a mistake here. The BIP0031 was defined as // AFTER the version unlike most others. if pver > BIP0031Version { if e = readElement(r, &msg.Nonce); E.Chk(e) { return } } return } // BtcEncode encodes the receiver to w using the bitcoin protocol encoding. This is part of the Message interface // implementation. func (msg *MsgPing) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) (e error) { // There was no nonce for BIP0031Version and earlier. NOTE: > is not a mistake here. The BIP0031 was defined as // AFTER the version unlike most others. if pver > BIP0031Version { if e = writeElement(w, msg.Nonce); E.Chk(e) { return } } return } // Command returns the protocol command string for the message. This is part of the Message interface implementation. func (msg *MsgPing) Command() string { return CmdPing } // MaxPayloadLength returns the maximum length the payload can be for the receiver. This is part of the Message // interface implementation. func (msg *MsgPing) MaxPayloadLength(pver uint32) uint32 { plen := uint32(0) // There was no nonce 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 } // NewMsgPing returns a new bitcoin ping message that conforms to the Message interface. See MsgPing for details. func NewMsgPing(nonce uint64) *MsgPing { return &MsgPing{ Nonce: nonce, } }