14#include "keyple/core/service/InternalDto.hpp"
23#include "keyple/core/util/cpp/exception/UnsupportedOperationException.hpp"
29using keyple::core::util::cpp::exception::UnsupportedOperationException;
34InternalDto::CardSelectionAdapter::CardSelectionAdapter(
35 const std::shared_ptr<CardSelectionExtensionSpi> src)
36: mCardSelectionRequest(
37 std::unique_ptr<CardSelectionRequest>(
38 new CardSelectionRequest(src->getCardSelectionRequest())))
42std::unique_ptr<CardSelectionRequestSpi>
43InternalDto::CardSelectionAdapter::getCardSelectionRequest()
45 return std::move(mCardSelectionRequest);
48std::shared_ptr<SmartCardSpi>
49InternalDto::CardSelectionAdapter::parse(
50 const std::shared_ptr<
51 CardSelectionResponseApi>& )
53 throw UnsupportedOperationException(
54 "Method not supported for internal DTO");
58operator<<(std::ostream& os,
const InternalDto::CardSelectionAdapter& csa)
60 os <<
"CARD_SELECTION_ADAPTER: {"
61 <<
"CARD_SELECTION_REQUEST: ";
63 if (csa.mCardSelectionRequest ==
nullptr) {
66 os << *csa.mCardSelectionRequest;
77 const std::shared_ptr<InternalDto::CardSelectionAdapter> csa)
80 os <<
"CARD_SELECTION_ADAPTER: null";
91InternalDto::CardSelectionRequest::CardSelectionRequest(
92 const std::shared_ptr<CardSelectionRequestSpi> src)
94 if (src->getCardRequest() !=
nullptr) {
95 mCardRequest = std::make_shared<CardRequest>(src->getCardRequest());
98 mSuccessfulSelectionStatusWords = src->getSuccessfulSelectionStatusWords();
101const std::vector<int>&
102InternalDto::CardSelectionRequest::getSuccessfulSelectionStatusWords()
const
104 return mSuccessfulSelectionStatusWords;
107const std::shared_ptr<CardRequestSpi>
108InternalDto::CardSelectionRequest::getCardRequest()
const
114operator<<(std::ostream& os,
const InternalDto::CardSelectionRequest& csr)
116 std::stringstream ssSw;
117 for (
auto it = std::begin(csr.mSuccessfulSelectionStatusWords);
118 it != std::end(csr.mSuccessfulSelectionStatusWords);
120 ssSw << std::uppercase << std::hex << std::setfill(
'0') << std::setw(4)
121 <<
static_cast<int>(*it);
122 if (it != csr.mSuccessfulSelectionStatusWords.end() - 1) {
127 os <<
"CARD_SELECTION_REQUEST: {"
130 if (csr.mCardRequest ==
nullptr) {
133 os << *csr.mCardRequest;
137 <<
"SUCCESSFUL_SELECTION_STATUS_WORDS: " << ssSw.str() <<
"}";
145 const std::shared_ptr<InternalDto::CardSelectionRequest> csr)
147 if (csr ==
nullptr) {
148 os <<
"CARD_SELECTION_REQUEST: null";
159InternalDto::CardRequest::CardRequest(
const std::shared_ptr<CardRequestSpi> src)
161 for (
const auto& apduRequestSpi : src->getApduRequests()) {
162 mApduRequests.push_back(std::make_shared<ApduRequest>(apduRequestSpi));
165 mStopOnUnsuccessfulStatusWord = src->stopOnUnsuccessfulStatusWord();
168const std::vector<std::shared_ptr<ApduRequestSpi>>&
169InternalDto::CardRequest::getApduRequests()
const
171 return mApduRequests;
175InternalDto::CardRequest::stopOnUnsuccessfulStatusWord()
const
177 return mStopOnUnsuccessfulStatusWord;
181operator<<(std::ostream& os,
const InternalDto::CardRequest& cr)
183 os <<
"CARD_REQUEST: {"
184 <<
"APDU_REQUESTS: " << cr.mApduRequests <<
", "
185 <<
"STOP_ON_UNSUCCESSFUL_STATUS_WORD: "
186 << cr.mStopOnUnsuccessfulStatusWord <<
"}";
192operator<<(std::ostream& os,
const std::shared_ptr<InternalDto::CardRequest> cr)
195 os <<
"CARD_REQUEST: null";
206InternalDto::ApduRequest::ApduRequest(
const std::shared_ptr<ApduRequestSpi> src)
207: mApdu(src->getApdu())
208, mSuccessfulStatusWords(src->getSuccessfulStatusWords())
209, mInfo(src->getInfo())
213const std::vector<uint8_t>&
214InternalDto::ApduRequest::getApdu()
const
220InternalDto::ApduRequest::setApdu(
const std::vector<uint8_t>& apdu)
225const std::vector<int>&
226InternalDto::ApduRequest::getSuccessfulStatusWords()
const
228 return mSuccessfulStatusWords;
232InternalDto::ApduRequest::getInfo()
const
238operator<<(std::ostream& os,
const InternalDto::ApduRequest& ar)
240 std::stringstream ssApdu;
241 for (
const auto val : ar.mApdu) {
242 ssApdu << std::uppercase << std::hex << std::setfill(
'0')
243 << std::setw(2) <<
static_cast<int>(val);
246 std::stringstream ssSw;
247 for (
auto it = std::begin(ar.mSuccessfulStatusWords);
248 it != std::end(ar.mSuccessfulStatusWords);
250 ssSw << std::uppercase << std::hex << std::setfill(
'0') << std::setw(4)
251 <<
static_cast<int>(*it);
252 if (it != ar.mSuccessfulStatusWords.end() - 1) {
257 os <<
"APDU_REQUEST: {"
258 <<
"APDU: " << ssApdu.str() <<
", "
259 <<
"SUCCESSFUL_STATUS_WORD: " << ssSw.str() <<
", "
260 <<
"INFO: " << ar.mInfo <<
"}";
266operator<<(std::ostream& os,
const std::shared_ptr<InternalDto::ApduRequest> ar)
269 os <<
"APDU_REQUEST: null";
std::ostream & operator<<(std::ostream &os, const std::shared_ptr< InternalDto::ApduRequest > ar)