1 /*!
2  * \copyright Copyright (c) 2018-2021 Governikus GmbH & Co. KG, Germany
3  */
4 
5 #include "MockCardConnectionWorker.h"
6 
7 using namespace governikus;
8 
9 
MockCardConnectionWorker(Reader * pReader)10 MockCardConnectionWorker::MockCardConnectionWorker(Reader* pReader)
11 	: CardConnectionWorker(pReader)
12 	, mReader(pReader)
13 	, mResponseCodes()
14 	, mResponseData()
15 	, mPaceCodes()
16 {
17 }
18 
19 
~MockCardConnectionWorker()20 MockCardConnectionWorker::~MockCardConnectionWorker()
21 {
22 	if (!mReader.isNull())
23 	{
24 		mReader->deleteLater();
25 	}
26 }
27 
28 
addResponse(CardReturnCode pCode,const QByteArray & pData)29 void MockCardConnectionWorker::addResponse(CardReturnCode pCode, const QByteArray& pData)
30 {
31 	mResponseCodes += pCode;
32 	mResponseData += pData;
33 }
34 
35 
addPaceCode(CardReturnCode pCode)36 void MockCardConnectionWorker::addPaceCode(CardReturnCode pCode)
37 {
38 	mPaceCodes += pCode;
39 }
40 
41 
getMockedResponse()42 ResponseApduResult MockCardConnectionWorker::getMockedResponse()
43 {
44 	if (mResponseData.empty())
45 	{
46 		return {CardReturnCode::UNDEFINED};
47 	}
48 
49 	return {mResponseCodes.takeFirst(), ResponseApdu(mResponseData.takeFirst())};
50 }
51 
52 
transmit(const CommandApdu & pCommandApdu)53 ResponseApduResult MockCardConnectionWorker::transmit(const CommandApdu& pCommandApdu)
54 {
55 	Q_UNUSED(pCommandApdu)
56 	return getMockedResponse();
57 }
58 
59 
updateRetryCounter()60 CardReturnCode MockCardConnectionWorker::updateRetryCounter()
61 {
62 	if (!mReader->getReaderInfo().hasCard())
63 	{
64 		return CardReturnCode::CARD_NOT_FOUND;
65 	}
66 	return CardReturnCode::OK;
67 }
68 
69 
establishPaceChannel(PacePasswordId pPasswordId,const QByteArray & pPasswordValue,const QByteArray & pChat,const QByteArray & pCertificateDescription)70 EstablishPaceChannelOutput MockCardConnectionWorker::establishPaceChannel(PacePasswordId pPasswordId,
71 		const QByteArray& pPasswordValue,
72 		const QByteArray& pChat,
73 		const QByteArray& pCertificateDescription)
74 {
75 	Q_UNUSED(pPasswordId)
76 	Q_UNUSED(pPasswordValue)
77 	Q_UNUSED(pChat)
78 	Q_UNUSED(pCertificateDescription)
79 	return EstablishPaceChannelOutput(mPaceCodes.empty() ? CardReturnCode::UNDEFINED : mPaceCodes.takeFirst());
80 }
81 
82 
destroyPaceChannel()83 CardReturnCode MockCardConnectionWorker::destroyPaceChannel()
84 {
85 	return mPaceCodes.empty() ? CardReturnCode::UNDEFINED : mPaceCodes.takeFirst();
86 }
87 
88 
setEidPin(const QByteArray & pNewPin,quint8 pTimeoutSeconds)89 ResponseApduResult MockCardConnectionWorker::setEidPin(const QByteArray& pNewPin, quint8 pTimeoutSeconds)
90 {
91 	Q_UNUSED(pNewPin)
92 	Q_UNUSED(pTimeoutSeconds)
93 	return getMockedResponse();
94 }
95