--- 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 <mccedtmfinterface.h>
#include <mpecontacthandling.h>
#include <mpeloghandling.h>
+#include <xqservicerequest.h>
+#include <xqappmgr.h>
+#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<XQAiwRequest> 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