diff -r 594d59766373 -r 7d48bed6ce0c telutils/keysequencerecognitionservice/src/simcontrolkeysequencehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telutils/keysequencerecognitionservice/src/simcontrolkeysequencehandler.cpp Tue Aug 31 15:45:17 2010 +0300 @@ -0,0 +1,202 @@ +/*! +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implements simcontrol key sequence handling. +* +*/ + +#include +#include +#include +#include +#include "keysequencerecognitionservicedefs.h" +#include "keysequencerecognitionservicelog.h" +#include "simcontrolkeysequencehandler.h" + + +//QTM_USE_NAMESPACE + +/*! + SimControlKeySequenceHandler::SimControlKeySequenceHandler. + */ +SimControlKeySequenceHandler::SimControlKeySequenceHandler( + QObject* parent) + : + KeySequenceHandler(parent), + m_securityModel(0) +{ + DPRINT_METHODENTRYEXIT; + + setKeySequenceValidator(KCodeChangePin1 + "|" + + KCodeChangePin2 + "|" + + KCodeUnblockPin1 + "|" + + KCodeUnblockPin2); + + QT_TRAP_THROWING(TSecUi::InitializeLibL()); + QT_TRAP_THROWING( m_securityModel = CManualSecuritySettings::NewL() ); +} + + +/*! + SimControlKeySequenceHandler::~SimControlKeySequenceHandler. + */ +SimControlKeySequenceHandler::~SimControlKeySequenceHandler() +{ + DPRINT_METHODENTRYEXIT; + + delete m_securityModel; + TSecUi::UnInitializeLib(); +} + + +/*! + SimControlKeySequenceHandler::executeKeySequence. + */ +bool SimControlKeySequenceHandler::executeKeySequence( + const QString &keySequence) +{ + DPRINT_METHODENTRYEXIT; + + bool handled = parseString( keySequence ); + + return handled; +} + + +/*! + SimControlKeySequenceHandler::parseString. + */ +bool SimControlKeySequenceHandler::parseString(const QString &keySequence) +{ + DPRINT_METHODENTRYEXIT; + + const QString KChangePin1("**04*"); + const QString KChangePin2("**042"); + const QString KUnblockPin1("**05*"); + const QString KUnblockPin2("**052"); + + QString oldPin; + QString newPin; + QString verifyNewPin; + QString puk; + + SimOperation operation = None; + bool handled = false; + + QString keySequencePrefix (keySequence); + + //Get first 5 chars from keysequence string + keySequencePrefix.chop(keySequencePrefix.length()-5); + QRegExp expression(QRegExp::escape(keySequencePrefix)); + + QString parsedKeySequence(keySequence); + + //remove '#' from end + parsedKeySequence.chop(1); + + QStringList pins; + + if (expression.exactMatch(KChangePin1) || expression.exactMatch(KChangePin2)) + { + if (expression.exactMatch(KChangePin1)) + { + parsedKeySequence.remove(0, 5); + operation = Pin1; + } + + if (expression.exactMatch(KChangePin2)) + { + parsedKeySequence.remove(0, 6); + operation = Pin2; + } + pins = parsedKeySequence.split("*"); + oldPin= pins.value(0); + newPin = pins.value(1); + verifyNewPin = pins.value(2); + handled = true; + processChangePin(operation, oldPin, newPin, verifyNewPin); + } + + if (expression.exactMatch(KUnblockPin1) || expression.exactMatch(KUnblockPin2)) + { + if ( expression.exactMatch(KUnblockPin1)) + { + parsedKeySequence.remove(0, 5); + operation = Pin1; + } + + if (expression.exactMatch(KUnblockPin2)) + { + parsedKeySequence.remove(0, 6); + operation = Pin2; + } + + pins = parsedKeySequence.split("*"); + puk = pins.value(0); + newPin = pins.value(1); + verifyNewPin = pins.value(2); + handled = true; + processUnblockPin(operation, puk, newPin, verifyNewPin); + } + + return handled; +} + +/*! + SimControlKeySequenceHandler::processChangePin. + */ +void SimControlKeySequenceHandler::processChangePin(SimOperation operation, const QString &oldPin, + const QString &newPin, const QString &verifyNew) + { + CManualSecuritySettings::TPin pin; + + if(operation == Pin1) + { + pin = CManualSecuritySettings::EPin1; + } + else + { + pin = CManualSecuritySettings::EPin2; + } + + TBuf<200> oldPinBuf(oldPin.utf16()); + TBuf<200> newPinBuf(newPin.utf16()); + TBuf<200> verifyNewBuf(verifyNew.utf16()); + + QT_TRAP_THROWING(m_securityModel->ChangePinL(pin, oldPinBuf, newPinBuf, verifyNewBuf)); + } + +/*! + SimControlKeySequenceHandler::processUnblockPin. + */ +void SimControlKeySequenceHandler::processUnblockPin(SimOperation operation, const QString &puk, + const QString &newPin, const QString &verifyNew) + { + CManualSecuritySettings::TPin pin; + + if(operation == Pin1) + { + pin = CManualSecuritySettings::EPin1; + } + else + { + pin= CManualSecuritySettings::EPin2; + } + + TBuf<200> pukBuf(puk.utf16()); + TBuf<200> newPinBuf(newPin.utf16()); + TBuf<200> verifyNewBuf(verifyNew.utf16()); + + + QT_TRAP_THROWING(m_securityModel->UnblockPinL(pin, pukBuf, newPinBuf, verifyNewBuf)); + }