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

📄 spdsi.cpre

📁 商业银行前置系统
💻 CPRE
字号:
/* * This is a part of the Application Preconsole * Service Provide - DSI. * Copyright (C) 2000-2000 ABC.SDC. * All rights reserved. * * This source code is only intended as a supplement to the * Application Preconsole Reference and related * electronic documentation provided with the library. * See these sources for detailed information regarding the * Application Preconsole product.  * * Update record: * 2001-08-12 Cheng WeiHong    - create implementation file for  *                               transaction entrance * 2001-09-25 R.Cao            - simplify logic */#include <sybtesql.h>#include "ap.h"#include "apsp.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "dsi.h";EXEC SQL INCLUDE "dsiext.h";/* * ASSURE宏用以处理程序中发生的异常。为适用于各个阶段的异常处理,该 * 宏对整个处理过程中可能分配的资源都进行清理。 */#define ASSURE(b) \    { \        if (!VERIFY(b)) \        { \            if (nListenSock > 0) \                close(nListenSock); \            if (nSock > 0) \                close(nSock); \            DeleteIso8583(&iso8583stru); \            return EXCEPTION; \        } \    }#define ASSURE_NORMAL(r) \    { \        RESULT rTemp = (r); \        if (!VERIFY_NORMAL(rTemp)) \        { \            if (nListenSock > 0) \                close(nListenSock); \            if (nSock > 0) \                close(nSock); \            DeleteIso8583(&iso8583stru); \            return rTemp; \        } \    }BOOL bShutdown = FALSE;RESULT main(){    ISO8583STRU iso8583stru;    UINT nListenSock = 0, nSock = 0;    char szOutMsgKey[LEN_MSGKEY + 1];    char szInMsgKey[LEN_MSGKEY + 1];    char szPort[LEN_PORT + 1];    char szTimeout[2 + 1];    UINT nOutMsg;    UINT nInMsg;        pid_t _pid_tChild;    char cMsg[SIZE_MSG_ISO8583];    UINT nSize, nMsgSize;    UINT nType;    char szTraceNo[SIZE_TRACENO + 1];        memset(&iso8583stru, 0, sizeof(ISO8583STRU));    PrintLog(stdout, "spdsi: service is starting...");    ASSURE_NORMAL(InitServer())        /*     * 建立配置XML 结构,并获取消息队列和TCP 套接字的配置信息。     */         PrintLog(stdout, "spdsi: get config parameters...");    ASSURE_NORMAL(AP_DEMAND_CFG(PATH_OUTMSGKEY, szOutMsgKey))    ASSURE_NORMAL(AP_DEMAND_CFG(PATH_INMSGKEY, szInMsgKey))    ASSURE_NORMAL(AP_DEMAND_CFG(PATH_SERVICEPORT, szPort))    ASSURE_NORMAL(AP_DEMAND_CFG(PATH_TIMEOUT, szTimeout))        /*     * 建立监听套接字,打开消息队列。     */         PrintLog(stdout, "spdsi: create listen socket...");    ASSURE_NORMAL(CreateSock(&nListenSock, atoi(szPort), 8))    ASSURE((nOutMsg = msgget(atoi(szOutMsgKey), IPC_CREAT | 0666)) > 0)    ASSURE((nInMsg = msgget(atoi(szInMsgKey), IPC_CREAT | 0666)) > 0)    PrintLog(stdout, "spdsi: service is activated.");    while (!bShutdown)    {        if (!VERIFY_NORMAL(AcceptSock(&nSock, nListenSock)))            continue;        /*         * 复制进程, 父进程继续监视TCP 套接字,子进程进行报文处理。         */        VERIFY((_pid_tChild = fork()) >= 0);        if (_pid_tChild > 0)        {            close(nSock);            nSock = 0;            continue;        }                    break;    }    close(nListenSock);    nListenSock = 0;        /*     * 从TCP 套接字中读取4 个字节以确定交易报文的长度。     */    bufclr(cMsg);    nSize = 4;        ASSURE_NORMAL(ReadFile(nSock, cMsg, &nSize))    ASSURE(nSize == 4)        nSize = nMsgSize = atoi(cMsg);    bufclr(cMsg);    ASSURE(nSize <= sizeof(cMsg))    ASSURE_NORMAL(ReadFile(nSock, cMsg, &nSize))    ASSURE(nSize == nMsgSize)    close(nSock);    nSock = 0;    ASSURE_NORMAL(CreateIso8583(&iso8583stru, ifistruDsi))    ASSURE_NORMAL(ImportIso8583(&iso8583stru, cMsg, nSize))    nSize = SIZE_TRACENO;    bufclr(szTraceNo);    ASSURE_NORMAL(GetBitInIso8583(&iso8583stru, BIT_TRACENO, szTraceNo,                                  &nSize))    DeleteIso8583(&iso8583stru);    nType = TYPE_MSG_REQ;    ASSURE_NORMAL(WriteMsg(nOutMsg, cMsg, nMsgSize, nType))    nSize = sizeof(cMsg);    bufclr(cMsg);    nType = atoi(szTraceNo);    ASSURE_NORMAL(ReadMsgExt(nInMsg, cMsg, &nSize, &nType, atoi(szTimeout)))        memset(&iso8583stru, 0, sizeof(ISO8583STRU));    CreateIso8583(&iso8583stru, ifistruDsi);    ImportIso8583(&iso8583stru, cMsg, nSize);    DeleteIso8583(&iso8583stru);            ASSURE_NORMAL(CallCics("AP00", "APUSER", "APUSER", "DSIR", "CPMI",                           cMsg, nSize))    return NORMAL;}/* End of this file */

⌨️ 快捷键说明

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