// fillPacket fill the send packet and write the packet to buffer.
func (parse *BinaryPorotolParse) fillPacket(p *packet, conn *common.Conn) (err error) {
	var header []byte = make([]byte, headerLen)
	var i int

	// fill request header
	header[i] = p.magic
	i += magicLen
	header[i] = p.opcode
	i += opcodeLen
	binary.BigEndian.PutUint16(header[i:i+keyLen], p.keyLength)
	i += keyLen
	header[i] = p.extrasLength
	i += extrasLen
	header[i] = p.dataType
	i += dataTypeLen
	binary.BigEndian.PutUint16(header[i:i+statusLen], p.statusOrVbucket)
	i += statusLen
	binary.BigEndian.PutUint32(header[i:i+totalBodyLen], p.totalBodyLength)
	i += totalBodyLen
	binary.BigEndian.PutUint32(header[i:i+opaqueLen], p.opaque)
	i += opaqueLen
	binary.BigEndian.PutUint64(header[i:i+casLen], p.cas)

	// write content to buffer
	_, err = conn.WriteToBuffer(header)
	_, err = conn.WriteToBuffer(p.extras)
	_, err = conn.WriteToBuffer(p.key)
	_, err = conn.WriteToBuffer(p.value)

	return
}