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