--- a/phoneplugins/csplugin/src/csprovider.cpp Fri May 14 15:51:57 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
-