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

📄 iso8583.h

📁 通过配置化实现的8583打包以及解包函数
💻 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 + -