Example #1
0
//
//The following are the implementations of all command handler.
//The handler's name is the same as command.
//
static DWORD inputb(__CMD_PARA_OBJ* lpCmdObj)
{
	WORD           wInputPort         = 0;
	UCHAR          bt                 = 0;
	DWORD          dwInputPort        = 0;
	CHAR           strBuffer[15]      = {0};

	if(NULL == lpCmdObj)  //Parameter check.
		return IOCTRL_TERMINAL;

	if(lpCmdObj->byParameterNum < 2)  //Two small parameters.
	{
		PrintLine("Please input the port where to read.");
		return IOCTRL_NORMAL;
	}
	if(!Str2Hex(lpCmdObj->Parameter[1],&dwInputPort))  //Convert the string value to hex.
	{
		PrintLine("Invalid port value.");
		return IOCTRL_NORMAL;
	}

	wInputPort = (WORD)dwInputPort;  //Now,wInputPort contains the port number.
	//ReadByteFromPort(&bt,wInputPort);  //Read one byte from port.
	bt = __inb(wInputPort);

	dwInputPort =  0;
	dwInputPort += bt;

	strBuffer[0] = ' ';
	strBuffer[1] = ' ';
	strBuffer[2] = ' ';
	strBuffer[3] = ' ';

	Hex2Str(dwInputPort,&strBuffer[4]);
	PrintLine(strBuffer);    //Print out the byte.

	return 0;
}
Example #2
0
static DWORD memalloc(__CMD_PARA_OBJ* lpCmdObj)
{
	DWORD      dwMemSize      = 0;
	LPVOID     lpMemAddr      = NULL;
	CHAR       strBuffer[16];

	if(NULL == lpCmdObj)  //Parameter check.
		return SHELL_CMD_PARSER_FAILED;

	if(lpCmdObj->byParameterNum < 2) //Not enough parameters.
	{
		PrintLine("Please input the memory size to be allocated.");
		return SHELL_CMD_PARSER_SUCCESS;
	}

	if(!Str2Hex(lpCmdObj->Parameter[1],&dwMemSize)) //Invalid size value.
	{
		PrintLine("Invalid memory size value.");
		return SHELL_CMD_PARSER_SUCCESS;
	}

	lpMemAddr = KMemAlloc(dwMemSize,KMEM_SIZE_TYPE_ANY);
	if(NULL == lpMemAddr)  //Failed to allocate memory.
	{
		PrintLine("Can not allocate memory.");
		return SHELL_CMD_PARSER_SUCCESS;
	}

	Hex2Str((DWORD)lpMemAddr,&strBuffer[4]);  //Convert to string.

	strBuffer[0] = ' ';
	strBuffer[1] = ' ';
	strBuffer[2] = '0';
	strBuffer[3] = 'x';
	PrintLine(strBuffer);    //Print out the result.

	return SHELL_CMD_PARSER_SUCCESS;
}
Example #3
0
static DWORD overload(__CMD_PARA_OBJ* lpCmdObj)
{
	DWORD            dwTimerNum       = 10;
	DWORD            dwTimerID        = 00200000;
	DWORD            dwTimeSpan       = 100;
	__COMMON_OBJECT* lpTimerObject    = NULL;

	if((NULL == lpCmdObj) || (lpCmdObj->byParameterNum < 2))  //Parameter check.
	{
		PrintLine("  Please input the beep time,in millionsecond.");
		return SHELL_CMD_PARSER_INVALID;
	}

	if(!Str2Hex(lpCmdObj->Parameter[1],&dwTimerNum))  //Get the time span to beep.
	{
		PrintLine("  Invalid time parameter.");
		return SHELL_CMD_PARSER_INVALID;
	}

	while(dwTimerNum)
	{
		lpTimerObject = System.SetTimer((__COMMON_OBJECT*)&System,
			KernelThreadManager.lpCurrentKernelThread,
			dwTimerID,
			dwTimeSpan,
			NULL,
			NULL,
			TIMER_FLAGS_ONCE);
		if(NULL == lpTimerObject)    //Failed to set timer.
		{
			PrintLine("  Can not set timer,please try again.");
			return SHELL_CMD_PARSER_FAILED;
		}
		dwTimerNum --;
	}

	return SHELL_CMD_PARSER_SUCCESS;
}
Example #4
0
static DWORD inputw(__CMD_PARA_OBJ* lpCmdObj)
{
	WORD           wInputPort         = 0;
	WORD           wr                 = 0;
	DWORD          dwInputPort        = 0;
	CHAR           strBuffer[15]      = {0};

	if(NULL == lpCmdObj)  //Parameter check.
		return SHELL_CMD_PARSER_FAILED;

	if(lpCmdObj->byParameterNum < 2)  //Two small parameters.
	{
		PrintLine("Please input the port where to read.");
		return SHELL_CMD_PARSER_SUCCESS;
	}
	if(!Str2Hex(lpCmdObj->Parameter[1],&dwInputPort))  //Convert the string value to hex.
	{
		PrintLine("Invalid port value.");
		return SHELL_CMD_PARSER_SUCCESS;
	}

	wInputPort = (WORD)(dwInputPort);  //Now,wInputPort contains the port number.
	//ReadWordFromPort(&wr,wInputPort);  //Read one byte from port.
	wr = __inw(wInputPort);

	dwInputPort =  0;
	dwInputPort += wr;

	strBuffer[0] = ' ';
	strBuffer[1] = ' ';
	strBuffer[2] = ' ';
	strBuffer[3] = ' ';

	Hex2Str(dwInputPort,&strBuffer[4]);
	PrintLine(strBuffer);    //Print out the byte.

	return SHELL_CMD_PARSER_SUCCESS;
}
Example #5
0
/******************************************************************************
** Add a new node name to the list.
*/
void AddNodeName(char * pAddr, char * pName)
{
     PNODENAME pNew;
     
     /* Create new node name. */
     pNew = (PNODENAME) malloc(sizeof(NODENAME));
     if (!pNew)
          return;

     /* Convert address. */
     pNew->Address[0] = Str2Hex(pAddr);      pAddr += 2;
     pNew->Address[1] = Str2Hex(pAddr);      pAddr += 2;
     pNew->Address[2] = Str2Hex(pAddr);      pAddr += 2;
     pNew->Address[3] = Str2Hex(pAddr);      pAddr += 2;
     pNew->Address[4] = Str2Hex(pAddr);      pAddr += 2;
     pNew->Address[5] = Str2Hex(pAddr);
     
     /* Copy in name (truncated). */
     pName[7] = '\0';
     strcpy(pNew->szName, pName);
     
     /* Check for null list. */
     if (NameList == NULL)
     {
          /* Set as root. */
          pNew->Next = NULL;
          pTail      = pNew;
          NameList   = pNew;
     }
     else /* List not empty. */
     {
          /* Tag on end. */
          pNew->Next  = NULL;
          pTail->Next = pNew;
          pTail       = pNew;
     }
}
Example #6
0
static DWORD beep(__CMD_PARA_OBJ* lpCmdObj)
{
	__KERNEL_THREAD_MESSAGE       Msg;
	DWORD                         dwTimerID      = 00100000;
	DWORD                         dwTimeSpan     = 0;
	__COMMON_OBJECT*              lpTimerObject  = NULL;
	UCHAR                         ucCtrlByte;

	if((NULL == lpCmdObj) || (lpCmdObj->byParameterNum < 2))  //Parameter check.
	{
		PrintLine("  Please input the beep time,in millionsecond.");
		return SYS_DIAG_CMD_PARSER_INVALID;
	}

	if(!Str2Hex(lpCmdObj->Parameter[1],&dwTimeSpan))  //Get the time span to beep.
	{
		PrintLine("  Invalid time parameter.");
		return SYS_DIAG_CMD_PARSER_INVALID;
	}

	//
	//Now,the variable dwTimeSpan countains the time to beep.
	//
	lpTimerObject = System.SetTimer((__COMMON_OBJECT*)&System,
		KernelThreadManager.lpCurrentKernelThread,
		dwTimerID,
		dwTimeSpan,
		NULL,
		NULL,
		TIMER_FLAGS_ONCE);
	if(NULL == lpTimerObject)    //Failed to set timer.
	{
		PrintLine("  Can not set timer,please try again.");
		return SYS_DIAG_CMD_PARSER_FAILED;
	}

	//
	//Begin to beep.
	//
	//ReadByteFromPort(&ucCtrlByte,0x61);
	ucCtrlByte = __inb(0x61);
	ucCtrlByte |= 0x03;
	//WriteByteToPort(ucCtrlByte,0x61);
	__outb(ucCtrlByte,0x61);
	
	while(TRUE)
	{
		if(KernelThreadManager.GetMessage((__COMMON_OBJECT*)KernelThreadManager.lpCurrentKernelThread,&Msg))
		{
			if((Msg.wCommand == KERNEL_MESSAGE_TIMER) &&   //Beep time is over.
			   (Msg.dwParam  == dwTimerID))
			{
				ucCtrlByte &= ~0x03;
				//WriteByteToPort(ucCtrlByte,0x61);  //Stop the beep.
				__outb(ucCtrlByte,0x61);
				PrintLine("  Beep over");
				goto __TERMINAL;
			}
		}
	}

__TERMINAL:
	return SYS_DIAG_CMD_PARSER_SUCCESS;
}
Example #7
0
//A helper routine used to convert a ascii string into __EXTERNAL_MOD_DESC object.
static BOOL FetchModDesc(LPSTR pszLine,__EXTERNAL_MOD_DESC* pModDesc)
{
	BOOL    bResult      = FALSE;
	int     i;
	CHAR    numStr[9];

	while(' ' == *pszLine) //Skip the leading space.
	{
		pszLine ++;
	}
	if(0 == *pszLine)  //End of the string line.
	{
		goto __TERMINAL;
	}
	//Fetch module name.
	for(i = 0;i < MAX_MOD_FILENAME;i ++)
	{
		if(0 == *pszLine)  //End of line,invalid.
		{
			goto __TERMINAL;
		}
		if(' ' == *pszLine)
		{
			break;
		}
		pModDesc->ModFileName[i] = *pszLine ++;
	}
	pModDesc->ModFileName[i] = 0;
	//Skip non-space characters,suppose the scenario that file name's length larger than MAX_MOD_FILENAME.
	while(' ' != *pszLine)
	{
		if(0 == *pszLine)
		{
			goto __TERMINAL;
		}
		pszLine ++;
	}
	//Skip the space between file name and load address.
	while(' ' == *pszLine)
	{
		*pszLine ++;
	}
	if(0 == *pszLine)
	{
		goto __TERMINAL;
	}
	for(i = 0;i < 8;i ++)
	{
		if(0 == *pszLine)
		{
			goto __TERMINAL;
		}
		if(' ' == *pszLine)
		{
			break;
		}
		numStr[i] = *pszLine ++;
	}
	numStr[i] = 0;
	//Convert the address from string to numeric.
	if(!Str2Hex(numStr,&pModDesc->StartAddress))
	{
		goto __TERMINAL;
	}

	//Skip non-space characters,suppose the scenario that start address's length larger than 8.
	while(' ' != *pszLine)
	{
		if(0 == *pszLine)
		{
			goto __TERMINAL;
		}
		pszLine ++;
	}
	//Skip the space between load address and attribute.
	while(' ' == *pszLine)
	{
		*pszLine ++;
	}
	if(0 == *pszLine)
	{
		goto __TERMINAL;
	}
	for(i = 0;i < 8;i ++)
	{
		if(0 == *pszLine)
		{
			goto __TERMINAL;
		}
		if(' ' == *pszLine)
		{
			break;
		}
		numStr[i] = *pszLine ++;
	}
	numStr[i] = 0;
	//Convert the attribute into numeric.
	if(!Str2Hex(numStr,&pModDesc->dwModAttribute))
	{
		goto __TERMINAL;
	}
	bResult = TRUE;  //All successful.

__TERMINAL:
	return bResult;
}
Example #8
0
int  DB_DES(char *inbuf, int inlen, char *outbuf, int *outlen, int flag)
{
	unsigned char r[17];
	unsigned char r1[17];
	unsigned char r2[17];

	unsigned char src[256];
	unsigned char sHex[512];
	unsigned char sDest[512];
	int i;
	int nSrcLen;
	int nHexLen; 

	memset(r,0,17);
	memset(r2,0,17);
	memset(src, 0, sizeof(src));
	memset(sHex, 0, sizeof(sHex));
	memset(sDest, 0, sizeof(sDest));

	if (inlen > 255)
		return -1;

	memcpy(src, inbuf, inlen);
	nSrcLen = strlen(src);
	printf("nSrcLen=%d  src[%s]\n", nSrcLen, src);

	if ( flag == 0) /* Encrypt */
	{
		for(i=0; i< nSrcLen; i++)
			sprintf(sHex+2*i, "%02x", src[i]);

		nHexLen = 2*nSrcLen;
		printf("nHexLen=%d  sHex[%s]\n", nHexLen, sHex);
	}else if ( flag == 1 ) /* DisEncrypt */
	{
		nHexLen = nSrcLen;	
		memcpy(sHex, src, nHexLen);
	}

	printf("Des KEY ==%s== \n", KEY);
	for(i=0; i<nHexLen; i+=16)
	{
		printf("---------i=%d----------\n", i);
		memset(r, 0, sizeof(r));
		memset(r1, 0, sizeof(r1));

		if ( (nHexLen-i) < 16 )
		{
			memset(r, '0', 16);
			memcpy(r, sHex+i, nHexLen-i);
		}else
			memcpy(r, sHex+i, 16);
		printf("Des ==%s== \n",r);

		if (flag == 0 )
			Des(KEY, r, r1);
		else if (flag == 1 )
			_Des(KEY, r, r1);

		printf("Des result ==%s== \n",r1);

		memcpy(sDest+i, r1, 16);
		
		/*memset(r2, 0, sizeof(r2));
		//_Des(KEY, r1, r2);
		//printf("Des r2 ==%s== \n",r2);*/

	}
	printf("sDest[%s]\n", sDest);
	*outlen = strlen(sDest);
	memcpy(outbuf, sDest, *outlen);

	if (flag == 1)
	{
		memset(outbuf, 0, sizeof(outbuf));
		Str2Hex(sDest, outbuf, *outlen);
		*outlen = *outlen/2;
	}
	printf("outlen=%d\n", *outlen);

	return 0;
}
Example #9
0
int PackSendGenMac(char *sIntMsgBuf, char* sOutMsgBuf, int nOutMsgLen)
{
    char      sMac[8];
    char      sTemp16[16+1];
    int       nReturnCode, i;
    char      merch_id[15+1];
    char      term_id[8+1];
    char      sTxnNum[5];
    char      sSrvId[5];
    char      sDestFlag[2+1];
    char      sMacBlock[1024];
    char      inst_id[8+1];
    int       nMacBlockLen;
    char      szKeyFlag[2+1];
    int       nToSrvId;

    memset(sMac,     0x00, sizeof(sMac));
    memset(sTemp16,  0x00, sizeof(sTemp16));
    memset(merch_id, 0x00, sizeof(merch_id));
    memset(term_id,  0x00, sizeof(term_id));
    memset(sTxnNum,  0x00, sizeof(sTxnNum));
    memset(sSrvId,   0x00, sizeof(sSrvId));
    memset(sDestFlag,0x00, sizeof(sDestFlag));
    memset(sMacBlock,0x00, sizeof(sMacBlock));
    memset(inst_id,  0x00, sizeof(inst_id));

    HtLog (gsTmpLogFile, HT_LOG_MODE_NORMAL, __FILE__,__LINE__,    "PackSendGenMac begin");
    HtLog (gsTmpLogFile, HT_LOG_MODE_NORMAL, __FILE__,__LINE__,    "RcvgCode = [%.8s] ", ((T_IpcIntTxnDef*)sIntMsgBuf)->sRcvgInstIdCode);

    memcpy (sSrvId, sIntMsgBuf+SRV_ID_LEN, SRV_ID_LEN);

    if( memcmp(sSrvId,"1701", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
	else if( memcmp(sSrvId,"1705", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
	else if( memcmp(sSrvId,"1706", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
	else if( memcmp(sSrvId,"1707", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
	else if( memcmp(sSrvId,"1717", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
	else if( memcmp(sSrvId,"1727", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
	else if( memcmp(sSrvId,"1801", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
	else if( memcmp(sSrvId,"1708", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
    else if( memcmp(sSrvId,"1709", SRV_ID_LEN ) == 0 ) {
        strcpy(szKeyFlag,"02");
    }
    else { 
        strcpy(szKeyFlag,"00");
    }

    memcpy(inst_id, ((T_IpcIntTxnDef*)sIntMsgBuf)->sRcvgInstIdCode, 8);

    memcpy(merch_id, ((T_IpcIntTxnDef*)sIntMsgBuf)->sCardAccptrId, F042_LEN);
    memcpy(term_id, ((T_IpcIntTxnDef*)sIntMsgBuf)->sCardAccptrTermnlId, F041_LEN);
    memcpy(sTxnNum, ((T_IpcIntTxnDef*)sIntMsgBuf)->sTxnNum, FLD_TXN_NUM_LEN);
    
    if(sOutMsgBuf[24] = '\x60')
    {
        nMacBlockLen = nOutMsgLen-24-11-8;
        memcpy(sMacBlock, sOutMsgBuf+24+11, nMacBlockLen);
    }
    
    //HtDebugString (gsTmpLogFile, HT_LOG_MODE_ERROR, __FILE__,__LINE__,sMacBlock, nMacBlockLen); 
    
    nReturnCode = KmsGenerateMac(szKeyFlag, merch_id, term_id, inst_id, nMacBlockLen, sMacBlock, sTemp16);
    if(nReturnCode)
    {
        return nReturnCode;
    }

    Str2Hex(sTemp16,sMac,16);
    if (nReturnCode<0) 
    {
        HtLog(gsTmpLogFile, HT_LOG_MODE_NORMAL, __FILE__,__LINE__,
              "GenTermMac error: [%d]", nReturnCode);
        return -1;
    }

    //HtDebugString(gsTmpLogFile, HT_LOG_MODE_NORMAL, __FILE__,__LINE__, sMac, 8);
                  
    HtLog(gsTmpLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"GenTermMac END");
          
    memcpy(sOutMsgBuf + nOutMsgLen - 8, sMac, 8);

    return 0;
}
int Str2Hex(string &s, string &dst) 
{
	return Str2Hex(s,dst,s.length());
}
Example #11
0
/*************************
**功能:内部报文->FSK报文
*************************/
int ConvFSKInToOut(char*          vvpInBuf,
                   char*          vvpOutBuf,
                   int*           vnpOutBufL ) 
{
     TXN_MSG_DTL      stMsgDtl;
     TERM_TXN_MESS    stTermMess;
     unsigned char*   lspInBuf;
     unsigned char    sTmp[32];
     unsigned char    sTmp1[32];
     unsigned char    sOutBuf[600];
     unsigned char    sMess[512];
     unsigned char    cChkVal;
     char             sTxnNum[4];
     int              iLen, iTmp;
       int              iOffSet;
    
    iOffSet = SRV_ID_LEN*2+FLD_MSQ_TYPE_LEN;
    lspInBuf = ( unsigned char *)(vvpInBuf + iOffSet);  
    /* lspInBuf = ( unsigned char *)(vvpInBuf + iOffSet);   */
      
    /**报文头原样返回**/
    memset(sOutBuf, 0, sizeof(sOutBuf));
    memcpy(sOutBuf, vvpInBuf, iOffSet +  EPOS_HEADER_LEN );
     
    /**取返回交易码**/
    memset(sTxnNum, 0, sizeof(sTxnNum));
    memcpy(sTxnNum, lspInBuf+(EPOS_HEADER_LEN-4), 4 ); 
          
    /**消息类型**/
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, lspInBuf+EPOS_HEADER_LEN, 2 );
    Str2Hex(sTmp, sTmp1, 2 );   /* 1byte */
    memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN, sTmp1, 1 );
      
    /**长度**/ 
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, lspInBuf+EPOS_HEADER_LEN+2, 4 );
    Str2Hex(sTmp, sTmp1, 4 );
    memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1, sTmp1, 2 );
        
    /**交易同步随机数**/  
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, lspInBuf+EPOS_HEADER_LEN+2+4, 8 );
    Str2Hex(sTmp, sTmp1, 8 );
    memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1+2, sTmp1, 4 );
          
    /**报文同步序号**/
    iTmp = 0;
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, lspInBuf+EPOS_HEADER_LEN+2+4+8, 2 );
    iTmp = atoi((char *)sTmp);
    sTmp1[0] = iTmp;
    memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1+2+4, sTmp1, 1 );
      
    /* 管理类交易 报文拼装完成 */
    if(sTxnNum[0] == TXN_NUM_MANAGE )
    {
         cChkVal = GenChkVal(sOutBuf+iOffSet+ EPOS_HEADER_LEN, 1+2+4+1 );
         sOutBuf[iOffSet+ EPOS_HEADER_LEN+1+2+4+1] =  cChkVal; 
          
         *vnpOutBufL = iOffSet+ EPOS_HEADER_LEN+1+2+4+1+1;
         /*HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "vnpOutBufL[%d]", *vnpOutBufL );  coredump??? */
         memcpy(vvpOutBuf, sOutBuf, *vnpOutBufL );
         return 0;
    }
          


    /* 以下代码为非管理类代码段  消息内容 */
    iLen = 0;
    memset((unsigned char*)&stMsgDtl, 0x20, sizeof(stMsgDtl));
    memcpy((unsigned char*)&stMsgDtl, 
                lspInBuf + EPOS_HEADER_LEN  +
                2/* 消息类型 */  + 4 /* 长度 */ + 
                8 /* 随机数 */ + 2 /* 同步序号 */ +
                4 /* sMsgLen */, 
            sizeof(stMsgDtl));

    iLen = MessInToOut(sMess, &stMsgDtl );

      
/*      HtDebugString (gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char *)sMess, iLen );*/
      
      /**消息内容长度**/
    memset(sTmp, 0, sizeof(sTmp));

    sprintf((char *)sTmp, "%04X", iLen );

    Str2Hex(sTmp, sTmp1, 4 );

    memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1+2+4+1, sTmp1, 2 ); 

    
    memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1+2+4+1+2, sMess, iLen );
      

    /**校验位**/
/*    HtDebugString (gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char *)(sOutBuf+iOffSet+ EPOS_HEADER_LEN), 1+2+4+1+2+iLen );*/
    cChkVal = GenChkVal(sOutBuf+iOffSet+ EPOS_HEADER_LEN, 1+2+4+1+2+iLen );

    sOutBuf[iOffSet+ EPOS_HEADER_LEN+1+2+4+1+2+iLen] = cChkVal; 

    *vnpOutBufL = iOffSet+ EPOS_HEADER_LEN+1+2+4+1+2+iLen+1;
    memcpy(vvpOutBuf, sOutBuf, *vnpOutBufL );
      
    return 0;
}
Example #12
0
/************************
**功能:消息内容转换*****
************************/
int MessInToOut(unsigned char *sMess, TXN_MSG_DTL *pstMsgDtl )
{
    unsigned char sTmp[17];
    unsigned char sTmp1[17];
    unsigned char sFlwCd[3];
    unsigned char sBuf[512];
    int iMsgLen, iLen;
    int iCnt, i, iBufLen ;
    
    /*报文类型*/
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, pstMsgDtl->sMsqType, 2 );
    Str2Hex(sTmp, sTmp1, 2 );
    memcpy(sMess, sTmp1, 1 );
    iLen = 1;
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "报文类型[%2.2s]", pstMsgDtl->sMsqType );  
    /*结束标志*/
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, pstMsgDtl->sEndFlg, 2 );
    Str2Hex(sTmp, sTmp1, 2 );
    memcpy(sMess+iLen, sTmp1, 1 );
    iLen = iLen + 1;
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "程序版本号[%4.4s]", pstMsgDtl->sProVer);  
#if 0 
    /*  程序版本号    */
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, pstMsgDtl->sProVer, 4);
    Str2Hex(sTmp, sTmp1, 4 );
    memcpy(sMess+iLen, sTmp1, 2 );
    iLen = iLen + 2;
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "应用版本号[%8.8s]", pstMsgDtl->sAppVer);  
    
    /*  应用版本号    */
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, pstMsgDtl->sAppVer, 8);
    Str2Hex(sTmp, sTmp1, 8 );
    memcpy(sMess+iLen, sTmp1, 4 );
    iLen = iLen + 4;
#endif    
    /*序列号*/
    memset(sTmp, 0, sizeof(sTmp));
    asc_to_bcd(sTmp, pstMsgDtl->sTsamNo, 16, 1 );
    memcpy(sMess+iLen, sTmp, 8 );
    iLen = iLen + 8;
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "序列号[%16.16s]", pstMsgDtl->sTsamNo );      
    /*系统日期*/
    memset(sTmp, 0, sizeof(sTmp));
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "系统日期[%8.8s]", pstMsgDtl->sSysDt );     
    asc_to_bcd(sTmp, pstMsgDtl->sSysDt, 8, 1 );
    memcpy(sMess+iLen, sTmp, 4 );
    iLen = iLen + 4;
    
    /*系统时间*/
    memset(sTmp, 0, sizeof(sTmp));
    asc_to_bcd(sTmp, pstMsgDtl->sSysTm, 6, 1 );
    memcpy(sMess+iLen, sTmp, 3 );
    iLen = iLen + 3;
    
    /*交易流水号*/
    memset(sTmp, 0, sizeof(sTmp));
    asc_to_bcd(sTmp, pstMsgDtl->sTxnSeq, 6, 1 );
    memcpy(sMess+iLen, sTmp, 3 );
    iLen = iLen + 3;
    
    /*交易代码*/
    memset(sTmp, 0, sizeof(sTmp));
    memcpy(sTmp, pstMsgDtl->sTxnCode, 3 );
    memcpy(sMess+iLen, sTmp, 3 );
    iLen = iLen + 3;
    
    /*流程代码总数*/
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, pstMsgDtl->sFlowNum, 2 );
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"流程代码个数[%2.2s]", sTmp );
    Str2Hex(sTmp, sTmp1, 2 );
    memcpy(sMess+iLen, sTmp1, 1 );
    iLen = iLen + 1;
HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "iLen[%d]",  iLen );       
    /*流程代码集*/
    iCnt = sTmp1[0];
    iMsgLen = 0;
    iBufLen = 0;
HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"流程代码个数[%d]", iCnt );
    memset(sBuf, 0, sizeof(sBuf));
    for(i = 0; i < iCnt; i ++ )
    {
        memset(sTmp, 0, sizeof(sTmp));
        memset(sTmp1, 0, sizeof(sTmp1));
        memset(sFlwCd, 0, sizeof(sFlwCd));
        memcpy(sTmp, pstMsgDtl->sFlowCode+iMsgLen, 2 );
HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "流程代码[%s]", sTmp );
        Str2Hex(sTmp, sTmp1, 2 );
/*HtDebugString (gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char *)sTmp1, 2 );*/
        sTmp1[0] = sTmp1[0] >> 6;
/*HtDebugString (gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char *)sTmp1, 2 );*/
        if(sTmp1[0] == 0x03 )
        {
           /**3字节**/
           memset(sTmp, 0, sizeof(sTmp));
           memcpy(sTmp, pstMsgDtl->sFlowCode+iMsgLen, 6 );
           Str2Hex(sTmp, sFlwCd, 6 );
           memcpy(sBuf+iBufLen, sFlwCd, 3 );
           iBufLen = iBufLen + 3;
           iMsgLen = iMsgLen + 6;
             
        }
        else if(sTmp1[0] == 0x00 )
        {
           /**双字节**/
           memset(sTmp, 0, sizeof(sTmp));
           memcpy(sTmp, pstMsgDtl->sFlowCode+iMsgLen, 4 );
           Str2Hex(sTmp, sFlwCd, 4 );
           memcpy(sBuf+iBufLen, sFlwCd, 2 );
           iBufLen = iBufLen + 2;
           iMsgLen = iMsgLen + 4;
            
        }
        else
        {
           /**单字节**/
           memset(sTmp, 0, sizeof(sTmp));
           memcpy(sTmp, pstMsgDtl->sFlowCode+iMsgLen, 2 );
           Str2Hex(sTmp, sFlwCd, 2 );
           memcpy(sBuf+iBufLen, sFlwCd, 1 );
           iBufLen = iBufLen + 1;
           iMsgLen = iMsgLen + 2;
            
        }
    }/*end for */
HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "iBufLen[%d]",  iBufLen ); 
    memcpy(sMess+iLen, sBuf, iBufLen );
    iLen = iLen + iBufLen;
HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "iLen[%d]",  iLen );   
    /*有效数据长度*/
    memset(sTmp, 0, sizeof(sTmp));
    memset(sTmp1, 0, sizeof(sTmp1));
    memcpy(sTmp, pstMsgDtl->sDataLen, 4 );
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"有效数据长度[%s]", sTmp );
    Str2Hex(sTmp, sTmp1, 4 );
    memcpy(sMess+iLen, sTmp1, 2 );
    iLen = iLen + 2;
    
    /*有效数据*/
    iMsgLen = (sTmp1[0]*256 + sTmp1[1]) - 8;
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"有效数据长度[%d]", iMsgLen );
    memcpy(sMess+iLen, pstMsgDtl->sDataDtl, iMsgLen );
    HtDebugString(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, 
               (char*)pstMsgDtl->sDataDtl, iMsgLen );
    iLen = iLen + iMsgLen;
    HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "iLen[%d]",  iLen );       
    /*MAC*/
    memset(sTmp, 0, sizeof(sTmp));
    asc_to_bcd(sTmp, pstMsgDtl->sMac, 16, 1 );
    memcpy(sMess+iLen, sTmp, 8 );
    iLen = iLen + 8;
    
    return iLen;
}
Example #13
0
DWORD Fibonacci(LPVOID lpParam)
{
    //LPSTR lpszParam = (LPSTR)lpParam;
	__CMD_PARA_OBJ* pCmdParaObj               = (__CMD_PARA_OBJ*)lpParam;
    __FIBONACCI_CONTROL_BLOCK ControlBlock[5] = {0};
    HANDLE hThread[5] = {NULL};
    CHAR Buffer[12];
    DWORD dwCounter;
    DWORD dwIndex,i;

	PrintLine("Fibonacci application running...");
	GotoHome();
	ChangeLine();

	if(NULL == pCmdParaObj || pCmdParaObj->byParameterNum < 2)
	{
		return 0;
	}

    dwCounter = 0;
    for(i = 0;i < 5;i ++)
    {     
        dwIndex = 0;
        while(pCmdParaObj->Parameter[1][dwCounter])
		{
			Buffer[dwIndex] =  pCmdParaObj->Parameter[1][dwCounter];
			dwIndex ++;
			dwCounter ++;
		}

        Buffer[dwIndex] = 0;
        Str2Hex(Buffer,&ControlBlock[i].dwInitNum);  //Convert the parameter to integer.

        if(pCmdParaObj->Parameter[1][dwCounter])
		{
			break;
		}
    }

	i = 5;
    for(i;i > 0;i --)
    {
        hThread[i - 1] = CreateKernelThread(
			0,    //Stack size,use default.
            KERNEL_THREAD_STATUS_READY,  //Status.
			PRIORITY_LEVEL_NORMAL,
			CalculateThread,  //Start routine.
			(LPVOID)&ControlBlock[i - 1],
            NULL,
			"FIBONACCI");

        if(NULL == hThread[i - 1])  //Failed to create kernel thread.
        {
            PrintLine("Create kernel thread failed.");
            break;
        }
    }

    //
    //Waiting for the kernel thread to over.
    //
    WaitForThisObject(hThread[0]);
    WaitForThisObject(hThread[1]);
    WaitForThisObject(hThread[2]);
    WaitForThisObject(hThread[3]);
    WaitForThisObject(hThread[4]);

    //
    //Now,we have calculated the fibonacci number,print them out.
    //
    for(i = 0;i < 5;i ++)
    {
        Int2Str(ControlBlock[i].dwInitNum,Buffer);
        PrintStr(Buffer);
        PrintStr("'s result is: ");
        Int2Str(ControlBlock[i].dwResult,Buffer);
        PrintStr(Buffer);
		GotoHome();
        ChangeLine();
    }

    //
    //Close the kernel thread.
    //
    DestroyKernelThread(hThread[0]);
    DestroyKernelThread(hThread[1]);
    DestroyKernelThread(hThread[2]);
    DestroyKernelThread(hThread[3]);
    DestroyKernelThread(hThread[4]);
    
    return 1L;
}