📄 lb_api.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 + -