diff -r 40a3f856b14d -r 41a7f70b3818 phoneengine/phonemodel/src/cpephonemodel.cpp --- a/phoneengine/phonemodel/src/cpephonemodel.cpp Thu Aug 19 09:54:27 2010 +0300 +++ b/phoneengine/phonemodel/src/cpephonemodel.cpp Tue Aug 31 15:14:29 2010 +0300 @@ -20,7 +20,6 @@ // INCLUDE FILES #include "cpeactivestarter.h" #include "cpeexternaldatahandler.h" -#include "cpeidlestatusmonitor.h" #include "cpemessagehandler.h" #include "cpephonemodel.h" #include "cpeservicehandling.h" @@ -39,10 +38,14 @@ #include #include #include +#include +#include +#include "phoneservices.h" // CONSTANTS const TInt KDriveProfile ( 6 ); const TInt KPECallTimerOff = 0; +const TInt KTimesToSplitValue = 16; // ==================== LOCAL FUNCTIONS ==================== @@ -96,6 +99,8 @@ TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::ConstructL: 5" ); iActiveStarter->StartUp(); TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::ConstructL: 6" ); + // Reserve needed callinfo and remoteinfo from heap. + iCallInfo = new ( ELeave ) RMobileCall::TMobileCallInfoV3; }// ConstructL // ----------------------------------------------------------------------------- @@ -145,6 +150,7 @@ delete iCallHandling; delete iExternalDataHandler; delete iCallStackCutter; + delete iCallInfo; if ( iActiveStarter ) { @@ -155,10 +161,7 @@ iFsSession.Close(); delete iEngineInfo; delete iConvergedCallEngine; - if ( iIdleStatusMonitor ) - { - delete iIdleStatusMonitor; - } + delete iPhoneServices; }// ~CPEPhoneModel // ----------------------------------------------------------------------------- @@ -229,6 +232,8 @@ return MESSAGE("EPEMessageClientDial"); case MPEPhoneModel::EPEMessageClientDialEmergency: return MESSAGE("EPEMessageClientDialEmergency"); + case MPEPhoneModel::EPEMessageDialServiceCall: + return MESSAGE("EPEMessageDialServiceCall"); case MPEPhoneModel::EPEMessageContinueEmergencyCallInitialization: return MESSAGE("EPEMessageContinueEmergencyCallInitialization"); case MPEPhoneModel::EPEMessageContinueDTMFSending: @@ -428,8 +433,6 @@ return MESSAGE("EPEMessageInitiatedEmergencyCall"); case MEngineMonitor::EPEMessageInitiatedEmergencyWhileActiveVideo: return MESSAGE("EPEMessageInitiatedEmergencyWhileActiveVideo"); - case MEngineMonitor::EPEMessageInitiatedMoCall: - return MESSAGE("EPEMessageInitiatedMoCall"); case MEngineMonitor::EPEMessagePacketNetworkDetached: return MESSAGE("EPEMessagePacketNetworkDetached"); case MEngineMonitor::EPEMessageRemoteBusy: @@ -456,16 +459,8 @@ return MESSAGE("EPEMessageCallAdded"); case MEngineMonitor::EPEMessageRemoteTerminated: return MESSAGE("EPEMessageRemoteTerminated"); - case MEngineMonitor::EPEMessageShowIMEI: - return MESSAGE("EPEMessageShowIMEI"); case MEngineMonitor::EPEMessageUnknown: return MESSAGE("EPEMessageUnknown"); - case MEngineMonitor::EPEMessagePromptSpeedDial: - return MESSAGE("EPEMessagePromptSpeedDial"); - case MEngineMonitor::EPEMessageSpeedDialNotAssigned: - return MESSAGE("EPEMessageSpeedDialNotAssigned"); - case MEngineMonitor::EPEMessageInvalidSpeedDial: - return MESSAGE("EPEMessageInvalidSpeedDial"); case MEngineMonitor::EPEMessageDataPortLoaned: return MESSAGE("EPEMessageDataPortLoaned"); @@ -480,12 +475,8 @@ case MEngineMonitor::EPEMessageRemotePartyInfoChanged: return MESSAGE("EPEMessageRemotePartyInfoChanged"); case MEngineMonitor::EPEMessageConnectingWithInband: - return MESSAGE("EPEMessageConnectingWithInband"); - case MEngineMonitor::EPEMessageColpNumberAvailable: - return MESSAGE("EPEMessageColpNumberAvailable"); - case MEngineMonitor::EPEMessageTransferCallBackRequest: - return MESSAGE("EPEMessageTransferCallBackRequest"); - + return MESSAGE("EPEMessageConnectingWithInband"); + // Contact messages 3000 - 3999 case MEngineMonitor::EPEMessageThumbnailLoadingCompleted: return MESSAGE("EPEMessageThumbnailLoadingCompleted"); @@ -561,8 +552,6 @@ return MESSAGE("EPEMessageInValidEmergencyNumber"); case MEngineMonitor::EPEMessageValidEmergencyNumber: return MESSAGE("EPEMessageValidEmergencyNumber"); - case MEngineMonitor::EPEMessagePhoneIdentityReady: - return MESSAGE("EPEMessagePhoneIdentityReady"); case MEngineMonitor::EPEMessageStartATDialing: return MESSAGE("EPEMessageStartATDialing"); case MEngineMonitor::EPEMessageLogEventSaved: @@ -586,15 +575,15 @@ case MEngineMonitor::EPEMessageCallBarred: return MESSAGE("EPEMessageCallBarred"); case MEngineMonitor::EPEMessageIncCallIsForw: - return MESSAGE("EPEMessageIncCallIsForw"); + return MESSAGE("EPEMessageIncCallIsForw"); case MEngineMonitor::EPEMessageIncCallForwToC: - return MESSAGE("EPEMessageIncCallForwToC"); + return MESSAGE("EPEMessageIncCallForwToC"); case MEngineMonitor::EPEMessageOutCallForwToC: - return MESSAGE("EPEMessageOutCallForwToC"); + return MESSAGE("EPEMessageOutCallForwToC"); case MEngineMonitor::EPEMessageForwardUnconditionalModeActive: - return MESSAGE( "EPEMessageForwardUnconditionalModeActive" ); + return MESSAGE( "EPEMessageForwardUnconditionalModeActive" ); case MEngineMonitor::EPEMessageForwardConditionallyModeActive: - return MESSAGE( "EPEMessageForwardConditionallyModeActive" ); + return MESSAGE( "EPEMessageForwardConditionallyModeActive" ); case MEngineMonitor::EPEMessageDroppedConferenceMember: return MESSAGE("EPEMessageDroppedConferenceMember"); case MEngineMonitor::EPEMessageGoingOneToOne: @@ -607,13 +596,13 @@ return MESSAGE("EPEMessageRemoteHeld"); case MEngineMonitor::EPEMessageRemoteResumed: return MESSAGE("EPEMessageRemoteResumed"); - case MEngineMonitor::EPEMessageShowVersion: - return MESSAGE("EPEMessageShowVersion"); case MEngineMonitor::EPEMessageTempClirSuppressUnsuccessful: return MESSAGE("EPEMessageTempClirSuppressUnsuccessful"); case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful: return MESSAGE("EPEMessageTempClirActivationUnsuccessful"); - + case MEngineMonitor::EPEMessageOutgoingCallBarred: + return MESSAGE("EPEMessageOutgoingCallBarred"); + // Contact messages 11400 - 11599 // Error messages 11600 - 11799 @@ -633,8 +622,6 @@ return MESSAGE("EPEMessageActivateRfsDeep"); case MEngineMonitor::EPEMessageActivateRfsNormal: return MESSAGE("EPEMessageActivateRfsNormal"); - case MEngineMonitor::EPEMessageActivateWarrantyMode: - return MESSAGE("EPEMessageActivateWarrantyMode"); case MEngineMonitor::EPEMessageIssuedSSRequest: return MESSAGE("EPEMessageIssuedSSRequest"); case MEngineMonitor::EPEMessageIssuingSSRequest: @@ -715,17 +702,15 @@ errorCode = iMessageHandler->HandleTerminateAllConnections( ); break; case MPEPhoneModel::EPEMessageDial: - //Make a dial request + //Make a dial request errorCode = iMessageHandler->HandleDialCall( EFalse ); break; case MPEPhoneModel::EPEMessageReleaseAll: //Make HangUp requests to all calls errorCode = iMessageHandler->HandleReleaseAll( ); break; case MPEPhoneModel::EPEMessageRelease: //Make HangUp request - errorCode = iMessageHandler->HandleReleaseCall( ); - break; case CPEPhoneModelIF::EPEMessageHangUpConference: - errorCode = iMessageHandler->HandleReleaseConference(); + errorCode = iMessageHandler->HandleReleaseCall( ); break; case MPEPhoneModel::EPEMessageAnswer: //Make Answer request errorCode = iMessageHandler->HandleAnswerCall( EFalse ); @@ -841,20 +826,22 @@ case MPEPhoneModel::EPEMessageDisableService: iMessageHandler->HandleDisableService(); break; - + case MPEPhoneModel::EPEMessageDialServiceCall: //Make Dial request + errorCode = iMessageHandler->HandleDialCall( EFalse ); + break; default: errorCode = ECCPErrorNotFound; break; } if( errorCode ) - { - TPEErrorInfo errorInfo; - errorInfo.iErrorCode = errorCode; - errorInfo.iCallId = KPECallIdNotUsed; - errorInfo.iErrorType = EPECcp; - iEngineMonitor.HandleError( errorInfo ); - } + { + TPEErrorInfo errorInfo; + errorInfo.iErrorCode = errorCode; + errorInfo.iCallId = KPECallIdNotUsed; + errorInfo.iErrorType = EPECcp; + iEngineMonitor.HandleError( errorInfo ); + } }// HandleMessage // ----------------------------------------------------------------------------- @@ -930,6 +917,12 @@ } } + if ( message == MEngineMonitor::EPEMessageOutgoingCallBarred ) + { + iEngineInfo->SetOutgoingCallBarringActivated( ETrue ); + message = KPEDontSendMessage; + } + if ( ( message == MEngineMonitor::EPEMessageIncoming ) ) { if ( FeatureManager::FeatureSupported( KFeatureIdDriveMode ) ) @@ -944,8 +937,8 @@ } if ( message == MEngineMonitor::EPEMessageChangedCallDuration ) - { - TInt callTimerSetting( EFalse ); + { + TInt callTimerSetting( EFalse ); // safe to ignore error code here, duration display equals to zero == off if it fails iExternalDataHandler->Get( EPECallDurationDisplaySetting, callTimerSetting ); // Message EPEMessageChangedCallDuration send supressed, if duration display is OFF @@ -953,7 +946,7 @@ { message = KPEDontSendMessage; } - } + } //MessageHandler may return error code if ( errorCode != ECCPErrorNone && errorCode != KPEDontSendMessage ) @@ -967,18 +960,20 @@ "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=%s, CallId=%d", messageName2.Ptr( ), aCallId ); #endif + SetCallError( aCallId ); TPEErrorInfo errorInfo; - errorInfo.iErrorCode = errorCode; - errorInfo.iCallId = aCallId; + errorInfo.iErrorCode = errorCode; + errorInfo.iCallId = aCallId; errorInfo.iErrorType = EPECcp; iEngineMonitor.HandleError( errorInfo ); } else if ( message == MEngineMonitor::EPEMessageCallHandlingError ) - { + { TEFLOGSTRING2( KTAERROR, "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=EPEMessageCallHandlingError, CallId=%d" , aCallId ); + SetCallError( aCallId ); TPEErrorInfo errorInfo = iEngineInfo->ErrorInfo(); errorInfo.iCallId = aCallId; errorInfo.iErrorType = EPECcp; @@ -990,17 +985,18 @@ iMessageHandler->AddSIMRejectedMoCsCallToLog( aCallId ); } iEngineMonitor.HandleError( errorInfo ); - } + } else if ( message == MEngineMonitor::EPEMessageServiceHandlingError ) { TEFLOGSTRING( KTAERROR, "PE cpephonemodel::sendmessage > iEngineMonitor.HandleError: messageName=EPEMessageServiceHandlingError" ); + SetCallError( aCallId ); TPEErrorInfo errorInfo = iEngineInfo->ErrorInfo(); errorInfo.iCallId = aCallId; errorInfo.iErrorType = EPECch; iEngineMonitor.HandleError( errorInfo ); - } + } else if ( message != KPEDontSendMessage && errorCode != KPEDontSendMessage ) { // Map message for PhoneApplication, since it doesn't use @@ -1111,6 +1107,8 @@ { errorCode = iMessageHandler->ContinueSwitchToCall( aCallId ); } + + iEngineInfo->SetOutgoingCallBarringActivated( EFalse ); break; case MEngineMonitor::EPEMessageRemoteBusy: @@ -1168,10 +1166,6 @@ errorCode = iMessageHandler->HandleDtmfSent(); break; - case MEngineMonitor::EPEMessageActivateWarrantyMode: - errorCode = iMessageHandler->HandleGetLifeTimerData( ); - break; - case MEngineMonitor::EPEMessageStartATDialing: errorCode = iMessageHandler->HandleDialCall( EFalse ); iMessageHandler->HandleATDialingStarted( errorCode ? EFalse : ETrue ); @@ -1250,11 +1244,6 @@ sendingDelayed = ETrue; } break; - case MEngineMonitor::EPEMessageTransferCallBackRequest: - { - sendingDelayed = ETrue; - } - break; default: // Other messages cause no action. break; @@ -1422,11 +1411,9 @@ case CPEPhoneModel::EPEContactHandlingPhaseTwo: { TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 15.1" ); - // Start Idle State monitor to finalize ContactHandling contruction - iIdleStatusMonitor = CPEIdleStatusMonitor::NewL (*this ); + static_cast< CPEContactHandlingProxy* >( iContactHandling )-> + CreateSecondPhaseL( *this, iFsSession ); TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 15.2" ); - - break; } case CPEPhoneModel::EPEMediatorCommandHandler: @@ -1434,11 +1421,48 @@ TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 16.1" ); // Start Mediator command listener iMediatorCommunicationHandler = CPERemotePartyInfoMediator::NewL( *this ); - - // This should be set after the last case - continueStepping = EFalse; break; } + case CPEPhoneModel::EPEPhoneServices: + { + TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 16.1" ); + __ASSERT_DEBUG( iMessageHandler, Panic( EPEPanicNullPointer ) ); + __ASSERT_DEBUG( iEngineInfo, Panic( EPEPanicNullPointer ) ); + iPhoneServices = new PhoneServices(*iMessageHandler, *iEngineInfo); + TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 16.2" ); + break; + } + + case CPEPhoneModel::EPENetworkHandling: + { + TEFLOGSTRING( KTAOBJECT, "CPEPhoneModel::StepL: 18.1" ); + continueStepping = EFalse; + QString service("networkhandlingstarter"); + QString interface("com.nokia.symbian.IStart"); + QString operation("start()"); + XQApplicationManager appManager; + + QScopedPointer request( + appManager.create(service, interface, operation, false)); + if (request == NULL) { + TEFLOGSTRING(KTAOBJECT, + "CPEPhoneModel::StepL 18.2 error, service not found"); + break; + } + XQRequestInfo info; + info.setForeground(false); + request->setInfo(info); + request->setSynchronous(false); + if (!request->send()) { + int error = request->lastError(); + TEFLOGSTRING2(KTAOBJECT, + "CPEPhoneModel::StepL 18.3 error %d", error); + break; + } + TEFLOGSTRING(KTAOBJECT, "CPEPhoneModel::StepL: 18.4"); + break; + } + default: { Panic( EPEPanicIndexOutOfRange ); @@ -1484,9 +1508,6 @@ TEFLOGSTRING( KTAOBJECT, "PE CPEPhoneModel::ConstructContactHandlingPhaseTwo, complete" ); SendMessage( MEngineMonitor::EPEMessagePEConstructionTwoPhaseReady ); - // not need any more - delete iIdleStatusMonitor; - iIdleStatusMonitor = NULL; } // ----------------------------------------------------------------------------- @@ -1505,4 +1526,23 @@ return KErrNone; } +// ----------------------------------------------------------------------------- +// SetCallError +// ----------------------------------------------------------------------------- +// +void CPEPhoneModel::SetCallError( TInt aCallId ) + { + TInt callError = KErrNone; + if ( iCallHandling ) + { + TInt err = iCallHandling->GetCallInfo( *iCallInfo, aCallId ); + + if ( err == KErrNone && ( iCallInfo->iExitCode & 0xFFFF0000 ) ) + { + callError = ( iCallInfo->iExitCode >> KTimesToSplitValue ); + //Set protocol spesific error code to TPEErrorInfo + EngineInfo()->SetProtocolError( callError, aCallId ); + } + } + } // End of File