cellular/telephonysettings/xqbindings/psetwrapper/src/psetcalldivertingwrapper.cpp
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
child 21 0a6dd2dc9970
--- 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 <QtGlobal>
-#include <rsssettings.h>
-#include <psetcontainer.h>
-#include <psetcalldiverting.h>
-#include <mmlist.h>
-#include <cphcltemergencycall.h>
-#include <badesca.h>
-#include <cvoicemailbox.h>
-#include <cvoicemailboxentry.h>
-#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<PSetCallDivertingWrapperPrivate> privateImplGuard(m_Priv);
-    
-    QT_TRAP_THROWING(
-        m_psetCallDiverting = psetContainer.CreateCFObjectL( *m_Priv ));
-    m_psetCallDiverting->SetRequestObserver(m_Priv);
-	QScopedPointer<CPsetCallDiverting> pSetCallDivertingGuard(m_psetCallDiverting);
-    
-    QT_TRAP_THROWING(m_emergencyCall = CPhCltEmergencyCall::NewL( m_Priv ));
-    QScopedPointer<CPhCltEmergencyCall> 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<TBasicServiceGroups>(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<KPsetPhoneNumberLength> 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<CVoiceMailbox> 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<CVoiceMailbox> 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.