?? bank_svr.sqc.bak
字號:
#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 <sys/ipc.h>
# include <sys/msg.h>
# include <sys/shm.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;
char dbAlias[15];
char user[128 + 1];
char pswd[15];
EXEC SQL END DECLARE SECTION;
void sig_child();
void sig_Terminate();
/*自助發(fā)卡機庫存查詢*/
void kccx(int rcvSocket, REQHEAD *reqpack);
/*清裝卡情況明細查詢*/
void zqkmxcx(int rcvSocket, REQHEAD *reqpack);
/*清裝卡情況匯總查詢*/
void zqkhzcx(int rcvSocket, REQHEAD *reqpack);
/*發(fā)卡明細*/
void famxcx(int rcvSocket, REQHEAD *reqpack);
/*返回銀行組包并發(fā)送*/
void SendToBank(int rcvSocket, int retcode, int datalen, char *sndData);
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, "DBEBRS") < 0)
{
debugLog(__FILE__, __LINE__, "讀[DATABASE]DBALIAS fail");
exit( -1);
}
if (ReadConfg("DATABASE", "USER", user, "ebcs") < 0)
{
debugLog(__FILE__, __LINE__, "讀[DATABASE]USER fail");
exit( -1);
}
if (ReadConfg("DATABASE", "PASSWD", pswd, "ebcs") < 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 );
}
printf("listen....... \n");
listen( listenSocket, 5 );
debugLog(__FILE__, __LINE__, "bank_svr listen is running" );
for(;;)
{
int rcvSocket;
fromlen = sizeof(server);
rcvSocket = accept( listenSocket, (struct sockaddr *)&from, &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) //child process
{
char packlen[9];
char jydm[7];
int rcvlen, rlen, bodylen;
fd_set fdr;
REQHEAD reqpack;
printf("Create a Process....... \n");
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) //長度不夠請求包頭,REQHEAD中除TIATRDATA[2048]外
{
debugLog(__FILE__, __LINE__, "receive pack error len = %-d", rcvlen);
close(rcvSocket);
exit(0);
}
rcvlen = sizeof(REQHEAD) - 2048;
/*不同交易做不同處理,銀行發(fā)起的交易交易碼放TIAFECODE中
//900000自助發(fā)卡機庫存查詢、900001自助發(fā)卡機清裝卡情況明細查詢
//900001自助發(fā)卡機清裝卡情況匯總查詢、900003發(fā)卡明細打印*/
memcpy(jydm, reqpack.TIAFECODE, 6);
if (memcmp(reqpack.TIAFECODE, "900000", 6) == 0)
{
/*自助發(fā)卡機庫存查詢*/
debugLog(__FILE__, __LINE__, "發(fā)卡機庫存查詢receive bank req jydm = %s bodylen = %-d", jydm, rcvlen);
kccx(rcvSocket, &reqpack);
}
/*
else if (memcmp(reqpack.TIAFECODE, "900001", 6) == 0)
{
//清裝卡情況明細查詢
debugLog(__FILE__, __LINE__, "清裝卡情況明細查詢receive bank req jydm = %s bodylen = %-d", jydm, rcvlen);
zqkmxcx(rcvSocket, &reqpack);
}
else if (memcmp(reqpack.TIAFECODE, "900002", 6) == 0)
{
//清裝卡情況匯總查詢
debugLog(__FILE__, __LINE__, "清裝卡情況匯總查詢receive bank req jydm = %s bodylen = %-d", jydm, rcvlen);
zqkhzcx(rcvSocket, &reqpack);
}
else if (memcmp(reqpack.TIAFECODE, "900003", 6) == 0)
{
//發(fā)卡明細
debugLog(__FILE__, __LINE__, "發(fā)卡明細receive bank req jydm = %s bodylen = %-d", jydm, rcvlen);
famxcx(rcvSocket, &reqpack);
}
*/
else
debugLog(__FILE__, __LINE__, "receive unsupport pack");
close(rcvSocket);
exit(0);
}
else
{
/*wait(&errno);*/
close( rcvSocket );
}
}
}
/*自助發(fā)卡機庫存查詢*/
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;
char termno[8]; /*自助機具號X(7)*/
long Records;
char lsh[32];
char pc[32]; /*裝/清卡編號(批次號)X(15)*/
char jgh[32]; /*機構(gòu)號X(7)*/
char gyh[32]; /*當前加卡柜員X(07)*/
char jkks[32]; /*初始卡數(shù) 9(8)*/
char yeks[32]; /*剩余卡數(shù) 9(8)*/
char hsks[32]; /*回收卡數(shù) 9(8)*/
char ffks[32]; /*成功發(fā)卡 9(8)*/
char kyks[32]; /*可疑卡數(shù) 9(8)*/
char tmpstr[36];
EXEC SQL END DECLARE SECTION;
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 sbdm = :termno;
if (sqlca.sqlcode == 100) /*無該發(fā)卡機處理*/
{
retcode = 1000; /*無該發(fā)卡機處理*/
strcpy(snddata, "無該發(fā)卡機設備");
debugLog(__FILE__, __LINE__, "庫存查詢,無該發(fā)卡機設備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;
}
//取當前庫存
EXEC SQL SELECT Iss20, Iss8, Iss11, Iss18, Iss17
INTO :jgh, :gyh, :jkks, :yeks, :hsks
FROM CardBox
WHERE Iss21 = :termno and Iss3 = :pc;
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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -