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

📄 bank_svr.sqc

📁 转发交易接口
💻 SQC
📖 第 1 页 / 共 2 页
字号:
#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;    char dbAlias[15];    char user[128 + 1];    char pswd[15];EXEC SQL END DECLARE SECTION;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;		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;	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;  	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;   	}   	else  	{  		EXEC SQL SELECT count(*)   	 	 INTO :Records   	 	 FROM dr_jqxxmx   	 	 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; 

⌨️ 快捷键说明

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