diff -r 7d48bed6ce0c -r 987c9837762f cellular/telephonysettings/xqbindings/psetwrapper/src/psetcalldivertingwrapper.cpp --- a/cellular/telephonysettings/xqbindings/psetwrapper/src/psetcalldivertingwrapper.cpp Tue Aug 31 15:45:17 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,376 +0,0 @@ -/* - * Copyright (c) 2009 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: - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "psetcalldivertingwrapper.h" -#include "psetcalldivertingwrapper_p.h" -#include "logging.h" - -//Constant -_LIT(KCFInvalidChars,"*#pw"); -_LIT(KCFPlusSign,"+"); - -/*! - PSetCallDivertingWrapper::PSetCallDivertingWrapper - */ -PSetCallDivertingWrapper::PSetCallDivertingWrapper( - CPsetContainer &psetContainer, - QObject *parent) : - QObject(parent), m_psetCallDiverting(NULL), m_emergencyCall(NULL), - m_DefaultNumberListCDes(NULL), m_Priv(NULL) -{ - DPRINT << ": IN"; - - m_Priv = new PSetCallDivertingWrapperPrivate(*this); - QScopedPointer privateImplGuard(m_Priv); - - QT_TRAP_THROWING( - m_psetCallDiverting = psetContainer.CreateCFObjectL( *m_Priv )); - m_psetCallDiverting->SetRequestObserver(m_Priv); - QScopedPointer pSetCallDivertingGuard(m_psetCallDiverting); - - QT_TRAP_THROWING(m_emergencyCall = CPhCltEmergencyCall::NewL( m_Priv )); - QScopedPointer emergencyCallGuard(m_emergencyCall); - - privateImplGuard.take(); - pSetCallDivertingGuard.take(); - emergencyCallGuard.take(); - - DPRINT << ": OUT"; -} - -/*! - PSetCallDivertingWrapper::~PSetCallDivertingWrapper - */ -PSetCallDivertingWrapper::~PSetCallDivertingWrapper() -{ - DPRINT << ": IN"; - - delete m_psetCallDiverting; - delete m_emergencyCall; - - if (m_DefaultNumberListCDes) { - m_DefaultNumberListCDes->Reset(); - delete m_DefaultNumberListCDes; - } - - delete m_Priv; - - DPRINT << ": OUT"; -} - -// -------- Wrapper interface --------- // -/*! - PSetCallDivertingWrapper::setCallDiverting - */ -int PSetCallDivertingWrapper::setCallDiverting( - PSCallDivertingCommand& aSetting, int aBasicServiceGroup) -{ - DPRINT << ": IN"; - - TCallDivertSetting param; - param.iCondition = m_Priv->convert(aSetting.iCondition); - param.iSetting = m_Priv->convert(aSetting.iSetting); - param.iStatus = m_Priv->convert(aSetting.iStatus); - param.iServiceGroup = m_Priv->convert(aSetting.iServiceGroup); - param.iNumber = TPtrC16(aSetting.iNumber.utf16()); - param.iNoReplyTimer = aSetting.iNoReplyTimer; - - int result = validateDivertNumber(param.iNumber); - if (0 == result) { - QT_TRAP_THROWING( - m_psetCallDiverting->SetDivertingL( - param, - static_cast(aBasicServiceGroup))); - } - - DPRINT << ": OUT"; - return result; -} - -/*! - PSetCallDivertingWrapper::getCallDivertingStatus - */ -void PSetCallDivertingWrapper::getCallDivertingStatus( - const PsServiceGroup aServiceGroup, - const PsCallDivertingCondition aCondition, - int aBsc) -{ - DPRINT << ": IN"; - DPRINT << "aServiceGroup : " << aServiceGroup; - DPRINT << "aCondition : " << aCondition; - - QT_TRAP_THROWING( - m_psetCallDiverting->GetDivertingStatusL( - m_Priv->convert(aServiceGroup), - m_Priv->convert(aCondition), - (TBasicServiceGroups)aBsc)); - - DPRINT << ": OUT"; -} - -/*! - PSetCallDivertingWrapper::cancelProcess - */ -void PSetCallDivertingWrapper::cancelProcess() -{ - DPRINT << ": IN"; - - m_psetCallDiverting->CancelCurrentRequest(); - - DPRINT << ": OUT"; -} - -/*! - PSetCallDivertingWrapper::getDefaultNumbers - */ -void PSetCallDivertingWrapper::getDefaultNumbers(QStringList &aDefNumbers) -{ - // QStringList?, max 3 numbers to retrieve. - - DPRINT << ": IN"; - - while (!m_DefaultnumberListQSList.empty()) { - m_DefaultnumberListQSList.removeFirst(); - } - m_DefaultNumberListCDes = new CDesC16ArrayFlat(3); - QT_TRAP_THROWING( - m_psetCallDiverting->GetDefaultNumbersL(*m_DefaultNumberListCDes)); - int count = m_DefaultNumberListCDes->Count(); - for (int i = 0; i < count; i++) { - m_DefaultnumberListQSList.append(QString::fromUtf16( - m_DefaultNumberListCDes->MdcaPoint(i).Ptr(), - m_DefaultNumberListCDes->MdcaPoint(i).Length())); - } - aDefNumbers = m_DefaultnumberListQSList; - m_DefaultNumberListCDes->Reset(); - delete m_DefaultNumberListCDes; - m_DefaultNumberListCDes = NULL; - - DPRINT << ": OUT"; -} - -/*! - PSetCallDivertingWrapper::setNewDefaultNumber - */ -void PSetCallDivertingWrapper::setNewDefaultNumber(QString aNumber) -{ - DPRINT << ": IN"; - - TBuf bufNumber(aNumber.utf16()); - TInt found(KErrNotFound); - TInt loc(KErrNotFound); - m_DefaultNumberListCDes = new CDesC16ArrayFlat(3); - QT_TRAP_THROWING( - m_psetCallDiverting->GetDefaultNumbersL(*m_DefaultNumberListCDes)); - found = m_DefaultNumberListCDes->Find(bufNumber, loc); - m_DefaultNumberListCDes->Reset(); - delete m_DefaultNumberListCDes; - m_DefaultNumberListCDes = NULL; - if (found != KErrNone) { //number is not part of current def.numbers - QT_TRAP_THROWING( - m_psetCallDiverting->SetNewDefaultNumberL(bufNumber)); - } else { - QT_TRAP_THROWING( - m_psetCallDiverting->SwapDefaultNumberL(loc+1)); - } - - DPRINT << ": OUT"; -} - -/*! - * PSetCallDivertingWrapper::getVoiceMailBoxNumber - * @param aNumber empty if not set - * @return -1 if not supported - */ -int PSetCallDivertingWrapper::getVoiceMailBoxNumber( - QString &aNumber, PsService aService) -{ - DPRINT << ": IN"; - - CVoiceMailboxEntry* psetVoiceMailboxEntry = NULL; - CVoiceMailbox* psetVoiceMailBoxScoped = NULL; - QT_TRAP_THROWING(psetVoiceMailBoxScoped = CVoiceMailbox::NewL()); - QScopedPointer psetVoiceMailBox(psetVoiceMailBoxScoped); - - TVoiceMailboxParams psetVoiceMailboxParams; - // Selected mailbox type is voice - psetVoiceMailboxParams.iType = m_Priv->convert(aService); - psetVoiceMailboxEntry = 0; - int ret = 0; - TInt error = psetVoiceMailBox->GetStoredEntry( - psetVoiceMailboxParams, psetVoiceMailboxEntry); - DPRINT << "error: " << error; - if (KErrNotSupported == error) { - ret = -1; - } else if (KErrNone == error) { - // Entry ok, check the number - TPtrC ptrNumber(KNullDesC); - if (KErrNone == psetVoiceMailboxEntry->GetVmbxNumber(ptrNumber)) { - // number ok - aNumber = QString::fromUtf16(ptrNumber.Ptr(), - ptrNumber.Length()); - } - - } else { - // illegal argument - } - - delete psetVoiceMailboxEntry; // Entry ownership was transferred - psetVoiceMailboxEntry = NULL; - - DPRINT << "aVmbxNumber: " << aNumber; - DPRINT << ": OUT"; - return ret; -} - -/*! - * PSetCallDivertingWrapper::queryVoiceMailBoxNumber - * @param aNumber empty if not set - * @return -1 if not supported - */ -int PSetCallDivertingWrapper::queryVoiceMailBoxNumber( - QString &aNumber, PsService aService) -{ - DPRINT << ": IN"; - - CVoiceMailboxEntry* psetVoiceMailboxEntry = NULL; - CVoiceMailbox* psetVoiceMailBoxScoped = NULL; - QT_TRAP_THROWING(psetVoiceMailBoxScoped = CVoiceMailbox::NewL()); - QScopedPointer psetVoiceMailBox(psetVoiceMailBoxScoped); - - TVoiceMailboxParams psetVoiceMailboxParams; - // Selected mailbox type is voice - psetVoiceMailboxParams.iType = m_Priv->convert(aService); - psetVoiceMailboxEntry = 0; - int ret = 0; - TInt error = psetVoiceMailBox->GetStoredEntry( - psetVoiceMailboxParams, psetVoiceMailboxEntry); - - if (KErrNotSupported == error) { - ret = -1; - } else if (KErrNone == error || KErrNotFound == error) { - // No number defined, query new entry from user - error = psetVoiceMailBox->QueryNewEntry( - psetVoiceMailboxParams, psetVoiceMailboxEntry); - - if (KErrNone == error) { - // Save new entry and get the number. - error = psetVoiceMailBox->SaveEntry( *psetVoiceMailboxEntry ); - TPtrC ptrNumber( KNullDesC ); - if ( KErrNone == psetVoiceMailboxEntry->GetVmbxNumber( ptrNumber )) { - // New number ok. - aNumber = QString::fromUtf16(ptrNumber.Ptr(), - ptrNumber.Length()); - } - - } else { - // New number not given. - DPRINT << "New number error: " << error; - } - } else { - // illegal argument - DPRINT << "error: " << error; - } - - delete psetVoiceMailboxEntry; // Entry ownership was transferred - psetVoiceMailboxEntry = NULL; - - DPRINT << "aVmbxNumber: " << aNumber; - DPRINT << ": OUT"; - return ret; -} - -/*! - PSetCallDivertingWrapper::validateDivertNumber - */ -int PSetCallDivertingWrapper::validateDivertNumber( - const TDesC16& aDivertTo) const -{ - DPRINT << ": IN "; - - int result = 0; - - QString diverto = QString::fromUtf16(aDivertTo.Ptr(),aDivertTo.Length()); - DPRINT << "aDivertTo: " << diverto; - TInt noOfInvalidChars = KCFInvalidChars().Length(); - TBool isEmergency(EFalse); - TTelNumber number; - TInt error = m_emergencyCall->IsEmergencyPhoneNumber(aDivertTo, number, - isEmergency); - if ((error == KErrNone) && isEmergency) { - result = KErrGsmSSIllegalOperation; - DPRINT << ": emergency number."; - } else { - // Plus is a special case, as it is accepted as first character. - if (findPlus(aDivertTo)) { - result = KErrGsmSSUnknownAlphabet; - } - for (int index = 0; index < noOfInvalidChars; index++) { - if (aDivertTo.Find(KCFInvalidChars().Mid(index, 1)) == KErrNone) { - result = KErrGsmSSUnknownAlphabet; - DPRINT << ": Invalid divert number. "; - } - } - } - - DPRINT << ": OUT : result " << result; - return result; -} - -/*! - PSetCallDivertingWrapper::findPlus - Seeks '+' from given number. If '+' is first character, it is ignored. - */ -bool PSetCallDivertingWrapper::findPlus(const TDesC16& aDivertTo) const -{ - DPRINT << ": IN "; - - bool plusFound(false); - if (!(aDivertTo.Find(KCFPlusSign) == KErrNotFound)) { - //first char '+', but there can additional '+'s - //ignore first '+' - TPtrC concat = aDivertTo.Right(aDivertTo.Length() - 1); - if (concat.Find(KCFPlusSign) == KErrNone) { - plusFound = true; - DPRINT << ": Invalid divert number. "; - } - } - - DPRINT << ": OUT : plusFound " << plusFound; - return plusFound; -} - -/** - * Get CPsetCallDiverting reference. - */ -CPsetCallDiverting & PSetCallDivertingWrapper::getCPsetCallDiverting() const - { - DPRINT; - - return *m_psetCallDiverting; - } - -// End of File.