📄 bank_svr.c
字号:
static char sqla_program_id[162] =
{
0,42,68,65,75,65,73,65,66,65,78,75,95,83,86,82,50,65,108,71,
77,68,74,89,48,49,49,49,49,32,50,32,0,8,69,66,67,83,32,32,
32,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0
};
#include "sqladef.h"
static struct sqla_runtime_info sqla_rtinfo =
{{'S','Q','L','A','R','T','I','N'}, sizeof(wchar_t), 0, {' ',' ',' ',' '}};
static const short sqlIsLiteral = SQL_IS_LITERAL;
static const short sqlIsInputHvar = SQL_IS_INPUT_HVAR;
#line 1 "bank_svr.sqc"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sql.h>
#include <sqlenv.h>
#include <sqlda.h>
#include <sqlca.h>
#include <sqlutil.h>
#include <db2ApiDf.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <sys/file.h>
#include <sys/ioctl.h>
#include <sys/errno.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <sys/select.h>
#include <sys/signal.h>
#include <netdb.h>
#include <math.h>
#include <sys/stat.h>
#include <time.h>
#include <fcntl.h>
#include <unistd.h>
#include "public.h"
#include "dbpub.h"
#include "bankpack.h"
char localip[21];
int localport;
int TimeOut;
/*
EXEC SQL BEGIN DECLARE SECTION;
*/
#line 38 "bank_svr.sqc"
char dbAlias[15];
char user[128 + 1];
char pswd[15];
/*
EXEC SQL END DECLARE SECTION;
*/
#line 42 "bank_svr.sqc"
void sig_child();
void sig_Terminate();
void kccx(int rcvSocket, REQHEAD *reqpack);
main()
{
char tmpstr[128], msg[256];
int listenSocket;
int ret , fromlen, forkint;
struct sockaddr_in from, server;
struct timeval timeout;
if (ReadConfg("DATABASE", "DBALIAS", dbAlias, "acidb") < 0)
{
debugLog(__FILE__, __LINE__, "读[DATABASE]DBALIAS fail");
exit( -1);
}
if (ReadConfg("DATABASE", "USER", user, "acidbo") < 0)
{
debugLog(__FILE__, __LINE__, "读[DATABASE]USER fail");
exit( -1);
}
if (ReadConfg("DATABASE", "PASSWD", pswd, "") < 0)
{
debugLog(__FILE__, __LINE__, "读[DATABASE]PASSWD fail");
exit( -1);
}
if (ReadConfg("BANK_SVR", "LOCALIP", localip, "127.0.0.1") < 0)
{
debugLog(__FILE__, __LINE__, "读[BANK_SVR]LOCALIP fail");
exit( -1);
}
memset(tmpstr, 0x00, sizeof(tmpstr));
if (ReadConfg("BANK_SVR", "LOCALPORT", tmpstr, "8001") < 0)
{
debugLog(__FILE__, __LINE__, "读[BANK_SVR]LOCALPORT fail");
exit( -1);
}
localport = atoi(tmpstr);
memset(tmpstr, 0x00, sizeof(tmpstr));
if (ReadConfg("BANK_SVR", "TIMEOUT", tmpstr, "60") < 0)
{
debugLog(__FILE__, __LINE__, "读[BANK_SVR]TIMEOUT fail");
exit( -1);
}
TimeOut = atoi(tmpstr);
signal( SIGCLD, sig_child );
signal( SIGCLD, SIG_IGN );
signal( SIGINT, sig_Terminate );
signal( SIGQUIT, sig_Terminate );
signal( SIGPIPE, sig_Terminate );
signal( SIGTERM, sig_Terminate );
signal( SIGUSR1, sig_Terminate );
listenSocket = socket( AF_INET, SOCK_STREAM, 0 );
if( listenSocket < 0 )
{
debugLog(__FILE__, __LINE__, "create listen socket fail.");
exit( 1 );
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons( localport );
if (bind( listenSocket, (struct sockaddr *)&server, sizeof(server)) < 0)
{
debugLog(__FILE__, __LINE__, "listen socket bind fail.");
exit( 1 );
}
listen( listenSocket, 5 );
debugLog(__FILE__, __LINE__, "bank_svr listen is running" );
for(;;)
{
int rcvSocket;
fromlen = sizeof(server);
rcvSocket = accept( listenSocket, (struct sockaddr *)&from,(unsigned long*)&fromlen );
if( rcvSocket < 0 )
{
debugLog(__FILE__, __LINE__, "Accept fail.");
sleep(10000);
continue;
}
if( ( forkint = fork() ) < 0 )
{
debugLog(__FILE__, __LINE__, "fork child process fail.");
sleep(10000);
close(rcvSocket);
continue;
}
else if ( forkint == 0)
{
char packlen[9];
char jydm[7];
int rcvlen, rlen, bodylen;
fd_set fdr;
REQHEAD reqpack;
close( listenSocket );
FD_ZERO(&fdr);
FD_SET(rcvSocket, &fdr);
timeout.tv_sec = TimeOut;
timeout.tv_usec = 0;
rcvlen = select(rcvSocket + 1, &fdr, (fd_set *)0, (fd_set *)0, &timeout);
if (rcvlen <= 0)
{
debugLog(__FILE__, __LINE__, "Receive timeout select = %-d", rcvlen);
close(rcvSocket);
exit(0);
}
rcvlen = read(rcvSocket, packlen, PACKLENLEN);
if (rcvlen != PACKLENLEN)
{
debugLog(__FILE__, __LINE__, "receive pack len error len = %-d", rcvlen);
close(rcvSocket);
exit(0);
}
memset(&reqpack, 0x00, sizeof(REQHEAD));
rcvlen = read(rcvSocket, &reqpack, atoi(packlen));
if (rcvlen < sizeof(REQHEAD) - 2048)
{
debugLog(__FILE__, __LINE__, "receive pack error len = %-d", rcvlen);
close(rcvSocket);
exit(0);
}
rcvlen = sizeof(REQHEAD) - 2048;
memcpy(jydm, reqpack.TIAFECODE, 6);
if (memcmp(reqpack.TIAFECODE, "900000", 6) == 0)
{
debugLog(__FILE__, __LINE__, "发卡机库存查询receive bank req jydm = %s bodylen = %-d", jydm, rcvlen);
kccx(rcvSocket, &reqpack);
}
else
debugLog(__FILE__, __LINE__, "receive unsupport pack");
close(rcvSocket);
exit(0);
}
else
{
close( rcvSocket );
}
}
}
void kccx(int rcvSocket, REQHEAD *reqpack)
{
ANS_HEAD anspack;
struct sqlca sqlca;
char errorMsg[1024], snddata[4097];
int sndlen;
int retcode;
memset(snddata, 0x20, sizeof(snddata) - 1);
snddata[sizeof(snddata) - 1] = 0x00;
/*
EXEC SQL BEGIN DECLARE SECTION;
*/
#line 226 "bank_svr.sqc"
char termno[8]; /*自助机具号X(7)*/
long Records;
char lsh[32];
char pc[32]; /*装/清卡编号(批次号)X(15)*/
char jgh[32]; /*机构号X(7)*/
char gyh[32]; /*当前加卡柜员X(07)*/
char jkks[32]; /*初始卡数 9(8)*/
char yeks[32]; /*剩余卡数 9(8)*/
char hsks[32]; /*回收卡数 9(8)*/
char ffks[32]; /*成功发卡 9(8)*/
char kyks[32]; /*可疑卡数 9(8)*/
char tmpstr[36];
/*
EXEC SQL END DECLARE SECTION;
*/
#line 239 "bank_svr.sqc"
memset(termno, 0x00, sizeof(termno));
memcpy(termno, reqpack->TIATRDATA, 7);
Alltrim(termno);
memset(pc, 0x00, sizeof(pc));
memcpy(pc, reqpack->TIATRDATA + 7, 15);
Alltrim(pc);
/*
EXEC SQL SELECT sbdm
INTO :tmpstr
FROM jqxxzt
WHERE id = :termno;
*/
/*
SQL0206N "ID" is not valid in the context where it is
used. SQLSTATE=42703
*/
{
#line 251 "bank_svr.sqc"
sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca);
#line 251 "bank_svr.sqc"
sqlaaloc(2,1,1,0L);
{
struct sqla_setdata_list sql_setdlist[1];
#line 251 "bank_svr.sqc"
sql_setdlist[0].sqltype = 460; sql_setdlist[0].sqllen = 8;
#line 251 "bank_svr.sqc"
sql_setdlist[0].sqldata = (void*)termno;
#line 251 "bank_svr.sqc"
sql_setdlist[0].sqlind = 0L;
#line 251 "bank_svr.sqc"
sqlasetdata(2,0,1,sql_setdlist,NULL,0L);
}
#line 251 "bank_svr.sqc"
sqlaaloc(3,1,2,0L);
{
struct sqla_setdata_list sql_setdlist[1];
#line 251 "bank_svr.sqc"
sql_setdlist[0].sqltype = 460; sql_setdlist[0].sqllen = 36;
#line 251 "bank_svr.sqc"
sql_setdlist[0].sqldata = (void*)tmpstr;
#line 251 "bank_svr.sqc"
sql_setdlist[0].sqlind = 0L;
#line 251 "bank_svr.sqc"
sqlasetdata(3,0,1,sql_setdlist,NULL,0L);
}
#line 251 "bank_svr.sqc"
sqlacall((unsigned short)24,1,2,3,0L);
#line 251 "bank_svr.sqc"
sqlastop(0L);
}
#line 251 "bank_svr.sqc"
if (sqlca.sqlcode == 100)
{
retcode = 1000;
strcpy(snddata, "无该发卡机设备");
debugLog(__FILE__, __LINE__, "库存查询,无该发卡机设备termno = %s", termno);
SendToBank(rcvSocket, retcode, strlen(snddata), snddata);
return;
}
else if (sqlca.sqlcode != 0)
{
SqlInfoGet(errorMsg, &sqlca);
debugLog(__FILE__, __LINE__, "select sql false SQLCODE = [%-d]%s\n", sqlca.sqlcode, errorMsg);
retcode = abs(sqlca.sqlcode)%10000;
strcpy(snddata, errorMsg);
SendToBank(rcvSocket, retcode, strlen(snddata), snddata);
return;
}
if(pc[0] == 0x00)
{
/*
EXEC SQL SELECT count(*)
INTO :Records
FROM dr_jqxxmx
WHERE Iss21 = :termno;
*/
{
#line 275 "bank_svr.sqc"
sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca);
#line 275 "bank_svr.sqc"
sqlaaloc(2,1,3,0L);
{
struct sqla_setdata_list sql_setdlist[1];
#line 275 "bank_svr.sqc"
sql_setdlist[0].sqltype = 460; sql_setdlist[0].sqllen = 8;
#line 275 "bank_svr.sqc"
sql_setdlist[0].sqldata = (void*)termno;
#line 275 "bank_svr.sqc"
sql_setdlist[0].sqlind = 0L;
#line 275 "bank_svr.sqc"
sqlasetdata(2,0,1,sql_setdlist,NULL,0L);
}
#line 275 "bank_svr.sqc"
sqlaaloc(3,1,4,0L);
{
struct sqla_setdata_list sql_setdlist[1];
#line 275 "bank_svr.sqc"
sql_setdlist[0].sqltype = 496; sql_setdlist[0].sqllen = 4;
#line 275 "bank_svr.sqc"
sql_setdlist[0].sqldata = (void*)&Records;
#line 275 "bank_svr.sqc"
sql_setdlist[0].sqlind = 0L;
#line 275 "bank_svr.sqc"
sqlasetdata(3,0,1,sql_setdlist,NULL,0L);
}
#line 275 "bank_svr.sqc"
sqlacall((unsigned short)24,2,2,3,0L);
#line 275 "bank_svr.sqc"
sqlastop(0L);
}
#line 275 "bank_svr.sqc"
}
else
{
/*
EXEC SQL SELECT count(*)
INTO :Records
FROM dr_jqxxmx
WHERE Iss21 = :termno and Iss3 = :pc;
*/
{
#line 282 "bank_svr.sqc"
sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca);
#line 282 "bank_svr.sqc"
sqlaaloc(2,2,5,0L);
{
struct sqla_setdata_list sql_setdlist[2];
#line 282 "bank_svr.sqc"
sql_setdlist[0].sqltype = 460; sql_setdlist[0].sqllen = 8;
#line 282 "bank_svr.sqc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -