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

📄 dpciso.cpp

📁 ISO 8583 with c++ for financial transaction standard
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// IT24 Sistemas S..
// (Inicial)    2001.06.14        mdc        Inicial
// (Inicial)    2001.07.31        mdc        
// (Inicial)    2001.12.24        mdc        CheckForMsgs ampliada
// (Inicial)    2002.01.08        mdc        StartProcessing incluye a TrxResolution 
// (Inicial)    2002.05.07        mdc        ::SetStatus()
// (ALFA)       2002.08.21        mdc        Atributos nuevos bNETWORK_MGMT_ENABLE, 
//                                           bISO8583_REPLY_SAF, shOFFSET_OUTPUT_MESSAGE, y bTCPIP_PP_PROTOCOL
// (ALFA)       2002.11.21        mdc        EXPORT short DPCGETLASTTRANSACTIONSTATUS(void) ....
// (Beta)       2002.11.22        mdc        EXPORT enumHostStatus WINAPI DPCGETSTATUSBACKEND() ;
// (Beta)       2002.12.11        mdc        SAF concatenado enviado a SAF LOCAL
// (Beta)       2003.05.14        mdc        Sistema SIOP 
// (Relase-1)   2003.06.11        mdc        Se agregan atributos de USUARIO y CONTRASENA hacia el backend. TSHOPPING.
// (Relase-1)   2003.08.01        mdc        Correccion de parametro PSHORT hacia variable PSHORT, antes PINT. shLen <> ilen.
// (Relase-2)   2003.07.21        mdc        BANCO INDUSTRIAL y atributos.
//
/////////////////////////////////////////////////////////////////////////////////////////////////////


// Headers propios
// Header Type Definitions
#include <qusrinc/typedefs.h>
// Aliases
#include <qusrinc/alias.h>
// Data Processing Center
#include <qusrinc/dpciso.h>

// Header Standard Library
#include <stdlib.h>
// Header Standard I/O Library
#include <stdio.h>
// Header String
#include <string.h>
// Header Hora
#include <time.h>
// Header Local Settings
#include <locale.h>
// Header INTERNET para htons()
#include <netinet/in.h>

// Header TrxResolution general y COBIS
#include <qusrinc/trxres.h>
// Header Standard I/O Library
#include <qusrinc/stdiol.h>
// Header TrxResolution SIAF
#include <qusrinc/ctotcp4u.h>



// constant definitions
#if defined(_SYSTEM_ATM_COBIS_)
static const char _DPC_ISO_SYSTEM_DEFINED_[] = "SISTEMA COBIS      ";
#elif defined(_SYSTEM_ATM_SIAF_)
static const char _DPC_ISO_SYSTEM_DEFINED_[] = "SISTEMA SIAF       ";
#elif defined(_SYSTEM_ATM_SIOP_)
static const char _DPC_ISO_SYSTEM_DEFINED_[] = "SISTEMA SIOP       ";
#elif defined(_SYSTEM_ATM_TSHOP_)
static const char _DPC_ISO_SYSTEM_DEFINED_[] = "SISTEMA TSHOPPING  ";
#elif defined(_SYSTEM_ATM_INDUS_)
static const char _DPC_ISO_SYSTEM_DEFINED_[] = "SISTEMA INDUSTRIAL ";
#elif defined(_SYSTEM_ATM_)
static const char _DPC_ISO_SYSTEM_DEFINED_[] = "SISTEMA BASE       ";
#else
static const char _DPC_ISO_SYSTEM_DEFINED_[] = "<<< SIN SISTEMA >>>";
#endif // SYSTEM DEFINED


////////////////////////////////////////////////////////////////////////////////////////////////////
// static member variables 
#if (STATIC_PROPERTY_SET == TRUE)
APPMSG              DPCISO::isoMsg;
char                DPCISO::szStr[CISOMESSAGESIZE*10];
short               DPCISO::iLen;                    
char                DPCISO::szStrOut[CISOMESSAGESIZE*10];
short               DPCISO::iLenOut;                    
char                DPCISO::szStrBackup[CISOMESSAGESIZE*10];
short               DPCISO::iLenBackup;                    
SOCKET              DPCISO::mySock,
                    DPCISO::mySockListen,
                    DPCISO::myActiveSock;
char                DPCISO::szISOHost[256];
unsigned short      DPCISO::usISOPort,
                    DPCISO::usISOLiPort;
char                DPCISO::szVer[128];
int                 DPCISO::iRc;
bool                DPCISO::bConnect;
bool                DPCISO::bNETWORK_MGMT_ENABLE;    // Habilita manejo de echo-logon ?
bool                DPCISO::bISO8583_REPLY_SAF;        // Habilita responder SAF y REVERSOS ?
short               DPCISO::shOFFSET_OUTPUT_MESSAGE;// Existe un OFFSET al mensaje ISO ?
bool                DPCISO::bTCPIP_PP_PROTOCOL;        // Habilita protocolo PP del TCP ?
HWND                DPCISO::hHandle;
time_t              DPCISO::tLastEchoLogon;
enumFormatType      DPCISO::efFormat;
int                 DPCISO::iTimeout;
enumEvTypeChecking  DPCISO::eventType;    
enumHostStatus      DPCISO::hostStatus;
StoreAndForward     DPCISO::safQueue;    // Cola de requerimientos , "SAF"
MessageTracker      DPCISO::trkLogg;    // Logger de mensajes req/rta
MessageTracker      DPCISO::trkError;    // Logger de errores
MessageTracker      DPCISO::trkEchoes;    // Logger de echoes
rpcdb               DPCISO::prpcDB;        // Punto de conexion de la base de datos externa
unsigned long       DPCISO::ulTrxCounter; // Contador interno de mensajes
bool                DPCISO::bReversalToSAF_SystemFailure;
HFILE               DPCISO::hDumpFile ;
bool                DPCISO::bLocalNetMgmt_Enable;        
char                DPCISO::szBackEndHost[256];    // Nombre del BACK END (Cobis, SIAF, etc)
unsigned short      DPCISO::usBackEndPort;        // Si es IP, puerta de conexion
enumHostStatus      DPCISO::hostBackEndStatus;  // Estado del BACK END
time_t              DPCISO::tLastSAFProcessed;    // TimeStamp del ultimo SAF procesado
char                DPCISO::szBackEndUser[256];    // Usuario del BACK END 
char                DPCISO::szBackEndPassw[256];// Contrasena del BACK END 
#endif // STATIC_PROPERTY_SET
////////////////////////////////////////////////////////////////////////////////////////////////////


// global variables 
DPCISO     dpcISO;

////////////////////////////////////////////////////////////////////////////////////////////////////
// PRIVATE FUNCTIONS
VOID CALLBACK DPCTIMERPROC(HWND hWindow, UINT uTimer, UINT uInt, DWORD uDWord) 
{ dpcISO.TimerProc(hWindow, uTimer, uInt, uDWord); };
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
// API FUNCTIONS
EXPORT const char * WINAPI DPCGETSYSTEMDEFINED(void) { return _DPC_ISO_SYSTEM_DEFINED_; };
EXPORT int  WINAPI DPCCONNECT(char *szHost,unsigned short usPort, unsigned short usLiPort,
                              bool bTCPIP_PP_PROTOCOL, int iTimeout, cobisdb *prpcXDB)
{ return dpcISO.Connect (szHost,usPort,usLiPort,bTCPIP_PP_PROTOCOL, iTimeout, prpcXDB); } ;
EXPORT int  WINAPI DPCDISCONNECT() 
{ return dpcISO.Disconnect (); } ;
EXPORT int  WINAPI DPCRECONNECT( ) 
{ return dpcISO.Reconnect (); } ;
EXPORT int  WINAPI DPCCHECKFORMSGS(unsigned short uTimeOut) 
{ return dpcISO.CheckForMsgs ( uTimeOut); } ;
EXPORT int  WINAPI DPCSTARTPROCESSING( boolean_t bLogon,boolean_t bAuth, boolean_t bReversalToSAF) 
{ return dpcISO.StartProcessing ( bLogon,bAuth, bReversalToSAF ); } ;
EXPORT int  WINAPI DPCSENDLOGON( enumCntlType wLogon ) 

{ return dpcISO.SendLogon (wLogon); } ;
EXPORT int  WINAPI DPCSENDLOGOFF( ) 
{ return dpcISO.SendLogoff (); } ;
EXPORT int  WINAPI DPCGETMSG(char *szMsg, unsigned short *piLen ) 
{ return dpcISO.GetMsg (szMsg, piLen); } ;
EXPORT int  WINAPI DPCSETMSG(char *szMsg, unsigned short iLen ) 
{ return dpcISO.SetMsg (szMsg, iLen); } ;
EXPORT int  WINAPI DPCSENDREQANDWAITRESP(short xbPP_Protocol,unsigned uTimeOut)    
{ return dpcISO.SendReqAndWaitResp(xbPP_Protocol,uTimeOut); } ;
EXPORT void WINAPI DPCSETNOTIFYHANDLE( HWND hHandle) 
{ if(hHandle) dpcISO.SetNotifyHandle( hHandle ); }
EXPORT int  WINAPI DPCSENDREQNOWAIT(short xbPP_Protocol,unsigned uTimeOut)    
{ return dpcISO.SendReqNoWait(xbPP_Protocol,uTimeOut); } ;
EXPORT int  WINAPI DPCSMTPSENDMAIL( const char *szFrom, const char *szTo, const char *szMessage, 
                                    const char *szHost, const char *szMyDomain ) 
{ return dpcISO.SmtpSendMail (szFrom, szTo, szMessage, szHost, szMyDomain); } ;
EXPORT enumHostStatus WINAPI DPCGETSTATUS() 
{ return dpcISO.GetStatus() ; };
EXPORT enumHostStatus WINAPI DPCSETSTATUS( enumHostStatus s ) 
{ return dpcISO.SetStatus( s ) ; };
EXPORT enumFormatType WINAPI DPCSETFORMAT( enumFormatType f) 
{ return dpcISO.SetFormat( f )  ; };
EXPORT unsigned long WINAPI DPCGETTRXCOUNTER( void ) 
{ return dpcISO.GetTrxCounter() ; };
EXPORT enumFormatType WINAPI DPCGETFORMAT( void ) 
{ return dpcISO.GetFormat( ); };
EXPORT void WINAPI DPCSETCONFIG( char *szHost,unsigned short usPort, unsigned short usLiPort,
                                 bool bTCPIP_PP_PROTOCOL, int iTimeout, 
                                 char *szIPBackEnd, unsigned short usPortBackEnd )
{ dpcISO.SetConfig(szHost,usPort,usLiPort,bTCPIP_PP_PROTOCOL, 
                   iTimeout, szIPBackEnd, usPortBackEnd ); 
};
EXPORT short DPCGETLASTTRANSACTIONSTATUS(void) 
{ return dpcISO.GetLastTransactionStatus(); };
EXPORT short DPCSETLASTTRANSACTIONSTATUS(short shNew) 
{ return dpcISO.SetLastTransactionStatus(shNew); };
EXPORT enumHostStatus WINAPI DPCGETSTATUSBACKEND() 
{ return dpcISO.GetStatusBackEnd() ; };
EXPORT enumHostStatus WINAPI DPCSETSTATUSBACKEND( enumHostStatus s ) 
{ return dpcISO.SetStatusBackEnd( s ) ; };
         
////////////////////////////////////////////////////////////////////////////////////////////////////
// ISO8583 API FUNCTIONS
EXPORT BOOL WINAPI DPCINITMESSAGE(void) 
{ return dpcISO.isoMsg.InitMessage() ; };
EXPORT BOOL WINAPI DPCDELETEFIELD(WORD field) 
{ return dpcISO.isoMsg. DeleteField(field); };
EXPORT BOOL WINAPI DPCEXPORTMSG(PBYTE pMsg,PWORD pwLen) 
{ return dpcISO.isoMsg.Export(pMsg,pwLen); };
EXPORT BOOL WINAPI DPCIMPORTMSG(const PBYTE pBuf, WORD iLen) 
{ return dpcISO.isoMsg.Import(pBuf,iLen);  };
EXPORT BOOL WINAPI DPCSETMSGTYPEID(PBYTE lpszValue) 
{ return dpcISO.isoMsg.SetMsgTypeId(lpszValue, 4);  };
EXPORT BOOL WINAPI DPCGETMSGTYPEID(PBYTE lpszValue) 
{ return dpcISO.isoMsg.GetMsgTypeId(lpszValue, 4+1);  };
EXPORT BOOL WINAPI DPCGETFIELD(WORD iField,PWORD pwLen,PBYTE szBuf,WORD wLen) 
{ return dpcISO.isoMsg.GetField(iField,pwLen,szBuf,wLen);  };
EXPORT BOOL WINAPI DPCINSERTFIELD(WORD iField,PWORD pwLen,PBYTE szBuf,WORD wLen) 
{ return dpcISO.isoMsg.InsertField(iField,pwLen,szBuf,wLen);  };
EXPORT BOOL WINAPI DPCUPDATEFIELD(WORD iField,PWORD pwLen,PBYTE szBuf,WORD wLen) 
{ return dpcISO.isoMsg.SetField(iField,pwLen,szBuf,wLen);  };
EXPORT BOOL WINAPI DPCSETMSGTYPEIDRESPONSE( void ) 
{ return dpcISO.isoMsg.SetMsgTypeIdResponse(); };
EXPORT void WINAPI DPCSETTIMEOUT( int iTime ) 
{ dpcISO.SetTimeOut( iTime ); };
EXPORT int  WINAPI DPCSENDDRAFT(short xbPP_Protocol,unsigned uTimeOut,
                                char *szExtStr,int iExtLen ) 
{ return dpcISO.SendDraft(xbPP_Protocol,uTimeOut,szExtStr,iExtLen ); };

////////////////////////////////////////////////////////////////////////////////////////////////////

// API FUNCTIONS

// CONSTANTS
// TimeOuts de norma ISO, segun configuracion propietaria
#define _ISO8583_ECHO_TIMEOUT_         (71)
// Timers en MILISEGUNDOS en caso de que se desee una notificacion via 
// S.O. y eventos asincronicos mediante temporizadores.
#define _ISO8583_ECHO_TIMEOUT_MSEG_    (_ISO8583_ECHO_TIMEOUT_*1000L)
#define _POLLING_TIMEOUT_MSEG_         (1000L)
// TimeOut general del DPC (ACCEPT - WRITE)
// Se elije un TIMEOUT que es numero primo para no provocar
// una secuencia que se superponga y a su vez sobrecargue los
// ECHO - LOGON del HOST administrador, RED LINK / BANELCO / BANCOMAT / etc.
#define _DPC_COMM_TIMEOUT_                  (73)
// Alerta de procesamiento de SAF continuo, en segundos
#define _ISO8583_SAF_IN_PROGRESS_ALERT_    (300)

// ISO8583 Msg. Header
static const char _ISO_MSG_HEADER_[]         = "ISO";
// ISO8583 Msg. Header, Product ACI B24-ATM-POS
static const char _ISO_MSG_HEADER_ATM_POS_[] = "ISO0";
// ISO8583 Msg. Header, Product ACI EFT
static const char _ISO_MSG_HEADER_EFT_[]     = "ISO1";

// Definicion de funciones de manejo de TIMER como funciones nulas,
// en caso de que la plataforma no soporte temporiadores
#ifdef ___INNER_LOOP_CHECKING_
// PRIVATE FUNCTIONS
typedef VOID CALLBACK (*DPCTIMERPROC_PTR)(HWND hWindow, UINT uTimer, UINT uInt, DWORD uDWord);
int SetTimer( HWND,UINT,UINT,DPCTIMERPROC_PTR ) { return 0; }
int KillTimer( HWND, UINT)                      { return 0; }
#endif

///////////////////////////////////////////////////////////////////////////////////////
// constructor
DPCISO::DPCISO( )
{   
   bConnect                      = false;   
   ///////////////////////////////////////////////////////////////////////////////
   bTCPIP_PP_PROTOCOL            = true; // Habilita protocolo PP del TCP ?
   bNETWORK_MGMT_ENABLE          = true;    // Habilita manejo de echo-logon ?
   bISO8583_REPLY_SAF            = true;    // Habilita responder SAF y REVERSOS ?
   shOFFSET_OUTPUT_MESSAGE       = 0;    // Existe un OFFSET al mensaje ISO ?
   ///////////////////////////////////////////////////////////////////////////////
   tLastSAFProcessed            = 0L;
   bReversalToSAF_SystemFailure = is_false;
   trxStatus                    = CISO_APPROVED_I;
   iLen    = iLenOut = iLenBackup = 0;
   memset( szStr      , 0x00, sizeof szStr );
   memset( szStrOut   , 0x00, sizeof szStrOut );
   memset( szStrBackup, 0x00, sizeof szStrBackup );
   //////////////////////////////////////////////////////////////
   iRc               = TCP4U_SUCCESS;
   hDumpFile         = HFILE_ERROR;    // Archivo DUMP de TCP4U Library
   mySock = mySockListen = myActiveSock = INVALID_SOCKET;
   hHandle           = NULL;
   tLastEchoLogon    = 0L;
   efFormat          = CNTL_FORMAT_ISO8583;
   iTimeout          = 0;
   hostStatus        = _HOST_READY_;
   hostBackEndStatus = _HOST_READY_;
   ulTrxCounter      = 0;
#if defined( ___INNER_LOOP_CHECKING_ )
   eventType        = _INNER_LOOP_CHECKING_ ;
#elif defined( ___TIMER_EVENT_CHECKING_ )
   eventType        = _TIMER_EVENT_CHECKING_ ;
#else
#error "Sin definir el modo de procesamiento de eventos"

#endif
   // ISO8583 init 
   isoMsg.InitMessage();
   // open-create SAF
   safQueue.Open( SAFFILENAME );
   // open-cerate MSG track
   trkLogg.Open( MSGTRKFILENAME );
   // open-create ERROR track
   trkError.Open( ERRTRKFILENAME );
   // open-create ECHOE track
   trkEchoes.Open( ECHOTRKFILENAME );

   //////////////////////////////////////////////
   szISOHost[0]     = 0x00;
   usISOPort        = 0;
   usISOLiPort      = 0 ;   
   szBackEndHost[0] = 0x00;
   usBackEndPort    = 0;
   //////////////////////////////////////////////
   szBackEndUser[0]  = 0x00;    
   szBackEndPassw[0] = 0x00;
   //////////////////////////////////////////////

   // Verify locale settings  (decimal point)
   VerifyLocaleSettings();

}
///////////////////////////////////////////////////////////////////////////////////////
// constructor
DPCISO::DPCISO( cobisdb *prpcXDB )
{
    // def. constructor 
    ::DPCISO();
    // db backup 
    prpcDB = prpcXDB;

   // Verify locale settings  (decimal point)
   VerifyLocaleSettings();

}
///////////////////////////////////////////////////////////////////////////////////////
// optional constructor 
DPCISO::DPCISO( char *szHost, unsigned short usPort, unsigned short usLiPort, bool xbPP_Protocol, int *pRc)
{   
   
   bConnect                      = false;   
   ///////////////////////////////////////////////////////////////////////////////
   bTCPIP_PP_PROTOCOL            = true; // Habilita protocolo PP del TCP ?
   bNETWORK_MGMT_ENABLE          = true;    // Habilita manejo de echo-logon ?
   bISO8583_REPLY_SAF            = true;    // Habilita responder SAF y REVERSOS ?
   shOFFSET_OUTPUT_MESSAGE       = 0;    // Existe un OFFSET al mensaje ISO ?
   ///////////////////////////////////////////////////////////////////////////////
   tLastSAFProcessed            = 0L;

⌨️ 快捷键说明

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