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". |
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 |
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 |