void RFIDeasReaderUnit::serialize(boost::property_tree::ptree& parentNode)
    {
        boost::property_tree::ptree node;

        node.put("<xmlattr>.type", getReaderProvider()->getRPType());
        d_readerUnitConfig->serialize(node);

        parentNode.add_child(getDefaultXmlNodeName(), node);
    }
Esempio n. 2
0
 void ReaderUnit::serialize(boost::property_tree::ptree& node)
 {
     node.put("<xmlattr>.type", getReaderProvider()->getRPType());
     d_readerUnitConfig->serialize(node);
     if (getDataTransport())
     {
         node.put("TransportType", getDataTransport()->getTransportType());
         getDataTransport()->serialize(node);
     }
     else
     {
         node.put("TransportType", "");
     }
 }
    void ACSACR1222LReaderUnit::establish_background_connection()
    {
        kill_background_connection();

        LLA_LOG_CTX("Setting up feedback PCSC connection for ACSACR1222L.");
        auto provider =
            std::dynamic_pointer_cast<PCSCReaderProvider>(getReaderProvider());
        assert(provider);

        assert(getACSACR1222LConfiguration());
        auto name = getACSACR1222LConfiguration()->getUserFeedbackReader();
        if (name.empty())
        {
            LOG(WARNINGS) << "Cannot fetch name for the reader unit that would be used as " <<
                    "a background connection for ACSACR1222L";
            return;
        }
        try
        {
            sam_used_as_perma_connection_ =
                std::dynamic_pointer_cast<PCSCReaderUnit>(
                    provider->createReaderUnit(name));
            assert(sam_used_as_perma_connection_);

            sam_used_as_perma_connection_->setup_pcsc_connection(SC_DIRECT);
        }
        catch (const std::exception &e)
        {
            LOG(ERRORS)
                << "Failed to establish PCSC connection when establishing "
                << "background connection for ACSACR1222L: " << e.what();
            sam_used_as_perma_connection_ = nullptr;
            return;
        }

        auto lcd = std::make_shared<ACSACR1222LLCDDisplay>();
        lcd->setReaderCardAdapter(
            sam_used_as_perma_connection_->getDefaultReaderCardAdapter());
        sam_used_as_perma_connection_->setLCDDisplay(lcd);

        auto ledbuzzer = std::make_shared<ACSACR1222LLEDBuzzerDisplay>();
        ledbuzzer->setReaderCardAdapter(
            sam_used_as_perma_connection_->getDefaultReaderCardAdapter());
        sam_used_as_perma_connection_->setLEDBuzzerDisplay(ledbuzzer);
    }
	boost::shared_ptr<DeisterReaderProvider> DeisterReaderUnit::getDeisterReaderProvider() const
	{
		return boost::dynamic_pointer_cast<DeisterReaderProvider>(getReaderProvider());
	}
 std::shared_ptr<IdOnDemandReaderProvider> IdOnDemandReaderUnit::getIdOnDemandReaderProvider() const
 {
     return std::dynamic_pointer_cast<IdOnDemandReaderProvider>(getReaderProvider());
 }
Esempio n. 6
0
 void ReaderUnit::unSerialize(boost::property_tree::ptree& node, const std::string& rootNode)
 {
     boost::property_tree::ptree parentNode = node.get_child(rootNode);
     BOOST_FOREACH(boost::property_tree::ptree::value_type const& v, parentNode)
     {
         if (v.first == getDefaultXmlNodeName())
         {
             if (static_cast<std::string>(v.second.get_child("<xmlattr>.type").get_value<std::string>()) == getReaderProvider()->getRPType())
             {
                 boost::property_tree::ptree r = v.second;
                 unSerialize(r);
             }
         }
     }
 }
 std::shared_ptr<RFIDeasReaderProvider> RFIDeasReaderUnit::getRFIDeasReaderProvider() const
 {
     return std::dynamic_pointer_cast<RFIDeasReaderProvider>(getReaderProvider());
 }
 std::shared_ptr<NFCReaderProvider> NFCReaderUnit::getNFCReaderProvider() const
 {
     return std::dynamic_pointer_cast<NFCReaderProvider>(getReaderProvider());
 }
    bool ISO7816ReaderUnit::connectToReader()
    {
        if (getISO7816Configuration()->getSAMType() != "SAM_NONE" && getISO7816Configuration()->getSAMReaderName() == "" && getISO7816Configuration()->getCheckSAMReaderIsAvailable())
            THROW_EXCEPTION_WITH_LOG(LibLogicalAccessException, "SAM type specified without specifying SAM Reader Name");

        if (getISO7816Configuration()->getSAMType() != "SAM_NONE")
        {
            if (getISO7816Configuration()->getCheckSAMReaderIsAvailable())
            {
                if (getReaderProvider()->getReaderList().size() < 2)
                    THROW_EXCEPTION_WITH_LOG(LibLogicalAccessException, "Not Enough reader on the system to use SAM");

                int i = 0;
                for (; i < static_cast<int>(getReaderProvider()->getReaderList().size()); ++i)
                {
                    if (getReaderProvider()->getReaderList()[i]->getName() == getISO7816Configuration()->getSAMReaderName())
                        break;
                }

                if (i == (int)(getReaderProvider()->getReaderList().size()))
                    THROW_EXCEPTION_WITH_LOG(LibLogicalAccessException, "The SAM Reader specified has not been find.");
            }

            std::shared_ptr<ISO7816ReaderUnit> ret;
            if (d_sam_readerunit && (!getISO7816Configuration()->getCheckSAMReaderIsAvailable() || d_sam_readerunit->getName() == getISO7816Configuration()->getSAMReaderName()))
            {
                ret = d_sam_readerunit;
            }
            else
            {
                ret = getISO7816ReaderProvider()->createReaderUnit(getISO7816Configuration()->getSAMReaderName());
            }

            if (getISO7816Configuration()->getAutoConnectToSAMReader())
            {
                ret->connectToReader();

                if (d_sam_client_context != "")
                {
                    ret->setContext(d_sam_client_context);
                }
            }

            if (!ret->waitInsertion(1))
                THROW_EXCEPTION_WITH_LOG(LibLogicalAccessException, "No SAM detected on the reader");

            ret->connect();

            LOG(LogLevel::INFOS) << "Checking SAM backward...";

            std::string SAMType = getISO7816Configuration()->getSAMType();
            if (SAMType != "SAM_AUTO" && SAMType != ret->getSingleChip()->getCardType())
                THROW_EXCEPTION_WITH_LOG(LibLogicalAccessException, "SAM on the reader is not the same type as selected.");

            LOG(LogLevel::INFOS) << "SAM backward ended.";

            setSAMChip(std::dynamic_pointer_cast<SAMChip>(ret->getSingleChip()));
            setSAMReaderUnit(ret);

            LOG(LogLevel::INFOS) << "Starting SAM Security check...";

            try
            {
                if (!getISO7816Configuration()->getSAMUnLockKey())
                    THROW_EXCEPTION_WITH_LOG(LibLogicalAccessException, "The Unlock SAM key is empty.");

                if (ret->getSingleChip()->getCardType() == "SAM_AV1")
                    std::dynamic_pointer_cast<SAMAV1ISO7816Commands>(getSAMChip()->getCommands())->authenticateHost(getISO7816Configuration()->getSAMUnLockKey(), getISO7816Configuration()->getSAMUnLockkeyNo());
                else if (ret->getSingleChip()->getCardType() == "SAM_AV2")
                {
                    try
                    {
                        std::dynamic_pointer_cast<SAMAV2ISO7816Commands>(getSAMChip()->getCommands())->lockUnlock(getISO7816Configuration()->getSAMUnLockKey(), logicalaccess::SAMLockUnlock::Unlock, getISO7816Configuration()->getSAMUnLockkeyNo(), 0, 0);
                    }
                    catch (CardException& ex)
                    {
                        if (ex.error_code() != CardException::WRONG_P1_P2)
                            std::rethrow_exception(std::current_exception());

                        //try to lock the SAM in case it was already unlocked
                        std::dynamic_pointer_cast<SAMAV2ISO7816Commands>(getSAMChip()->getCommands())->lockUnlock(getISO7816Configuration()->getSAMUnLockKey(),
                            logicalaccess::SAMLockUnlock::LockWithoutSpecifyingKey, getISO7816Configuration()->getSAMUnLockkeyNo(), 0, 0);

                        std::dynamic_pointer_cast<SAMAV2ISO7816Commands>(getSAMChip()->getCommands())->lockUnlock(getISO7816Configuration()->getSAMUnLockKey(), logicalaccess::SAMLockUnlock::Unlock, getISO7816Configuration()->getSAMUnLockkeyNo(), 0, 0);
                    }
                }
            }
            catch (std::exception&)
            {
                setSAMChip(std::shared_ptr<SAMChip>());
                setSAMReaderUnit(std::shared_ptr<ISO7816ReaderUnit>());
                THROW_EXCEPTION_WITH_LOG(LibLogicalAccessException, "The SAM Detected is not the SAM waited.");
            }

            //Set SAM unlock key to the SAM Reader in case of reconnect
            ret->getISO7816Configuration()->setSAMUnlockKey(getISO7816Configuration()->getSAMUnLockKey(), getISO7816Configuration()->getSAMUnLockkeyNo());
        }
        return true;
    }
Esempio n. 10
0
 std::shared_ptr<ISO7816ReaderProvider> ISO7816ReaderUnit::getISO7816ReaderProvider() const
 {
     return std::dynamic_pointer_cast<ISO7816ReaderProvider>(getReaderProvider());
 }
Esempio n. 11
0
 std::shared_ptr<OK5553ReaderProvider> OK5553ReaderUnit::getOK5553ReaderProvider() const
 {
     return std::dynamic_pointer_cast<OK5553ReaderProvider>(getReaderProvider());
 }
 std::shared_ptr<AxessTMC13ReaderProvider> AxessTMC13ReaderUnit::getAxessTMC13ReaderProvider() const
 {
     return std::dynamic_pointer_cast<AxessTMC13ReaderProvider>(getReaderProvider());
 }