Esempio n. 1
0
/**
 * return -1 incomplete command;
 *  current index;
 */
int parseBulkString(struct WData *wdata, int start){
	log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "parse bulk string  at line %d in file %s, %s", __LINE__, __FILE__, wdata->data);
	int index = start;
	index++;
	int item_len = 0;
	int data_start;
	while(wdata->data[index] != '\r' && index < wdata->len){
		item_len = item_len * 10 +  wdata->data[index] - '0';
		index++;
	}
	if(index >= wdata->len){
		saveToBuf(wdata, start, &buf_slave_answer);
		return -1;
	}
	index++;
	data_start = index + 1;
	index += item_len + 2;
	index++;
	if(index > wdata->len){
		saveToBuf(wdata, start, &buf_slave_answer);
		return -1;
	}
	char *saveData = (char*)calloc(item_len + 1, sizeof(char));
	strncpy(saveData, wdata->data+ data_start, item_len);
	if(saveData == 0){
		log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "post data empty  at line %d in file %s", __LINE__, __FILE__);
	}
	popHandle(saveData);
	return index;
}
Esempio n. 2
0
/*
 * return -1 incomplete command
 */
int parseSimple(struct WData *wdata, int start){
	int index = start;
	index++;
	int error_start = index;
	int exist = 0;
	while( index < wdata->len){
		if(wdata->data[index] == '\n'){
			exist = 1;
			break;
		}
		index++;
	}
	if(exist == 1){
		char *cmd = (char*)calloc(index - start + 1, sizeof(char));
		strncpy(cmd, &wdata->data[error_start], index + 1 - start);
		if(wdata->data[index] == '-' ){
			DataType e = pop_cir_queue(&q);
			log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "pop %s receive error %s  at line %d in file %s", e, cmd,  __LINE__, __FILE__);
		}
		else{
			if(index - start > 5){
				DataType e = pop_cir_queue(&q);
				log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "pop %s receive string %s  at line %d in file %s", e, cmd,  __LINE__, __FILE__);
			}
		}
		free(cmd);
		return index + 1;
	}
	else{
		saveToBuf(wdata, start, &buf_slave_answer);
		return -1;
	}
}
Esempio n. 3
0
/**
 * @brief           RX routine
 */
void DPDKAdapter::rxRoutine()
{
    uint8_t pkt = 0;
    uint8_t rxPktCount = 0;
    uint8_t devId = 0;

    uint8_t lcoreId = rte_lcore_id();
    LcoreInfo& coreInfo = cores[lcoreId];

    for(PortList_t::iterator itor = coreInfo.rxPortList.begin(); itor != coreInfo.rxPortList.end(); itor++)
    {
        devId = *itor;

        DeviceInfo& devInfo = devices[devId];

        struct rte_eth_dev *dev = &rte_eth_devices[devId];
        if(!dev || !dev->data->dev_started)
        {
            continue;
        }

        rxPktCount = rte_eth_rx_burst(devId, 0, devInfo.rxBurstBuf, DPDK_RX_MAX_PKT_BURST);

        if(isRxStarted(devId))
        {
            saveToBuf(devId, devInfo.rxBurstBuf, rxPktCount);
        }

        for(pkt = 0; pkt < rxPktCount; pkt++)
        {
            rte_pktmbuf_free(devInfo.rxBurstBuf[pkt]);
        }
    }
}
Esempio n. 4
0
/*
 * return current index;
 *  -1 incomplete command;
 */
int parseArray(struct WData *wdata, int start){
	int index = start;
	index++;
	if(index >= wdata->len){
		saveToBuf(wdata, start, &buf_slave_answer);
		return -1;
	}
	int array_len = 0;
	int enter = 0;
	while(wdata->data[index] != '\r' && index < wdata->len){
		array_len = array_len * 10 +  wdata->data[index] - '0';
		index++;
		enter = 1;
		 if(index >= wdata->len){
			saveToBuf(wdata, start, &buf_slave_answer);
			return -1;
		}
	}
	index += 2;
	if(index > wdata->len || (index == wdata->len && array_len > 0)){
		saveToBuf(wdata, start, &buf_slave_answer);
		return -1;
	}
	char *item_key;
	char *item_value;
	json_t *object = json_object();
	while(array_len > 0){
		if(wdata->data[index] != '$'){
			log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "unexpected data, index %d, start %d, wdata->len %d, index value %c at line %d in file %s, data %s",index, start, wdata->len, wdata->data[index],  __LINE__, __FILE__, wdata->data);
			printf("2unexpected data, index %d, start %d, wdata->len %d, index %d\n", index, start, wdata->len, wdata->data[index]);
			int i;
			for(i = start; i <= index; i++)
				printf("%c", wdata->data[i]);
			for(i = index + 1; i< wdata->len; i++)
				printf("%c", wdata->data[i]);
				
			exit(1);
		}
		index++;
		if(index >= wdata->len){
			saveToBuf(wdata, start, &buf_slave_answer);
			json_decref(object);
			return -1;
		}
		int item_len = 0;
		int item_start;
		while(wdata->data[index] != '\r' && index < wdata->len){
			item_len = item_len * 10 +  wdata->data[index] - '0';
			index++;
		}
		if(index >= wdata->len){
			saveToBuf(wdata, start, &buf_slave_answer);
			json_decref(object);
			return -1;
		}
		index++;
		item_start = index + 1;
		index += item_len + 2;
		index++;
		if(index > wdata->len || (index == wdata->len && array_len > 1)){
			saveToBuf(wdata, start, &buf_slave_answer);
			json_decref(object);
			return -1;
		}

		if(item_len > 0){
			if(array_len %2 == 0){
				item_key = (char*)calloc(item_len + 1, sizeof(char));
				strncpy(item_key, wdata->data + item_start, item_len);
			}
			else{
				item_value = (char*)calloc(item_len + 1, sizeof(char));
				strncpy(item_value, wdata->data + item_start, item_len);
				if(item_key && item_value){
					json_t *item_json;
					item_json = json_string(item_value);
					free(item_value);
					json_object_set(object, item_key, item_json);
					json_decref(item_json);
					free(item_key);
				}
				else{
					log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "item key is  null or item value is null  at line %d in file %s", __LINE__, __FILE__);
				}
			}
		}

		array_len--;
	}

	popHandle(object);
	return index;
}