14#include "keyple/core/service/InternalLegacyDto.hpp"
21#include "keyple/core/service/InternalCardSelector.hpp"
27InternalLegacyDto::InternalLegacyDto()
31const std::vector<std::shared_ptr<LegacyCardSelectionRequestV0>>
32InternalLegacyDto::mapToLegacyCardSelectionRequestsV0(
33 const std::vector<std::shared_ptr<CardSelector>>& cardSelectors,
34 const std::vector<std::shared_ptr<CardSelectionRequestSpi>>&
35 cardSelectionRequests)
37 std::vector<std::shared_ptr<LegacyCardSelectionRequestV0>> result;
39 for (
int i = 0; i < cardSelectors.size(); i++) {
40 result.push_back(mapToLegacyCardSelectionRequestV0(
41 cardSelectors[i], cardSelectionRequests[i]));
47const std::vector<std::shared_ptr<LegacyCardSelectionRequestV1>>
48InternalLegacyDto::mapToLegacyCardSelectionRequestsV1(
49 const std::vector<std::shared_ptr<CardSelector>>& cardSelectors,
50 const std::vector<std::shared_ptr<CardSelectionRequestSpi>>&
51 cardSelectionRequests)
53 std::vector<std::shared_ptr<LegacyCardSelectionRequestV1>> result;
55 for (
int i = 0; i < cardSelectors.size(); i++) {
56 result.push_back(mapToLegacyCardSelectionRequestV1(
57 cardSelectors[i], cardSelectionRequests[i]));
63std::shared_ptr<LegacyCardSelectionRequestV0>
64InternalLegacyDto::mapToLegacyCardSelectionRequestV0(
65 std::shared_ptr<CardSelector> cardSelector,
66 std::shared_ptr<CardSelectionRequestSpi> cardSelectionRequestSpi)
68 auto result = std::make_shared<LegacyCardSelectionRequestV0>();
70 result->mCardRequest = cardSelectionRequestSpi->getCardRequest() !=
nullptr
71 ? mapToLegacyCardRequestV0(
72 cardSelectionRequestSpi->getCardRequest())
76 = mapToLegacyCardSelector(cardSelector, cardSelectionRequestSpi);
81std::shared_ptr<LegacyCardSelectionRequestV1>
82InternalLegacyDto::mapToLegacyCardSelectionRequestV1(
83 std::shared_ptr<CardSelector> cardSelector,
84 std::shared_ptr<CardSelectionRequestSpi> cardSelectionRequestSpi)
86 auto result = std::make_shared<LegacyCardSelectionRequestV1>();
88 result->mCardRequest = cardSelectionRequestSpi->getCardRequest() !=
nullptr
89 ? mapToLegacyCardRequestV1(
90 cardSelectionRequestSpi->getCardRequest())
94 = mapToLegacyCardSelector(cardSelector, cardSelectionRequestSpi);
99std::shared_ptr<LegacyCardSelector>
100InternalLegacyDto::mapToLegacyCardSelector(
101 std::shared_ptr<CardSelector> cardSelector,
102 std::shared_ptr<CardSelectionRequestSpi> cardSelectionRequestSpi)
104 auto result = std::make_shared<LegacyCardSelector>();
105 auto basicCardSelector
106 = std::dynamic_pointer_cast<InternalCardSelector>(cardSelector);
108 result->mCardProtocol = basicCardSelector->getLogicalProtocolName();
109 result->mPowerOnDataRegex = basicCardSelector->getPowerOnDataRegex();
111 const auto isoCardSelector
112 = std::dynamic_pointer_cast<InternalIsoCardSelector>(cardSelector);
113 if (isoCardSelector) {
114 result->mAid = isoCardSelector->getAid();
115 result->mFileOccurrence = isoCardSelector->getFileOccurrence();
116 result->mFileControlInformation
117 = isoCardSelector->getFileControlInformation();
119 result->mAid = std::vector<uint8_t>(0);
120 result->mFileOccurrence = CommonIsoCardSelector::FileOccurrence::FIRST;
121 result->mFileControlInformation
122 = CommonIsoCardSelector::FileControlInformation::FCI;
124 result->mSuccessfulSelectionStatusWords
125 = cardSelectionRequestSpi->getSuccessfulSelectionStatusWords();
130std::shared_ptr<LegacyCardRequest>
131InternalLegacyDto::mapToLegacyCardRequestV0(
132 const std::shared_ptr<CardRequestSpi> cardRequest)
134 auto result = std::make_shared<LegacyCardRequestV0>();
136 result->mApduRequests
137 = mapToLegacyApduRequests(cardRequest->getApduRequests());
138 result->mIsStatusCodesVerificationEnabled
139 = cardRequest->stopOnUnsuccessfulStatusWord();
144std::shared_ptr<LegacyCardRequest>
145InternalLegacyDto::mapToLegacyCardRequestV1(
146 const std::shared_ptr<CardRequestSpi> cardRequest)
148 auto result = std::make_shared<LegacyCardRequestV1>();
150 result->mApduRequests
151 = mapToLegacyApduRequests(cardRequest->getApduRequests());
152 result->mStopOnUnsuccessfulStatusWord
153 = cardRequest->stopOnUnsuccessfulStatusWord();
158const std::vector<std::shared_ptr<LegacyApduRequest>>
159InternalLegacyDto::mapToLegacyApduRequests(
160 const std::vector<std::shared_ptr<ApduRequestSpi>>& apduRequests)
162 std::vector<std::shared_ptr<LegacyApduRequest>> result;
164 for (
const auto& apduRequestSpi : apduRequests) {
165 result.push_back(mapToLegacyApduRequest(apduRequestSpi));
171std::shared_ptr<LegacyApduRequest>
172InternalLegacyDto::mapToLegacyApduRequest(
173 const std::shared_ptr<ApduRequestSpi> apduRequestSpi)
175 auto result = std::make_shared<LegacyApduRequest>();
177 result->mApdu = apduRequestSpi->getApdu();
178 result->mInfo = apduRequestSpi->getInfo();
179 result->mSuccessfulStatusWords = apduRequestSpi->getSuccessfulStatusWords();
185operator<<(std::ostream& os,
const InternalLegacyDto::LegacyCardSelector& lcs)
187 std::stringstream ssAid;
188 for (
const auto val : lcs.mAid) {
189 ssAid << std::uppercase << std::hex << std::setfill(
'0') << std::setw(2)
190 <<
static_cast<int>(val);
193 std::stringstream ssSw;
194 for (
auto it = std::begin(lcs.mSuccessfulSelectionStatusWords);
195 it != std::end(lcs.mSuccessfulSelectionStatusWords);
197 ssSw << std::uppercase << std::hex << std::setfill(
'0') << std::setw(4)
198 <<
static_cast<int>(*it);
199 if (it != lcs.mSuccessfulSelectionStatusWords.end() - 1) {
204 os <<
"LEGACY_CARD_SELECTOR: {"
205 <<
"CARD_PROTOCOL: " << lcs.mCardProtocol <<
", "
206 <<
"POWER_ON_DATA_REGEX: " << lcs.mPowerOnDataRegex <<
", "
207 <<
"AID: " << ssAid.str() <<
", "
208 <<
"FILE_OCCURRENCE: " << lcs.mFileOccurrence <<
", "
209 <<
"FILE_CONTROL_INFORMATION: " << lcs.mFileControlInformation <<
", "
210 <<
"SUCCESSFUL_SELECTION_STATUS_WORDS: " << ssSw.str() <<
"}";
218 const std::shared_ptr<InternalLegacyDto::LegacyCardSelector> lcs)
220 if (lcs ==
nullptr) {
221 os <<
"LEGACY_CARD_SELECTOR: null";
230operator<<(std::ostream& os,
const InternalLegacyDto::LegacyApduRequest& lar)
232 std::stringstream ssApdu;
233 for (
const auto val : lar.mApdu) {
234 ssApdu << std::uppercase << std::hex << std::setfill(
'0')
235 << std::setw(2) <<
static_cast<int>(val);
238 std::stringstream ssSw;
239 for (
auto it = std::begin(lar.mSuccessfulStatusWords);
240 it != std::end(lar.mSuccessfulStatusWords);
242 ssSw << std::uppercase << std::hex << std::setfill(
'0') << std::setw(4)
243 <<
static_cast<int>(*it);
244 if (it != lar.mSuccessfulStatusWords.end() - 1) {
249 os <<
"LEGACY_APDU_REQUEST: {"
250 <<
"APDU: " << ssApdu.str() <<
", "
251 <<
"SUCCESSFUL_STATUS_WORD: " << ssSw.str() <<
", "
252 <<
"INFO: " << lar.mInfo <<
"}";
260 const std::shared_ptr<InternalLegacyDto::LegacyApduRequest> lar)
262 if (lar ==
nullptr) {
263 os <<
"LEGACY_APDU_REQUEST: null";
272operator<<(std::ostream& os,
const InternalLegacyDto::LegacyCardRequestV0& lcr)
274 os <<
"LEGACY_CARD_REQUEST_V0: {"
275 <<
"APDU_REQUESTS: {";
277 for (
auto it = std::begin(lcr.mApduRequests);
278 it != std::end(lcr.mApduRequests);
281 if (it != lcr.mApduRequests.end() - 1) {
287 <<
"IS_STATUS_CODES_VERIFICATION_ENABLED: "
288 << lcr.mIsStatusCodesVerificationEnabled <<
"}";
296 const std::shared_ptr<InternalLegacyDto::LegacyCardRequestV0> lcr)
298 if (lcr ==
nullptr) {
299 os <<
"LEGACY_CARD_REQUEST_V0: null";
308operator<<(std::ostream& os,
const InternalLegacyDto::LegacyCardRequestV1& lcr)
310 os <<
"LEGACY_CARD_REQUEST_V1: {"
311 <<
"APDU_REQUESTS: {";
313 for (
auto it = std::begin(lcr.mApduRequests);
314 it != std::end(lcr.mApduRequests);
317 if (it != lcr.mApduRequests.end() - 1) {
323 <<
"STOP_ON_UNSUCCESSFUL_STATUS_WORD: "
324 << lcr.mStopOnUnsuccessfulStatusWord <<
"}";
332 const std::shared_ptr<InternalLegacyDto::LegacyCardRequestV1> lcr)
334 if (lcr ==
nullptr) {
335 os <<
"LEGACY_CARD_REQUEST_V1: null";
346 const InternalLegacyDto::LegacyCardSelectionRequestV0& lcsr)
348 os <<
"LEGACY_CARD_SELECTION_REQUEST_V0: {"
349 <<
"CARD_SELECTOR: ";
351 if (lcsr.mCardSelector ==
nullptr) {
354 os << *lcsr.mCardSelector;
360 if (lcsr.mCardRequest ==
nullptr) {
363 os << *lcsr.mCardRequest;
374 const std::shared_ptr<InternalLegacyDto::LegacyCardSelectionRequestV0> lcsr)
376 if (lcsr ==
nullptr) {
377 os <<
"LEGACY_CARD_SELECTION_REQUEST_V0: null";
388 const InternalLegacyDto::LegacyCardSelectionRequestV1& lcsr)
390 os <<
"LEGACY_CARD_SELECTION_REQUEST_V1: {"
391 <<
"CARD_SELECTOR: ";
393 if (lcsr.mCardSelector ==
nullptr) {
396 os << *lcsr.mCardSelector;
402 if (lcsr.mCardRequest ==
nullptr) {
405 os << *lcsr.mCardRequest;
416 const std::shared_ptr<InternalLegacyDto::LegacyCardSelectionRequestV1> lcsr)
418 if (lcsr ==
nullptr) {
419 os <<
"LEGACY_CARD_SELECTION_REQUEST_V1: null";
std::ostream & operator<<(std::ostream &os, const ApduResponseAdapter &ara)