EMV Engine |
---|
See agnos..h |
#include
| Code Block |
---|
| #include "agnoserrors.h"
//---- Agnos Framework Headers ----
#include "agnosdatabase.h"
//---- Global Headers ----
#include "gpi_agnos_framework_globals.h" |
| -- |
tTransactionalContext
| Code Block |
---|
| typedef struct {
/** If bTRUE, TAC/IAC default processing is skipped if unable to go online*/
tBoolean mSkipTACIACDefault;
/** If bTRUE, TAC processing is performed*/
tBoolean mTAC;
/** If bTRUE, Floor Limit Checking is performed*/
tBoolean mFloorLimitChecking;
/** If bTRUE, RTS is performed*/
tBoolean mRandomTransactionSelection;
/** If bTRUE, Velocity Checking is performed*/
tBoolean mVelocityChecking;
/** If bTRUE, Default TDOL is supported*/
tBoolean mDefaultTDOL;
/** TDOL length*/
tByte mDefaultTDOLLen;
/**Tag 0x97*/
tByte mDefaultTDOLValue[TDOL_MAX_LENGTH];
/** If bTRUE, Default DDOL is supported*/
tBoolean mDefaultDDOL;
/** DDOL length*/
tByte mDefaultDDOLLen;
/**Tag 0x9F49 or 0x9F69 (UDOL for contactless)*/
tByte mDefaultDDOLValue[DDOL_MAX_LENGTH];
/**Terminal Action Code - Denial*/
tTVR mTACDenial;
/**Terminal Action Code - Online*/
tTVR mTACOnline;
/**Terminal Action Code - Default*/
tTVR mTACDefault;
/**Tag 0x9F1B*/
tAmount mTerminalFloorLimit;
/**See EMV Book III, TRM section - Random Transaction Selection*/
tPercentage mTargetPercentage;
/**See EMV Book III, TRM section - Random Transaction Selection. Same transaction currency exponent as 0x9F02*/
tAmount mThresholdValue;
/**See EMV Book III, TRM section - Random Transaction Selection*/
tPercentage mMaxTargetPercentage;
/**if bTRUE, pin may be bypassed when requested*/
tBoolean mPINByPass;
/**bTRUE when merchant manually requested transaction to go online*/
tBoolean mForcedOnline;
/**Tag 0x9A*/
tNumericDate mTransactionDate[3];
/**Tag 0x9F21*/
tNumericDate mTransactionTime[3];
/**Tag 0x9F35*/
tTerminalType mTerminalType;
/** Transaction language*/
tByte mLanguage;
/** PIN entry delay in second*/
tCounter mPinTimeOut;
/** CDAMode1, CDAMode2 and CDAMode3 only*/
tCDAType mCDAType;
/**if bTRUE, Terminal Risk Management is performed even if ICC doesn't request it*/
tBoolean mForceTRM;
/**Tag 0x5F57*/
tByte mAccountType;
/**Tag 0x9F39*/
tByte mPOSEntryMode;
/**Tag 0x9F41*/
tCounter mTransactionSequenceCounter;
/**Tag 0x9F1D*/
tByte mTerminalRiskManagementData[8];
/**Tag 0x9F3A*/
tAmount mAmountReferenceCurrency;
/**Tag 0x9F3C*/
tByte mTransactionReferenceCurrencyCode[2];
/**Tag 0x9F3D*/
tByte mTransactionReferenceCurrencyExponent;
/**Tag 0x9F1A*/
tByte mTerminalCountryCode[2];
/**Tag 0x5F2A*/
tByte mTransactionCurrencyCode[2];
/**Tag 0x5F36*/
tByte mTransactionCurrencyExponent;
/**Tag 0x9F33*/
tByte mTerminalCapabilities[3];
/**Tag 0x9F40*/
tByte mAdditionalTerminalCapabilities[5];
/**Tag 0x9F09*/
tByte mApplicationVersionNumber[2];
/**Tag 0x9C*/
tByte mTxnType;
/**Tag 0x9F1C*/
tByte mTerminalIdentification[8];
/**Tag 0x9F1E*/
tByte mIFDSerialNumber[8];
/**Tag 0x9F01*/
tByte mAcquirerIdentifier[6];
} tTransactionalContext; |
| |
agnGetVersionNumber
| Code Block |
---|
| DLLEXPORT tString agnGetVersionNumber(void); |
| Get EMV core engine version. |
agnOpenSession
| Code Block |
---|
| DLLEXPORT tAgnosError agnOpenSession(
const tString smartcardReaderName,
const tString pinPadName,
const tString applicationId,
const tTransactionalContext *txnContext,
tBoolean DirectExecution,
tBoolean setEMVTag,
tSessionId *session,
tBoolean clipping,
tBoolean sred
); |
| Open a CT session to initiate an EMV transaction flow. |
agnInitiateEMVTransaction
| Code Block |
---|
| DLLEXPORT tAgnosError agnInitiateEMVTransaction (
tSessionId session,
const tAmount *amount,
const tAmount *cashBack,
const tByte *AID,
tByte AIDLen,
tByte *CID
); |
| Initiate/Resume an EMV transaction |
agnCompleteEMVTransaction
| Code Block |
---|
| DLLEXPORT tAgnosError agnCompleteEMVTransaction (
tSessionId session,
tARC ARC,
tByte *CID,
const tByte *issuerResponse,
tWord issuerResponseLen,
tBoolean unableToGoOnline
); |
| Complete a transaction as per EMVCo definition |
agnGetDatabase
| Code Block |
---|
| DLLEXPORT tTagDataBase* agnGetDatabase(const tSessionId session); |
| |
agnIsEMVTagKnown
| Code Block |
---|
| DLLEXPORT tBoolean agnIsEMVTagKnown(
tWord tag // In: Tag to search in db storing referenced tags
); |
| Return bTRUE is tag statically known. |
agnIsEMVTagPresent
| Code Block |
---|
| DLLEXPORT tBoolean agnIsEMVTagPresent(
tSessionId session, // In: Kernel's session
tWord tag // In: Tag to search in current session
); |
| Return bTRUE if tag is present whatever its length. |
agnIsEMVTagEmpty
| Code Block |
---|
| DLLEXPORT tBoolean agnIsEMVTagEmpty(
tSessionId session, // In: Kernel's session
tWord tag // In: Tag to assess length
); |
| Return bTRUE if tag’s length is 0. |
agnIsEMVTagNotEmpty
| Code Block |
---|
| DLLEXPORT tBoolean agnIsEMVTagNotEmpty(
tSessionId session, // In: Kernel's session
tWord tag // In: Tag to assess length
); |
| Return bTRUE if tag’s length is not 0. |
agnGetEMVTag
| Code Block |
---|
| DLLEXPORT tAgnosError agnGetEMVTag(
tSessionId session, // In: Kernel's session
tWord tag, // In: See agnostypes.h. Tags values are word values (unsigned short)
tByte *length, // Out: Tag's length
tByte *value // Out: Value shall be allocated by calling application
) |
| Get a specific tag from Agnos database. |
agnSetEMVTag
| Code Block |
---|
| DLLEXPORT tAgnosError agnSetEMVTag(
tSessionId session, // In: Kernel's session
tWord tag, // In: See agnostypes.h. Tags values are word values (unsigned short)
tByte length, // In: Length of tag's value
const tByte *value // In: Tag's length
); |
| Add a tag into Agnos database without checking tag’s update condition. |
agnOverwriteEMVTag
| Code Block |
---|
| DLLEXPORT tAgnosError agnOverwriteEMVTag(
tSessionId session, // In: Kernel's session
tWord tag, // In: See agnostypes.h. Tags values are word values (unsigned short)
tByte length, // In: Length of tag's value
const tByte *value // In: Tag's length
); |
| Overwrite an existing tag. If it doesn’t exist, create it (no garbage collection if sizes don’t match). |
agnRemoveEMVTag
| Code Block |
---|
DLLEXPORT tAgnosError agnRemoveEMVTag(
tSessionId session, // In: Kernel's session
tWord tag // In: See agnostypes.h. Tags values are word values (unsigned short)
); |
| Remove a tag from Agnos database (no garbage collection). |
agnORTVR
| Code Block |
---|
DLLEXPORT tAgnosError agnORTVR(
tSessionId session, // In: Kernel's session
tByte TVRPosition, // In: 0 based position
tByte value // In: Value to OR
); |
| OR a specific TVR’s bit to 1. |
agnORAgnosTVR
| Code Block |
---|
| DLLEXPORT tAgnosError agnORAgnosTVR(
tSessionId session, // In: Kernel's session
tByte AgnosTVRPosition, // In: 0 based position
tByte value // In: Value to OR
) |
| OR a specific Agnos TVR’s bit to 1. |
agnSetAgnosTVR
| Code Block |
---|
| DLLEXPORT tAgnosError agnSetAgnosTVR(
tSessionId session, // In: Kernel's session
tByte AgnosTVRPosition, // In: 0 based position
tByte value // In: Value to Set
); |
| Set a specific Agnos TVR byte value. |
agnOpenSessionCL
| Code Block |
---|
| DLLEXPORT tAgnosError agnOpenSessionCL(
const tString smartcardReaderName, // In: Smartcard device name
const tString pinPadName, // In: Secured PIN entry device name
const tString applicationId, // In: Application Id
const tTransactionalContext *txnContext, // In: Context provided by the payment application
tBoolean setEMVTag, // In: set EMV data in kernel database (from transacitonal context)
tSessionId *session, // Out: Session returned by the kernel to be used when primitives are called
tBoolean clipping, // In: activate software clipping into Agnos
tBoolean sred // In: activate low level clipping
); |
| Open a CL session to initiate an EMV transaction flow |
agnCloseSession
| Code Block |
---|
| DLLEXPORT tAgnosError agnCloseSession (
tSessionId session
); |
| Close a transaction flow. |
agnSetAgnosDatabase | | Add a series of tags. Each tag is statically indexed and ruled by an update condition. Use an appropriate update condition to store tags directly into Agnos database |
agnSetKernelStatus | | Set core engine to a specific state. Use this primitive to skip a state in State Machine mode |
agnGetAllTags | | Get all tags from Agnos databaseagnGetAllTags |