📄 iso8583.h
字号:
/*****************************************************************************/
/* ISO-8583 Packet / Unpacket Function Library - Header File */
/* ------------------------------------------------------------------------- */
/* Author: Frank Ho <frank_ho@263.net>, March 20, 2002 */
/* ------------------------------------------------------------------------- */
/* Usage: */
/* 1. Patch ISO8583 library for implementation specified field type. */
/* ISO8583Patch( fldtype1, packer1, unpacker1, macpacker1 ); */
/* ... */
/* 2. Config ISO8583 for implementation. */
/* ISO8583Config( cfgfile ); */
/* 3. Pack ISO8583 package */
/* ISO8583Init(); */
/* ISO8583FldDef( n, DT_*, &data_n, size_n ); */
/* ... */
/* ISO8583MAC( macbuf, sizeof( macbuf ), key, mac, n, ..., 0 ); */
/* len = ISO8583Pack( mti, mac, outbuf, sizeof( outbuf ) ); */
/* 4. Unpack ISO8583 package */
/* ISO8583Init(); */
/* ISO8583FldDef( n, DT_*, &data_n, size_n ); */
/* ... */
/* cnt = ISO8583Unpack( mti, mac, inbuf, datasize ); */
/* ISO8583MAC( macbuf, sizeof( macbuf ), key, newmac, n, ..., 0 ); */
/* if ( memcpy( mac, newmac, MACFLDSZ ) != 0 ) */
/* MACERROR; */
/* if ( ISO8583FldChk( n ) > 0 ) */
/* data_n = ... */
/*****************************************************************************/
#ifndef ISO8583_H
#define ISO8583_H
/*===========================================================================*/
/* Data Size Definition */
/*---------------------------------------------------------------------------*/
#define MTISIZE 4 // size of MTI
#define MACKEYSZ 8 // size of MAC key
#define MACFLDSZ 8 // size of MAC value
/*===========================================================================*/
/* Data Type Definition */
/*---------------------------------------------------------------------------*/
#define DT_NONE ' '
#define DT_CHAR 'C' // characters or binary ( not NULL terminated )
#define DT_STRING 'c' // character string ( NULL terminated )
#define DT_BYTE 'B' // signed 1-byte integer
#define DT_UBYTE 'b' // unsigned 1-byte integer
#define DT_SHORT 'S' // signed 2-bytes integer
#define DT_USHORT 's' // unsigned 2-bytes integer
#define DT_LONG 'L' // signed 4-bytes integer
#define DT_ULONG 'l' // unsigned 4-bytes integer
#define DT_FLOAT 'F' // float
#define DT_DOUBLE 'f' // double
/*===========================================================================*/
/* Field Format Definition */
/*---------------------------------------------------------------------------*/
#define FF_NONE '0' // RESERVED field
#define FF_FIX '1' // fixed-size field
#define FF_LL '2' // LLVAR field
#define FF_LLL '3' // LLLVAR field
/*===========================================================================*/
/* Internal Field Type Definition */
/*---------------------------------------------------------------------------*/
#define FT_NONE ' ' // RESERVED
#define FT_BIN 'B' // binary
#define FT_ANS 'A' // alpha-numeric
#define FT_NUM 'N' // numeric
#define FT_WKM 'L' // add by lvyuan
#define FT_TEL 'T' // add by lvyuan
#define FT_AMT 'X' // credit/debit amount
/*===========================================================================*/
/* Standard Data Pack/Unpack/MACpck Rules */
/*---------------------------------------------------------------------------*/
// Format Type DataSource DataInPackage DataForMAC
// ------ ---- ---------- ------------- -------------
// FIX BIN 0123456789 0123456789 0123456789
// FIX ANS 0123456789 0123456789 0123456789
// FIX NUM 0123456789 0123456789 0123456789
// FIX AMT C123456789 C123456789 C123456789
// LL BIN 0123456789 100123456789 100123456789
// LL ANS 0123456789 100123456789 100123456789
// LL NUM 0123456789 100123456789 100123456789
// LL AMT C123456789 10C123456789 10C123456789
// LLL BIN 0123456789 0100123456789 0100123456789
// LLL ANS 0123456789 0100123456789 0100123456789
// LLL NUM 0123456789 0100123456789 0100123456789
// LLL AMT C123456789 010C123456789 010C123456789
/*===========================================================================*/
/* Callback Function Type Definition */
/*---------------------------------------------------------------------------*/
// Input: 1. field format
// 2. field type
// 3. field length
// 4. data to pack/unpack
// 5. size of data
// 6. buffer to receive packed/unpacked data
// 7. buffer size
// Output: 5. packed/unpacked data size
// 7. buffered data size
// Return: 0 - success
typedef int ( *ISO8583Callback )(
unsigned char FldFmt,
unsigned char FldType,
unsigned int FldLen,
const char *Data,
unsigned int *DatSize,
char *Buffer,
unsigned int *BufSize
);
/*===========================================================================*/
/* Return Codes Definition */
/*---------------------------------------------------------------------------*/
#define ISO8583RC_OK 0 // Success
#define ISO8583RC_CFG -1 // Not configured
#define ISO8583RC_INIT -2 // Not initialized
#define ISO8583RC_ARG -3 // Invalid arguments
#define ISO8583RC_SIZE -4 // Incorrect buffer size
/*===========================================================================*/
/* Functions */
/*---------------------------------------------------------------------------*/
// ISO8583Patch:
// Input: FieldType can't be FT_NONE.
// Return: ISO8583RC_OK or ISO8583RC_ARG or ISO8583RC_SIZE.
extern int ISO8583Patch( unsigned char FieldType,
ISO8583Callback Packer, ISO8583Callback Unpacker,
ISO8583Callback MACPacker );
// ISO8583Config:
// Input: Null ConfigFile for standard ISO8583.
// Return: ISO8583RC_OK or ISO8583RC_ARG.
extern int ISO8583Config( const char *ConfigFile );
// ISO8583Init:
extern void ISO8583Init();
// ISO8583FldDef:
// Input: FieldNum is 2-63, 66-127, DataType uses DT_* constants.
// Return: ISO8583RC_OK or ISO8583RC_ARG or ISO8583RC_INIT.
extern int ISO8583FldDef( unsigned char FieldNum, unsigned char DataType,
void *DataPtr, unsigned short DataSize );
// ISO8583FldChk:
// Input: FieldNum is 2-63, 66-127.
// Return: Field data size or ISO8583RC_ARG or ISO8583RC_INIT.
extern int ISO8583FldChk( unsigned char FieldNum );
// ISO8583MAC:
// Input: FieldNums are 2-63, 66-127, ended by 0.
// Output: MAC value in MAC.
// Return: ISO8583RC_OK or ISO8583RC_ARG or ISO8583RC_SIZE
// or ISO8583RC_INIT or ISO8583RC_CFG.
extern int ISO8583MAC( char *WorkBuffer, unsigned int BufSize,
const char Key[MACKEYSZ], char MAC[MACFLDSZ],
unsigned char FieldNum, ... );
// ISO8583Pack:
// Input: Null MAC for no MAC field.
// Output: Package in OutBuffer.
// Return: Size of OutBuffer or ISO8583RC_SIZE or ISO8583RC_ARG
// or ISO8583RC_INIT or ISO8583RC_CFG.
extern int ISO8583Pack( const char MTI[MTISIZE], const char MAC[MACFLDSZ],
char *OutBuffer, unsigned int BufSize );
// ISO8583Unpack:
// Input: Package in InBuffer, unlimited size.
// Output: MTI and MAC.
// Return: Count of unpacked data fields or ISO8583RC_SIZE
// or ISO8583RC_INIT or ISO8583RC_CFG.
extern int ISO8583Unpack( char MTI[MTISIZE], char MAC[MACFLDSZ],
const char *InBuffer, unsigned int BufSize );
#endif /* ndef ISO8583_H */
/*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -