⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lb_api.c

📁 中国石油二期加油站IC系统后台通讯软件
💻 C
字号:
/*
***********************************************************************************************************
                                                      Amos
                                          The Real_Time Operation System
                                                   Multi Task
                                 (c) Copyright 1998-2002, ShangYaoHui, Shenzhen
                                              All Right Reserved
                                                  VERSION 6.01

" By  : 商耀挥(ShangYaoHui)
 create time: 2002-7-12 1:21:25  
***********************************************************************************************************
*/

/************ head file list *************/
#include "envopt.h"        /* environment options */
#include "envdep.h"        /* environment dependent */
#include "envind.h"        /* environment independent */

#include "gen.h"           /* general */
#include "cm5.h"           /* common functions */
#include "ssi.h"           /* system services */

/* header/extern include files (.x) */

#include "gen.x"           /* general */
#include "cm5.x"           /* common functions */
#include "ssi.x"           /* system services */

#include "cm_llist.h"
#include "cm_llist.x"

#ifdef WIN32
	#include "winbase.h"
	#include "winsock2.h"
#endif

#include "rx.h"
#include "rx.x"

#include "rx_msg.h"
#include "rx_msg.x"

#include "lb_cm.h"
#include "lb_cm.x"

#include "lb_recv.h"
#include "lb_recv.x"
#include "lb_xmit.h"
#include "lb_xmit.x"
#include "lb_msg.h"
#include "lb_msg.x"

#include "lb_bdy1.h"
#include "lb_bdy1.x"
#include "lb_bdy2.h"
#include "lb_bdy2.x"
#include "lb_bdy4.h"
#include "lb_bdy3.h"
#include "lb_bdy3.x"
#include "lb_bdy4.h"
#include "lb_bdy4.h"
#include "lb_bdy4.x"
#include "lb_bdy5.h"
#include "lb_bdy5.x"
/************* const define **************/

/******** import variable declare ********/

/******* gloable variable declare ********/

/*********** function declare ************/

/********** function prototype ***********/

int DownData(U32 data,U32 len,Data * buf)
{
	Buffer * msg;
	Pst pst;

	LBLOG("接收消息->", buf, len);

	switch(buf[0])
	{
	case 0x09:
		if(len < 2)
		{
			rxLog("ERROR: 0x09");
			RETVALUE(ROK);
		}
		break;
	case 0x0d:
		if(len < 2)
		{
			rxLog("ERROR: 0x0d");
			RETVALUE(ROK);
		}
		break;
	 
	case 0x0e:
		if(len < 2)
		{
			rxLog("ERROR: 0x0e");
			RETVALUE(ROK);
		}
		break;

	case 0x0f:
		if(len < 2)
		{
			rxLog("ERROR: 0x0f");
			RETVALUE(ROK);
		}
		break;

	case 0x10:
		if(len < 2)
		{
			rxLog("ERROR: 0x10");
			RETVALUE(ROK);
		}
		break;

	case 0x11:
		if(len < 41)
		{
			rxLog("ERROR: 0x11");
			RETVALUE(ROK);
		}
		break;
	case 0x12:
		if(len < 9)
		{
			rxLog("ERROR: 0x12");
			RETVALUE(ROK);
		}
		break;

	case 0x14:
		if(len < 3)
		{
			rxLog("ERROR: 0x14");
			RETVALUE(ROK);
		}
		break;

	case 0x15:
		if(len < 2)
		{
			rxLog("ERROR: 0x15");
			RETVALUE(ROK);
		}
		break;

	case 0x16:
		if(len < 9)
		{
			rxLog("ERROR: 0x16");
			RETVALUE(ROK);
		}
		break;

	case 0x17:
		if(len < 2)
		{
			rxLog("ERROR: 0x17");
			RETVALUE(ROK);
		}
		break;

	case 0x19:
		if(len < 2)
		{
			rxLog("ERROR: 0x19");
			RETVALUE(ROK);
		}
		break;

	case 0x1c:
		if(len < 2)
		{
			rxLog("ERROR: 0x1c");
			RETVALUE(ROK);
		}
		break;

	case 0x1d:
		if(len < 2)
		{
			rxLog("ERROR: 0x1d");
			RETVALUE(ROK);
		}
		break;

	case 0x1e:
		if(len < 2)
		{
			rxLog("ERROR: 0x1e");
			RETVALUE(ROK);
		}
		break;

	case 0x1f:
		if(len < 2)
		{
			rxLog("ERROR: 0x1f");
			RETVALUE(ROK);
		}
		break;
  
	case 0x0c:
	case 0x18:
	case 0x1a:
		if (ROK != lbCmChkMacVer(buf, rxCb.cfg.crrntTranKey, len, rxCb.cfg.tranKeyVer))
		{
			rxLog("error: mac error");
			RETVALUE(ROK);
		}
		break;

	}


	if (ROK != SGetMsg(0, 0, &msg))
	{
		RXLOGERROR(0, 0, 0, "error");
		RETVALUE(RFAILED);
	}

	SAddPstMsgMult((Data *)&buf[1], (MsgLen)(len-1), msg);

	RXPSTINIT(pst, ENTAL, 0, ENTLB, 0);
	pst.event = (Event)buf[0];

	SPstTsk(&pst, msg);

	return 1;
}


S16 lbMsgReq(U8 msgType, S8 * buf, U32 len, U32 seq)
{
	Buffer * msg;
	Pst pst;

	if (ROK != SGetMsg(0, 0, &msg))
	{
		RXLOGERROR(0, 0, 0, "error");
		RETVALUE(RFAILED);
	}

	SAddPstMsgMult(buf, (MsgLen)len, msg);

	RXPSTINIT(pst, ENTAL, 0, ENTLB, 0);
	pst.event = (Event)msgType;

	SPstTsk(&pst, msg);
	RETVALUE(ROK);
}


S16 lbCmGetSpecCode(U32 *itemNum, SpecCode_s ** ret_specCodeArray)
{
	SpecCode_s * specCodeArray;

	MsgLen i, len;
	S16 num;
	Data * buf;
	Buffer * file;

	if(ROK != SGetMsg(0, 0, &file))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}


	
	if (ROK != lbGetFileBuf("c:/windows/system/cnpcauc.dat", file))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SFndLenMsg(file, &len);
	if(ROK != SGetSBuf(0, 0, (Data **)&buf, len))
	{
        RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}
	SCpyMsgFix(file, 0, len , buf, &len); 

	if(ROK != lbCmChkMacVer(&buf[1], rxCb.cfg.crrntTranKey, len-1, rxCb.cfg.tranKeyVer))
	{
		RETVALUE(RFAILED);
	}


	SPutSBuf(0, 0, buf, len);

    
	SCpyMsgFix(file, 0, 2, (Data *)&num, &len);
	
	num = htons(num); 

	if(ROK != SGetSBuf(0, 0, (Data **)&specCodeArray, sizeof(SpecCode_s)* num))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}
	for(i = 0; i< num; i++)
	{
		SCpyMsgFix(file, (MsgLen)(2 + 2 * i), 2, (Data *)&specCodeArray[i], &len);
	}
	*itemNum = num;
	*ret_specCodeArray = specCodeArray; 

	SPutMsg(file);

	RETVALUE(ROK);
}

S16 rxGetEquInfo(U8 * ret_gunNum, EquCfg_s ** ret_equTbl, U8 * ret_ver)
{
	EquCfg_s * equCfgArray;
	MsgLen len;
	Data gunNum = 0;
	U32 i;
	U8 ver;
	Data * buf;

	Buffer * file;

	if(ROK != SGetMsg(0, 0, &file))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}


	if (ROK != lbGetFileBuf("c:/windows/system/cnpcdcikjld.dat", file))
	{
		SPutMsg(file);
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}



	SFndLenMsg(file, &len);
	if (ROK != SGetSBuf(0, 0, &buf, len))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SCpyMsgFix(file, 0, len, buf, &len);

	if ( ROK != lbCmChkMacVer(&buf[1], rxCb.cfg.crrntTranKey, len-1, rxCb.cfg.tranKeyVer))
	{
		RETVALUE(RFAILED);
	}
	SPutSBuf(0 ,0, (Data *)buf, len);

	SExamMsg(&gunNum, file, 0);


	if(ROK != SGetSBuf(0, 0, (Data **)&equCfgArray, sizeof(EquCfg_s)* gunNum))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	for(i = 0; i < gunNum; i++)
	{
		SCpyMsgFix(file, (MsgLen)(1 + (7*i)), 7, (Data *)&equCfgArray[i], &len);
	}

	SExamMsg(&ver, file, (MsgLen)(1 + (7*i) + 4));
	*ret_gunNum = gunNum;
	*ret_equTbl = equCfgArray;
	*ret_ver = ver;

	SPutMsg(file);

	RETVALUE(ROK);
}
#ifndef UP_LAYER_UNSECRET
S16	lbCmGetProvinceBlk(U32 * itemNum, BlkCardLine_s ** ret_itemArray, U8 type)
{
	MsgLen fileLen;
	BlkCardLine_s * itemArray;
	U32 num;
	Txt * path;
	Buffer * file;
	U32 i, k;
	Data * buf;
	MsgLen actLen;

	switch(type)
	{
	case 1:
		path = "c:/windows/system/cnpclbl.dat";
		break;
	case 2:
		path = "c:/windows/system/cnpclbli.dat";
		break;
	case 3:
		path = "c:/windows/system/cnpclbld.dat";
		break;
	}

	if(ROK != SGetMsg(0, 0, &file))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}
	if(ROK != lbGetFileBuf(path, file))
	{
		SPutMsg(file);
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SFndLenMsg(file, &fileLen);

	if (ROK != SGetSBuf(0, 0, &buf, fileLen))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SCpyMsgFix(file, 0, fileLen, buf, &fileLen);

	if (ROK != lbCmChkMacVer(buf, rxCb.cfg.crrntTranKey, 13, rxCb.cfg.tranKeyVer))
	{
		SPutSBuf(0, 0, buf, fileLen);
		RETVALUE(RFAILED);
	}
	actLen = 0;
	if(ROK != lbCmUnsecret((S8 *)buf, (S8 *)rxCb.cfg.crrntTranKey, 8, (U32 *)&actLen))
	{
		SPutSBuf(0, 0, buf, fileLen);
		RETVALUE(RFAILED);
	}

	num = (htonl(*((U32*)buf))+9)/10;


    if(ROK != SGetSBuf(0 ,0 , (Data **)&itemArray, sizeof(BlkCardLine_s)*num))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}




	for(i = 0; i < num; i++)
	{
		if (ROK != lbCmChkMac(&buf[13 + i * 108], rxCb.cfg.crrntTranKey, 108))
		{
			SPutSBuf(0, 0, buf, fileLen);
			SPutSBuf(0, 0, (Data *)itemArray, sizeof(BlkCardLine_s)*num); 
			RETVALUE(RFAILED);
		}

		for(k = 0; k < 104; k++)
		{
			itemArray[i].asn[k] = buf[13 + i * 108 + k];
		}
	}
	SPutSBuf(0, 0, buf, fileLen);

	*itemNum = num;
	*ret_itemArray = itemArray;
	SPutMsg(file);
	RETVALUE(ROK);
}

#else
S16 lbCmGetProvinceBlk(Buffer *cardasn, U32 * itemNum, U8 type)
{
	MsgLen fileLen, actLen;
	BlkCardLine_s hexLine;
	MsgLen num;
	Txt * path;
	Buffer * file;
	MsgLen i, k;
	Data * buf;

	switch(type)
	{
	case 1:
		path = "c:/windows/system/cnpclbl.dat";
		break;
	case 2:
		path = "c:/windows/system/cnpclbli.dat";
		break;
	case 3:
		path = "c:/windows/system/cnpclbld.dat";
		break;
	}

	if(ROK != SGetMsg(0, 0, &file))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	if(ROK != lbGetFileBuf(path, file))
	{
		SPutMsg(file);
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SFndLenMsg(file, &fileLen);


	if (ROK != SGetSBuf(0, 0, &buf, fileLen))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SCpyMsgFix(file, 0, fileLen, buf, &fileLen);

	if (ROK != lbCmChkMacVer(buf, rxCb.cfg.crrntTranKey, 13, rxCb.cfg.tranKeyVer))
	{
		SPutSBuf(0, 0, buf, fileLen);
		RETVALUE(RFAILED);
	}
	actLen = 0;
	if(ROK != lbCmUnsecret((S8 *)buf, (S8 *)rxCb.cfg.crrntTranKey, 8, (U32 *)&actLen))
	{
		SPutSBuf(0, 0, buf, fileLen);
		RETVALUE(RFAILED);
	}

	num = (htonl(*((U32*)buf))+9)/10;
	if (num < 0 || num > 2000)
	{
		SPutSBuf(0, 0, buf, fileLen);
		RETVALUE(RFAILED);
	}

	for(i = 0; i < num; i++)
	{
		if (ROK != lbCmChkMac(&buf[13 + i * 108], rxCb.cfg.crrntTranKey, 108))
		{
			SPutSBuf(0, 0, buf, fileLen);
			RETVALUE(RFAILED);
		}
		actLen = 0;
        if (ROK != lbCmUnsecret((S8 *)&buf[13 + 108 * i], (S8 *)rxCb.cfg.crrntTranKey, 104, (U32 *)&actLen))
		{
			SPutSBuf(0, 0, buf, fileLen);
			RETVALUE(RFAILED);
		}
		
		for(k = 0; k < actLen; k++)
		{
			hexLine.asn[k] = buf[13 + 108 * i + k];
		}


        SAddPstMsgMult(hexLine.asn, actLen, cardasn);
    }
	SPutSBuf(0, 0, buf, fileLen);
	*itemNum = num * 10;
	SPutMsg(file);
	RETVALUE(ROK);
}


#endif

S16 lbCmGetCountryBlk(Buffer *cardasn, U32 * itemNum, U8 type)
{
	MsgLen fileLen, actLen;
	BlkCardLine_s hexLine;
	MsgLen num;
	Txt * path;
	Buffer * file;
	MsgLen i, k;
	Data * buf;

	switch(type)
	{
	case 1:
		path = "c:/windows/system/cnpcnbl.dat";
		break;
	case 2:
		path = "c:/windows/system/cnpcnbli.dat";
		break;
	case 3:
		path = "c:/windows/system/cnpcnbld.dat";
		break;
	}

	if(ROK != SGetMsg(0, 0, &file))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	if(ROK != lbGetFileBuf(path, file))
	{
		SPutMsg(file);
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SFndLenMsg(file, &fileLen);


	if (ROK != SGetSBuf(0, 0, &buf, fileLen))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SCpyMsgFix(file, 0, fileLen, buf, &fileLen);

	if (ROK != lbCmChkMacVer(buf, rxCb.cfg.crrntTranKey, 13, rxCb.cfg.tranKeyVer))
	{
		SPutSBuf(0, 0, buf, fileLen);
		RETVALUE(RFAILED);
	}
	actLen = 0;
	if(ROK != lbCmUnsecret((S8 *)buf, (S8 *)rxCb.cfg.crrntTranKey, 8, (U32 *)&actLen))
	{
		SPutSBuf(0, 0, buf, fileLen);
		RETVALUE(RFAILED);
	}

	num = (htonl(*((U32*)buf))+9)/10;

	for(i = 0; i < num; i++)
	{
		if (ROK != lbCmChkMac(&buf[13 + i * 108], rxCb.cfg.crrntTranKey, 108))
		{
			SPutSBuf(0, 0, buf, fileLen);
			RETVALUE(RFAILED);
		}
		actLen = 0;
        if (ROK != lbCmUnsecret((S8 *)&buf[13 + 108 * i], (S8 *)rxCb.cfg.crrntTranKey, 104, (U32 *)&actLen))
		{
			SPutSBuf(0, 0, buf, fileLen);
			RETVALUE(RFAILED);
		}
		
		for(k = 0; k < actLen; k++)
		{
			hexLine.asn[k] = buf[13 + 108 * i + k];
		}


        SAddPstMsgMult(hexLine.asn, actLen, cardasn);
    }
	SPutSBuf(0, 0, buf, fileLen);
	*itemNum = num * 10;
	SPutMsg(file);
	RETVALUE(ROK);
}

S16 lbCmGetGreyList(Buffer * greyBuffer, U8 type)
{
	Txt * path;
	Buffer * file;
	U32 itemNum;
	GreyRecord_s * record;
	U32 i;
	MsgLen fileLen;
	Data * buf;

	switch(type)
	{
	case 0x11:
        path = "c:/windows/system/cnpczyedgl.dat";
		break;
	case 0x12:
        path = "c:/windows/system/cnpczyedgli.dat";
		break;
	case 0x13:
        path = "c:/windows/system/cnpczyedgld.dat";
		break;

	case 0x21:
        path = "c:/windows/system/cnpcghepgl.dat";
		break;
	case 0x22:
        path = "c:/windows/system/cnpcghepgli.dat";
		break;
	case 0x23:
        path = "c:/windows/system/cnpcghepgld.dat";
		break;

	case 0x31:
        path = "c:/windows/system/cnpcmdjtgl.dat";
		break;
	case 0x32:
        path = "c:/windows/system/cnpcmdjtgli.dat";
		break;
	case 0x33:
        path = "c:/windows/system/cnpcmdjtgld.dat";
		break;
	default:
		RETVALUE(RFAILED);
	}

	if(ROK != SGetMsg(0, 0, &file))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}


	if(ROK != lbGetFileBuf(path, file))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}


	SFndLenMsg(file, &fileLen);


	if (ROK != SGetSBuf(0, 0, &buf, fileLen))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	SCpyMsgFix(file, 0, fileLen, buf, &fileLen);

	if (ROK != lbCmChkMacVer(buf, rxCb.cfg.crrntTranKey, 9, rxCb.cfg.tranKeyVer))
	{
		SPutSBuf(0, 0, buf, fileLen);
		RETVALUE(RFAILED);
	}

	itemNum = htonl(*((U32 *)buf));


	for(i = 0 ;i < itemNum; i++)
	{
		if (ROK != lbCmChkMac(&buf[9 + i * 32], rxCb.cfg.crrntTranKey, 32))
		{
			SPutSBuf(0, 0, buf, fileLen);
			RETVALUE(RFAILED);
		}

		record = (GreyRecord_s*)&buf[9 + i * 32];
		SAddPstMsgMult((Data *)record, sizeof(GreyRecord_s), greyBuffer);

	}
	SPutSBuf(0, 0, buf, fileLen);
	SPutMsg(file);

    RETVALUE(ROK);
}



/******************* modify histroy list *******************
001. create at: 2002-7-12 1:21:25 by Shangyaohui

****************** modify histroy list end ****************/



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -