/*! * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany */ #include "MockRemoteDispatcher.h" #include "messages/IfdConnect.h" #include "messages/IfdConnectResponse.h" #include "messages/IfdDisconnect.h" #include "messages/IfdDisconnectResponse.h" #include "messages/IfdStatus.h" #include "messages/IfdTransmit.h" #include "messages/IfdTransmitResponse.h" #include #include using namespace governikus; MockRemoteDispatcher::MockRemoteDispatcher(DispatcherState pState) : RemoteDispatcherClient(IfdVersion::Version::v_test, QSharedPointer()) , mState(pState) , mId(QUuid::createUuid().toString()) , mContextHandle(QStringLiteral("#TestContext")) { } QString MockRemoteDispatcher::getId() const { return mId; } const QString& MockRemoteDispatcher::getContextHandle() const { return mContextHandle; } void MockRemoteDispatcher::send(const QSharedPointer& pMessage) { QVERIFY(pMessage); Q_EMIT fireSend(pMessage); if (pMessage->getType() == RemoteCardMessageType::IFDEstablishContext) { if (mState == DispatcherState::WithoutReader) { return; } bool withCard = (mState == DispatcherState::ReaderWithCard || mState == DispatcherState::ReaderWithCardError); const QSharedPointer message(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(false), 500, true, withCard)); Q_EMIT fireReceived(message->getType(), QJsonDocument::fromJson(message->toByteArray(mContextHandle)).object(), mId); return; } const ECardApiResult::Minor resultMinor = (mState == DispatcherState::ReaderWithCardError ? ECardApiResult::Minor::AL_Unknown_Error : ECardApiResult::Minor::null); if (pMessage->getType() == RemoteCardMessageType::IFDConnect) { const QSharedPointer request = pMessage.dynamicCast(); const QString readerName = request->getSlotName(); const QSharedPointer message(new IfdConnectResponse(readerName, resultMinor)); Q_EMIT fireReceived(message->getType(), QJsonDocument::fromJson(message->toByteArray(mContextHandle)).object(), mId); } if (pMessage->getType() == RemoteCardMessageType::IFDTransmit) { const QSharedPointer request = pMessage.dynamicCast(); const QString readerName = request->getSlotHandle(); const QSharedPointer message(new IfdTransmitResponse(readerName, resultMinor == ECardApiResult::Minor::null ? QByteArray("pong") : QByteArray(), resultMinor)); Q_EMIT fireReceived(message->getType(), QJsonDocument::fromJson(message->toByteArray(mContextHandle)).object(), mId); } if (pMessage->getType() == RemoteCardMessageType::IFDDisconnect) { const QSharedPointer request = pMessage.dynamicCast(); const QString readerName = request->getSlotHandle(); const QSharedPointer message(new IfdDisconnectResponse(readerName, resultMinor)); Q_EMIT fireReceived(message->getType(), QJsonDocument::fromJson(message->toByteArray(mContextHandle)).object(), mId); } } MockRemoteDispatcher::DispatcherState MockRemoteDispatcher::getState() const { return mState; } void MockRemoteDispatcher::setState(DispatcherState pState) { mState = pState; } void MockRemoteDispatcher::onClosed() { Q_EMIT fireClosed(GlobalStatus::Code::No_Error, mId); } void MockRemoteDispatcher::onReceived(const QSharedPointer& pMessage) { Q_EMIT fireReceived(pMessage->getType(), QJsonDocument::fromJson(pMessage->toByteArray(mContextHandle)).object(), mId); }