22#include "CommonTransactionManager.h"
38using namespace calypsonet::terminal::calypso::transaction;
39using namespace calypsonet::terminal::reader::selection::spi;
40using namespace keyple::core::util;
51template <
typename T,
typename S,
typename U>
53:
virtual public CommonTransactionManager<T, S> {
57 "A communication error with the SAM reader occurred ";
59 "A communication error with the SAM occurred ";
61 "A SAM command error occurred ";
63 "while transmitting commands.";
75 std::shared_ptr<SmartCard> targetSmartCard,
77 const std::vector<std::vector<uint8_t>>& transactionAuditData)
78 : mTargetSmartCard(targetSmartCard),
79 mSecuritySetting(securitySetting),
80 mTransactionAuditData(transactionAuditData) {}
90 return mTransactionAuditData;
102 const std::vector<std::shared_ptr<AbstractApduCommand>>& commands)
104 std::vector<std::shared_ptr<ApduRequestSpi>> apduRequests;
106 for (
const auto& command : commands) {
107 apduRequests.push_back(command->getApduRequest());
122 const std::shared_ptr<CardResponseApi> cardResponse)
124 if (cardResponse !=
nullptr) {
125 const std::vector<std::shared_ptr<ApduRequestSpi>>& requests =
126 cardRequest->getApduRequests();
127 const std::vector<std::shared_ptr<ApduResponseApi>>& responses =
128 cardResponse->getApduResponses();
130 for (
int i = 0; i < static_cast<int>(responses.size()); i++) {
131 mTransactionAuditData.push_back(requests[i]->getApdu());
132 mTransactionAuditData.push_back(responses[i]->getApdu());
147 const std::shared_ptr<CardRequestSpi> cardRequest,
148 const std::shared_ptr<CardResponseApi> cardResponse,
149 std::vector<std::vector<uint8_t>>& transactionAuditData)
151 if (cardResponse !=
nullptr) {
152 const std::vector<std::shared_ptr<ApduRequestSpi>>& requests =
153 cardRequest->getApduRequests();
154 const std::vector<std::shared_ptr<ApduResponseApi>>& responses =
155 cardResponse->getApduResponses();
157 for (
int i = 0; i < static_cast<int>(responses.size()); i++) {
158 transactionAuditData.push_back(requests[i]->getApdu());
159 transactionAuditData.push_back(responses[i]->getApdu());
172 std::stringstream ss;
174 ss <<
"\nTransaction audit JSON data: {";
175 ss <<
"\"targetSmartCard\":" << mTargetSmartCard <<
",";
177 if (mSecuritySetting !=
nullptr && mSecuritySetting->getControlSam() !=
nullptr) {
178 ss <<
"\"controlSam\":" << mSecuritySetting->getControlSam() <<
",";
181 ss <<
"\"apdus\": {";
182 for(
auto it = mTransactionAuditData.begin(); it != mTransactionAuditData.end(); it++) {
183 ss << HexUtil::toHex(*it);
184 if (it != mTransactionAuditData.end() - 1) {
197 std::shared_ptr<SmartCard> mTargetSmartCard;
202 std::shared_ptr<CommonSecuritySettingAdapter<U>> mSecuritySetting;
207 std::vector<std::vector<uint8_t>> mTransactionAuditData;
const std::string getTransactionAuditDataAsString() const
const std::string MSG_SAM_READER_COMMUNICATION_ERROR
virtual void saveTransactionAuditData(const std::shared_ptr< CardRequestSpi > cardRequest, const std::shared_ptr< CardResponseApi > cardResponse)
const std::string MSG_SAM_COMMAND_ERROR
const std::string MSG_SAM_COMMUNICATION_ERROR
CommonTransactionManagerAdapter(std::shared_ptr< SmartCard > targetSmartCard, const std::shared_ptr< CommonSecuritySettingAdapter< U > > securitySetting, const std::vector< std::vector< uint8_t > > &transactionAuditData)
const std::string MSG_WHILE_TRANSMITTING_COMMANDS
static void saveTransactionAuditData(const std::shared_ptr< CardRequestSpi > cardRequest, const std::shared_ptr< CardResponseApi > cardResponse, std::vector< std::vector< uint8_t > > &transactionAuditData)
const std::vector< std::shared_ptr< ApduRequestSpi > > getApduRequests(const std::vector< std::shared_ptr< AbstractApduCommand > > &commands)
const std::vector< std::vector< uint8_t > > & getTransactionAuditData() const override