16 */ |
16 */ |
17 #include "cntsimutility.h" |
17 #include "cntsimutility.h" |
18 #include <mmtsy_names.h> |
18 #include <mmtsy_names.h> |
19 #include <startupdomainpskeys.h> |
19 #include <startupdomainpskeys.h> |
20 #include <e32property.h> |
20 #include <e32property.h> |
|
21 #include <centralrepository.h> |
|
22 |
|
23 // Number of keys used in central repository to keep latest import date |
|
24 // from SIM card: 5 IMSI strings and 5 dates. |
|
25 const int KCenRepKeysNumber = 10; |
|
26 const int KIMSISize = 15; |
|
27 const int KCenRepUid = 0x200315A8; |
21 |
28 |
22 CntSimUtility::CntSimUtility(StoreType type, int& error, QObject *parent) |
29 CntSimUtility::CntSimUtility(StoreType type, int& error, QObject *parent) |
23 : QObject(parent), |
30 : QObject(parent), |
24 m_etelStoreInfoPckg(m_etelStoreInfo), |
31 m_etelStoreInfoPckg(m_etelStoreInfo), |
25 m_serviceTablePckg(m_serviceTable), |
32 m_serviceTablePckg(m_serviceTable), |
163 } |
170 } |
164 TRequestStatus status; |
171 TRequestStatus status; |
165 m_etelPhone.SetFdnSetting(status, fdnStatus); |
172 m_etelPhone.SetFdnSetting(status, fdnStatus); |
166 User::WaitForRequest(status); |
173 User::WaitForRequest(status); |
167 return status.Int(); |
174 return status.Int(); |
|
175 } |
|
176 |
|
177 QDateTime CntSimUtility::getLastImportTime(int& error) |
|
178 { |
|
179 error = KErrNone; |
|
180 if (!isSimInserted()) { |
|
181 error = KErrAccessDenied; |
|
182 return QDateTime(); |
|
183 } |
|
184 |
|
185 // get IMSI |
|
186 TBuf<KIMSISize> imsiBuf; |
|
187 TRequestStatus reqStatus; |
|
188 m_etelPhone.GetSubscriberId(reqStatus, imsiBuf); |
|
189 User::WaitForRequest(reqStatus); |
|
190 if (reqStatus.Int() != KErrNone) { |
|
191 error = reqStatus.Int(); |
|
192 return QDateTime(); |
|
193 } |
|
194 |
|
195 CRepository* cenrep = NULL; |
|
196 TRAPD(err, cenrep = CRepository::NewL(TUid::Uid(KCenRepUid))); |
|
197 if (err != KErrNone) { |
|
198 error = err; |
|
199 return QDateTime(); |
|
200 } |
|
201 |
|
202 // find current IMSI in the stored values |
|
203 int lastImportDate = 0; |
|
204 for (int i = 1; i <= KCenRepKeysNumber; i+=2) { |
|
205 TBuf<KIMSISize> storedImsiBuf; |
|
206 if (cenrep->Get(i, storedImsiBuf) == KErrNone) { |
|
207 if (storedImsiBuf.Compare(imsiBuf) == 0) { |
|
208 if (cenrep->Get(i+1, lastImportDate) == KErrNone) { |
|
209 break; |
|
210 } |
|
211 } |
|
212 } |
|
213 } |
|
214 delete cenrep; |
|
215 cenrep = NULL; |
|
216 |
|
217 if (lastImportDate == 0) { |
|
218 error = KErrNotFound; |
|
219 return QDateTime(); |
|
220 } |
|
221 |
|
222 QDateTime retLastImportDate; |
|
223 retLastImportDate.setTime_t(lastImportDate); |
|
224 return retLastImportDate; |
|
225 } |
|
226 |
|
227 void CntSimUtility::setLastImportTime(int& error) |
|
228 { |
|
229 error = KErrNone; |
|
230 if (!isSimInserted()) { |
|
231 error = KErrAccessDenied; |
|
232 return; |
|
233 } |
|
234 |
|
235 // get IMSI |
|
236 TBuf<KIMSISize> imsiBuf; |
|
237 TRequestStatus reqStatus; |
|
238 m_etelPhone.GetSubscriberId(reqStatus, imsiBuf); |
|
239 User::WaitForRequest(reqStatus); |
|
240 if (reqStatus.Int() != KErrNone) { |
|
241 error = reqStatus.Int(); |
|
242 return; |
|
243 } |
|
244 |
|
245 CRepository* cenrep = NULL; |
|
246 TRAPD(err, cenrep = CRepository::NewL(TUid::Uid(KCenRepUid))); |
|
247 if (err != KErrNone) { |
|
248 error = err; |
|
249 return; |
|
250 } |
|
251 |
|
252 // find current IMSI in the stored values |
|
253 int lastImportDate = QDateTime::currentDateTime().toTime_t(); |
|
254 bool importDateUpdated = false; |
|
255 for (int i = 1; i <= KCenRepKeysNumber; i+=2) { |
|
256 TBuf<KIMSISize> storedImsiBuf; |
|
257 if (cenrep->Get(i, storedImsiBuf) == KErrNone) { |
|
258 if (storedImsiBuf.Compare(imsiBuf) == 0) { |
|
259 //current IMSI already stored, update import date |
|
260 if (cenrep->Set(i+1, lastImportDate) != KErrNone) { |
|
261 error = KErrAccessDenied; |
|
262 } |
|
263 importDateUpdated = true; |
|
264 break; |
|
265 } |
|
266 } |
|
267 } |
|
268 |
|
269 if (!importDateUpdated) { |
|
270 int oldestDate = 0; |
|
271 int key = 0; |
|
272 // contacts were not imported from this SIM before, |
|
273 // find oldest import date and replace it |
|
274 for (int j = 2; j <= KCenRepKeysNumber; j+=2) { |
|
275 int date; |
|
276 if (cenrep->Get(j, date) == KErrNone) { |
|
277 if (date >= oldestDate ) { |
|
278 oldestDate = date; |
|
279 key = j; |
|
280 } |
|
281 } |
|
282 } |
|
283 |
|
284 if (key == 0) { |
|
285 error = KErrAccessDenied; |
|
286 } |
|
287 else { |
|
288 if (cenrep->Set(key, lastImportDate) != KErrNone) { |
|
289 error = KErrAccessDenied; |
|
290 } |
|
291 if (cenrep->Set(key-1, imsiBuf) != KErrNone) { |
|
292 error = KErrAccessDenied; |
|
293 } |
|
294 } |
|
295 } |
|
296 |
|
297 delete cenrep; |
|
298 cenrep = NULL; |
168 } |
299 } |
169 |
300 |
170 bool CntSimUtility::startGetSimInfo() |
301 bool CntSimUtility::startGetSimInfo() |
171 { |
302 { |
172 if(m_asyncWorker->IsActive()) { |
303 if(m_asyncWorker->IsActive()) { |