void BELGE_KERNEL::GET_VARIABLES ()
{
    if ( m_mode EQ PRINT_TEST_VARS OR m_mode EQ PRINT_TEST_XXX ) {
        return;
    }

    m_header_variables.clear();
    GET_HEADER_INFO();

    // Satir sayisi kadar stringlist ayarla
    if (m_line_variables NE NULL) {
        delete m_line_variables;
    }
    m_line_variables     = new QStringList[m_row_count];
    m_kullanilan_satir_sayisi = 0;

    for (int i = 0 ; i < m_row_count ; i++) {
        m_kullanilan_satir_sayisi = i;
        GET_LINE_INFO();
    }

    m_footer_variables.clear();
    GET_FOOTER_INFO();
}
void*tdhs_decode(easy_message_t *m) {
	tdhs_packet_t *packet;
	uint32_t len, magic_code, com_or_resp, seq_id, reverse, datalen;
	uint32_t batch_request_num = 0;
	unsigned long long int now;
	size_t i;
	char *pos; //解析batch请求用
	uint32_t left_length; //判断batch请求长度用

	if ((len = m->input->last - m->input->pos) < TDH_SOCKET_HEADER_LENGTH)
		return NULL;

	// packet
	magic_code = ntohl(*((uint32_t *) (m->input->pos)));
	if (magic_code != TDHS_MAGIC_CODE) {
		easy_error_log("TDHS:magic_code is invalid: %d\n", magic_code);
		m->status = EASY_ERROR;
		return NULL;
	}

	GET_HEADER_INFO(com_or_resp, seq_id, reverse, datalen, m->input->pos)

	batch_request_num = com_or_resp == REQUEST_TYPE_BATCH ? reverse : 0;

	if (datalen > 0x4000000) { // 64M
		easy_error_log("TDHS:data_len is invalid: %d\n", datalen);
		m->status = EASY_ERROR;
		return NULL;
	}

	// 长度不够
	len -= TDH_SOCKET_HEADER_LENGTH;

	if (len < datalen) {
		m->next_read_len = datalen - len;
		return NULL;
	}

	// alloc packet
	if ((packet = (tdhs_packet_t *) easy_pool_calloc(m->pool,
			sizeof(tdhs_packet_t) * (1 + batch_request_num))) == NULL) {
		m->status = EASY_ERROR;
		return NULL;
	}
	now = tdhs_micro_time();

	packet->command_id_or_response_code = com_or_resp;
	packet->seq_id = seq_id;
	packet->reserved = reverse;
	packet->length = datalen;
	m->input->pos += TDH_SOCKET_HEADER_LENGTH;
	packet->rdata = (char *) m->input->pos;
	packet->pool = m->pool; //此处设置使用message的pool
	packet->start_time = now;
	//处理batch请求
	pos = packet->rdata;
	left_length = packet->length;
	for (i = 0; i < batch_request_num; i++) {
		tdhs_packet_t *batch_packet = packet + 1 + i;
		if (left_length < TDH_SOCKET_HEADER_LENGTH) {
			//长度不全导致没法完整解析batch请求的头
			easy_error_log( "TDHS:batch left_length is invalid: %d  %d\n",
					left_length);
			m->status = EASY_ERROR;
			return NULL;
		}

		GET_HEADER_INFO(com_or_resp, seq_id, reverse, datalen, pos)
		pos += TDH_SOCKET_HEADER_LENGTH;
		left_length -= TDH_SOCKET_HEADER_LENGTH;
		if (left_length < datalen) {
			//长度不全导致没法完整解析batch请求
			easy_error_log(
					"TDHS:batch data_len is invalid: %d ,the left_length is %d\n",
					datalen, left_length);
			m->status = EASY_ERROR;
			return NULL;
		}
		batch_packet->command_id_or_response_code = com_or_resp;
		batch_packet->seq_id = seq_id;
		//batch 目前不支持嵌套 ,所以不设置reserved
		batch_packet->length = datalen;
		batch_packet->rdata = pos;
		batch_packet->pool = m->pool; //此处设置使用message的pool
		batch_packet->start_time = now;
		(batch_packet - 1)->next = batch_packet; //形成链
		pos += datalen;
		left_length -= datalen;
	}
	m->input->pos += packet->length;
	return packet;
}