~aleteoryx/muditaos

922e7772e1124e7364aa76fbb9a16fea70c41bce — Mateusz Grzegorzek 4 years ago e841f9a
[EGD-6376] Fix for no response on SIM pin confirm

CellularSimPinDataMessage wasn't handled by ServiceCellular
which caused that GUI didn't receive any response and stuck in
last known state.
M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +13 -5
@@ 558,8 558,11 @@ void ServiceCellular::registerMessageHandlers()
    connect(typeid(CellularSimStateMessage),
            [&](sys::Message *request) -> sys::MessagePointer { return handleSimStateMessage(request); });

    connect(typeid(CellularSimResponseMessage),
            [&](sys::Message *request) -> sys::MessagePointer { return handleSimResponse(request); });
    connect(typeid(CellularSimPinDataMessage),
            [&](sys::Message *request) -> sys::MessagePointer { return handleSimPinMessage(request); });

    connect(typeid(CellularSimPukDataMessage),
            [&](sys::Message *request) -> sys::MessagePointer { return handleSimPukMessage(request); });

    connect(typeid(cellular::StateChange),
            [&](sys::Message *request) -> sys::MessagePointer { return handleStateRequestMessage(request); });


@@ 1100,21 1103,26 @@ bool ServiceCellular::unlockSimPuk(std::string puk, std::string pin)
    return false;
}

auto ServiceCellular::handleSimResponse(sys::Message *msgl) -> std::shared_ptr<sys::ResponseMessage>
auto ServiceCellular::handleSimPinMessage(sys::Message *msgl) -> std::shared_ptr<sys::ResponseMessage>
{

    auto msgSimPin = dynamic_cast<CellularSimPinDataMessage *>(msgl);
    if (msgSimPin != nullptr) {
        LOG_DEBUG("Unclocking sim");
        LOG_DEBUG("Unlocking sim");
        return std::make_shared<CellularResponseMessage>(unlockSimPin(SimCard::pinToString(msgSimPin->getPin())));
    }
    LOG_ERROR("Request message is not CellularSimPinDataMessage!");
    return std::make_shared<CellularResponseMessage>(false);
}

auto ServiceCellular::handleSimPukMessage(sys::Message *msgl) -> std::shared_ptr<sys::ResponseMessage>
{
    auto msgSimPuk = dynamic_cast<CellularSimPukDataMessage *>(msgl);
    if (msgSimPuk != nullptr) {
        LOG_DEBUG("Unlocking puk");
        return std::make_shared<CellularResponseMessage>(
            unlockSimPuk(SimCard::pinToString(msgSimPuk->getPuk()), SimCard::pinToString(msgSimPuk->getNewPin())));
    }
    LOG_ERROR("Request message is not CellularSimPukDataMessage!");
    return std::make_shared<CellularResponseMessage>(false);
}


M module-services/service-cellular/service-cellular/CellularMessage.hpp => module-services/service-cellular/service-cellular/CellularMessage.hpp +0 -48
@@ 348,54 348,6 @@ class CellularSimMessage : public CellularMessage
    static const Store::GSM::SIM defaultSimCard = Store::GSM::SIM::SIM1;
};

class CellularSimResponseMessage : public CellularSimMessage
{
  public:
    enum class SimState
    {
        SIMUnlocked,
        PINRequired,
        PINInvalidRetryPossible,
        PUKRequired,
        PUKInvalidRetryPossible,
        SIMBlocked
    };
    CellularSimResponseMessage(Store::GSM::SIM sim,
                               SimState state,
                               unsigned int pinSize,
                               unsigned int attemptsLeft = defaultAttemptsLeft)
        : CellularSimMessage(MessageType::CellularSimResponse, sim), state(state), attemptsLeft(attemptsLeft)
    {}

    SimState getSimState() const noexcept
    {
        return state;
    }
    utils::PhoneNumber::View getPhoneNumber() const noexcept
    {
        return number;
    }
    unsigned int getPinSize() const noexcept
    {
        return pinSize;
    }
    unsigned int getAttemptsLeft() const noexcept
    {
        return attemptsLeft;
    }

  private:
    SimState state = defaultSimState;
    utils::PhoneNumber::View number;
    unsigned int pinSize = defaultPinSize;
    /// ignored if state is not one of { PINInvalidRetryPossible, PUKInvalidRetryPossible }
    unsigned int attemptsLeft = defaultAttemptsLeft;

    static const unsigned int defaultPinSize      = 4;
    static const unsigned int defaultAttemptsLeft = 4;
    static const SimState defaultSimState         = SimState::SIMUnlocked;
};

/// Message use only for mockup GUI purposes
class CellularSimVerifyPinRequestMessage : public CellularSimMessage
{

M module-services/service-cellular/service-cellular/ServiceCellular.hpp => module-services/service-cellular/service-cellular/ServiceCellular.hpp +2 -1
@@ 299,7 299,8 @@ class ServiceCellular : public sys::Service
    void handleUSSDTimer();

    bool handleSimState(at::SimState state, const std::string message);
    auto handleSimResponse(sys::Message *msgl) -> std::shared_ptr<sys::ResponseMessage>;
    auto handleSimPinMessage(sys::Message *msgl) -> std::shared_ptr<sys::ResponseMessage>;
    auto handleSimPukMessage(sys::Message *msgl) -> std::shared_ptr<sys::ResponseMessage>;

    std::shared_ptr<cellular::RawCommandRespAsync> handleCellularStartOperatorsScan(
        CellularStartOperatorsScanMessage *msg);