convergedcallengine/csplugin/src/csprovider.cpp
branchRCL_3
changeset 19 7d48bed6ce0c
parent 18 594d59766373
child 20 987c9837762f
--- a/convergedcallengine/csplugin/src/csprovider.cpp	Thu Aug 19 10:28:14 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1273 +0,0 @@
-/*
-* Copyright (c) 2007-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:  Main class of CS Call Plug-in
-*
-*/
-
-
-// EXTERNAL INCLUDES
-#include <e32base.h>
-#include <mccpconferencecallobserver.h>
-#include <mmtsy_names.h>
-#include <mccpssobserver.h>
-#include <rmmcustomapi.h>
-#include <startupdomainpskeys.h>
-#include <mccecall.h>
-
-// USER INCLUDES
-#include "csprovider.h"
-#include "cspvoicecall.h"
-#include "cspvideocall.h"
-#include "cspetelincomingcallmonitor.h"
-#include "cspetelconferencestatusmonitor.h"
-#include "cspdtmfprovider.h"
-#include "cspconferencecall.h"
-#include "cspcallarray.h"
-#include "cspservicesettingshandler.h"
-#include "cspaudiohandler.h"
-#include "cspetelcallwaitingrequester.h"
-#include "cspsupplementaryservicesmonitor.h"
-#include "cspcipheringstatusmonitor.h"
-#include "cspsssettingshandler.h"
-#include "cspcalladdedhandler.h"
-#include "csppubsublistener.h"
-#include "cspcallcommandhandler.h"
-#include "cspremotealertingtonelistener.h"
-#include "csppanic.pan"
-#include "csplogger.h"
-#include "cspconsts.h"
-
-const TInt KCSServiceId = 1; 
-
-// ---------------------------------------------------------------------------
-// CSProvider::CSProvider
-// ---------------------------------------------------------------------------
-//
-CSProvider::CSProvider(): iImplementationUid( KCSPImplementationUid )
-    {
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::CSProvider");
-    iInitialized = EFalse;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::~CSProvider
-// ---------------------------------------------------------------------------
-//
-CSProvider::~CSProvider()
-    {
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::~CSProvider <");
-    delete iCallArray;
-    
-    if ( iInitialized )
-        {
-        delete iConferenceStatusMonitor; 
-        delete iCallCommandHandler;
-        delete iRemoteAlertingToneListener;
-        delete iSimStatusListener;
-        delete iSsSettingsHandler;
-        delete iAudioHandler;        
-        delete iSsMonitor;
-        delete iCwRequester;
-        delete iServiceHandler;
-        delete iIncomingVoiceCallMonitor;
-        delete iIncomingDataCallMonitor;
-        delete iIncomingAuxCallMonitor;
-        delete iCallAddedHandler;
-        delete iCipheringStatusMonitor;
-        delete iDTMFProvider;
-
-        CSPLOGSTRING(CSPOBJECT, "CSProvider::~CSProvider close lines");
-        iLineContainer.Close();
-        CSPLOGSTRING(CSPOBJECT, "CSProvider::~CSProvider close customapi");
-        iMmCustom.Close();
-        CSPLOGSTRING(CSPOBJECT, "CSProvider::~CSProvider close conference call");
-        iMobileConferenceCall.Close();
-        CSPLOGSTRING(CSPOBJECT, "CSProvider::~CSProvider close phone");
-        iMobilePhone.Close();
-        CSPLOGSTRING(CSPOBJECT, "CSProvider::~CSProvider unload phone");
-        iServer.UnloadPhoneModule( KMmTsyModuleName );
-        CSPLOGSTRING(CSPOBJECT, "CSProvider::~CSProvider close server session");
-        iServer.Close();
-        }
-
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::~CSProvider >");
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CSProvider::ConstructL()
-    {
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::ConstructL <");
-    iCallArray = CSPCallArray::NewL();
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::ConstructL >");
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::NewL
-// ---------------------------------------------------------------------------
-//
-CSProvider* CSProvider::NewL()
-    {
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::NewL() <");
-    CSProvider* self = new ( ELeave ) CSProvider();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::NewL() >");
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::NotifySsEvent
-// ---------------------------------------------------------------------------
-//
-void CSProvider::NotifySsEvent( 
-                    RMmCustomAPI::TSsTypeAndMode& aSsTypeAndMode,
-                    RMmCustomAPI::TSsInfo& aSsInfo )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::NotifySsEvent <");
-    TBuf<10> addr;
-    
-    switch( aSsTypeAndMode.iSsType )
-        {
-        case RMmCustomAPI::ESsAllSs:
-            {
-            CSPLOGSTRING(CSPINT, "CSProvider::NotifySsEvent ESsAllSs");
-            if( iSsSettingsHandler )
-                {
-                TInt cugIndex( aSsInfo.iCugIndex );
-                                
-                if ( iSsSettingsHandler->IsValueValidCugIndex( cugIndex ) ) 
-                    {
-                    CSPLOGSTRING(CSPINT, "CSProvider::NotifySsEvent CallCugEventOccurred");
-                    iSsObserver->CallCugEventOccurred(  
-                            MCCPSsObserver::ECCPSsShowIncCallGroupIndex );
-                    }  
-                else 
-                    {
-                    CSPLOGSTRING2(CSPERROR, 
-                            "CSProvider::NotifySsEvent err invalid cug index %d", cugIndex );
-                    }
-                }
-            break; 
-            }
-        
-        case RMmCustomAPI::ESsRegPassword:
-        case RMmCustomAPI::ESsClip:
-        case RMmCustomAPI::ESsClir:
-        case RMmCustomAPI::ESsCnap:
-        case RMmCustomAPI::ESsColp:
-        case RMmCustomAPI::ESsColr:
-            {
-            CSPLOGSTRING(CSPINT, "CSProvider::NotifySsEvent Discarding");
-            break; 
-            }
-
-        case RMmCustomAPI::ESsCallWaiting:
-            {
-            CSPLOGSTRING(CSPINT, "CSProvider::NotifySsEvent ESsCallWaiting");
-            iSsObserver->CallForwardEventOccurred( 
-                                MCCPSsObserver::ESsCallWaiting,
-                                addr );
-            break; 
-            }        
-            
-        case RMmCustomAPI::ESsAllForwardings:
-        case RMmCustomAPI::ESsForwUncond:
-        case RMmCustomAPI::ESsForwBusy:
-        case RMmCustomAPI::ESsForwNoReply:
-        case RMmCustomAPI::ESsForwNoReach:
-        case RMmCustomAPI::ESsAllCondForwardings:
-            {
-            switch( aSsInfo.iForwMode )
-                {
-                case RMmCustomAPI::ESsIncCallIsForw:
-                    iSsObserver->CallForwardEventOccurred( 
-                                        MCCPSsObserver::ECCPSsIncCallIsForw,
-                                        addr );
-                    break;
-                case RMmCustomAPI::ESsIncCallForwToC:
-                    iSsObserver->CallForwardEventOccurred( 
-                                        MCCPSsObserver::ECCPSsIncCallForwToC,
-                                        addr );
-                    break;
-                case RMmCustomAPI::ESsOutCallForwToC:
-                    iSsObserver->CallForwardEventOccurred( 
-                                        MCCPSsObserver::ECCPSsOutCallForwToC,
-                                        addr );
-                    break;
-                default:
-                    {
-                    HandleDivertOrBarring( addr, aSsTypeAndMode );
-                    break; 
-                    }
-                }
-            break;
-            }
-
-        case RMmCustomAPI::ESsAllBarrings:  
-        case RMmCustomAPI::ESsBarrAllOut:
-        case RMmCustomAPI::ESsBarrOutInter:
-        case RMmCustomAPI::ESsBarrOutInterExcHome:
-        case RMmCustomAPI::ESsOutgoingBarrServ:
-            {            
-            iSsObserver->BarringEventOccurred( 
-                                    MCCPSsObserver::ECCPSsOutgoingCallBarred );
-            break;
-            }
-
-        case RMmCustomAPI::ESsBarrAllIn:
-        case RMmCustomAPI::ESsBarrAllInRoam:
-        case RMmCustomAPI::ESsIncomingBarrServ:
-            {            
-            iSsObserver->BarringEventOccurred( 
-                                    MCCPSsObserver::ECCPSsIncomingCallBarred );
-            break;
-            }
-
-        default:
-            {
-            CSPLOGSTRING(CSPINT, "CSProvider::NotifySsEvent Unknown SS");
-            break; 
-            }
-        }
-        
-    CSPLOGSTRING(CSPINT, "CSProvider::NotifySsEvent >");    
-    }
-
-// From CConvergedCallProvider
-// ---------------------------------------------------------------------------
-// CSProvider::InitializeL
-// ---------------------------------------------------------------------------
-//
-void CSProvider::InitializeL( const MCCPObserver& aObserver,
-                              const MCCPSsObserver& aSsObserver )
-    {
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::InitializeL <");
-    if ( iInitialized )
-        {
-        CSPLOGSTRING(CSPOBJECT, 
-                "CSProvider::InitializeL() Error already initialized");
-        User::Leave( KErrAlreadyExists );
-        }
-    iInitialized = ETrue;
-    
-    CreateEtelConnectionsL();
-    
-    iServiceHandler = CSPServiceSettingsHandler::NewL();
-
-    TInt readErr = iServiceHandler->ReadCSServiceId( iServiceId );
-    if ( readErr )
-        {
-        CSPLOGSTRING(CSPERROR, "CSProvider::InitializeL()\
-                ERROR COULD NOT READ SERVICE ID FOR CS-PLUGIN ");
-        CSPLOGSTRING(CSPERROR, "CSProvider::InitializeL() \
-                Please ensure that SPSettings is initialized corretly! ");
-        iServiceId = KCSServiceId; 
-        }
-    
-    // Save CCP observer as pointer-type member 
-    const MCCPCSObserver& obs = static_cast<const MCCPCSObserver&>(aObserver);
-    iCCPObserver = const_cast<MCCPCSObserver*>(&obs);
-    
-    // Save CCP SS observer as pointer-type member 
-    const MCCPSsObserver& ssObs = static_cast<const MCCPSsObserver&>(aSsObserver);
-    iSsObserver = const_cast<MCCPSsObserver*>(&ssObs);
-    
-    RPhone::TLineInfo lineInfo;
-    __ASSERT_ALWAYS( iMobilePhone.GetLineInfo( 0, lineInfo )
-        == KErrNone, Panic( ECSPPanicNoEtel ) );
-    
-    // Open Lines. At least voice line must be opened.
-    __ASSERT_ALWAYS( iLineContainer.Open( iMobilePhone, iServiceId ) == KErrNone,
-        Panic( ECSPPanicNoEtel ) );
-
-    RMobileLine& voiceLine = iLineContainer.LineByType( 
-                                RCSPLineContainer::ECSPLineSpeech );
-    
-    // Create and start incoming voice call monitor for primary line
-    iIncomingVoiceCallMonitor = CSPEtelIncomingCallMonitor::NewL( *this, 
-                                      voiceLine,
-                                      RCSPLineContainer::ECSPLineSpeech );
-    iIncomingVoiceCallMonitor->StartMonitoring();
-
-    // Create and start incoming data call monitor for data line    
-    RMobileLine& dataLine = iLineContainer.LineByType( RCSPLineContainer::ECSPLineData );
-    iIncomingDataCallMonitor = CSPEtelIncomingCallMonitor::NewL( *this, dataLine,
-                                      RCSPLineContainer::ECSPLineData );
-    iIncomingDataCallMonitor->StartMonitoring();
-    
-    // Create and start incoming call monitor for auxilary line    
-    RMobileLine& auxLine = iLineContainer.LineByType( RCSPLineContainer::ECSPLineAuxSpeech );
-    iIncomingAuxCallMonitor = CSPEtelIncomingCallMonitor::NewL( *this, auxLine,
-                                      RCSPLineContainer::ECSPLineAuxSpeech );
-    iIncomingAuxCallMonitor->StartMonitoring();
-
-    iCwRequester = CSPEtelCallWaitingRequester::NewL( iMobilePhone );
-    
-    // Start conference call monitor for monitoring external conference creation  
-    iConferenceStatusMonitor = CSPEtelConferenceStatusMonitor::NewL( *this, 
-                                    iMobileConferenceCall );
-    iConferenceStatusMonitor->StartMonitoring();
-
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::InitializeL create DTMF provider");
-    iDTMFProvider = CSPDTMFProvider::NewL( iMobilePhone, iMmCustom );
-    
-    // Create and start ciphering status monitor    
-    iCipheringStatusMonitor = CSPCipheringStatusMonitor::NewL( iMmCustom, *this );
-    iCipheringStatusMonitor->StartMonitoring();
-
-    // Create audio handler
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::InitializeL create audio handler");
-    iAudioHandler = CSPAudioHandler::NewL();
-    
-    // Create call added handler for listening ext call creation
-    iCallAddedHandler = CSPCallAddedHandler::NewL( 
-        obs, 
-        iLineContainer, 
-        *iCallArray,
-        *this,
-        *iAudioHandler );
-    
-    iSimStatusListener = CSPPubSubListener::NewL( 
-        KPSUidStartup, 
-        KPSSimStatus, 
-        this );
-    
-    HandleSIMStatusL();
-    
-    iRemoteAlertingToneListener = 
-        CSPRemoteAlertingToneListener::NewL( iMmCustom, *this );
-    iRemoteAlertingToneListener->StartListening();
-
-    iCallCommandHandler = CSPCallCommandHandler::NewL();
-    
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::InitializeL >");
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::NewCallL creates MO call.
-// ---------------------------------------------------------------------------
-//
-MCCPCall* CSProvider::NewCallL( const CCCPCallParameters& aCallParameters,
-                                const TDesC& aRemoteParty, 
-                                const MCCPCallObserver& aObserver )
-    {
-    CSPLOGSTRING(CSPREQIN, "CSProvider::NewCallL <");
-    
-    const CCCECallParameters& parameters = 
-        reinterpret_cast<const CCCECallParameters&> (aCallParameters);
-    
-    TUint32 serviceId = aCallParameters.ServiceId();
-
-    if ( serviceId != iServiceId )
-        {
-        CSPLOGSTRING(CSPERROR, "CSProvider::NewCallL ERROR, service id not acceptable!");
-        User::Leave( ECCPErrorInvalidPhoneNumber );
-        }
-    
-    RCSPLineContainer::TCSPLineId lineId = 
-        iLineContainer.ResolveLineIdL( parameters );
-
-    RMobileLine& line = iLineContainer.LineByType( lineId );
-    
-    CSPCall* call = NULL;
-    
-    if ( RCSPLineContainer::ECSPLineSpeech == lineId ||
-         RCSPLineContainer::ECSPLineAuxSpeech == lineId )
-        {
-        call = CSPVoiceCall::NewL( const_cast<TDesC16&>(aRemoteParty), 
-                            line, 
-                            ETrue,
-                            parameters,
-                            *this,
-                            EFalse );
-        CleanupStack::PushL( call );
-        }
-        
-    // Create CSPDataCall object for data/video call
-    else if ( RCSPLineContainer::ECSPLineData == lineId )
-        {
-        call = CSPVideoCall::NewL( 
-                            const_cast<TDesC16&>(aRemoteParty),
-                            line, ETrue, parameters,
-                            *this );
-        CleanupStack::PushL( call );
-        }
-    else if ( RCSPLineContainer::ECSPLineFax == lineId )
-        {
-        CSPLOGSTRING(CSPERROR, 
-            "CSProvider::NewCallL ERROR FAX is unsupported call type");
-        User::Leave( KErrNotSupported );
-        }
-    
-    if ( aRemoteParty.Length() == 0 )
-        {
-        CSPLOGSTRING(CSPERROR, "CSProvider::NewCallL ERROR: aRemoteParty.Length ==0");
-         
-        User::Leave( ECCPErrorInvalidPhoneNumber );
-        }
-    
-    call->AddObserverL( aObserver );        
-    TInt err = iCallArray->Add( call );
-    User::LeaveIfError( err );
-
-    call->SetAudioHandler( iAudioHandler );
-    
-    CleanupStack::Pop( call );
-    
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::NewCallL >");
-    return call;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::ReleaseCall
-// ---------------------------------------------------------------------------
-//
-TInt CSProvider::ReleaseCall( MCCPCall& aCall )
-    {
-    CSPLOGSTRING2(CSPREQIN, "CSProvider::ReleaseCall %d", &aCall);
-    CSPCall* call = static_cast<CSPCall*>(&aCall);
-    TInt err = iCallArray->Remove( call );
-    if ( err == KErrNone )
-        {
-        delete call;
-        }
-    return err;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::NewEmergencyCallL
-// ---------------------------------------------------------------------------
-//
-MCCPEmergencyCall* CSProvider::NewEmergencyCallL( const TUint32 aServiceId,
-                                                  const TDesC& aAddress,
-                                           const MCCPCallObserver& aObserver )
-    {
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::NewEmergencyCallL <");
-
-    RMobileLine& voiceLine = iLineContainer.LineByType( 
-                                    RCSPLineContainer::ECSPLineSpeech );
-    TBuf8<KCCEBearerMaxSize> emptyBearer;
-    TBuf<KCCESubAddressMaxSize> emptySubAddress;
-    
-    CCCECallParameters* tmpParams = CCCECallParameters::NewL();
-    CleanupStack::PushL( tmpParams );
-    tmpParams->SetServiceId(aServiceId);
-    CSPVoiceCall* call = CSPVoiceCall::NewL( aAddress,
-                                             voiceLine,
-                                             ETrue,
-                                             *tmpParams,
-                                             *this,
-                                             ETrue);
-        
-    CleanupStack::PopAndDestroy( tmpParams );
-    CleanupStack::PushL( call );
-    
-    call->AddObserverL( aObserver );
-    TInt err = iCallArray->Add( call );
-    User::LeaveIfError( err );
-
-    call->SetAudioHandler( iAudioHandler );
-    
-    CleanupStack::Pop( call );    
-    
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::NewEmergencyCallL >");
-    return call;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::ReleaseEmergencyCall
-// ---------------------------------------------------------------------------
-//
-TInt CSProvider::ReleaseEmergencyCall( MCCPEmergencyCall& aCall )
-    {
-    CSPLOGSTRING(CSPOBJECT, "CSProvider::ReleaseEmergencyCall");    
-    CSPVoiceCall* call = static_cast<CSPVoiceCall*>(&aCall);
-    iCallArray->Remove( call );
-    delete call;
-    return KErrNone;
-    }
-    
-// ---------------------------------------------------------------------------
-// CSProvider::NewConferenceL
-// ---------------------------------------------------------------------------
-//
-MCCPConferenceCall* CSProvider::NewConferenceL( 
-                        const TUint32 /*aServiceId*/,
-                        const MCCPConferenceCallObserver& aObserver )
-    {   
-    CSPLOGSTRING(CSPREQIN, "CSProvider::NewConferenceL <");
-    if ( !iConferenceCall )
-        {
-        iConferenceCall = CSPConferenceCall::NewL( 
-                                    iMobilePhone, *iCallArray, iServiceId );    
-        iConferenceCall->AddObserverL( aObserver );
-        }
-    else 
-        {
-        CSPLOGSTRING(CSPERROR, "CSProvider::NewConferenceL()\
-                Error conference already exists");
-        User::Leave( KErrAlreadyExists ); 
-        }
-    CSPLOGSTRING(CSPREQOUT, "CSProvider::NewConferenceL >");
-    return iConferenceCall;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::ReleaseConferenceCall
-// ---------------------------------------------------------------------------
-//
-TInt CSProvider::ReleaseConferenceCall( MCCPConferenceCall& aCall )
-    {
-    CSPLOGSTRING(CSPREQIN, "CSProvider::ReleaseConferenceCall");
-    TInt ret( KErrNone ); 
-    if ( &aCall == iConferenceCall )
-        {
-        delete iConferenceCall;
-        iConferenceCall = NULL;
-        }
-    else
-        {
-        CSPLOGSTRING(CSPERROR, 
-                "CSProvider::ReleaseConferenceCall Error call not found");
-        ret = KErrNotFound; 
-        }
-    return ret;
-    }
-    
-// ---------------------------------------------------------------------------
-// CSProvider::Uid
-// ---------------------------------------------------------------------------
-//
-const TUid& CSProvider::Uid() const
-    {
-    CSPLOGSTRING2(CSPREQIN, "CSProvider::Uid uid: %d", iImplementationUid);
-    return iImplementationUid;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::Caps
-// ---------------------------------------------------------------------------
-//
-TUint32 CSProvider::Caps( ) const
-    {
-    CSPLOGSTRING(CSPREQIN, "CSProvider::Caps");
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::DTMFProvider
-// ---------------------------------------------------------------------------
-//
-MCCPDTMFProvider* CSProvider::DTMFProviderL( 
-            const MCCPDTMFObserver& aObserver )
-    {
-    CSPLOGSTRING2(CSPREQIN, 
-            "CSProvider::DTMFProvider observer: %x", &aObserver);
-    iDTMFProvider->AddObserverL( aObserver );
-    CSPLOGSTRING(CSPREQIN, "CSProvider::DTMFProvider observer added");
-    return iDTMFProvider;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::ExtensionProvider
-// ---------------------------------------------------------------------------
-//
-MCCPExtensionProvider* CSProvider::ExtensionProviderL( 
-                            const MCCPExtensionObserver& /*aObserver*/)
-    {
-    CSPLOGSTRING(CSPREQIN, "CSProvider::ExtensionProvider");
-    return NULL;
-    }
-    
-// ---------------------------------------------------------------------------
-// CSProvider::GetLifeTime
-// ---------------------------------------------------------------------------
-//
-TBool CSProvider::GetLifeTime( TDes8& aLifeTimeInfo )
-    {
-    CSPLOGSTRING(CSPREQIN, "CSProvider::GetLifeTime");
-    TInt err = iMmCustom.GetLifeTime( aLifeTimeInfo );    
-    if ( err ) 
-    	{
-    	return EFalse;
-    	}
-   	return ETrue;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::GetCSInfo
-// ---------------------------------------------------------------------------
-//
-TBool CSProvider::GetCSInfo( CSInfo& aCSInfo )
-    {
-    CSPLOGSTRING(CSPREQIN, "CSProvider::GetCSInfo");
-    if ( iInitialized )
-        {
-        RMobilePhone::TMobilePhoneIdentityV1 imei;
-        TRequestStatus reqStatus( KErrNone );
-        
-        CSPLOGSTRING(CSPREQOUT, 
-                "CSProvider::GetCSInfo request get phone id");
-        iMobilePhone.GetPhoneId( reqStatus, imei );
-        User::WaitForRequest( reqStatus );
-        CSPLOGSTRING(CSPREQOUT, 
-                "CSProvider::GetCSInfo completed get phone id");
-        
-        if ( reqStatus.Int() != KErrNone )
-             {
-             imei.iSerialNumber.Zero();
-             } 
-             
-        aCSInfo.iSerialNumber =  imei.iSerialNumber; 
-        return reqStatus.Int() == KErrNone;
-        }
-        
-    return iInitialized;
-    }
-        
-// ---------------------------------------------------------------------------
-// From MCSPIncomingCallObserver
-// CSProvider::IncomingCallArrived
-// ---------------------------------------------------------------------------
-//
-void CSProvider::IncomingCallArrived( RMobileLine& aLine, TName aCallName,
-                                      RCSPLineContainer::TCSPLineId aLineId )
-    {
-    RMobileLine::TLineInfo lineInfo;
-    aLine.GetInfo( lineInfo );
-    CSPLOGSTRING2(CSPINT, "CSProvider::IncomingCallArrived < line id   %d", aLineId );
-    CSPLOGSTRING2(CSPINT, "CSProvider::IncomingCallArrived call name %S", &aCallName );
-
-    CSPLOGSTRING2(CSPINT, "CSProvider::IncomingCallArrived answ %S", &lineInfo.iNameOfCallForAnswering );
-    CSPLOGSTRING2(CSPINT, "CSProvider::IncomingCallArrived last %S", &lineInfo.iNameOfLastCallAdded );
-    CSPLOGSTRING2(CSPINT, "CSProvider::IncomingCallArrived status %d", lineInfo.iStatus );
-    CSPLOGSTRING2(CSPINT, "CSProvider::IncomingCallArrived hook %d", lineInfo.iHookStatus );
-    
-    // Find call by name.
-    // In case CallAddedHandler has opened it and added to array, 
-    // it should not be re-opened.    
-    if ( !iCallArray->FindCall( aCallName ) )
-        {
-        TInt err(KErrUnknown);
-        TUint32 serviceId( 0 );
-        CCPCall::TCallType callType;
-        CCCECallParameters::TCCELineType lineType;
-        err = iLineContainer.ResolveCallInfo( aLineId, serviceId, callType, lineType );
-        
-        if ( !err )
-            {
-            CSPCall* call = NULL;
-            TBuf8<KCCEBearerMaxSize> emptyBearer;
-            TBuf<KCCESubAddressMaxSize> emptySubAddress;
-            CCCECallParameters* callParameters = NULL; 
-            TRAP_IGNORE( callParameters = CCCECallParameters::NewL() );
-            if ( callParameters )
-                {
-                callParameters->SetServiceId(serviceId);
-                callParameters->SetCallType(callType);
-                callParameters->SetLineType(lineType);
-                callParameters->SetOrigin(CCCECallParameters::ECCECallOriginPhone);
-            
-                if ( callType == CCPCall::ECallTypeCSVoice )
-                    {
-                    TRAP( err, call = CSPVoiceCall::NewL( aCallName, 
-                                                    aLine, 
-                                                    EFalse, 
-                                                    *callParameters,
-                                                    *this, 
-                                                    EFalse ) );
-                    }
-                else if ( callType == CCPCall::ECallTypeVideo )
-                    {
-                    TRAP( err, call = CSPVideoCall::NewL( aCallName,
-                                                    aLine, 
-                                                    EFalse, 
-                                                    *callParameters,
-                                                    *this ) );
-                    }
-                else
-                     {
-                    CSPLOGSTRING2(CSPERROR, 
-                       "CSProvider::IncomingCallArrived() unknown call type %d", err );
-                    err = KErrUnknown;
-                    }
-                
-                delete callParameters;
-                }
-            
-            if ( call && err == KErrNone )
-                {                
-                TInt appendError = iCallArray->Add( call );
-                CSPLOGSTRING2(CSPERROR, 
-                      "CSProvider::IncomingCallArrived Appending call res %d", 
-                        appendError);
-                
-                // Set audio handler for DevSound.
-                call->SetAudioHandler( iAudioHandler );
-
-                // Indicate incoming call for observer. 
-                TInt err = IndicateIncomingCall( call );
-                
-                if ( KErrNone == err && 
-                     call->State() == MCCPCallObserver::ECCPStateAnswering )
-                    {
-                    // If call has proceeded already to Answering state (autoanswer) 
-                    // a change notification needs to be sent. 
-                    call->NotifyCallStateChangedETel( RMobileCall::EStatusAnswering );
-                    }
-                
-                if ( err ) 
-                    {
-                    iCallArray->Remove( call );
-                    delete call;
-                    }
-
-                CSPLOGSTRING( CSPINT, "CSProvider::IncomingCallArrived Inform CCE OK" );
-                }
-            else if ( call && err != KErrNone )
-                {
-                // Delete call, call array removal not needed.   
-                delete call; 
-                }
-            else
-                {
-                CSPLOGSTRING2(CSPERROR, 
-                  "CSProvider::IncomingCallArrived Call could not be created %d", err);                
-                }            
-            }
-        else
-            {
-            CSPLOGSTRING2(CSPERROR, "CSProvider::IncomingCallArrived ERROR Resolve call info err=%d", 
-                                   err);
-            }
-        }
-    CSPLOGSTRING(CSPINT, "CSProvider::IncomingCallArrived >");
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::GetCallWaitingL
-// ---------------------------------------------------------------------------
-//
-void CSProvider::GetCallWaitingL( const CCCECallParameters& aParams,
-                                  TBool& aCallWaitingStatus )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::GetCallWaitingL <");
-    
-    // If there are already connected or held call: call waiting must be 
-    // already ON.    
-    TInt callCount = iCallArray->GetCallCount();
-    TInt activeCallCount = 0;
-    for (TInt i = 0; i < callCount; i++)
-        {
-        switch (iCallArray->Get(i)->State())
-            {
-            case MCCPCallObserver::ECCPStateConnected:
-                {
-                activeCallCount++;
-                break;
-                }
-            case MCCPCallObserver::ECCPStateHold:
-                {
-                activeCallCount++;
-                break;
-                }
-            case MCCPCallObserver::ECCPStateAnswering:
-                {
-                activeCallCount++;
-                break;
-                }
-            }
-        }
-    if ( activeCallCount > 0 )
-        {
-        // CW status must be ON, so it is not reasonable to ask it from network 
-        aCallWaitingStatus = ETrue;
-        }
-    else 
-        {
-        iCwRequester->GetCallWaitingL( aParams, aCallWaitingStatus );
-        }
-    
-    CSPLOGSTRING(CSPINT, "CSProvider::GetCallWaitingL >");
-    }
-    
-// ---------------------------------------------------------------------------
-// CSProvider::GetDiagnosticError
-// ---------------------------------------------------------------------------
-//
-TInt CSProvider::GetDiagnosticError( TName& aCallName )
-    {
-    CSPLOGSTRING2(CSPINT, 
-            "CSProvider::GetDiagnosticError call name %S", &aCallName );
-    return iMmCustom.GetDiagnosticInfo( aCallName );
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::NetworkSecurityStatus
-// ---------------------------------------------------------------------------
-//
-TBool CSProvider::NetworkSecurityStatus() const
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::NetworkSecurityStatus");
-    return iCipheringStatusMonitor->NetworkSecurityStatus();
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::SecureSpecified
-// ---------------------------------------------------------------------------
-//
-TBool CSProvider::SecureSpecified() const
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::SecureSpecified");
-    return iCipheringStatusMonitor->SecureSpecified();
-    }
-
-// ---------------------------------------------------------------------------
-// Remote alerting tone playing status. Error situation is handled as no tone.
-// ---------------------------------------------------------------------------
-//
-RMmCustomAPI::TRemoteAlertingToneStatus CSProvider::GetRemoteAlertingToneStatus()
-    {
-    RMmCustomAPI::TRemoteAlertingToneStatus status;
-    TInt err = iMmCustom.GetRemoteAlertingToneStatus( status );
-    if ( err )
-        {
-        status = RMmCustomAPI::EUiNoTone;
-        }
-    CSPLOGSTRING2(CSPINT, 
-        "CSProvider::GetRemoteAlertingToneStatus status: %d", status );
-    return status;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::SecuritySettingChanged
-// ---------------------------------------------------------------------------
-//
-void CSProvider::SecuritySettingChanged( TInt aValue )
-    {
-    CSPLOGSTRING2(CSPINT, 
-        "CSProvider::SecuritySettingChanged value: %d", aValue);
-    
-    TInt callCount = iCallArray->GetCallCount();
-    for (TInt i = 0; i < callCount; i++)
-        {
-        iCallArray->Get(i)->SecuritySettingChanged( aValue );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::CreateEtelConnectionsL
-// ---------------------------------------------------------------------------
-//
-void CSProvider::CreateEtelConnectionsL()
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::CreateEtelConnectionsL <");
-    
-    TInt errorCode( KErrNone );
-    TInt phoneCount( 0 );
-    RTelServer::TPhoneInfo phoneInfo;    
-
-    //This method connects the client to the ETel Server. 
-    //It must be used before any of other functions during a telephony session.
-    __ASSERT_ALWAYS( iServer.Connect( KNbrOfMessageSlots ) 
-        == KErrNone, Panic( ECSPPanicNoEtel ) );
-
-    //This method loads an ETel TSY module. mmtsy
-    errorCode = iServer.LoadPhoneModule( KMmTsyModuleName );
-    __ASSERT_ALWAYS( 
-        errorCode == KErrNone || errorCode == KErrAlreadyExists, 
-        Panic( ECSPPanicNoEtel ) );
-    
-    errorCode = iServer.SetExtendedErrorGranularity( 
-        RTelServer::EErrorExtended );
-    __ASSERT_ALWAYS( errorCode == KErrNone, Panic( ECSPPanicNoEtel ) );
-    
-    errorCode = iServer.SetPriorityClientV2();
-    CSPLOGSTRING2(CSPINT, "CSProvider:: Priority client: %d", errorCode );
-    if( KErrAlreadyExists == errorCode )
-    	{
-    	CSPLOGSTRING(CSPOBJECT, "CSProvider::CreateEtelConnectionsL() Already initialized");
-    	User::Leave( KErrAlreadyExists );
-    	}
-    //This method retrieves the total number of phones supported by all 
-    //the currently loaded ETel (TSY) modules.
-    errorCode = iServer.EnumeratePhones( phoneCount );
-    __ASSERT_ALWAYS( errorCode == KErrNone, Panic( ECSPPanicNoEtel ) );
-
-    //This method retrieves information associated with the specified phone
-    while ( phoneCount-- ) 
-        { 
-        errorCode = iServer.GetPhoneInfo( phoneCount, phoneInfo ); 
-        __ASSERT_ALWAYS( errorCode == KErrNone, Panic( ECSPPanicNoEtel ) );
-
-        if ( phoneInfo.iName == KMmTsyPhoneName )
-            {
-            phoneCount = 0;
-            }
-        } 
- 
-    //This method opens a phone subsession by name, 
-    //and starts the modem initialisation process.
-    errorCode = iMobilePhone.Open( iServer, phoneInfo.iName );
-    __ASSERT_ALWAYS( errorCode == KErrNone, Panic( ECSPPanicNoEtel ) );
-    
-    iMobilePhone.SetEmergencyClient(RPhone::EEmergencyCSVoiceCallRequest);
-    
-    errorCode = iMobileConferenceCall.Open( iMobilePhone ); 
-    __ASSERT_ALWAYS( errorCode == KErrNone, Panic( ECSPPanicNoEtel ) );
-    
-    errorCode = iMmCustom.Open( iMobilePhone );
-    __ASSERT_ALWAYS( errorCode == KErrNone, Panic( ECSPPanicNoEtel ) );
-    
-    iSsMonitor = new (ELeave) 
-            CSPSupplementaryServicesMonitor( *this, iMmCustom );
-    iSsMonitor->StartMonitoring();
-    
-    CSPLOGSTRING(CSPINT, "CSProvider::CreateEtelConnectionsL >");
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::HandleDivertOrBarring
-// Helper method.
-// ---------------------------------------------------------------------------
-//
-void CSProvider::HandleDivertOrBarring(TDesC& addr, RMmCustomAPI::TSsTypeAndMode& aSsTypeAndMode)
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::HandleDivertOrBarring <");
-    switch ( aSsTypeAndMode.iSsType )
-        {
-        // MO unconditional diverts
-        case RMmCustomAPI::ESsAllForwardings:
-        case RMmCustomAPI::ESsForwUncond:
-            {
-            if( aSsTypeAndMode.iSsMode == RMmCustomAPI::ESsModeActive )
-                {                
-                iSsObserver->CallForwardEventOccurred( 
-                            MCCPSsObserver::ECCPSsForwardUnconditionalModeActive,
-                            addr );
-                 }
-             else
-                {
-                iSsObserver->CallForwardEventOccurred( 
-                            MCCPSsObserver::ECCPSsForwardUnconditionalModeNotActive,
-                            addr );                                
-                }
-            break;
-            }
-        
-        // MO conditional diverts
-        case RMmCustomAPI::ESsForwBusy:
-        case RMmCustomAPI::ESsForwNoReply:
-        case RMmCustomAPI::ESsForwNoReach:
-        case RMmCustomAPI::ESsAllCondForwardings:
-            {
-            if( aSsTypeAndMode.iSsMode == RMmCustomAPI::ESsModeActive )
-                {
-                iSsObserver->CallForwardEventOccurred( 
-                            MCCPSsObserver::ECCPSsForwardConditionallyModeActive,
-                            addr );
-                }
-             else
-                {
-                iSsObserver->CallForwardEventOccurred( 
-                            MCCPSsObserver::ECCPSsForwardConditionallyModeNotActive,
-                            addr );
-                }
-             break;
-             }
-        default:
-            {
-            // No handling needed
-            }    
-        }
-    CSPLOGSTRING(CSPINT, "CSProvider::HandleDivertOrBarring >");
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::InitializeCallParameters
-// Initialises call parameters from SSSettings
-// ---------------------------------------------------------------------------
-//
-void CSProvider::InitializeCallParameters( RMobileCall::TMobileCallParamsV7& aParams )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::InitializeCallParameters <");
-    TInt defaultCug(0);
-    TInt cug(0);
-    
-    if( iSsSettingsHandler )
-        {
-        TRAP_IGNORE(iSsSettingsHandler->GetClirL( aParams.iIdRestrict ));
-        TRAP_IGNORE(iSsSettingsHandler->GetDefaultCugL( defaultCug ));
-        TRAP_IGNORE(iSsSettingsHandler->GetCugL( cug ));
-        }
-    
-    // This is always set to false thus allowing calls outside groups.
-    aParams.iCug.iSuppressOA = EFalse;    
-  
-    if ( cug >= 0 && cug != defaultCug ) // set group
-        {
-        // Invoke cug.
-        aParams.iCug.iCugIndex = cug; 
-        aParams.iCug.iExplicitInvoke = ETrue;
-        aParams.iCug.iSuppressPrefCug = ETrue;
-        }
-    else if ( cug == -1 ) // -1 supress
-        {
-        aParams.iCug.iCugIndex = defaultCug; 
-        aParams.iCug.iExplicitInvoke = ETrue;
-        aParams.iCug.iSuppressPrefCug = ETrue;
-        }
-    else    // default cug
-        {
-        aParams.iCug.iCugIndex = defaultCug; 
-        aParams.iCug.iExplicitInvoke = EFalse;
-        aParams.iCug.iSuppressPrefCug = EFalse;
-        }
-    CSPLOGSTRING(CSPINT, "CSProvider::InitializeCallParameters >");
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::InitializeDataCallParameters
-// Initialises call parameters from SSSettings
-// ---------------------------------------------------------------------------
-//
-void CSProvider::InitializeDataCallParameters( RMobileCall::TMobileHscsdCallParamsV1& aParams )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::InitializeDataCallParameters <");
-    TInt defaultCug(0);
-    TInt cug(0);
-    
-    if( iSsSettingsHandler )
-        {
-        TRAP_IGNORE(iSsSettingsHandler->GetClirL( aParams.iIdRestrict ));
-        TRAP_IGNORE(iSsSettingsHandler->GetDefaultCugL( defaultCug ));
-        TRAP_IGNORE(iSsSettingsHandler->GetCugL( cug ));
-        }
-        
-    // This is always set to false thus allowing calls outside groups.
-    aParams.iCug.iSuppressOA = EFalse;
-  
-    if ( cug >= 0 && cug != defaultCug ) // set group
-        {
-        // Invoke cug.
-        aParams.iCug.iCugIndex = cug; 
-        aParams.iCug.iExplicitInvoke = ETrue;
-        aParams.iCug.iSuppressPrefCug = ETrue;
-        }
-    else if ( cug == -1 ) // -1 supress
-        {
-        aParams.iCug.iCugIndex = defaultCug; 
-        aParams.iCug.iExplicitInvoke = ETrue;
-        aParams.iCug.iSuppressPrefCug = ETrue;
-        }
-    else    // default cug
-        {
-        aParams.iCug.iCugIndex = defaultCug; 
-        aParams.iCug.iExplicitInvoke = EFalse;
-        aParams.iCug.iSuppressPrefCug = EFalse;
-        }
-    
-    CSPLOGSTRING(CSPINT, "CSProvider::InitializeDataCallParameters >");
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::IndicateClientCall
-// This fucntion delivers call pointer to be managed by CCE.
-// ---------------------------------------------------------------------------
-//
-void CSProvider::IndicateClientCall( MCCPCSCall* aCall )
-    {
-    CSPLOGSTRING2(CSPINT, "CSProvider::IndicateClientCall call: %x", aCall); 
-    iCCPObserver->MoCallCreated( *aCall );
-    CSPLOGSTRING(CSPINT, "CSProvider::IndicateClientCall Inform CCE OK"); 
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::IndicateIncomingCall
-// This fucntion delivers call pointer to be managed by CCE.
-// ---------------------------------------------------------------------------
-//    
-TInt CSProvider::IndicateIncomingCall( MCCPCSCall* aCall )
-    {
-    CSPLOGSTRING2(CSPINT, 
-            "CSProvider::IncomingCallArrived call: %x, inform CCE", aCall);
-    iCCPObserver->IncomingCall( aCall );
-    return KErrNone;
-    }
-    
-// ---------------------------------------------------------------------------
-// CSProvider::NotifyDataPortName
-// ---------------------------------------------------------------------------
-//      
-void CSProvider::NotifyDataPortName( TName& aDataPortName )
-    {
-    CSPLOGSTRING2(CSPINT, 
-            "CSProvider::NotifyDataPortName name: %S", &aDataPortName);
-    iCCPObserver->DataPortName( aDataPortName );
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::HandleNotifyPSL
-// From MCSPPubSubObserver.
-// ---------------------------------------------------------------------------
-//  
-void CSProvider::HandleNotifyPSL( const TUid /*aUid*/, const TInt& /*aKey*/, 
-            const TRequestStatus& /*aStatus*/ )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::HandleNotifyPSL");
-    HandleSIMStatusL();
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::RemoteAlertingToneStatusChanged
-// From MCSPRemoteAlertingToneObserver.
-// Notify all calls about the change. Call is responsible for 
-// notifying observer if the status change was for the call.
-// ---------------------------------------------------------------------------
-// 
-void CSProvider::RemoteAlertingToneStatusChanged(
-    RMmCustomAPI::TRemoteAlertingToneStatus aNewStatus )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::RemoteAlertingToneStatusChanged");
-    for ( TInt i = 0; i < iCallArray->GetCallCount(); i++ )
-        {
-        CSPCall* call = iCallArray->Get( i );
-        if ( call )
-            {
-            call->RemoteAlertingToneStatusChanged( aNewStatus );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::HandleSIMStatusL
-// ---------------------------------------------------------------------------
-//  
-void CSProvider::HandleSIMStatusL()
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::HandleSIMStatusL");
-    if ( !iSsSettingsHandler && iSimStatusListener )
-        {
-        TInt simState( ESimNotReady );
-        TInt err = iSimStatusListener->Get( simState );
-        if ( err == KErrNone && simState == ESimUsable )
-            {
-            iSsSettingsHandler = CSPSsSettingsHandler::NewL( *iSsObserver );
-            }
-        else
-            {
-            CSPLOGSTRING2( CSPERROR, "CSProvider::HandleSIMStatusL, err: %d", err );
-            }    
-        }
-    
-    if ( iSsSettingsHandler && iSimStatusListener )
-        {
-        delete iSimStatusListener;
-        iSimStatusListener = NULL;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::IndicateActiveHangup
-// ---------------------------------------------------------------------------
-//  
-TInt CSProvider::IndicateActiveHangup( MCCPCallCommandHandling& aCall )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::IndicateActiveHangup");
-    return iCallCommandHandler->IndicateActiveHangup( aCall );
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::IndicateHangupComplete
-// ---------------------------------------------------------------------------
-//  
-TInt CSProvider::IndicateHangupComplete( MCCPCallCommandHandling& aCall )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::IndicateHangupComplete");
-    return iCallCommandHandler->IndicateHangupComplete( aCall );
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::IndicateDialRequest
-// ---------------------------------------------------------------------------
-//  
-TInt CSProvider::IndicateDialRequest( MCCPCallCommandHandling& aCall )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::IndicateDialRequest");
-    return iCallCommandHandler->IndicateDialRequest( aCall );
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::IndicateAnswerRequest
-// ---------------------------------------------------------------------------
-//  
-TInt CSProvider::IndicateAnswerRequest( MCCPCallCommandHandling& aCall )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::IndicateAnswerRequest");
-    return iCallCommandHandler->IndicateAnswerRequest( aCall );
-    }
-    
-// ---------------------------------------------------------------------------
-// CSProvider::DontReportTerminationError
-// ---------------------------------------------------------------------------
-//  
-TInt CSProvider::DontReportTerminationError()
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::DontReportTerminationError");
-   
-    TInt callCount = iCallArray->GetCallCount();
-    for ( TInt i = 0; i < callCount; i++ )
-        {
-        if ( iCallArray->Get(i)->State() == MCCPCallObserver::ECCPStateConnecting )
-            {
-            iCallArray->Get(i)->DontReportTerminationError();
-            return KErrNone;
-            }
-        }
-    return KErrNotFound;
-    }
-
-// ---------------------------------------------------------------------------
-// CSProvider::NotifyStateChange
-// ---------------------------------------------------------------------------
-//
-void CSProvider::NotifyStateChange( 
-            MCSPConferenceStatusObserver::TCSPConferenceState aStatus )
-    {
-    CSPLOGSTRING(CSPINT, "CSProvider::NotifyStateChange");
-    
-    if ( !iConferenceCall && 
-         aStatus == MCSPConferenceStatusObserver::ECSPConferenceActive )
-        {
-        TRAPD( err, iConferenceCall = CSPConferenceCall::NewL( 
-                                        iMobilePhone, *iCallArray, iServiceId ) );    
-        if ( KErrNone == err )
-            {
-            CSPLOGSTRING( CSPINT, "CSProvider::NotifyStateChange ext conference created" );
-            iCCPObserver->ConferenceCallCreated( *iConferenceCall );
-            }
-        else 
-            {
-            CSPLOGSTRING2(CSPERROR, "CSProvider::NotifyStateChange \
-                    ext conference creation error %d", err);
-            }
-        }
-   }
-    
-// End of File
-