code: func (p *Peer) PushRejectMsg(command string, code wire.RejectCode, reason string, hash *chainhash.Hash, wait bool) {
  	// Don't bother sending the reject message if the protocol version
  	// is too low.
  	if p.VersionKnown() && p.ProtocolVersion() < wire.RejectVersion {
  		return
  	}
  
  	msg := wire.NewMsgReject(command, code, reason)
  	if command == wire.CmdTx || command == wire.CmdBlock {
  		if hash == nil {
  			log.Warnf("Sending a reject message for command "+
  				"type %v which should have specified a hash "+
  				"but does not", command)
  			hash = &zeroHash
  		}
  		msg.Hash = *hash
  	}
  
  	// Send the message without waiting if the caller has not requested it.
  	if !wait {
  		p.QueueMessage(msg, nil)
  		return
  	}
  
  	// Send the message and block until it has been sent before returning.
  	doneChan := make(chan struct{}, 1)
  	p.QueueMessage(msg, doneChan)
  	<-doneChan
  }
docs: // PushRejectMsg sends a reject message for the provided command, reject code,
  // reject reason, and hash.  The hash will only be used when the command is a tx
  // or block and should be nil in other cases.  The wait parameter will cause the
  // function to block until the reject message has actually been sent.
  //
  // This function is safe for concurrent access.