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