code: func (p *PublishPacket) Copy() *PublishPacket {
  	newP := NewControlPacket(Publish).(*PublishPacket)
  	newP.TopicName = p.TopicName
  	newP.Payload = p.Payload
  
  	return newP
  }
docs: //Copy creates a new PublishPacket with the same topic and payload
  //but an empty fixed header, useful for when you want to deliver
  //a message with different properties such as Qos but the same
  //content