...
Code Block |
---|
tPaymentContext payment; tOutComeParameter outcome; tTransactionalContext txnContext; tInterface interface; tBoolean clipping=bFALSE, sred=bFALSE; // Optional. Depends on the platform char version[100]=""; // // At EACH SYSTEM START-UP, system initialization // // BEGIN ------------------------ // gpiInitialize((const char*)"transactionLogName"); // Optional. Depends on the platform gpiInitializeHSM((const char*)"certificateFilesName",(const char*)"certificatesRevocationListFileName",(const char*)"exceptionFileName"); // Optional. Depends on the platform // // END ------------------------ // // At EACH NEW TRANSACTION triggering, transaction initialization // // BEGIN ------------------------ // // Reset payment context pmwInitializePaymentContext(&payment); // // Prepare payment context // Set tPaymentContext data members like // 9F02, 9F03, 9C, 9A, 9F21, 5F2A, 5F36, 9F7C (see paymentMW.h, tPaymentContext structure/Information provide by Level3 section) // If PayPass, set an instance of tDataExchangeList // // Initialize Agnos kernel afsInitialize(&interface,NULL); // // END ------------------------ // // At EACH ENTRY POINT CALL triggerring, start initialization (i.e. always) // // BEGIN ------------------------ // // Reset outcome context pmwInitializeOutComeParameter(&outcome); // IF no preprocessing performed earlier THEN // Open session afsWhatIsYourVersion(version); agnOpenSessionCL((char*)"smartcardReaderName",(char*)"pinPadName",version,&txnContext,setEMVTag,&payment->mSession,clipping,sred); // ELSE payment->mSession = i; // IMPORTANT: where i corresponds to the selected CL combination that is used to perform the transaction // END IF // Depending of the kernel, some proprietary tags need to be converted // Prepare session data agnSetAgnosDataBaseStrategy(payment->mSession,STRATEGY); // STRATEGY value depends on Agnos kernel xxxSetUpdateCondition(); // xxx prefix varies on Agnos kernel adbSetAddTagContactlessCallback(&_xxxAddTag); // xxx prefix varies on Agnos kernel agnSetAgnosDatabase(payment->mSession,TLV,TLVLengh); // TLV contains selected CL combination // Miscellaneous settings memcpy(payment->mRID,AID,5); // AID is provided by the entry point agnSetAID(session,AID,AID_LENGTH); // AID and AID_LENGTH are provided by the entry point agnSetExitState(payment->mSession,NO_SELECT_FINAL); // Optional. Depends on entry point implementation (i.e if the entry point performs the Final Select) // If 9F37 is provided by entry point then call agnOverwriteEMVTag with 9F37 value // If NO_SELECT_FINAL then set 9F02 and 9F03 using agnSetEMVTag // Card processing afsPerformTransaction(&payment,&outcome); // Process card processing results like // Tag reading // Outcome conversion // payment->mDataExchange conversion // etc... // Close Agnos session pmwCloseEMVSession(payment->mSession); // // END ------------------------ // // At EACH SYSTEM SHUT DOWN, system release // // BEGIN ------------------------ // gpiRelease(); // Optional. Depends on the platform // // END ------------------------ |
Tags
See Configuration Model page to match potential specific framework's tags to Agnos Tags.
...
For that kind of integration, Agnos' data model is not used. It's the framework's responsibility to guaranty that pre-processing, card discovery, combination selection and kernel activation will see to the appropriate tags set provided to the Agnos CL kernel
GPI porting is light. Focus on GPI/CAD and GPI/HSM to start. Refer to this wiki to get a good overview of the layer of the architecture
If ODA, EFL, and CRL are supported then refer to Deployment model to learn keys related file formats
For any Agnos CL kernel to be integrated onto a framework, it is important to comment the call to agnResetSessionContext performed in xxxPrepareSessionData (xxx is a prefix depending on the kernel)
Don't forget to implement GPI/Platform/sharedram.c allowing kernels to access to RAM