📄 hostserdo.ec
字号:
/* HostSerDo.c * This program read a line in the file which name is trade code * and send back to Branch Host */#include <stdio.h>#include <signal.h>#include <errno.h>#include <ctype.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/msg.h>#include <sys/signal.h>#include <sys/shm.h>#include "../incl/HostSer.h"#include "../incl/bank.h"$include sqlca;extern void TimeOutDo(int);extern int get_trcode(char *,char *);extern $char stockdb1[20];int newsockfd;extern long test;HostSerDo(newfd,package)int newfd;char *package;{ int retval,jym,test_len; int flags,len,flag; char trcode[5]; char recvdata[1000]; char backdata[3000]; $int t_on_off; FILE *fp; signal(SIGALRM,TimeOutDo); alarm(TIMEOUT); memset(( char * )recvdata,'\0',sizeof(recvdata)); memset(( char * )backdata,'\0',sizeof(backdata)); newsockfd = newfd; retval = SockRcv(newsockfd,recvdata); if(retval < 0) { WriteLog ( LOGFILE,"接收数据出错"); strcpy ( send_net.retcode,"8001"); strcpy ( send_net.errmsg,"接收数据出错"); return(-1); }/***** if (strncmp(recvdata,"TRANS_TYPE=0210",15) !=0) sprintf(recvdata,"TRANS_TYPE=0202|ACCO_TYPE=0|ACCOUNT=4367420013480000144|AMOUNT=10.00|REQ_SERIAL=%015d|TIME=140105|",test);*****/ WriteLog(LOGFILE,"HostSer:receive data [%s]\n",recvdata); get_trcode(trcode,recvdata); trcode[4]='\0'; if ( !memcmp ( trcode,"0210",4 ) || !memcmp ( trcode,"0211",4 ) || !memcmp ( trcode,"0212",4 ) || !memcmp ( trcode,"0206",4 ) || !memcmp ( trcode,"0202",4 ) || !memcmp ( trcode,"0201",4 ) || !memcmp ( trcode,"0213",4 ) || !memcmp ( trcode,"0214",4 ) ) { jym=atoi(trcode); } else { strcpy ( send_net.retcode,"8001"); strcpy ( send_net.errmsg,"交易类型错"); return(-1); } $connect to $stockdb1; if ( sqlca.sqlcode ) { WriteLog ( LOGFILE, "Open database stock err[%d]!\n",sqlca.sqlcode); strcpy ( send_net.retcode,"8999"); strcpy ( send_net.errmsg,"打开数据库出错"); return( -1 ); } EXEC SQL SELECT on_off INTO $t_on_off FROM t_worker_sign; if(sqlca.sqlcode) { WriteLog ( LOGFILE, "database stock err[%d]!\n",sqlca.sqlcode); strcpy ( send_net.retcode,"8999"); strcpy ( send_net.errmsg,"select stock err"); $disconnect current; return( -1 ); } if (t_on_off != 1 && jym != 210 && jym != 211 && jym != 214) { WriteLog ( LOGFILE, "worker status is not right!\n"); strcpy ( send_net.retcode,"8003"); strcpy ( send_net.errmsg,"柜员未签到"); /*$ close database;*/ $disconnect current; return( -1 ); } $disconnect current; if ( sqlca.sqlcode ) { WriteLog ( LOGFILE, "Close database stock err[%d]!\n",sqlca.sqlcode ); strcpy ( send_net.retcode,"8999"); strcpy ( send_net.errmsg,"关闭数据库出错"); return( -1 ); } switch(jym) { case 210: flag = net_tohost_0210(newsockfd,recvdata,backdata); if( flag != 0 ) return (-1); strcpy(package,backdata); return 0; case 211: flag = net_tohost_0211(newsockfd,recvdata,backdata); if( flag != 0 ) return (-1); strcpy(package,backdata); return 0; case 212: flag = net_tohost_0212(newsockfd,recvdata,backdata); if( flag != 0 ) return (-1); strcpy(package,backdata); return 0; case 206: flag = net_tohost_0206(newsockfd,recvdata,backdata); if( flag != 0 ) return (-1); strcpy(package,backdata); return 0; case 202: flag = net_tohost_0202(newsockfd,recvdata,backdata); if( flag != 0 ) return (-1); strcpy(package,backdata); return 0; case 201: flag = net_tohost_0201(newsockfd,recvdata,backdata); if( flag != 0 ) return (-1); strcpy(package,backdata); return 0; case 213: flag = net_tohost_0213(newsockfd,recvdata,backdata); if( flag != 0 ) return (-1); strcpy(package,backdata); return 0; case 214: flag = net_tohost_0214(newsockfd,recvdata,backdata); if( flag != 0 ) return (-1); strcpy(package,backdata); return 0; default : break; } return 0;}err_pro1(errmsg)char *errmsg;{ int retval = 0; fprintf(stderr,errmsg); DisConSvr(newsockfd);}void TimeOutDo(int signo){ fprintf(stderr,"HostSer TimeOut\n"); return ;}int get_trcode(trcode,recvdata)char *trcode;char *recvdata;{ int i =0; for(i=0;i<4;i++) trcode[i] = *(recvdata+11+i); trcode[4] = '\0'; return 0;}int get_host_trace( char* host_trace ){ $int hostls; $SET LOCK MODE TO WAIT; $begin work; if( sqlca.sqlcode != 0 ) { WriteLog( LOGFILE, "begin work error in function[get_host_trace]!--[%d]--\n", sqlca.sqlcode ); return( -1 ); } $update t_host_ls set hostls=hostls+1; if( sqlca.sqlcode != 0 ) { WriteLog(LOGFILE, "update t_host_ls error ! errcode[%d][%d]", sqlca.sqlcode, sqlca.sqlerrd[1]); $rollback work; return(-1); } $select hostls into $hostls from t_host_ls; if( sqlca.sqlcode != 0 ) { WriteLog(LOGFILE, "select hostls error !errcode[%d]", sqlca.sqlcode); $rollback work; return(-1); } $commit work; if( sqlca.sqlcode != 0 ) { WriteLog( LOGFILE, "commit work error in function[get_host_trace]!--[%d]--\n", sqlca.sqlcode ); $rollback work; return( -1 ); } $SET LOCK MODE TO NOT WAIT; sprintf(host_trace,"%06d",hostls); return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -