smsprotocols/smsstack/smsprot/Src/smspbear.cpp
branchRCL_3
changeset 65 630d2f34d719
parent 0 3553901f7fa8
child 66 07a122eea281
equal deleted inserted replaced
61:17af172ffa5f 65:630d2f34d719
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    15 
    15 
    16 /**
    16 /**
    17  @file
    17  @file
    18 */
    18 */
    19 
    19 
       
    20 
       
    21 #include "OstTraceDefinitions.h"
       
    22 #ifdef OST_TRACE_COMPILER_IN_USE
       
    23 #include "smspbearTraces.h"
       
    24 #endif
       
    25 
    20 #include <commsdattypesv1_1.h>
    26 #include <commsdattypesv1_1.h>
    21 #include <cdbcols.h>
    27 #include <cdbcols.h>
    22 #include "smspmain.h"
    28 #include "smspmain.h"
    23 #include "smsuset.h"
    29 #include "smsuset.h"
    24 #include "smspcdb.h"
    30 #include "smspcdb.h"
    36  *  @leave Leaves if ContructL() leaves, or not enough memory is available.
    42  *  @leave Leaves if ContructL() leaves, or not enough memory is available.
    37  *  @return a new CSmspSetBearer object
    43  *  @return a new CSmspSetBearer object
    38  */
    44  */
    39 CSmspSetBearer* CSmspSetBearer::NewL(const TSmsSettings& aSmsSettings,RMobileSmsMessaging& aSmsMessaging, TInt aPriority)
    45 CSmspSetBearer* CSmspSetBearer::NewL(const TSmsSettings& aSmsSettings,RMobileSmsMessaging& aSmsMessaging, TInt aPriority)
    40 	{
    46 	{
    41 	LOGSMSPROT2("CSmspSetBearer::NewL aPriority = %d", aPriority);
    47 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_NEWL_1, "CSmspSetBearer::NewL aPriority = %d", aPriority);
    42 
    48 
    43 	CSmspSetBearer* smsSetBearer=new(ELeave) CSmspSetBearer(aSmsSettings,aSmsMessaging, aPriority);
    49 	CSmspSetBearer* smsSetBearer=new(ELeave) CSmspSetBearer(aSmsSettings,aSmsMessaging, aPriority);
    44 	CleanupStack::PushL(smsSetBearer);
    50 	CleanupStack::PushL(smsSetBearer);
    45 	smsSetBearer->ConstructL();
    51 	smsSetBearer->ConstructL();
    46 	CleanupStack::Pop();
    52 	CleanupStack::Pop();
    52 /**
    58 /**
    53  *  2-phase constructor, perform construction that can leave
    59  *  2-phase constructor, perform construction that can leave
    54  */
    60  */
    55 void CSmspSetBearer::ConstructL()
    61 void CSmspSetBearer::ConstructL()
    56 	{
    62 	{
    57 	LOGSMSPROT1("CSmspSetBearer::ConstructL()");
    63 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_CONSTRUCTL_1, "CSmspSetBearer::ConstructL()");
    58 
    64 
    59 	CSmspCommDbEvent::ConstructL();
    65 	CSmspCommDbEvent::ConstructL();
    60 
    66 
    61 	User::LeaveIfError(iProperty.Attach(KUidSystemCategory, KUidCommDbSMSBearerChange.iUid));
    67 	User::LeaveIfError(iProperty.Attach(KUidSystemCategory, KUidCommDbSMSBearerChange.iUid));
    62 	} // CSmspSetBearer::ConstructL
    68 	} // CSmspSetBearer::ConstructL
    90  *  Notifies if SMS bearer is set to the TSY. Start setting bearer
    96  *  Notifies if SMS bearer is set to the TSY. Start setting bearer
    91  *  process if bearer is not set.
    97  *  process if bearer is not set.
    92  */
    98  */
    93 void CSmspSetBearer::NotifyBearerSet(TRequestStatus& aStatus)
    99 void CSmspSetBearer::NotifyBearerSet(TRequestStatus& aStatus)
    94 	{
   100 	{
    95 	LOGSMSPROT2("CSmspSetBearer::NotifyBearerSet, aStatus = %d", aStatus.Int());
   101 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_NOTIFYBEARERSET_1, "CSmspSetBearer::NotifyBearerSet, aStatus = %d", aStatus.Int());
    96 	if (!iBearerSet && IsActive())
   102 	if (!iBearerSet && IsActive())
    97 		{
   103 		{
    98 		Cancel();
   104 		Cancel();
    99 		}
   105 		}
   100 
   106 
   101 	Queue(aStatus);
   107 	Queue(aStatus);
   102 
   108 
   103 	if (iBearerSet)
   109 	if (iBearerSet)
   104 		{
   110 		{
   105 		LOGSMSPROT1("CSmspSetBearer::NotifyBearerSet RequestComplete called");
   111 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_NOTIFYBEARERSET_2, "CSmspSetBearer::NotifyBearerSet RequestComplete called");
   106 		CSmsuActiveBase::Complete(KErrNone);
   112 		CSmsuActiveBase::Complete(KErrNone);
   107 		}
   113 		}
   108 	else
   114 	else
   109 		{
   115 		{
   110 		LOGSMSPROT1("CSmspSetBearer::NotifyBearerSet started");
   116 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_NOTIFYBEARERSET_3, "CSmspSetBearer::NotifyBearerSet started");
   111 		Start();
   117 		Start();
   112 		}
   118 		}
   113 	} // CSmspSetBearer::NotifyBearerSet
   119 	} // CSmspSetBearer::NotifyBearerSet
   114 
   120 
   115 
   121 
   116 /**
   122 /**
   117  *  Starts the sequence for configuring the current SMS bearer on the phone/TSY.
   123  *  Starts the sequence for configuring the current SMS bearer on the phone/TSY.
   118  */
   124  */
   119 void CSmspSetBearer::Start()
   125 void CSmspSetBearer::Start()
   120 	{
   126 	{
   121 	LOGSMSPROT1("CSmspSetBearer::Start");
   127 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_START_1, "CSmspSetBearer::Start");
   122 	// Cancel any outstanding request
   128 	// Cancel any outstanding request
   123 	TRAPD(err, GetSmsBearerL(iBearer));
   129 	TRAPD(err, GetSmsBearerL(iBearer));
   124 
   130 
   125 	iBearerSet = EFalse;
   131 	iBearerSet = EFalse;
   126 
   132 
   127 	if (err == KErrNone)
   133 	if (err == KErrNone)
   128 		{
   134 		{
   129 		LOGSMSPROT2("CSmspSetBearer::GetSmsBearerL() left with %d", err);
   135 		OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_START_2, "CSmspSetBearer::GetSmsBearerL() left with %d", err);
   130 
   136 
   131 		// Set the previous bearer to the one that has been read
   137 		// Set the previous bearer to the one that has been read
   132 		// from CommDB so that iPreviousBearer has an initial value
   138 		// from CommDB so that iPreviousBearer has an initial value
   133 		// when the smsstack is first started.
   139 		// when the smsstack is first started.
   134 		iPreviousBearer = iBearer;
   140 		iPreviousBearer = iBearer;
   135 		SetSmsBearer();
   141 		SetSmsBearer();
   136 		}
   142 		}
   137 	else
   143 	else
   138 		{
   144 		{
   139 		LOGSMSPROT2("CSmspSetBearer::Start failed to get SMS bearer, error = %d", err);
   145 		OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_START_3, "CSmspSetBearer::Start failed to get SMS bearer, error = %d", err);
   140 		Complete(err);
   146 		Complete(err);
   141 		}
   147 		}
   142 	} // CSmspSetBearer::Start
   148 	} // CSmspSetBearer::Start
   143 
   149 
   144 
   150 
   149  *  
   155  *  
   150  *  @leave Panic if RunL is called while object is in idle state.
   156  *  @leave Panic if RunL is called while object is in idle state.
   151  */
   157  */
   152 void CSmspSetBearer::DoRunL()
   158 void CSmspSetBearer::DoRunL()
   153 	{
   159 	{
   154 	LOGSMSPROT3("CSmspSetBearer::DoRunL(): iState=%d iStatus=%d", iState, iStatus.Int());
   160 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_DORUNL_1, "CSmspSetBearer::DoRunL(): iState=%d iStatus=%d", iState, iStatus.Int());
   155 
   161 
   156 	switch (iState)
   162 	switch (iState)
   157 		{
   163 		{
   158 		case ESmsSetBearerNotifyOnEvent:
   164 		case ESmsSetBearerNotifyOnEvent:
   159 			{
   165 			{
   168 				CleanupStack::PushL(dbSession);
   174 				CleanupStack::PushL(dbSession);
   169 				CMDBRecordSet<CCDGlobalSettingsRecord> globalSettingsRecord(KCDTIdGlobalSettingsRecord);
   175 				CMDBRecordSet<CCDGlobalSettingsRecord> globalSettingsRecord(KCDTIdGlobalSettingsRecord);
   170 				TRAPD(err, globalSettingsRecord.LoadL(*dbSession));
   176 				TRAPD(err, globalSettingsRecord.LoadL(*dbSession));
   171 				if (err != KErrNone)
   177 				if (err != KErrNone)
   172 					{
   178 					{
   173 					LOGSMSPROT2("CSmspSetBearer::DoRunL, could not load global settings, leave error code = %d", err);
   179 					OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_DORUNL_2, "CSmspSetBearer::DoRunL, could not load global settings, leave error code = %d", err);
   174 					User::Leave(err);
   180 					User::Leave(err);
   175 					}
   181 					}
   176 
   182 
   177 				iPreviousBearer = iBearer;
   183 				iPreviousBearer = iBearer;
   178 
   184 
   179 				LOGSMSPROT2("CSmspSetBearer::DoRunL Storing previous bearer setting. Previous bearer now = %d", iBearer);
   185 				OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_DORUNL_3, "CSmspSetBearer::DoRunL Storing previous bearer setting. Previous bearer now = %d", iBearer);
   180 
   186 
   181 				tempBearer = ((CCDGlobalSettingsRecord*)globalSettingsRecord.iRecords[0])->iSMSBearer;
   187 				tempBearer = ((CCDGlobalSettingsRecord*)globalSettingsRecord.iRecords[0])->iSMSBearer;
   182 				iBearer = static_cast<RMobileSmsMessaging::TMobileSmsBearer>(tempBearer);
   188 				iBearer = static_cast<RMobileSmsMessaging::TMobileSmsBearer>(tempBearer);
   183 
   189 
   184 				CleanupStack::PopAndDestroy(dbSession);
   190 				CleanupStack::PopAndDestroy(dbSession);
   202 				{
   208 				{
   203 				// Set bearer to previous value, if status!=KErrNone
   209 				// Set bearer to previous value, if status!=KErrNone
   204 				// (e.g. KErrNotSupported)
   210 				// (e.g. KErrNotSupported)
   205 				// Set global setting to previous value,
   211 				// Set global setting to previous value,
   206 				// then complete.
   212 				// then complete.
   207 				LOGSMSPROT3("CSmspSetBearer::DoRunL TSY failed to set MO SMS bearer. status = %d. Bearer = %d", iStatus.Int(), iBearer);
   213 				OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_DORUNL_4, "CSmspSetBearer::DoRunL TSY failed to set MO SMS bearer. status = %d. Bearer = %d", iStatus.Int(), iBearer);
   208 
   214 
   209 				iBearer = iPreviousBearer;
   215 				iBearer = iPreviousBearer;
   210 				LOGSMSPROT2("CSmspSetBearer::DoRunL Setting bearer back to previous setting. Bearer = %d", iBearer);
   216 				OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_DORUNL_5, "CSmspSetBearer::DoRunL Setting bearer back to previous setting. Bearer = %d", iBearer);
   211 
   217 
   212 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
   218 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
   213 				CMDBSession *dbSession = CMDBSession::NewL(KCDVersion1_2);
   219 				CMDBSession *dbSession = CMDBSession::NewL(KCDVersion1_2);
   214 #else
   220 #else
   215 				CMDBSession *dbSession = CMDBSession::NewL(KCDVersion1_1);
   221 				CMDBSession *dbSession = CMDBSession::NewL(KCDVersion1_1);
   217 				CleanupStack::PushL(dbSession);
   223 				CleanupStack::PushL(dbSession);
   218 				CMDBRecordSet<CCDGlobalSettingsRecord> globalSettingsRecord(KCDTIdGlobalSettingsRecord);
   224 				CMDBRecordSet<CCDGlobalSettingsRecord> globalSettingsRecord(KCDTIdGlobalSettingsRecord);
   219 				TRAPD(err, globalSettingsRecord.LoadL(*dbSession));
   225 				TRAPD(err, globalSettingsRecord.LoadL(*dbSession));
   220 				if (err != KErrNone)
   226 				if (err != KErrNone)
   221 					{
   227 					{
   222 					LOGSMSPROT2("CSmspSetBearer::DoRunL could not load global settings, error = %d", err);
   228 					OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_DORUNL_6, "CSmspSetBearer::DoRunL could not load global settings, error = %d", err);
   223 					User::Leave(err);
   229 					User::Leave(err);
   224 					}
   230 					}
   225 
   231 
   226 				((CCDGlobalSettingsRecord*)globalSettingsRecord.iRecords[0])->iSMSBearer = iPreviousBearer;
   232 				((CCDGlobalSettingsRecord*)globalSettingsRecord.iRecords[0])->iSMSBearer = iPreviousBearer;
   227 				TRAP(err, globalSettingsRecord.ModifyL(*dbSession));
   233 				TRAP(err, globalSettingsRecord.ModifyL(*dbSession));
   228 				if (err != KErrNone)
   234 				if (err != KErrNone)
   229 					{
   235 					{
   230 					LOGSMSPROT2("CSmspSetBearer::DoRunL could not modify global settings, error = %d", err);
   236 					OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_DORUNL_7, "CSmspSetBearer::DoRunL could not modify global settings, error = %d", err);
   231 					User::Leave(err);
   237 					User::Leave(err);
   232 					}
   238 					}
   233 
   239 
   234 				CleanupStack::PopAndDestroy(dbSession);
   240 				CleanupStack::PopAndDestroy(dbSession);
   235 				}
   241 				}
   254  *  Handles a request to cancel the state machine.
   260  *  Handles a request to cancel the state machine.
   255  *  Cancels any outstanding request and calls Complete().
   261  *  Cancels any outstanding request and calls Complete().
   256  */
   262  */
   257 void CSmspSetBearer::DoCancel()
   263 void CSmspSetBearer::DoCancel()
   258 	{
   264 	{
   259 	LOGSMSPROT1("CSmspSetBearer::DoCancel");
   265 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_DOCANCEL_1, "CSmspSetBearer::DoCancel");
   260 
   266 
   261 	TimedSetActiveCancel();
   267 	TimedSetActiveCancel();
   262 
   268 
   263 	// Explicitly set iBearerSet to false to ensure new bearer is set on each execution
   269 	// Explicitly set iBearerSet to false to ensure new bearer is set on each execution
   264 	iBearerSet = EFalse;
   270 	iBearerSet = EFalse;
   311  *  
   317  *  
   312  *  @param aBearer a reference to the TMobileSmsBearer.
   318  *  @param aBearer a reference to the TMobileSmsBearer.
   313  */
   319  */
   314 void CSmspSetBearer::GetSmsBearerL(RMobileSmsMessaging::TMobileSmsBearer& aBearer)
   320 void CSmspSetBearer::GetSmsBearerL(RMobileSmsMessaging::TMobileSmsBearer& aBearer)
   315 	{
   321 	{
   316 	LOGSMSPROT1("CSmspSetBearer::GetSmsBearerL()");
   322 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_GETSMSBEARERL_1, "CSmspSetBearer::GetSmsBearerL()");
   317 	
   323 	
   318 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
   324 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
   319 	CMDBSession* sess = CMDBSession::NewL(KCDVersion1_2);
   325 	CMDBSession* sess = CMDBSession::NewL(KCDVersion1_2);
   320 #else
   326 #else
   321 	CMDBSession* sess = CMDBSession::NewL(KCDVersion1_1);
   327 	CMDBSession* sess = CMDBSession::NewL(KCDVersion1_1);
   329 
   335 
   330 	smsBearerField->SetRecordId(1);
   336 	smsBearerField->SetRecordId(1);
   331 	smsBearerField->LoadL(*sess);
   337 	smsBearerField->LoadL(*sess);
   332 
   338 
   333 	aBearer = static_cast<RMobileSmsMessaging::TMobileSmsBearer>(static_cast<TUint32>(*smsBearerField));
   339 	aBearer = static_cast<RMobileSmsMessaging::TMobileSmsBearer>(static_cast<TUint32>(*smsBearerField));
   334 	LOGSMSPROT2("CSmspSetBearer::GetSmsBearerL(): aBearer=%d", aBearer);
   340 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_GETSMSBEARERL_2, "CSmspSetBearer::GetSmsBearerL(): aBearer=%d", aBearer);
   335 
   341 
   336 	CleanupStack::PopAndDestroy(smsBearerField);
   342 	CleanupStack::PopAndDestroy(smsBearerField);
   337 	CleanupStack::PopAndDestroy(sess);
   343 	CleanupStack::PopAndDestroy(sess);
   338 	} // CSmspSetBearer::GetSmsBearerL
   344 	} // CSmspSetBearer::GetSmsBearerL
   339 
   345 
   342  *  Performs the state transition to CSmspSetBearer::ESmsSetBearerStateSettingBearer
   348  *  Performs the state transition to CSmspSetBearer::ESmsSetBearerStateSettingBearer
   343  *  by trying to set the sms bearer on the phone/TSY.
   349  *  by trying to set the sms bearer on the phone/TSY.
   344  */
   350  */
   345 void CSmspSetBearer::SetSmsBearer()
   351 void CSmspSetBearer::SetSmsBearer()
   346 	{
   352 	{
   347 	LOGSMSPROT2("CSmspSetBearer::SetSmsBearer, iBearer = %d", iBearer);
   353 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_SETSMSBEARER_1, "CSmspSetBearer::SetSmsBearer, iBearer = %d", iBearer);
   348 
   354 
   349 	iBearerSet = EFalse;
   355 	iBearerSet = EFalse;
   350 	iState = ESmsSetBearerStateSettingBearer;
   356 	iState = ESmsSetBearerStateSettingBearer;
   351 
   357 
   352 	iSmsMessaging.SetMoSmsBearer(iStatus, iBearer);
   358 	iSmsMessaging.SetMoSmsBearer(iStatus, iBearer);
   357 /**
   363 /**
   358  *  Wait for notification from property for when the CommDB global setting SMS_BEARER changes
   364  *  Wait for notification from property for when the CommDB global setting SMS_BEARER changes
   359  */
   365  */
   360 void CSmspSetBearer::NotifyOnEvent()
   366 void CSmspSetBearer::NotifyOnEvent()
   361 	{
   367 	{
   362 	LOGSMSPROT1("CSmspSetBearer::NotifyOnEvent");
   368 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPSETBEARER_NOTIFYONEVENT_1, "CSmspSetBearer::NotifyOnEvent");
   363 
   369 
   364 	iState = ESmsSetBearerNotifyOnEvent;
   370 	iState = ESmsSetBearerNotifyOnEvent;
   365 	CSmspCommDbEvent::NotifyOnEvent();
   371 	CSmspCommDbEvent::NotifyOnEvent();
   366 	} // CSmspSetBearer::NotifyOnEvent
   372 	} // CSmspSetBearer::NotifyOnEvent