예제 #1
0
파일: trade.c 프로젝트: YesWant/HX123S
/*****************************************************************************
 ** Descriptions:	存储内外卡标志
 ** Parameters:    	SDK_8583_ST8583 *pstBag8583
 ** Returned value:
 ** Created By:		huacong  2016.03.17
 ** Remarks:
 *****************************************************************************/
s32 WriteCardInOrOut(SDK_8583_ST8583 *pstSendBag, SDK_8583_ST8583 *pstRevBag) {
	u8 temp[512];
	u8 bIsForeignCard[2] = { 0 };
	memset(temp, 0, sizeof(temp));
	if (GetFieldData(pstRevBag, 63, temp, sizeof(temp)) > 0) {
		if (((!memcmp(temp, "CUP", 3))
				|| //中国银联
				(!memcmp(temp, "cup", 3)) || (!memcmp(temp, "000", 3))
				|| (!memcmp(temp, "\x00\x00\x00", 3)))) {
			bIsForeignCard[0] = '0';
		} else {
			bIsForeignCard[0] = '1';
		}
	} else if (GetFieldData(pstSendBag, 63, temp, sizeof(temp)) > 0) {
		if (((!memcmp(temp, "CUP", 3))
				|| //中国银联
				(!memcmp(temp, "cup", 3)) || (!memcmp(temp, "000", 3))
				|| (!memcmp(temp, "\x00\x00\x00", 3)))) {
			bIsForeignCard[0] = '0';
		} else {
			bIsForeignCard[0] = '1';
		}
	}
//    Log("wangb","WriteCardInOrOut is %s ",bIsForeignCard);
	if (ProviderSetTagValue(TAG_TRADE_CARDINOUT, bIsForeignCard, 1) != 1) {
		return SDK_ERR;
	}
//    Log("wangb","WriteCardInOrOut is %s ",bIsForeignCard);
	return SDK_OK;

}
예제 #2
0
파일: trade.c 프로젝트: YesWant/HX123S
/*****************************************************************************
 ** Descriptions:	读取冲正包
 ** Parameters:    	SDK_8583_ST8583 *pstReversalBag
 ** Returned value:
 ** Created By:		huacong  2016.03.10
 ** Remarks:
 *****************************************************************************/
s32 ReadReversalBag(SDK_8583_ST8583 *pstReversalBag) {
	s32 ret = SDK_ESC, len;
	u8 temp[SDK_8583_BAGMAXLEN];
	Log("zbq", "jump into ReadReversalBag");
	memset(temp, 0, sizeof(temp));
	if ((len = ProviderGetTagValue(TAG_TRADE_REVERSALBAG, temp)) > 0) {
		memcpy(pstReversalBag->ucBagData, temp, len);
		pstReversalBag->nBagLen = len;
		if (ParseField8583(pstReversalBag) < SDK_EQU) {
			return SDK_ERR;
		} else {
			//xiaox 有55域则写入 emvtag 缓存链表
			if (sdk8583IsDomainExist(pstReversalBag, 55)) {
				if (gstEmvTempTagList.ItemCount > 0) {
					FreeTagList(&gstEmvTempTagList);
				}
				memset(temp, 0, sizeof(temp));
				InitTagList(&gstEmvTempTagList);
				len = GetFieldData(pstReversalBag, 55, temp, sizeof(temp));
				BuildTagListOneLevel(temp, len, &gstEmvTempTagList);
				TraceHex("xiaox","55field",temp,len);
			}
		}
	} else {
		return SDK_ERR;
	}

}
예제 #3
0
파일: trade.c 프로젝트: YesWant/HX123S
/*****************************************************************************
 ** Descriptions:	读取发送包
 ** Parameters:    	SDK_8583_ST8583 *pstSendBag
 ** Returned value:
 ** Created By:		huacong  2016.03.04
 修改  wangb 2016 0315
 ** Remarks:
 *****************************************************************************/
s32 ReadSendBag(SDK_8583_ST8583 *pstSendBag) {
	u8 temp[2048];
	s32 len;
	memset(temp, 0, sizeof(temp));

	if (pstSendBag == NULL) {
		return SDK_ERR;
	}
	if ((len = ProviderGetTagValue(TAG_8583_SENDBAG, temp)) > 2) {
		memcpy(pstSendBag->ucBagData, temp + 2, len - 2);
		pstSendBag->nBagLen = len - 2;
		if (ParseField8583(pstSendBag) < SDK_EQU) {
			return SDK_ERR;
		} else {
			//xiaox 有55域则写入 emvtag 缓存链表
			if (sdk8583IsDomainExist(pstSendBag, 55)) {
				if (gstEmvTempTagList.ItemCount > 0) {
					FreeTagList(&gstEmvTempTagList);
				}
				memset(temp, 0, sizeof(temp));
				InitTagList(&gstEmvTempTagList);
				len = GetFieldData(pstSendBag, 55, temp, sizeof(temp));
				BuildTagListOneLevel(temp, len, &gstEmvTempTagList);
				TraceHex("xiaox","55field",temp,len);
			}
		}
	} else {
		return SDK_ERR;
	}
	return SDK_OK;
}
예제 #4
0
TEST_F(CoordinateTransformableDataObject_test, ApplyCoordinateSystemFromFieldData)
{
    auto dataSet = genPolyDataSet();

    const auto coordsSpec = ReferencedCoordinateSystemSpecification(
        CoordinateSystemType::geographic,
        "testGeoSystem",
        "testMetricSystem",
        "",
        { 100, 200 }, {0.2, 0.3});

    coordsSpec.writeToFieldData(*dataSet->GetFieldData());
    
    PolyDataObject polyData("poly", *dataSet);

    ASSERT_EQ(coordsSpec, polyData.coordinateSystem());
}
예제 #5
0
TEST_F(CoordinateTransformableDataObject_test, coordsPassToProcessedFieldData)
{
    auto dataObject = genPolyData();

    const auto coordsSpec = ReferencedCoordinateSystemSpecification(
        CoordinateSystemType::geographic,
        "testGeoSystem",
        "testMetricSystem",
        "",
        { 100, 200 }, { 0.2, 0.3 });

    dataObject->specifyCoordinateSystem(coordsSpec);

    auto processedDataSet = dataObject->processedDataSet();
    const auto passedSpec = ReferencedCoordinateSystemSpecification::fromFieldData(*processedDataSet->GetFieldData());

    ASSERT_EQ(coordsSpec, passedSpec);
}
예제 #6
0
bool FeedFilter::Term::Match(FeedItemInfo* pFeedItemInfo)
{
	const char* szStrValue = NULL;
	long long iIntValue = 0;

	if (!GetFieldData(m_szField, pFeedItemInfo, &szStrValue, &iIntValue))
	{
		return false;
	}

	bool bMatch = MatchValue(szStrValue, iIntValue);

	if (m_bPositive != bMatch)
	{
		return false;
	}

	return true;
}
예제 #7
0
파일: trade.c 프로젝트: YesWant/HX123S
/*****************************************************************************
 函 数 名  : Trace8583Bag
 功能描述  : 显示8583报文域信息
 输入参数  : u8 *asTitle
 SDK_8583_ST8583 *pstBag8583
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
 1.日    期   : 2012年12月25日
 作    者   : zj
 修改内容   : 新生成函数

 *****************************************************************************/
void Trace8583Bag(u8 *asTitle, SDK_8583_ST8583 *pstBag8583) {
#ifndef XGD_SDK_DEBUG
	return;
#else
	u32 i;
	u8 asBuf[STOREBAGLEN];
	u8 asBuf1[STOREBAGLEN * 2];
	s32 siLen = 0;

	for (i = 0; i <= 64; i++)
	{
		if (sdk8583IsDomainExist(pstBag8583, i))
		{
			memset(asBuf, 0, sizeof(asBuf));
			siLen = 0;

			siLen = GetFieldData(pstBag8583, i, asBuf, sizeof(asBuf));
			if (siLen > 0)
			{
				if (sdkIsVisibleStr(asBuf, siLen))
				{
//                    Trace(asTitle, "[%03u][%03d][%s]\r\n", i, siLen, asBuf);
				}
				else
				{
					//可能是不是ASCII内容,转换为HEX显示,最后标注*号区分
					memset(asBuf1, 0, sizeof(asBuf1));
					sdkBcdToAsc(asBuf1, asBuf, siLen);
//                    Trace(asTitle, "[%03u][%03d][%s]*\r\n", i, siLen, asBuf1);
				}
			}

		}
	}
#endif
}
예제 #8
0
파일: trade.c 프로젝트: YesWant/HX123S
/*****************************************************************************
 函 数 名  : EncryptMagData
 功能描述  : 磁道数据加密
 输入参数  : u8 *pheDataBuf
 s32 *iDataLen
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
 1.日    期   : 2012年12月26日
 作    者   : wuzhonglin
 修改内容   : 新生成函数

 *****************************************************************************/
s32 EncryptMagData(struct _TradeData *pstTradeData, SDK_8583_ST8583 *pstSendBag) {
	u8 tmp[256], buf[128], outbuf[128] = { 0 };
	s32 iLen, pOutLen;
	s32 slt = SDK_OK;
	u8 *pBuf;
	bool bIsEncryp = false;
// && pstTradeData->stKeySystemParam.bIsMk3Des
//    iLen = GetFieldData(pstSendBag, 35, tmp, sizeof(tmp));
//    && pstTradeData->stKeySystemParam.bIsMk3Des
	if (gstAppSetting.stKeySystemParam.bIsSupportTdk
			&& (sdk8583IsDomainExist(pstSendBag, 35)
					|| sdk8583IsDomainExist(pstSendBag, 36))) {
		memset(tmp, 0, sizeof(tmp));
		iLen = GetFieldData(pstSendBag, 35, tmp, sizeof(tmp));
		Log("wangb", "Field35_1=%s", tmp);
		if (iLen > 16) {
//            sdkAscToBcd(buf, tmp, iLen);
//            pBuf = &buf[(iLen + 1) / 2 - 9];
			//加密

			//   slt = sdkPEDWkDes(pstTradeData->stKeySystemParam.uiTdkIndex, SDK_PED_DES_TRIPLE, SDK_PED_ENCRYPT, pBuf, pBuf);
			slt = ProviderTrackDataEncrypt(tmp, outbuf, &pOutLen);   //Fixme
			if (slt != SDK_OK) {
				return SDK_ERR;
			}
//          sdkBcdToAsc(tmp, outbuf, (pOutLen + 1) / 2);
			sdkBcdToAsc(tmp, outbuf, pOutLen);
			Log("wangb", "Field35_2 %s", tmp);
			sdk8583ClrField(pstSendBag, 35);
			SetFieldData(pstSendBag, 35, tmp, iLen);

			bIsEncryp = true;
		}
		memset(tmp, 0, sizeof(tmp));
		memset(outbuf, 0, sizeof(outbuf));
		iLen = GetFieldData(pstSendBag, 36, tmp, sizeof(tmp));
		if (iLen > 16) {
//
//            sdkAscToBcd(buf, tmp, iLen);
//            pBuf = &buf[(iLen + 1) / 2 - 9];
			//加密
//            slt = sdkPEDWkDes(pstTradeData->stKeySystemParam.uiTdkIndex, SDK_PED_DES_TRIPLE, SDK_PED_ENCRYPT, pBuf, pBuf);
			slt = ProviderTrackDataEncrypt(tmp, outbuf, &pOutLen);
			if (slt != SDK_OK) {
				return SDK_ERR;
			}
//          sdkBcdToAsc(tmp, buf, (iLen + 1) / 2);
			sdkBcdToAsc(tmp, outbuf, pOutLen);
			sdk8583ClrField(pstSendBag, 36);
			SetFieldData(pstSendBag, 36, tmp, iLen);
			bIsEncryp = true;
		}
	}
	if (bIsEncryp) {
		//重新设置53域TRACK-ENCRYPTION-USED
		iLen = 0;
		memset(tmp, 0, sizeof(tmp));
		iLen = GetFieldData(pstSendBag, 53, tmp, sizeof(tmp));
		if (iLen >= 3) {
			tmp[2] = '1';
			sdk8583ClrField(pstSendBag, 53);
			SetFieldData(pstSendBag, 53, tmp, iLen);
		} else {
			strcpy(tmp, "001");
			if (gstAppSetting.stKeySystemParam.bIsMk3Des)        // 3des
			{
				tmp[1] = '6';
			}
			SetFieldData(pstSendBag, 53, tmp, strlen(tmp));
		}
	}
	Log("wangb", "pucMacBuf3 is %s", tmp);
	return SDK_OK;
}
예제 #9
0
파일: trade.c 프로젝트: YesWant/HX123S
/*****************************************************************************
 ** Descriptions:	效验接收包
 ** Parameters:          void
 ** Returned value:
 ** Created By:		lilin2012.08.06
 ** Remarks:
 ***************************************************+**************************/
s32 CheckRecBag(SDK_8583_ST8583 *pstSendBag, SDK_8583_ST8583 *pstRevBag) {
	//SDK_PED_DES_TYPE type;
	u8 ucMacBuf[32];
	u8 sendbuf[64] = { 0 };
	u8 proccode[6] = { 0 };
	s32 slen;
	s32 rlen;
	u8 revbuf[64] = { 0 };
	u8 res[3] = { 0 };
	s32 rlt;
	u8 i;
	u8 num = 0;
	struct _Field60 stfield60;

	struct _TradeData *stTradeData = &gstTradeData;

#ifdef ELECSIGN
	u8 maxCheckNum = 6;
#endif
	u8 he_checkdata[6] = {
	SDK_8583_FIELD_MSG,           //消息类型
			3,                              //交易处理码
			11,                             //流水号
			41,                             //终端号
			42,                             //商户号
			4,                              //交易金额
			};

	//获取处理吗
	Log("wangb", "CheckRecBag start");
	if (sdk8583IsDomainExist(pstSendBag, 3)) {
		GetFieldData(pstSendBag, 3, proccode, 6);
	}
	memset(sendbuf, 0, sizeof(sendbuf));
	rlt = GetFieldData(pstSendBag, SDK_8583_FIELD_MSG, sendbuf, 4);   //获取消息类型
	if (rlt < 0) {
		Log("CheckRecBag", "取RECV0错误");
		return ERR_RECZERO;
	} else {
		if (memcmp(sendbuf, "05", 2))                        //结算报文没有39域
				{
			memset(res, 0, sizeof(res));
			rlt = GetFieldData(pstRevBag, 39, res, 3);
			if (rlt < 0) {
				Log("CheckRecBag", "取RECV39错误\r\n");
				return ERR_RECZERO;
			} else {
				ProviderSetTagValue(TAG_8583_BKRESULT, res, rlt);
			}
		}
	}
	//是否缺失64域
	if (sdk8583IsDomainExist(pstSendBag, 64))          //先判断发送包是否有64
			{
		if (strcmp(res, "00") == 0)       //39域返回正确
				{
			if (!sdk8583IsDomainExist(pstRevBag, 64))         //判断接收64域
					{
				rlt = ERR_MISSMAC;
				return rlt;
			}
		}
	}

	//判断64域是否正确
	if (sdk8583IsDomainExist(pstRevBag, 64)) {
		rlt = GetMacData(stTradeData, pstRevBag, ucMacBuf);
		Log("wangb", "ucMacBuf64 %s", ucMacBuf);
		if (rlt != SDK_OK) {
			Log("CheckRecBag", "ECB算法错误");
			return ERR_CALCMAC;
		}
		memset(revbuf, 0, sizeof(revbuf));
		rlt = GetFieldData(pstRevBag, 64, revbuf, 8);
		Log("wangb", "revbuf64 %s", revbuf);
		if (rlt < 0) {
			Log("CheckRecBag", "缺少64域");
			return ERR_RECZERO;
		}
		// TraceHex("CheckRecBag", "cal=", ucMacBuf, 8);
		// TraceHex("CheckRecBag", "mac=", revbuf, 8);

		if (memcmp(ucMacBuf, revbuf, 8)) {
			Log("CheckRecBag", "MAC效验错误");
			rlt = ERR_CALCMAC;
			return rlt;
		}
	}

	u8 gElecSignIsSendingEsTrade = false; //本次交易为电子签名上送交易(用于解包8583不校验4域--打包8583)
#ifdef ELECSIGN
	if (gElecSignIsSendingEsTrade) {
		maxCheckNum = 5;
	} else {
		maxCheckNum = 6;
	}
	for (i = 0; i < maxCheckNum; i++)
#else
			for (i = 0; i < 6; i++)
#endif
			{
		num = he_checkdata[i];

		if (sdk8583IsDomainExist(pstRevBag, num)
				&& sdk8583IsDomainExist(pstSendBag, num)) {
			memset(revbuf, 0, sizeof(revbuf));
			rlen = GetFieldData(pstRevBag, num, revbuf, 64);

			if (rlen < 0) {
				Log("CheckRecBag", "取RECV%d错误\r\n", num);
				return ERR_RECZERO;
			}
			memset(sendbuf, 0, sizeof(sendbuf));
			slen = GetFieldData(pstSendBag, num, sendbuf, 64);

			if (slen < 0) {
				Log("CheckRecBag", "取SEND%d错误\r\n", num);
				return ERR_RECZERO;
			}
			Log("wangb", "sendbuf is %s", sendbuf);
			Log("wangb", "revbuf is %s", revbuf);
			switch (num) {
			case SDK_8583_FIELD_MSG:   //判断消息类型

				if ((memcmp(sendbuf, revbuf, 2))
						|| (revbuf[2] != (sendbuf[2] + 1))) {
					rlt = ERR_MSGTYPE;
					return rlt;
				}
				break;

			case 3:      //比较处理码(银行卡检测中心说一定要比较第1个字节交易类型)

				if (memcmp(sendbuf, revbuf, 2)) {
					rlt = ERR_PROCESSCODE;
					return rlt;
				}
				break;

			case 11:

				//比较POS流水号
				if (strcmp(sendbuf, revbuf)) {
					rlt = ERR_VOUCHERNO;
					return rlt;
				}
				break;

			case 41:

				//比较终端号
				if (strcmp(sendbuf, revbuf)) {
					rlt = ERR_TERMINALNO;
					return rlt;
				}
				break;

			case 42:

				//比较商户号
				if (strcmp(sendbuf, revbuf)) {
					rlt = ERR_MERCHANTNO;
					return rlt;
				}
				break;

			case 4:

				//比较交易金额
				if (strcmp(sendbuf, revbuf)) {
					Log("CheckRecBag", "%s  %s\r\n", sendbuf, revbuf);
					memset(&stfield60, 0, sizeof(stfield60));

					if (ParseField60(&stfield60)) {
						if (strcmp(res, "10") || stfield60.ucPortion != '1') //不为部分扣款
								{
							rlt = ERR_TRADEAMOUNT;
							return rlt;
						}
					}
				}
				break;

			default:
				break;
			}
		} else {
			if (num == 41) {
				rlt = ERR_TERMINALNO;
				return rlt;
			}

			if (num == 42) {
				rlt = ERR_MERCHANTNO;
				return rlt;
			}
		}
	}

	//响应码处理
	memset(sendbuf, 0, sizeof(sendbuf));
	rlt = GetFieldData(pstSendBag, SDK_8583_FIELD_MSG, sendbuf, 4); //获取消息类型码

	if (rlt < 0) {
		Log("CheckRecBag", "取RECV0错误");
		return ERR_RECZERO;
	}

	if (memcmp(sendbuf, "04", 2) == 0)                    //冲正包判断
			{
		if (memcmp(res, "00", 2) && memcmp(res, "12", 2)
				&& memcmp(res, "25", 2)) {
			return ERR_RESPONSE;
		}
	}
	//磁条卡现金充值确认包判断
	else if (memcmp(sendbuf, "0220", 4) == 0
			&& memcmp(proccode, "63", 2) == 0) {
		if (memcmp(res, "00", 2) && memcmp(res, "A6", 2)) {
			return ERR_RESPONSE;
		}
	} else {
		if (memcmp(sendbuf, "05", 2))                        //结算报文没有39域
				{
			if (!CheckResponseCode(res))    //响应码错误
					{
				Log("CheckRecBag", "响应码error  %s", res);
//			  Log("CheckRecBag", "FunCode", stfield60.asFunCode, 2);
				//磁条卡现金充值回98当做超时
				memset(&stfield60, 0, sizeof(struct _Field60));
				ParseField60(&stfield60);

				//磁条卡现金充值包判断
				if (memcmp(sendbuf, "0200", 4) == 0
						&& memcmp(proccode, "63", 2) == 0
						&& memcmp(stfield60.asFunCode, "48", 2) == 0) {
					if (memcmp(res, "98", 2) == 0) {
						//lilin 20140214磁条卡现金充值不显示交易失败要进行磁条卡现金充值确认
//                        GetStrResponseError(dispbuf);
//                        sdkDispPromptBox(false, 500, dispbuf);
						return SDK_TIME_OUT;
					}
				}
				/*=======BEGIN: lilin 2015.01.12  15:31 modify===========*/
				if ((memcmp(sendbuf, "0200", 4) == 0)
						&& (memcmp(proccode, "00", 2) == 0)
						&& (memcmp(stfield60.asFunCode, "22", 2) == 0))     //消费
						{
					if ((strcmp(res, "10") == 0)
							&& (stfield60.ucPortion != '1')) //如果不是部分扣费还返回10则需要冲正
							{
						return ERR_NEEDREVERSAL;
					}
					if ((strcmp(res, "10") == 0)
							&& (stfield60.ucPortion == '1'))           //部分扣款
							{
						return ERR_RESPONSE10;
					}
				}
				/*====================== END======================== */
				return ERR_RESPONSE;
			}
		}
	}

	//都正确处理更新时间和日期
	if (sdk8583IsDomainExist(pstRevBag, 12))                         //更新交易时间
			{
		memset(revbuf, 0, sizeof(revbuf));
		rlt = GetFieldData(pstRevBag, 12, revbuf, 64);
		/*
		 if (rlt)
		 {
		 sdkAscToBcd(&gstSys.ucHour, &revbuf[0], 2);
		 sdkAscToBcd(&gstSys.ucMinute, &revbuf[2], 2);
		 sdkAscToBcd(&gstSys.ucSecond, &revbuf[4], 2);
		 }
		 */
	}

	if (sdk8583IsDomainExist(pstRevBag, 13))                     //更新交易日期
			{
		memset(revbuf, 0, sizeof(revbuf));
		rlt = GetFieldData(pstRevBag, 13, revbuf, 64);
		/*
		 if (rlt)
		 {
		 sdkAscToBcd(&gstSys.ucMonth, &revbuf[0], 2);
		 sdkAscToBcd(&gstSys.ucDay, &revbuf[2], 2);
		 }
		 */
	}
	// Trace("CheckRecBag", "OK\r\n");
	Log("wangb", "CheckRecBag OK");
	return SDK_OK;
}
예제 #10
0
bool FeedFilter::Term::Compile(char* szToken)
{
	debug("Token: %s", szToken);

	char ch = szToken[0];

	m_bPositive = ch != '-';
	if (ch == '-' || ch == '+')
	{
		szToken++;
		ch = szToken[0];
	}

	char ch2= szToken[1];
	if ((ch == '(' || ch == ')' || ch == '|') && (ch2 == ' ' || ch2 == '\0'))
	{
		switch (ch)
		{
			case '(':
				m_eCommand = fcOpeningBrace;
				return true;
			case ')':
				m_eCommand = fcClosingBrace;
				return true;
			case '|':
				m_eCommand = fcOrOperator;
				return true;
		}
	}

	char *szField = NULL;
	m_eCommand = fcText;

	char* szColon = NULL;
	if (ch != '@' && ch != '$' && ch != '<' && ch != '>' && ch != '=')
	{
		szColon = strchr(szToken, ':');
	}
	if (szColon)
	{
		szField = szToken;
		szColon[0] = '\0';
		szToken = szColon + 1;
		ch = szToken[0];
	}

	if (ch == '\0')
	{
		return false;
	}

	ch2= szToken[1];

	if (ch == '@')
	{
		m_eCommand = fcText;
		szToken++;
	}
	else if (ch == '$')
	{
		m_eCommand = fcRegex;
		szToken++;
	}
	else if (ch == '=')
	{
		m_eCommand = fcEqual;
		szToken++;
	}
	else if (ch == '<' && ch2 == '=')
	{
		m_eCommand = fcLessEqual;
		szToken += 2;
	}
	else if (ch == '>' && ch2 == '=')
	{
		m_eCommand = fcGreaterEqual;
		szToken += 2;
	}
	else if (ch == '<')
	{
		m_eCommand = fcLess;
		szToken++;
	}
	else if (ch == '>')
	{
		m_eCommand = fcGreater;
		szToken++;
	}

	debug("%s, Field: %s, Command: %i, Param: %s", (m_bPositive ? "Positive" : "Negative"), szField, m_eCommand, szToken);

	const char* szStrValue;
	long long iIntValue;
	if (!GetFieldData(szField, NULL, &szStrValue, &iIntValue))
	{
		return false;
	}

	if (szField && !ParseParam(szField, szToken))
	{
		return false;
	}

	m_szField = szField ? strdup(szField) : NULL;
	m_szParam = strdup(szToken);

	return true;
}