|
1 /* |
|
2 * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Implementation of Session Object in the OMA SUPL Protocol Handler |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 #include <barsc2.h> |
|
23 #include <barsread2.h> |
|
24 #include <bautils.h> |
|
25 #include <networking/dnd_err.h> |
|
26 |
|
27 #include <e32def.h> |
|
28 #include <etelmm.h> |
|
29 #include <centralrepository.h> |
|
30 #include <CoreApplicationUIsSDKCRKeys.h> // for network mode (offline) |
|
31 |
|
32 |
|
33 #include <lbspositioninfo.h> |
|
34 #include <lbsfieldids.h> |
|
35 |
|
36 #include "epos_suplterminal.h" |
|
37 #include "epos_suplterminalconstants.h" |
|
38 #include "epos_suplterminalqop.h" |
|
39 |
|
40 #include "epos_comasuplnotification.h" |
|
41 #include "epos_csuplprotocolmanagerbase.h" |
|
42 #include "epos_csuplcommunicationmanager.h" |
|
43 #include "epos_csuplconnection.h" |
|
44 #include "lbs/epos_comasuplpossessionbase.h" |
|
45 #include "lbs/epos_comasuplposhandlerbase.h" |
|
46 #include "lbs/epos_comasuplinforequestlist.h" |
|
47 #include "epos_comasupllocationid.h" |
|
48 #include "epos_comasuplsessionid.h" |
|
49 #include "epos_comasuplresponse.h" |
|
50 #include "epos_comasuplpos.h" |
|
51 #include "epos_comasuplstart.h" |
|
52 #include "epos_comasupltriggeredstart.h" |
|
53 #include "epos_comasuplposinit.h" |
|
54 #include "epos_comasuplauthresponse.h" |
|
55 #include "epos_comasupltriggeredresponse.h" |
|
56 #include "epos_comasupltriggeredstop.h" |
|
57 #include "epos_comasuplauthrequest.h" |
|
58 #include "lbs/epos_comasuplposition.h" |
|
59 #include "lbs/epos_comasuplvelocity.h" |
|
60 #include "lbs/epos_comasuplsetcapabilities.h" |
|
61 #include "lbs/epos_eomasuplposerrors.h" |
|
62 #include "epos_comasuplinit.h" |
|
63 #include "epos_csuplsettings.h" |
|
64 #include "epos_csuplsettingsinternal.h" |
|
65 |
|
66 #include "epos_comasuplprotocolmanager2.h" |
|
67 #include "epos_comasuplsettings.h" |
|
68 #include "epos_comasupletelnotifier.h" |
|
69 #include "epos_comasuplsession2.h" |
|
70 |
|
71 #include "epos_comasuplconnrequestor.h" |
|
72 #include "epos_comasuplstate.h" |
|
73 #include "epos_comasuplstartstate.h" |
|
74 #include "epos_comasupltriggerstartstate.h" |
|
75 #include "epos_comasuplposinitstate.h" |
|
76 #include "epos_comasuplresponsestate.h" |
|
77 #include "epos_comasupltriggerresponsestate.h" |
|
78 #include "epos_comasuplendstate.h" |
|
79 #include "epos_comasuplreportstate.h" |
|
80 #include "epos_comasupltriggerstopstate.h" |
|
81 #include "epos_comasuplposstate.h" |
|
82 #include "epos_comasuplinitstate.h" |
|
83 #include "epos_comasuplposrequestor.h" |
|
84 #include "epos_omasuplconstants.h" |
|
85 #include "epos_comasupltrace.h" |
|
86 #include "epos_resourceutils.h" |
|
87 #include "epos_comasupltimeouttimer.h" |
|
88 #include "epos_comasupldialogtimer.h" |
|
89 #include "epos_tomasuplposmethod.h" |
|
90 #include "epos_omasuplconfigurationkeys.h" |
|
91 #include "epos_csuplsettingparams.h" |
|
92 #include "epos_comasuplasnbase.h" |
|
93 |
|
94 |
|
95 _LIT(KTraceFileName,"SUPL_OMA_SESSION::EPos_COMASuplSession2.cpp"); |
|
96 |
|
97 //Multiplying factor for conversion of ellipsoid to circle |
|
98 //formula used sqrt(-2*natural log(1-Confidence)) |
|
99 // actual value = 1.0107676525947896431381113653917 |
|
100 |
|
101 //const TReal MultiplyFactorOneSigma = 1.01076765; |
|
102 const TInt KMaxIntervalTime = 10; |
|
103 const TInt KMaxStartTime = 10; |
|
104 |
|
105 // ============================ MEMBER FUNCTIONS =============================== |
|
106 |
|
107 //Constructor |
|
108 COMASuplSession::COMASuplSession(RMobilePhone& aMobilePhone , |
|
109 TOMASuplReqType aRequestType, |
|
110 COMASuplPosHandlerBase *aPosHandler, |
|
111 MOMASuplSessionObserver& aSessionObserver, |
|
112 COMASuplSettings*& aSettings, |
|
113 COMASUPLProtocolManager2 &aProtoMgr, |
|
114 TInt aIpcSessionId, |
|
115 COMASuplAsnHandlerBase* aOMASuplAsnHandlerBase): |
|
116 |
|
117 iMobilePhone(aMobilePhone), |
|
118 iRequestType(aRequestType), |
|
119 iPosHandler(aPosHandler), |
|
120 iHSLPAddress(aSettings->SLPAddress()), |
|
121 iEncodedSuplInit(NULL), |
|
122 iSessionObserver(aSessionObserver), |
|
123 iSuplSettings(aSettings), |
|
124 iProtocolManager(aProtoMgr), |
|
125 iUIFlag(EFalse), |
|
126 iSessionIDFlag(EFalse), |
|
127 iRoaming(EFalse), |
|
128 iChanged(EFalse), |
|
129 iIpcSessionId(aIpcSessionId), |
|
130 iNwInitError(EFalse), |
|
131 iPersistFail(EFalse), |
|
132 iCapsFail(EFalse), |
|
133 iUsageDialog(EFalse), |
|
134 iUsageHomeNW(EFalse), |
|
135 iEtelNotify(EFalse), |
|
136 iEtelRoamingCheck(EFalse), |
|
137 iIapDialogShown(EFalse), |
|
138 iIapDlgTimerExpired(EFalse), |
|
139 iTriggerSession(EFalse), |
|
140 iOMASuplAsnHandlerBaseImpl(aOMASuplAsnHandlerBase), |
|
141 iTrgTimer(EFalse), |
|
142 iStartTimerFlag(EFalse), |
|
143 iTrgCancelRequest(EFalse), |
|
144 iClientNotify(EFalse), |
|
145 iDisconnected(EFalse) |
|
146 |
|
147 { |
|
148 } |
|
149 |
|
150 //2 nd Phase construction |
|
151 void COMASuplSession::ConstructL(CSuplCommunicationManager &aCommManager, |
|
152 CSuplSettingsInternal* aSettingsStorage, |
|
153 TDes& aIMSI) |
|
154 { |
|
155 iTrace = COMASuplTrace::NewL(); |
|
156 |
|
157 iTrace->Trace(_L("COMASuplSession::ConstructL"), KTraceFileName, __LINE__); |
|
158 |
|
159 |
|
160 iConnRequestor = COMASuplConnRequestor::NewL(aCommManager,iProtocolManager,KOMASuplHSLPPort,*this); |
|
161 TBuf<64> msg; |
|
162 msg.Copy(_L("Port Number is :")); |
|
163 msg.AppendNum(KOMASuplHSLPPort); |
|
164 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
165 |
|
166 |
|
167 iSuplStorageSettings = aSettingsStorage; |
|
168 |
|
169 iSuplSessionId = COMASuplSessionID::NewL(); |
|
170 iCompleteSelfRequestor = COMASuplCompleteSelfRequestor::NewL(*this); |
|
171 |
|
172 iSETCapabilities = COMASuplSETCapabilities::NewL(); |
|
173 |
|
174 //All caps are on...for NET initiated case |
|
175 iAllowedCapabilities = KGpsSETAssisted | KGpsSETBased | KAutonomousGps| KAFLT | KECID | KEOTD | KOTDOA | KCID; |
|
176 |
|
177 //Ownership transfer to iSuplSessionId |
|
178 COMASuplSETSessionID* SETSessionId = COMASuplSETSessionID::NewL(); |
|
179 |
|
180 iSuplSessionId->SetSETSessionID(SETSessionId); |
|
181 |
|
182 //Ownership transfer to iSuplSessionId |
|
183 iSuplSessionId->SetSLPSessionID(NULL); |
|
184 |
|
185 iSuplVersion.SetSuplVersion(KSuplMajorVersion,KSuplMinorVersion,KSuplRevision); |
|
186 |
|
187 if( aIMSI.Length() ) |
|
188 { |
|
189 iIMSI.Create( aIMSI ); |
|
190 } |
|
191 |
|
192 if(iPosHandler) |
|
193 { |
|
194 iTrace->Trace(_L("Creating POSSession..."), KTraceFileName, __LINE__); |
|
195 iPOSSession = iPosHandler->CreateNewSessionL(this); |
|
196 //Don't move this statement else where |
|
197 iOMASuplPOSRequestor = COMASuplPOSRequestor::NewL(this,iPOSSession); |
|
198 } |
|
199 else |
|
200 { |
|
201 iTrace->Trace(_L("No POS plugin exists..."), KTraceFileName, __LINE__); |
|
202 } |
|
203 |
|
204 |
|
205 iTimer = COMASuplTimeoutTimer::NewL(*this); |
|
206 |
|
207 |
|
208 iIapNotifier = COMASuplIapNotifier::NewL(*this); |
|
209 |
|
210 |
|
211 iDialogTimer = COMASuplDialogTimer::NewL(*this); |
|
212 |
|
213 iIsQoPPresent = EFalse; |
|
214 iIsFirstPOSMessage = ETrue; |
|
215 isTimeoutDialogTimerStarted = EFalse; |
|
216 |
|
217 iDiffTime = 0; |
|
218 iSessionCompletionCode = KErrCompletion; |
|
219 iClientName.CreateL(256); |
|
220 iRequestorName.CreateL(256); |
|
221 iRequestorName.Zero(); |
|
222 iNetworkPrivacy = CPosNetworkPrivacy::NewL(); |
|
223 iRequestorId = 0; |
|
224 iTrace->Trace(_L("End of COMASuplSession::ConstructL"), KTraceFileName, __LINE__); |
|
225 } |
|
226 |
|
227 // |
|
228 // ----------------------------------------------------------------------------- |
|
229 // COMASuplSession::NewL |
|
230 // Creates new instance of COMASuplSession |
|
231 // (other items were commented in a header). |
|
232 // ----------------------------------------------------------------------------- |
|
233 // |
|
234 COMASuplSession* COMASuplSession::NewL(CSuplCommunicationManager& aCommManager, |
|
235 RMobilePhone& aMobilePhone, |
|
236 COMASuplSettings*& aSettings, |
|
237 CSuplSettingsInternal* aSettingsStorage, |
|
238 TOMASuplReqType aRequestType, |
|
239 MOMASuplSessionObserver& aSessionObserver, |
|
240 COMASuplPosHandlerBase *aPosHandler, |
|
241 TDes& aIMSI, |
|
242 COMASUPLProtocolManager2 &aProtoMgr, |
|
243 TInt aIpcSessionId, |
|
244 COMASuplAsnHandlerBase* aOMASuplAsnHandlerBase) |
|
245 { |
|
246 COMASuplSession* self = new( ELeave ) |
|
247 COMASuplSession( aMobilePhone,aRequestType, aPosHandler, |
|
248 aSessionObserver, aSettings, aProtoMgr, aIpcSessionId,aOMASuplAsnHandlerBase); |
|
249 CleanupStack::PushL( self ); |
|
250 self->ConstructL( aCommManager, aSettingsStorage, aIMSI ); |
|
251 CleanupStack::Pop(self); |
|
252 return self; |
|
253 } |
|
254 |
|
255 // ----------------------------------------------------------------------------- |
|
256 // COMASuplSession::DestroySession |
|
257 // This method will delete this session..since only protocol manager will delete session object |
|
258 // (other items were commented in a header). |
|
259 // ----------------------------------------------------------------------------- |
|
260 // |
|
261 void COMASuplSession::DestroySession() |
|
262 { |
|
263 iTrace->Trace(_L("COMASuplSession::DestroySession"), KTraceFileName, __LINE__); |
|
264 |
|
265 //This is for sending SUPL_END if session is destroed while RunSession is going on. |
|
266 if(iRequestType == ESUPL_TERMINAL && iSuplSessionState!= ESUPL_TERMINATED) |
|
267 { |
|
268 CancelRunSession(); |
|
269 SessionEnd(); |
|
270 CompleteSession(KErrCancel); |
|
271 } |
|
272 |
|
273 delete this; |
|
274 } |
|
275 |
|
276 // ----------------------------------------------------------------------------- |
|
277 // COMASuplSession::PosPlugInUnloaded |
|
278 // Handles Pos handler unload |
|
279 // ----------------------------------------------------------------------------- |
|
280 void COMASuplSession::PosPlugInUnloaded() |
|
281 { |
|
282 iTrace->Trace(_L("COMASuplSession::PosPlugInUnloaded"), KTraceFileName, __LINE__); |
|
283 |
|
284 // Cancel the Session |
|
285 CancelSession(); |
|
286 |
|
287 // Delete the POS Requestor |
|
288 delete iOMASuplPOSRequestor; |
|
289 iOMASuplPOSRequestor = NULL; |
|
290 |
|
291 // Delete the POS Session |
|
292 delete iPOSSession; |
|
293 iPOSSession = NULL; |
|
294 |
|
295 if(iSuplSessionState == ESUPL_SEND) |
|
296 { |
|
297 CompleteSession(KErrCompletion); |
|
298 } |
|
299 else |
|
300 { |
|
301 //Close Connection : bug Fix. |
|
302 iConnRequestor->CloseConnection(); |
|
303 iPortNum = 0; |
|
304 iSessionObserver.TerminateSession(this, KErrCompletion); |
|
305 } |
|
306 } |
|
307 |
|
308 |
|
309 //Desrtuctor |
|
310 COMASuplSession::~COMASuplSession() |
|
311 { |
|
312 if(iTrace) |
|
313 iTrace->Trace(_L("Start ~COMASuplSession::COMASuplSession"), KTraceFileName, __LINE__); |
|
314 |
|
315 CleanUp(); |
|
316 |
|
317 delete iEncodedBuffer; |
|
318 delete iSuplState; |
|
319 delete iOMASuplPOSRequestor; |
|
320 delete iConnRequestor; |
|
321 delete iSuplSessionId; |
|
322 delete iCompleteSelfRequestor; |
|
323 delete iDecodedAsnMessage; |
|
324 delete iSETCapabilities; |
|
325 delete iPosition; |
|
326 delete iEncodedSuplInit; |
|
327 delete iPOSSession; |
|
328 iPOSSession = NULL; |
|
329 delete iTimer; |
|
330 delete iIapNotifier; |
|
331 iIMSI.Close(); |
|
332 delete iDialogTimer; |
|
333 iClientName.Close(); |
|
334 iRequestorName.Close(); |
|
335 delete iSuplReqInfo; |
|
336 delete iNetworkPrivacy; |
|
337 |
|
338 if(iTrace) |
|
339 iTrace->Trace(_L("End of ~COMASuplSession::COMASuplSession"), KTraceFileName, __LINE__); |
|
340 |
|
341 delete iTrace; |
|
342 } |
|
343 |
|
344 // ----------------------------------------------------------------------------- |
|
345 // COMASuplSession::Initialize |
|
346 // This method initializes the OMA SUPL Session Object |
|
347 // (other items were commented in a header). |
|
348 // ----------------------------------------------------------------------------- |
|
349 // |
|
350 void COMASuplSession::InitializeL(TInt aRequestID) |
|
351 { |
|
352 iSuplSessionState = ESUPL_INITIALIZED; |
|
353 iRequestID = aRequestID; |
|
354 if(iPOSSession) |
|
355 { |
|
356 iTrace->Trace(_L("COMASuplSession::InitializeL of POS"), KTraceFileName, __LINE__); |
|
357 iOMASuplPOSRequestor->SetObserver(this); |
|
358 TInt err = iOMASuplPOSRequestor->InitilizePOSSessionL(aRequestID); |
|
359 if(err != KErrNone) |
|
360 { |
|
361 iTrace->Trace(_L("Initilization Failed ..."), KTraceFileName, __LINE__); |
|
362 CompleteSession(KErrNotReady); |
|
363 } |
|
364 } |
|
365 else |
|
366 { |
|
367 iTrace->Trace(_L("InitializeL, calling OperationCompleteL"), KTraceFileName, __LINE__); |
|
368 OperationCompleteL(KErrNone); |
|
369 } |
|
370 } |
|
371 |
|
372 // ----------------------------------------------------------------------------- |
|
373 // COMASuplSession::CleanUp |
|
374 // Perfomrs clean up operations on the OMA SUPL Session Object |
|
375 // This releases any resource held by the object |
|
376 // (other items were commented in a header). |
|
377 // ----------------------------------------------------------------------------- |
|
378 // |
|
379 void COMASuplSession::CleanUp() |
|
380 { |
|
381 if(iTrace) |
|
382 iTrace->Trace(_L("COMASuplSession::CleanUp"), KTraceFileName, __LINE__); |
|
383 |
|
384 if(iSuplState) |
|
385 { |
|
386 if(iSuplSessionState != ESUPL_SESSION_ERROR) |
|
387 { |
|
388 iSuplState->CancelOperation(); |
|
389 } |
|
390 } |
|
391 |
|
392 iConnRequestor->Cancel(); |
|
393 |
|
394 delete iEncodedBuffer; |
|
395 iEncodedBuffer = NULL; |
|
396 delete iDecodedAsnMessage; |
|
397 iDecodedAsnMessage = NULL; |
|
398 RemoveActiveSession(); |
|
399 if(iTrace) |
|
400 iTrace->Trace(_L("End of COMASuplSession::CleanUp"), KTraceFileName, __LINE__); |
|
401 } |
|
402 |
|
403 |
|
404 // ----------------------------------------------------------------------------- |
|
405 // COMASuplSession::RequestType |
|
406 // Returns the type of request associated with the session |
|
407 // (other items were commented in a header). |
|
408 // ----------------------------------------------------------------------------- |
|
409 // |
|
410 COMASuplSession::TOMASuplReqType COMASuplSession::RequestType() |
|
411 { |
|
412 return iRequestType; //SET OR NET |
|
413 } |
|
414 |
|
415 // ----------------------------------------------------------------------------- |
|
416 // COMASuplSession::SessionEnd |
|
417 // Cleans up the session and completes |
|
418 // (other items were commented in a header). |
|
419 // ----------------------------------------------------------------------------- |
|
420 // |
|
421 void COMASuplSession::SessionEnd() |
|
422 { |
|
423 iSuplSessionState = ESUPL_TERMINATED; |
|
424 |
|
425 // Invoke SessionEnd on the POS Session |
|
426 iTrace->Trace(_L("COMASuplSession::SessionEnd"), KTraceFileName, __LINE__); |
|
427 // CleanUp |
|
428 CleanUp(); |
|
429 if(iPOSSession) |
|
430 { |
|
431 iPOSSession->SessionEnd(); |
|
432 iTrace->Trace(_L("POS Session...COMASuplSession::SessionEnd."), KTraceFileName, __LINE__); |
|
433 } |
|
434 } |
|
435 // ----------------------------------------------------------------------------- |
|
436 // COMASuplSession::RunSuplSession |
|
437 // Starts the SUPL Sesssion for Terminal Initiated Location Request |
|
438 // The call to this method will result in the generation of SUPL START |
|
439 // and sending of the SUPL START packet to the SLP. |
|
440 // (other items were commented in a header). |
|
441 // ----------------------------------------------------------------------------- |
|
442 // |
|
443 void COMASuplSession::RunSuplSessionL(TRequestStatus& aStatus, TBool aFirstReq, const TDesC& aHslpAddress, |
|
444 TBool aFallBack, TInt aAllowedCapabilities, |
|
445 TInt aSessionIdSeed,TInt aRequestID) |
|
446 { |
|
447 iRunRequestStatus = & aStatus; |
|
448 *iRunRequestStatus = KRequestPending; |
|
449 |
|
450 iRequestID = aRequestID; |
|
451 |
|
452 iTrace->Trace(_L("Start COMASuplSession::RunSuplSession"), KTraceFileName, __LINE__); |
|
453 |
|
454 // Log Session Id |
|
455 TBuf<64> id; |
|
456 id.Append(_L("Session Id is ")); |
|
457 id.AppendNum(aSessionIdSeed); |
|
458 iTrace->Trace(id,KTraceFileName, __LINE__); |
|
459 |
|
460 // Log Capability from client |
|
461 id.Copy(_L("Received Capability is ")); |
|
462 id.AppendNum(aAllowedCapabilities); |
|
463 iTrace->Trace(id,KTraceFileName, __LINE__); |
|
464 |
|
465 iSETSessionUniqueId = aSessionIdSeed; |
|
466 |
|
467 |
|
468 TInt networkMode = 1; |
|
469 networkMode = GetNetworkModeL(); |
|
470 |
|
471 if ( networkMode == ECoreAppUIsNetworkConnectionNotAllowed ) |
|
472 { |
|
473 id.Copy(_L("The device is in OFFLINE mode.")); |
|
474 iTrace->Trace(id,KTraceFileName, __LINE__); |
|
475 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
476 return; |
|
477 } |
|
478 else |
|
479 { |
|
480 id.Copy(_L("The device is in ON LINE mode.")); |
|
481 iTrace->Trace(id,KTraceFileName, __LINE__); |
|
482 } |
|
483 |
|
484 if(aAllowedCapabilities == 0) |
|
485 { |
|
486 iAllowedCapabilities = KGpsSETAssisted | KGpsSETBased | KAutonomousGps| KAFLT | KECID | KEOTD | KOTDOA | KCID; |
|
487 } |
|
488 else |
|
489 { |
|
490 iAllowedCapabilities = aAllowedCapabilities; |
|
491 } |
|
492 |
|
493 //Ownership transfer to iSuplSessionId |
|
494 iSuplSessionId->SetSLPSessionID(NULL); |
|
495 |
|
496 iConnRequestor->SetDefaultParametersL(aHslpAddress,aFallBack); |
|
497 |
|
498 if (aFirstReq) |
|
499 CheckForSuplUsageL(); |
|
500 else |
|
501 CheckForPreviousResultL(); |
|
502 |
|
503 |
|
504 |
|
505 // Clear Position.... |
|
506 delete iPosition; |
|
507 iPosition = NULL; |
|
508 |
|
509 |
|
510 iTrace->Trace(_L("End of COMASuplSession::RunSuplSession"), KTraceFileName, __LINE__); |
|
511 } |
|
512 |
|
513 // ----------------------------------------------------------------------------- |
|
514 // COMASuplSession::RunSuplSession |
|
515 // Starts the SUPL Sesssion for Terminal Initiated Location Request, with QoP |
|
516 // The call to this method will result in the generation of SUPL START |
|
517 // and sending of the SUPL START packet to the SLP. |
|
518 // (other items were commented in a header). |
|
519 // ----------------------------------------------------------------------------- |
|
520 // |
|
521 void COMASuplSession::RunSuplSessionL(TRequestStatus& aStatus, TBool aFirstReq, |
|
522 const TDesC& aHslpAddress, TBool aFallBack, |
|
523 TInt aAllowedCapabilities,TInt aSessionIdSeed, |
|
524 TSuplTerminalQop& aQop, TInt aRequestID) |
|
525 { |
|
526 |
|
527 |
|
528 iClientQop = aQop; |
|
529 |
|
530 TInt delay; |
|
531 if(iClientQop.GetDelay(delay) != KErrNotFound) |
|
532 { |
|
533 iSessionStartTime.HomeTime(); |
|
534 } |
|
535 |
|
536 iIsQoPPresent = ETrue; |
|
537 RunSuplSessionL(aStatus,aFirstReq, aHslpAddress, aFallBack, aAllowedCapabilities,aSessionIdSeed,aRequestID); |
|
538 } |
|
539 |
|
540 // ----------------------------------------------------------------------------- |
|
541 // CSuplSession::RunInvalidSessionL |
|
542 // Starts the SUPL Sesssion for Invalid Session ID |
|
543 // Completes Self so that protocol Manager can process other stuff |
|
544 // (other items were commented in a header). |
|
545 // ----------------------------------------------------------------------------- |
|
546 // |
|
547 void COMASuplSession::RunInvalidSessionL(COMASuplAsnMessageBase* aDecodedMsg) |
|
548 { |
|
549 |
|
550 // Check if the message type is SUPL END |
|
551 COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedMsg->MessageType(); |
|
552 |
|
553 if(messageType == COMASuplAsnMessageBase::ESUPL_END) |
|
554 { |
|
555 return; |
|
556 } |
|
557 |
|
558 COMASuplSessionID* retrivedSessionID = NULL; |
|
559 aDecodedMsg->SessionId(retrivedSessionID); |
|
560 |
|
561 // Set the SessionId. |
|
562 UpdateSLPSessionIDL(retrivedSessionID); |
|
563 UpdateSETSessionIDL(retrivedSessionID); |
|
564 |
|
565 //Set default slp to Conn Requestor... |
|
566 iConnRequestor->UseDefaultServerL(); |
|
567 |
|
568 // Complete Self |
|
569 iCompleteSelfRequestor->CompleteInvalidSession(); |
|
570 |
|
571 } |
|
572 |
|
573 // ----------------------------------------------------------------------------- |
|
574 // CSuplSession::StartInvalidSessionL |
|
575 // Starts the SUPL Sesssion for Invalid Session ID |
|
576 // Generate SUPL End with error state set ti Invalid Session |
|
577 // (other items were commented in a header). |
|
578 // ----------------------------------------------------------------------------- |
|
579 // |
|
580 void COMASuplSession::StartInvalidSessionL() |
|
581 { |
|
582 iTrace->Trace(_L("Start COMASuplSession::StartInvalidSessionL"), KTraceFileName, __LINE__); |
|
583 iErrorStatusCode = COMASuplEnd::EInvalidSessionId; |
|
584 GenerateSuplEndL(); |
|
585 } |
|
586 |
|
587 // ----------------------------------------------------------------------------- |
|
588 // CSuplSession::GenerateSuplMessage |
|
589 // This method generates an appropriate SUPL Message based on the state |
|
590 // of the SUPL object |
|
591 // |
|
592 // (other items were commented in a header). |
|
593 // ----------------------------------------------------------------------------- |
|
594 // |
|
595 void COMASuplSession::GenerateSuplMessageL() |
|
596 { |
|
597 switch(iSuplSessionState) |
|
598 { |
|
599 //case ESUPL_INITIALIZED: |
|
600 case ESUPL_CONNECTING: |
|
601 { |
|
602 if(iRequestType == ESUPL_TERMINAL ) |
|
603 { |
|
604 if (iTriggerSession) |
|
605 { |
|
606 if (iTrgCancelRequest) |
|
607 { |
|
608 iTrgCancelRequest = EFalse; |
|
609 iErrorStatusCode = COMASuplEnd::EVer2SessionStopped; |
|
610 GenerateSuplTriggerStopL(); |
|
611 } |
|
612 else if (iSuplMsgType == ESUPL_TRIG_RESPONSE || iSuplMsgType == ESUPL_REPORT) |
|
613 { |
|
614 GenerateSuplPosInitL(); |
|
615 } |
|
616 else |
|
617 { |
|
618 GenerateSuplTriggerStartL(); |
|
619 } |
|
620 } |
|
621 else |
|
622 GenerateSuplStartL(); |
|
623 } |
|
624 if(iRequestType == ESUPL_NETWORK ) |
|
625 { |
|
626 if (iTriggerSession) |
|
627 { |
|
628 if (iTrgCancelRequest) |
|
629 { |
|
630 iTrgCancelRequest = EFalse; |
|
631 iErrorStatusCode = COMASuplEnd::EVer2SessionStopped; |
|
632 GenerateSuplTriggerStopL(); |
|
633 } |
|
634 else if (iSuplMsgType == ESUPL_TRIG_RESPONSE || iSuplMsgType == ESUPL_REPORT) |
|
635 { |
|
636 GenerateSuplPosInitL(); |
|
637 } |
|
638 else |
|
639 { |
|
640 GenerateSuplTriggerStartL(); |
|
641 } |
|
642 } |
|
643 else |
|
644 GenerateSuplPosInitL(); |
|
645 } |
|
646 if(iRequestType == ESUPL_INVALID_SESSION ) |
|
647 { |
|
648 GenerateSuplEndL(); |
|
649 } |
|
650 |
|
651 break; |
|
652 } |
|
653 case ESUPL_GENERATE: |
|
654 { |
|
655 switch(iSuplMsgType) |
|
656 { |
|
657 case ESUPL_RESPONSE: |
|
658 case ESUPL_TRIG_RESPONSE: |
|
659 case ESUPL_REPORT: |
|
660 case ESUPL_INIT: |
|
661 GenerateSuplPosInitL(); |
|
662 break; |
|
663 case ESUPL_END: |
|
664 GenerateSuplEndL(); |
|
665 break; |
|
666 case ESUPL_POS: |
|
667 GenerateSuplPosL(); |
|
668 break; |
|
669 case ESUPL_TRIG_STOP: |
|
670 GenerateSuplTriggerStopL(); |
|
671 break; |
|
672 default: |
|
673 // Error |
|
674 break; |
|
675 } |
|
676 break; |
|
677 } |
|
678 } |
|
679 } |
|
680 |
|
681 // ----------------------------------------------------------------------------- |
|
682 // COMASuplSession::GenerateSuplStart |
|
683 // Generate SUPL START from session |
|
684 // (other items were commented in a header). |
|
685 // ----------------------------------------------------------------------------- |
|
686 // |
|
687 void COMASuplSession::GenerateSuplStartL() |
|
688 { |
|
689 iTrace->Trace(_L("Start of COMASuplSession::GenerateSuplStartL"), KTraceFileName, __LINE__); |
|
690 |
|
691 // Free the existing state if any |
|
692 delete iSuplState; |
|
693 iSuplState = NULL; |
|
694 |
|
695 iSuplState = COMASuplStartState::NewL(iMobilePhone, iUT1_StartTimer,iOMASuplPOSRequestor,iOMASuplAsnHandlerBaseImpl,iAllowedCapabilities); |
|
696 iSuplState->SetMsgStateObserver(this); |
|
697 if(iIsQoPPresent) |
|
698 { |
|
699 COMASuplStartState* startSuplState = static_cast <COMASuplPosInitState *>(iSuplState); |
|
700 startSuplState->SetQop(iClientQop); |
|
701 } |
|
702 |
|
703 TInt err = iSuplState->GenerateMessageL(); |
|
704 iSuplMsgType = ESUPL_START; |
|
705 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
706 } |
|
707 |
|
708 // ----------------------------------------------------------------------------- |
|
709 // COMASuplSession::GenerateSuplTriggerStart |
|
710 // Generate SUPL TRIGGER START from session |
|
711 // (other items were commented in a header). |
|
712 // ----------------------------------------------------------------------------- |
|
713 // |
|
714 void COMASuplSession::GenerateSuplTriggerStartL() |
|
715 { |
|
716 iTrace->Trace(_L("Start of COMASuplSession::GenerateSuplTriggerStartL"), KTraceFileName, __LINE__); |
|
717 |
|
718 // Free the existing state if any |
|
719 delete iSuplState; |
|
720 iSuplState = NULL; |
|
721 |
|
722 iSuplState = COMASuplTriggerStartState::NewL(iMobilePhone, iUT1_StartTimer,iOMASuplPOSRequestor,iOMASuplAsnHandlerBaseImpl,iAllowedCapabilities, iTriggerParams, iRequestType); |
|
723 iSuplState->SetMsgStateObserver(this); |
|
724 if(iIsQoPPresent) |
|
725 { |
|
726 COMASuplTriggerStartState* startSuplState = static_cast <COMASuplTriggerStartState *>(iSuplState); |
|
727 startSuplState->SetQop(iClientQop); |
|
728 } |
|
729 |
|
730 TInt err = iSuplState->GenerateMessageL(); |
|
731 iSuplMsgType = ESUPL_TRIG_START; |
|
732 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
733 } |
|
734 |
|
735 |
|
736 // ----------------------------------------------------------------------------- |
|
737 // COMASuplSession::GenerateSuplPosInitL |
|
738 // Generate SUPL POS INIT from session |
|
739 // (other items were commented in a header). |
|
740 // ----------------------------------------------------------------------------- |
|
741 // |
|
742 void COMASuplSession::GenerateSuplPosInitL() |
|
743 { |
|
744 iTrace->Trace(_L("Start of COMASuplSession::GenerateSuplPosInitL"), KTraceFileName, __LINE__); |
|
745 |
|
746 // Free the existing state if any |
|
747 iTrace->Trace(_L("Deleting SUPL State"), KTraceFileName, __LINE__); |
|
748 delete iSuplState; |
|
749 iSuplState = NULL; |
|
750 |
|
751 iTrace->Trace(_L("Setting SUPL State to NULL - successful "), KTraceFileName, __LINE__); |
|
752 if(iRequestType == ESUPL_NETWORK) |
|
753 { |
|
754 iTrace->Trace(_L("iRequestType == ESUPL_NETWORK is true"), KTraceFileName, __LINE__); |
|
755 TBuf<256> serverAddress; |
|
756 HBufC8 *hslpAdress = HBufC8::NewL(256); |
|
757 iConnRequestor->GetUsedServerAddress(serverAddress); |
|
758 hslpAdress->Des().Copy(serverAddress); |
|
759 CleanupStack::PushL(hslpAdress); |
|
760 if (iTriggerSession) |
|
761 { |
|
762 iSuplState = COMASuplPosInitState::NewL(iSETCapabilities, iMobilePhone, iUT2_PosInitTimer, |
|
763 iOMASuplPOSRequestor,iAllowedCapabilities, iRequestType, iPosMethod, iOMASuplAsnHandlerBaseImpl); |
|
764 } |
|
765 else |
|
766 { |
|
767 iSuplState = COMASuplPosInitState::NewL(iSETCapabilities, iMobilePhone, iUT2_PosInitTimer, |
|
768 iOMASuplPOSRequestor,iAllowedCapabilities, iRequestType, iPosMethod, iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit, hslpAdress); |
|
769 } |
|
770 |
|
771 if(hslpAdress) |
|
772 { |
|
773 CleanupStack::PopAndDestroy(hslpAdress); |
|
774 } |
|
775 } |
|
776 else |
|
777 { |
|
778 TBuf<128> msg(_L("COMASuplSession::GenerateSuplPosInitL() without last 2 params : ")); |
|
779 msg.AppendNum(iPosMethod); |
|
780 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
781 iSuplState = COMASuplPosInitState::NewL(iSETCapabilities, iMobilePhone, iUT2_PosInitTimer, |
|
782 iOMASuplPOSRequestor,iAllowedCapabilities,iRequestType, iPosMethod,iOMASuplAsnHandlerBaseImpl); |
|
783 |
|
784 } |
|
785 iSuplState->SetMsgStateObserver(this); |
|
786 |
|
787 //If trigger session, set flag |
|
788 if (iTriggerSession) |
|
789 { |
|
790 COMASuplPosInitState* state = static_cast <COMASuplPosInitState *>(iSuplState); |
|
791 state->SetTriggerSessionFlag(ETrue); |
|
792 } |
|
793 |
|
794 iSuplState->GenerateMessageL(); |
|
795 |
|
796 iSuplMsgType = ESUPL_POSINIT; |
|
797 |
|
798 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
799 } |
|
800 |
|
801 // ----------------------------------------------------------------------------- |
|
802 // COMASuplSession::GenerateSuplPosL |
|
803 // Generate SUPL POS from session |
|
804 // (other items were commented in a header). |
|
805 // ----------------------------------------------------------------------------- |
|
806 // |
|
807 void COMASuplSession::GenerateSuplPosL() |
|
808 { |
|
809 iTrace->Trace(_L("Start of COMASuplSession::GenerateSuplPosL"), KTraceFileName, __LINE__); |
|
810 |
|
811 if(COMASuplState::ESUPL_POS != iSuplState->GetSuplState()) // Check if existing is of POS type. |
|
812 { |
|
813 COMASuplPosPayload* remainingPosPayload = GetRemainingPosPayloadL(); |
|
814 delete iSuplState; |
|
815 iSuplState = NULL; |
|
816 iSuplState = COMASuplPosState::NewL(iPOSSession,iUT3_PosTimer,iSETCapabilities,iOMASuplAsnHandlerBaseImpl); |
|
817 |
|
818 COMASuplPosState* state = static_cast <COMASuplPosState *>(iSuplState); |
|
819 state->SetRemainingPosPayloadFromSuplPosInitL(remainingPosPayload);//ownership transfered to POS state class |
|
820 } |
|
821 |
|
822 iSuplState->SetMsgStateObserver(this); |
|
823 iSuplMsgType = ESUPL_POS; |
|
824 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
825 COMASuplPosState* posState = static_cast <COMASuplPosState*>(iSuplState); |
|
826 if(!(posState->IsGenerationInProgress())) |
|
827 { |
|
828 iSuplSessionState = ESUPL_ENCODE; |
|
829 TInt err = iSuplState->GenerateMessageL(); |
|
830 if(err != KErrNone) |
|
831 { |
|
832 iTrace->Trace(_L("COMASuplSession::GenerateSuplPosL Failed..."), KTraceFileName, __LINE__); |
|
833 OperationCompleteL(err);//Error handling. |
|
834 } |
|
835 } |
|
836 |
|
837 } |
|
838 |
|
839 // ----------------------------------------------------------------------------- |
|
840 // COMASuplSession::GenerateSuplEndL |
|
841 // Generate SUPL END from session |
|
842 // (other items were commented in a header). |
|
843 // ----------------------------------------------------------------------------- |
|
844 // |
|
845 void COMASuplSession::GenerateSuplEndL() |
|
846 { |
|
847 iTrace->Trace(_L("Start of COMASuplSession::GenerateSuplEnd..."), KTraceFileName, __LINE__); |
|
848 |
|
849 // Free the existing state if any |
|
850 delete iSuplState; |
|
851 iSuplState = NULL; |
|
852 |
|
853 if(iRequestType == ESUPL_INVALID_SESSION ) |
|
854 { |
|
855 iSuplSessionState = ESUPL_INITIALIZED; |
|
856 } |
|
857 else |
|
858 { |
|
859 iSuplSessionState = ESUPL_ENCODE; //Normal End |
|
860 } |
|
861 |
|
862 iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl); |
|
863 iSuplState->SetMsgStateObserver(this); |
|
864 iSuplMsgType = ESUPL_END; |
|
865 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
866 iSuplState->GenerateMessageL(); |
|
867 } |
|
868 |
|
869 // ----------------------------------------------------------------------------- |
|
870 // COMASuplSession::GenerateTriggerStopL |
|
871 // Generate SUPL END from session |
|
872 // (other items were commented in a header). |
|
873 // ----------------------------------------------------------------------------- |
|
874 // |
|
875 void COMASuplSession::GenerateSuplTriggerStopL() |
|
876 { |
|
877 iTrace->Trace(_L("Start of COMASuplSession::GenerateSuplTriggerStopL..."), KTraceFileName, __LINE__); |
|
878 |
|
879 // Free the existing state if any |
|
880 delete iSuplState; |
|
881 iSuplState = NULL; |
|
882 |
|
883 iSuplSessionState = ESUPL_ENCODE; //Normal End |
|
884 |
|
885 iSuplState = COMASuplTriggerStopState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl); |
|
886 iSuplState->SetMsgStateObserver(this); |
|
887 iSuplMsgType = ESUPL_TRIG_STOP; |
|
888 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
889 iSuplState->GenerateMessageL(); |
|
890 } |
|
891 |
|
892 // ----------------------------------------------------------------------------- |
|
893 //COMASuplSession::CompleteSession |
|
894 //Informs to client about completion of location request, thro' active object |
|
895 void COMASuplSession::CompleteSession(TInt aCompletionCode) |
|
896 { |
|
897 iTrace->Trace(_L("COMASuplSession::CompleteSession start"), KTraceFileName, __LINE__); |
|
898 if(iRunRequestStatus) |
|
899 { |
|
900 |
|
901 TTime currentTime; |
|
902 currentTime.HomeTime(); |
|
903 iSessionCompletionCode = aCompletionCode; |
|
904 |
|
905 TBuf<64> errorCode; |
|
906 errorCode.Append(_L("Completing Session with error code : ")); |
|
907 errorCode.AppendNum(aCompletionCode); |
|
908 iTrace->Trace(errorCode, KTraceFileName, __LINE__); |
|
909 |
|
910 //Cell filtering is only for non-trigger requests |
|
911 if (!iTriggerSession) |
|
912 iConnRequestor->UpdateNetInfo(currentTime,iCurrentCellId.iMCC,iCurrentCellId.iMNC,iCurrentCellId.iCid,iCurrentCellId.iLac,iNetworkType,aCompletionCode); |
|
913 |
|
914 User::RequestComplete(iRunRequestStatus,aCompletionCode); |
|
915 } |
|
916 } |
|
917 |
|
918 // ----------------------------------------------------------------------------- |
|
919 // COMASuplSession::OperationComplete |
|
920 // Gets control when any of the asynchronous requests are completed |
|
921 // This is a very important method and drives the OMS SUPL |
|
922 // State Machine |
|
923 // (other items were commented in a header). |
|
924 // ----------------------------------------------------------------------------- |
|
925 // |
|
926 void COMASuplSession::OperationCompleteL(TInt aErrorCode) |
|
927 { |
|
928 iTrace->Trace(_L("COMASuplSession::OperationCompleteL"), KTraceFileName, __LINE__); |
|
929 TBuf<128> msg; |
|
930 |
|
931 msg.Copy(_L("State is ")); |
|
932 msg.AppendNum(iSuplSessionState); |
|
933 |
|
934 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
935 |
|
936 if(KErrNone != aErrorCode) |
|
937 { |
|
938 msg.Copy(_L("Actual Error Code : ")); |
|
939 msg.AppendNum(aErrorCode); |
|
940 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
941 |
|
942 if (iSuplSessionState == ESUPL_CONNECTING) |
|
943 CheckForPersistentFailure(aErrorCode); |
|
944 HandleSuplErrorL(aErrorCode); |
|
945 return; |
|
946 } |
|
947 |
|
948 TInt err = KErrNone; |
|
949 |
|
950 switch(iSuplSessionState) |
|
951 { |
|
952 case ESUPL_INITIALIZED: |
|
953 { |
|
954 if (iRequestType == ESUPL_NETWORK) |
|
955 { |
|
956 iIapDialogShown = ETrue; |
|
957 TInt delay ; |
|
958 iTrace->Trace(_L("Dialog timer not started earlier and request is NI, starting now"), KTraceFileName, __LINE__); |
|
959 if (iDiffTime.Int() == 0) |
|
960 { |
|
961 COMASuplInit* suplInit = static_cast <COMASuplInit*> (iDecodedAsnMessage); |
|
962 TOMASuplQop qop; |
|
963 TInt retVal = suplInit->Qop(qop); |
|
964 |
|
965 qop.Delay(delay); |
|
966 //if delay is > 7, it is not valid |
|
967 if (delay > 7) |
|
968 delay = 0; |
|
969 if(retVal == KErrNone && delay > 0) |
|
970 { |
|
971 TReal delayReal; |
|
972 Math::Pow(delayReal, 2, (TReal)delay); |
|
973 delay = (TInt) delayReal; |
|
974 msg.Copy(_L("Delay present in message, value is = ")); |
|
975 msg.AppendNum(delay); |
|
976 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
977 isTimeoutDialogTimerStarted = ETrue; |
|
978 } |
|
979 else |
|
980 { |
|
981 if (iSuplInitTimeOut > 0) |
|
982 { |
|
983 iTrace->Trace(_L("Delay not present in message"), KTraceFileName, __LINE__); |
|
984 msg.Copy(_L("Delay value in CR is")); |
|
985 msg.AppendNum(iSuplInitTimeOut); |
|
986 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
987 isTimeoutDialogTimerStarted = ETrue; |
|
988 delay = iSuplInitTimeOut * KSecond; |
|
989 } |
|
990 else |
|
991 { |
|
992 iTrace->Trace(_L("Timeout is <= 0"), KTraceFileName, __LINE__); |
|
993 } |
|
994 } |
|
995 } |
|
996 else |
|
997 { |
|
998 msg.Copy(_L("Time diff used, diff = ")); |
|
999 msg.AppendNum(iDiffTime.Int()); |
|
1000 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
1001 isTimeoutDialogTimerStarted = ETrue; |
|
1002 delay = iDiffTime.Int(); |
|
1003 } |
|
1004 if (iSuplMsgType == ESUPL_TRIG_RESPONSE || iSuplMsgType == ESUPL_REPORT || iDisconnected) |
|
1005 { |
|
1006 iTrace->Trace(_L("Calling CreateConnectionL() for trigger"), KTraceFileName, __LINE__); |
|
1007 TRAP( err, iConnRequestor->CreateConnectionL(delay, ETrue) ); |
|
1008 } |
|
1009 else |
|
1010 { |
|
1011 iTrace->Trace(_L("Calling CreateConnectionL()"), KTraceFileName, __LINE__); |
|
1012 TRAP( err, iConnRequestor->CreateConnectionL(delay, EFalse) ); |
|
1013 } |
|
1014 } |
|
1015 else //terminal initiated case |
|
1016 { |
|
1017 if (iSuplMsgType == ESUPL_TRIG_RESPONSE || iSuplMsgType == ESUPL_REPORT || iDisconnected) |
|
1018 { |
|
1019 iTrace->Trace(_L("Calling CreateConnectionL() for trigger"), KTraceFileName, __LINE__); |
|
1020 iDisconnected = EFalse; |
|
1021 TRAP( err, iConnRequestor->CreateConnectionL(ETrue) ); |
|
1022 } |
|
1023 else |
|
1024 { |
|
1025 iTrace->Trace(_L("Calling CreateConnectionL()"), KTraceFileName, __LINE__); |
|
1026 TRAP( err, iConnRequestor->CreateConnectionL(EFalse) ); |
|
1027 } |
|
1028 } |
|
1029 if(KErrNone != err) |
|
1030 { |
|
1031 HandleSuplErrorL(err); |
|
1032 break; |
|
1033 } |
|
1034 iSuplSessionState = ESUPL_CONNECTING; |
|
1035 break; |
|
1036 } |
|
1037 |
|
1038 case ESUPL_CONNECTING: |
|
1039 { |
|
1040 //Retrieve the portnumber being used |
|
1041 iPortNum = iConnRequestor->GetPortNumber(); |
|
1042 |
|
1043 if(iRequestType == ESUPL_INVALID_SESSION) |
|
1044 { |
|
1045 iTrace->Trace(_L("Handling Invalid Session..."), KTraceFileName, __LINE__); |
|
1046 // ::POS:: |
|
1047 delete iEncodedBuffer; |
|
1048 iEncodedBuffer = NULL; |
|
1049 iSuplSessionState = ESUPL_ENCODE; |
|
1050 iEncodedBuffer = iSuplState->EncodeMessageL(iSuplVersion, iSuplSessionId, err); |
|
1051 if(KErrNone == err) |
|
1052 { |
|
1053 iConnRequestor->SendPacket(*iEncodedBuffer); |
|
1054 iSuplSessionState = ESUPL_SEND; |
|
1055 } |
|
1056 } |
|
1057 else |
|
1058 { |
|
1059 GenerateSuplMessageL(); |
|
1060 if (iSuplMsgType != ESUPL_TRIG_STOP) |
|
1061 iSuplSessionState = ESUPL_GENERATE; |
|
1062 } |
|
1063 break; |
|
1064 } |
|
1065 |
|
1066 case ESUPL_SEND: |
|
1067 { |
|
1068 // Clean up Encoding buffer before filling it up |
|
1069 delete iEncodedBuffer; |
|
1070 iEncodedBuffer = NULL; |
|
1071 |
|
1072 if(IsWholeMessageSentL()) |
|
1073 { |
|
1074 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplSent); |
|
1075 } |
|
1076 |
|
1077 if( (iSuplMsgType == ESUPL_START || iSuplMsgType == ESUPL_POSINIT) && iRequestType == ESUPL_TERMINAL) // Manish : Added this to support Cell filtering... |
|
1078 { |
|
1079 COMASuplStartState* SuplStartState = static_cast <COMASuplStartState *>(iSuplState); |
|
1080 SuplStartState->GetCurrentCellID(iCurrentCellId,iNetworkType); |
|
1081 |
|
1082 #ifdef PRINT_MESSAGE |
|
1083 |
|
1084 msg.Copy(_L("After receiving from SUPL START/SUPL POS INIT")); |
|
1085 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1086 |
|
1087 msg.Copy(_L("cid=")); |
|
1088 msg.AppendNum(iCurrentCellId.iCid); |
|
1089 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1090 |
|
1091 msg.Copy(_L("Lac=")); |
|
1092 msg.AppendNum(iCurrentCellId.iLac); |
|
1093 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1094 |
|
1095 msg.Copy(_L("MCC=")); |
|
1096 msg.AppendNum(iCurrentCellId.iMCC); |
|
1097 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1098 |
|
1099 msg.Copy(_L("MNC=")); |
|
1100 msg.AppendNum(iCurrentCellId.iMNC); |
|
1101 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1102 #endif |
|
1103 |
|
1104 } |
|
1105 |
|
1106 if(iPOSSession && iSuplMsgType == ESUPL_POSINIT) //Added while doing confirmance testing... |
|
1107 { |
|
1108 COMASuplPosInitState* SuplPosInitState = static_cast <COMASuplPosInitState *>(iSuplState); |
|
1109 if(!(SuplPosInitState->IsPosPayloadPresent())) |
|
1110 { |
|
1111 iTrace->Trace(_L("StartTimer for SUPL_POSINIT..."), KTraceFileName, __LINE__); |
|
1112 iTimer->StartTimer(iUT2_PosInitTimer * KSecond); |
|
1113 } |
|
1114 else |
|
1115 { |
|
1116 iTrace->Trace(_L("Timer for SUPL_POSINIT not started ..since POS payload is present..."), KTraceFileName, __LINE__); |
|
1117 } |
|
1118 } |
|
1119 else if (iSuplMsgType == ESUPL_TRIG_STOP) |
|
1120 { |
|
1121 iTrace->Trace(_L("StartTimer for SUPL_TRIGGER_STOP..."), KTraceFileName, __LINE__); |
|
1122 iTimer->StartTimer(iUT2_PosInitTimer * KSecond); |
|
1123 } |
|
1124 else |
|
1125 { |
|
1126 iSuplState->StartTimer(); |
|
1127 } |
|
1128 |
|
1129 if(iSuplMsgType == ESUPL_END) |
|
1130 { |
|
1131 //Close Connection : bug Fix. |
|
1132 iConnRequestor->CloseConnection(); |
|
1133 iPortNum = 0; |
|
1134 RemoveActiveSession(); |
|
1135 // Invoke Terminate Session |
|
1136 if (iTriggerSession && iRequestType == COMASuplSession::ESUPL_TERMINAL) |
|
1137 { |
|
1138 iTrace->Trace(_L("COMASuplSession::OperationCompleted...SUPL_END send for trigger..."), KTraceFileName, __LINE__); |
|
1139 iSessionObserver.TerminateSession(this, KErrNone); |
|
1140 } |
|
1141 else |
|
1142 { |
|
1143 iTrace->Trace(_L("COMASuplSession::OperationCompleted...SUPL_END send for Error/cancellation..."), KTraceFileName, __LINE__); |
|
1144 iSessionObserver.TerminateSession(this, KErrCompletion); |
|
1145 } |
|
1146 break; |
|
1147 } |
|
1148 |
|
1149 if( iPOSSession && |
|
1150 (iSuplMsgType == ESUPL_POSINIT || (iSuplMsgType == ESUPL_POS && (!IsLastPOSMessage() || IsSegmentationDone()) ) )) |
|
1151 { |
|
1152 iTrace->Trace(_L("Generating POS ..."), KTraceFileName, __LINE__); |
|
1153 iSuplMsgType = ESUPL_POS; |
|
1154 iSuplSessionState = ESUPL_GENERATE; |
|
1155 GenerateSuplMessageL(); |
|
1156 } |
|
1157 break; |
|
1158 } |
|
1159 |
|
1160 case ESUPL_GENERATE: |
|
1161 { |
|
1162 // Set the appropriate state |
|
1163 if(iRequestType == ESUPL_INVALID_SESSION) |
|
1164 { |
|
1165 iTrace->Trace(_L("Handling Invalid Session..."), KTraceFileName, __LINE__); |
|
1166 // ::POS:: |
|
1167 delete iEncodedBuffer; |
|
1168 iEncodedBuffer = NULL; |
|
1169 iSuplSessionState = ESUPL_ENCODE; |
|
1170 iEncodedBuffer = iSuplState->EncodeMessageL(iSuplVersion, iSuplSessionId, err); |
|
1171 if(KErrNone == err) |
|
1172 { |
|
1173 iConnRequestor->SendPacket(*iEncodedBuffer); |
|
1174 iSuplSessionState = ESUPL_SEND; |
|
1175 } |
|
1176 } |
|
1177 else |
|
1178 { |
|
1179 delete iEncodedBuffer; |
|
1180 iEncodedBuffer = NULL; |
|
1181 if(ConnectionRequired()) |
|
1182 { |
|
1183 iTrace->Trace(_L("ConnectionRequired returned TRUE"), KTraceFileName, __LINE__); |
|
1184 err = SetApproriateSETSessionId(); |
|
1185 iSuplSessionState = ESUPL_ENCODE; |
|
1186 CopySETCapabilities();//Copy this before and then & with Allowed Capabilities |
|
1187 iEncodedBuffer = iSuplState->EncodeMessageL(iSuplVersion, iSuplSessionId, err); |
|
1188 iConnRequestor->SendPacket(*iEncodedBuffer); |
|
1189 iSuplSessionState = ESUPL_SEND; |
|
1190 iConnRequestor->ListenToMessages(); |
|
1191 } |
|
1192 else |
|
1193 { |
|
1194 iTrace->Trace(_L("ConnectionRequired returned False"), KTraceFileName, __LINE__); |
|
1195 GenerateSuplMessageL(); |
|
1196 iSuplSessionState = ESUPL_ENCODE; |
|
1197 } |
|
1198 } |
|
1199 |
|
1200 if(KErrNone != err ) |
|
1201 { |
|
1202 HandleSuplErrorL(err); |
|
1203 } |
|
1204 break; |
|
1205 } |
|
1206 |
|
1207 case ESUPL_ENCODE: |
|
1208 { |
|
1209 // Clean up Encoding buffer before filling it up |
|
1210 delete iEncodedBuffer; |
|
1211 iEncodedBuffer = NULL; |
|
1212 |
|
1213 iEncodedBuffer = iSuplState->EncodeMessageL(iSuplVersion, iSuplSessionId, err); |
|
1214 if(KErrNone == err) |
|
1215 { |
|
1216 iConnRequestor->SendPacket(*iEncodedBuffer); |
|
1217 iSuplSessionState = ESUPL_SEND; |
|
1218 } |
|
1219 else |
|
1220 { |
|
1221 HandleSuplErrorL(err); |
|
1222 } |
|
1223 break; |
|
1224 } |
|
1225 |
|
1226 case ESUPL_RECEIVED: break; |
|
1227 |
|
1228 default: |
|
1229 { |
|
1230 HandleSuplErrorL(KErrOMAUnknownState); |
|
1231 break; |
|
1232 } |
|
1233 } |
|
1234 } |
|
1235 // ----------------------------------------------------------------------------- |
|
1236 // COMASuplSession::ConnectionRequired |
|
1237 // Determines of connection should be created |
|
1238 // (other items were commented in a header). |
|
1239 // ----------------------------------------------------------------------------- |
|
1240 // |
|
1241 TBool COMASuplSession::ConnectionRequired() |
|
1242 { |
|
1243 iTrace->Trace(_L("COMASuplSession::ConnectionRequired"), KTraceFileName, __LINE__); |
|
1244 TBuf<128> logBuf; |
|
1245 logBuf.Copy(_L("Trigger session ")); |
|
1246 if (iTriggerSession) |
|
1247 logBuf.Append(_L("True")); |
|
1248 else |
|
1249 logBuf.Append(_L("False")); |
|
1250 logBuf.Append(_L("Request type ")); |
|
1251 logBuf.AppendNum(iRequestType); |
|
1252 logBuf.Append(_L("Message type ")); |
|
1253 logBuf.AppendNum(iSuplMsgType); |
|
1254 iTrace->Trace(logBuf, KTraceFileName, __LINE__); |
|
1255 |
|
1256 { |
|
1257 if (iTriggerSession && iRequestType == ESUPL_TERMINAL && iSuplMsgType == ESUPL_POSINIT) |
|
1258 return ETrue; |
|
1259 } |
|
1260 |
|
1261 if(iRequestType == ESUPL_INVALID_SESSION ) |
|
1262 { |
|
1263 return ETrue; |
|
1264 } |
|
1265 if(iRequestType == ESUPL_TERMINAL && (iSuplMsgType == ESUPL_START || iSuplMsgType == ESUPL_TRIG_START)) |
|
1266 { |
|
1267 return ETrue; |
|
1268 } |
|
1269 else |
|
1270 { |
|
1271 if(iRequestType == ESUPL_NETWORK) |
|
1272 { |
|
1273 if(iSuplMsgType == ESUPL_POSINIT || iSuplMsgType == ESUPL_END || iSuplMsgType == ESUPL_TRIG_START) |
|
1274 { |
|
1275 return ETrue; |
|
1276 } |
|
1277 } |
|
1278 } |
|
1279 return EFalse; |
|
1280 } |
|
1281 |
|
1282 // ----------------------------------------------------------------------------- |
|
1283 // COMASuplSession::ValidatePosition |
|
1284 // Validates position estimate |
|
1285 // (other items were commented in a header). |
|
1286 // ----------------------------------------------------------------------------- |
|
1287 // |
|
1288 TInt COMASuplSession::ValidatePosition(COMASuplPosition *aPosition) |
|
1289 { |
|
1290 TOMASuplUtcTime utcTime; |
|
1291 TOMASuplPositionEstimate pos; |
|
1292 |
|
1293 aPosition->GetPosition(utcTime, pos); |
|
1294 |
|
1295 TOMASuplPositionEstimate::TOMASuplLatitudeSign latSign; |
|
1296 TInt latitude; |
|
1297 TInt longitude; |
|
1298 pos.GetPositionEstimate(latSign,latitude,longitude); |
|
1299 |
|
1300 // Set Position Estimate |
|
1301 if(latitude < KLatitudeMin || latitude > KLatitudeMax) |
|
1302 { |
|
1303 return KErrArgument; |
|
1304 } |
|
1305 if(longitude < KLongitudeMin || longitude > KLongitudeMax) |
|
1306 { |
|
1307 return KErrArgument; |
|
1308 } |
|
1309 |
|
1310 // Retrieve optional parametrs of Position Estimate |
|
1311 // Retrieve Uncertainity |
|
1312 TOMASuplUncertainty uncertainty; |
|
1313 TInt error = pos.GetUncertainty(uncertainty); |
|
1314 if(!error) |
|
1315 { |
|
1316 TInt uncertSemiMajor; |
|
1317 TInt uncertSemiMinor; |
|
1318 TInt orientMajorAxis; |
|
1319 uncertainty.GetUncertainty(uncertSemiMajor,uncertSemiMinor,orientMajorAxis); |
|
1320 if(uncertSemiMajor < KUncertSemiMajorMin || uncertSemiMajor > KUncertSemiMajorMax) |
|
1321 { |
|
1322 return KErrArgument; |
|
1323 } |
|
1324 if (uncertSemiMinor < KUncertSemiMinorMin || uncertSemiMinor > KUncertSemiMinorMax) |
|
1325 { |
|
1326 return KErrArgument; |
|
1327 } |
|
1328 if (orientMajorAxis < KOrientMajorAxisMin || orientMajorAxis > KOrientMajorAxisMax) |
|
1329 { |
|
1330 return KErrArgument; |
|
1331 } |
|
1332 } |
|
1333 |
|
1334 TInt confidence; |
|
1335 error = pos.GetConfidence(confidence); |
|
1336 if(!error) |
|
1337 { |
|
1338 if(confidence < KConfidenceMin || confidence > KConfidenceMax) |
|
1339 { |
|
1340 return KErrArgument; |
|
1341 } |
|
1342 } |
|
1343 // Retrieve AltitudeInfo |
|
1344 TOMASuplAltitudeInfo altitudeInfo; |
|
1345 error = pos.GetAltitudeInfo(altitudeInfo); |
|
1346 if(!error) |
|
1347 { |
|
1348 TOMASuplAltitudeInfo::TOMASuplAltitudeDirection altDirection; |
|
1349 TInt altitude; |
|
1350 TInt altUncert; |
|
1351 altitudeInfo.GetAltitudeInfo(altDirection,altitude,altUncert); |
|
1352 if (altitude < KAltitudeMin || altitude > KAltitudeMax) |
|
1353 { |
|
1354 return KErrArgument; |
|
1355 } |
|
1356 if (altUncert < KAltitudeUncertMin || altUncert > KAltitudeUncertMax) |
|
1357 { |
|
1358 return KErrArgument; |
|
1359 } |
|
1360 } |
|
1361 |
|
1362 return KErrNone; |
|
1363 } |
|
1364 |
|
1365 // ----------------------------------------------------------------------------- |
|
1366 // COMASuplSession::GetPositionComplete |
|
1367 // Handles any errors that may occur during protocol processing |
|
1368 // (other items were commented in a header). |
|
1369 // ----------------------------------------------------------------------------- |
|
1370 // |
|
1371 void COMASuplSession::GetPositionCompleteL(TInt aError) |
|
1372 { |
|
1373 if (!iTriggerSession) |
|
1374 iConnRequestor->CloseConnection(); |
|
1375 |
|
1376 iPortNum = 0; |
|
1377 |
|
1378 if (iTriggerSession) |
|
1379 { |
|
1380 TPositionInfo position; |
|
1381 GetPosition(position); |
|
1382 if( iTrgFireInfo ) |
|
1383 { |
|
1384 iTrgFireInfo->Set(position); |
|
1385 } |
|
1386 if (iNumFixes == 0) |
|
1387 { |
|
1388 iTrace->Trace(_L("GetPositionComplete, last fix generation SUPL END"), KTraceFileName, __LINE__); |
|
1389 iSuplSessionState = ESUPL_GENERATE; |
|
1390 iSuplMsgType = ESUPL_END; |
|
1391 GenerateSuplMessageL(); |
|
1392 } |
|
1393 else |
|
1394 { |
|
1395 iTrace->Trace(_L("GetPositionComplete, Completing session"), KTraceFileName, __LINE__); |
|
1396 CompleteSession(KErrNone); |
|
1397 } |
|
1398 } |
|
1399 else |
|
1400 { |
|
1401 |
|
1402 if(aError || iPosition->Status()) |
|
1403 { |
|
1404 delete iPosition; |
|
1405 iPosition = NULL; |
|
1406 // Invoke SessionTerminate |
|
1407 iTrace->Trace(_L("Could not get position from POS Msg Plugin..."), KTraceFileName, __LINE__); |
|
1408 iSessionObserver.TerminateSession(this, KErrNone); |
|
1409 } |
|
1410 else |
|
1411 { |
|
1412 TInt err; |
|
1413 err = ValidatePosition(iPosition); |
|
1414 if (err != KErrNone) |
|
1415 { |
|
1416 delete iPosition; |
|
1417 iPosition = NULL; |
|
1418 iSessionObserver.TerminateSession(this, KErrCompletion); |
|
1419 } |
|
1420 else |
|
1421 iSessionObserver.TerminateSession(this, KErrNone); |
|
1422 } |
|
1423 } |
|
1424 } |
|
1425 |
|
1426 |
|
1427 |
|
1428 // ----------------------------------------------------------------------------- |
|
1429 // COMASuplSession::HandleSuplErrorL |
|
1430 // Handles any errors that may occur during protocol processing |
|
1431 // (other items were commented in a header). |
|
1432 // ----------------------------------------------------------------------------- |
|
1433 // |
|
1434 void COMASuplSession::HandleSuplErrorL(TInt aErr) |
|
1435 { |
|
1436 // All Possible errors - |
|
1437 // 1. Packet generation failure |
|
1438 // SUPL START - Complete the session with aErr |
|
1439 // SUPL POS INIT - Send SUPL END with appropriate Error code |
|
1440 // SUPL END - Complete Session with aErr and terminate the session |
|
1441 // SUPL POS - Will be handled later |
|
1442 // 2. Secure Socket Connection failure |
|
1443 // Complete the Session with aErr. Terminate the supl session |
|
1444 // 3. Local IP Address retrieval failure |
|
1445 // Complete the session with aErr. Terminate the supl session |
|
1446 // 4. Packet Encoding error |
|
1447 // SUPL START - Complete Session with aErr |
|
1448 // SUPL POS INIT - Generate SUPL END and send to SLP |
|
1449 // SUPL POS - Will be handled later |
|
1450 // SUPL END - Complete session with aErr and terminate the session |
|
1451 // 5. Packet Send Error |
|
1452 // Complete the session with aErr and terminate the session |
|
1453 // 6. Unknown State Error |
|
1454 // SUPL START - Complete Session with invalid state |
|
1455 // SUPL RESPONSE - Send SUPL END with appropriate error |
|
1456 // SUPL POS INIT - Send SUPL END with appropriate error |
|
1457 // SUPL POS - Will be handled later |
|
1458 // SUPL END - Complete session with invalid state and terminate the session |
|
1459 // SUPL INTI - Will be handled later |
|
1460 // 7. Message Processing error |
|
1461 // SUPL RESPONSE - Send SUPL END with appropriate error code |
|
1462 // SUPL POS - Will be handled later |
|
1463 // SUPL END - Complete session with aErr and terminate the session |
|
1464 // 8. Time out Handling |
|
1465 // SUPL START - Send SUPL END with appropriate error code |
|
1466 // SUPL POS INIT - Send SUPL END with appropriate error code |
|
1467 // SUPL END - There should be no timer started in the first place |
|
1468 |
|
1469 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplError); |
|
1470 iNumFixes = 0; //Making 0 will stop all further request done by client after errors |
|
1471 RemoveActiveSession();//Remove session as there is error in session... |
|
1472 switch(iSuplSessionState) |
|
1473 { |
|
1474 |
|
1475 //*************************************************************************************** |
|
1476 |
|
1477 case ESUPL_INITIALIZED: //Initilization error |
|
1478 { |
|
1479 aErr = KErrNotReady; |
|
1480 iTrace->Trace(_L("HandleInitilizationError..."), KTraceFileName, __LINE__); |
|
1481 HandleInitilizationErrorL(aErr); |
|
1482 break; |
|
1483 } |
|
1484 |
|
1485 //*************************************************************************************** |
|
1486 |
|
1487 case ESUPL_CONNECTING: //Error while retriving Local IP address |
|
1488 { |
|
1489 aErr = KErrGeneral; |
|
1490 iTrace->Trace(_L("HandleConnectionError..."), KTraceFileName, __LINE__); |
|
1491 HandleConnectionErrorL(aErr); |
|
1492 break; |
|
1493 } |
|
1494 |
|
1495 //*************************************************************************************** |
|
1496 |
|
1497 case ESUPL_ENCODE: //Encoding failure error |
|
1498 { |
|
1499 |
|
1500 iTrace->Trace(_L("HandleEncodingError..."), KTraceFileName, __LINE__); |
|
1501 HandleEncodingErrorL(aErr); |
|
1502 break; |
|
1503 } |
|
1504 |
|
1505 //*************************************************************************************** |
|
1506 |
|
1507 case ESUPL_GENERATE : //Generation error |
|
1508 { |
|
1509 aErr = KErrGeneral; |
|
1510 iTrace->Trace(_L("HandleGenerationError..."), KTraceFileName, __LINE__); |
|
1511 HandleGenerationErrorL(aErr); |
|
1512 break; |
|
1513 } |
|
1514 |
|
1515 //*************************************************************************************** |
|
1516 |
|
1517 case ESUPL_SEND: //Timeout & packet send error |
|
1518 { |
|
1519 iTrace->Trace(_L("HandleSendError..."), KTraceFileName, __LINE__); |
|
1520 HandleSendErrorL(aErr); |
|
1521 break; |
|
1522 } |
|
1523 |
|
1524 //*************************************************************************************** |
|
1525 |
|
1526 case ESUPL_RECEIVED: //Error while getting wrong message from SLP |
|
1527 { |
|
1528 iTrace->Trace(_L("HandlePacketsError..."), KTraceFileName, __LINE__); |
|
1529 if (iSuplMsgType == ESUPL_REPORT) |
|
1530 HandleSendErrorL(aErr); |
|
1531 else |
|
1532 HandlePacketsErrorL(aErr); |
|
1533 break; |
|
1534 } |
|
1535 |
|
1536 //*************************************************************************************** |
|
1537 |
|
1538 default: |
|
1539 { |
|
1540 TBuf<64> msg(_L("Unknown ERROR occured...")); |
|
1541 msg.AppendNum(aErr); |
|
1542 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
1543 break; |
|
1544 } |
|
1545 |
|
1546 //*************************************************************************************** |
|
1547 } |
|
1548 |
|
1549 } |
|
1550 |
|
1551 // ----------------------------------------------------------------------------- |
|
1552 // ReverseString |
|
1553 // Reverse the string |
|
1554 // ----------------------------------------------------------------------------- |
|
1555 // |
|
1556 void ReverseString(TDes8& aLocalIPAddress,TInt aLength) |
|
1557 { |
|
1558 TBuf8<1> temp1; |
|
1559 TBuf8<1> temp2; |
|
1560 for(TInt i =0 ;i < aLength / 2; ++i) |
|
1561 { |
|
1562 temp1.Zero(); |
|
1563 temp2.Zero(); |
|
1564 temp1.Append(aLocalIPAddress[i]); |
|
1565 temp2.Append(aLocalIPAddress[aLength - 1 - i]); |
|
1566 aLocalIPAddress.Replace(i,1,temp2); |
|
1567 aLocalIPAddress.Replace(aLength - 1 - i,1,temp1); |
|
1568 } |
|
1569 } |
|
1570 |
|
1571 // ----------------------------------------------------------------------------- |
|
1572 // COMASuplSession::GetLocalIPAddress |
|
1573 // Gets Local IP address of SET |
|
1574 // (other items were commented in a header). |
|
1575 // ----------------------------------------------------------------------------- |
|
1576 // |
|
1577 TInt COMASuplSession::GetLocalIPAddress() |
|
1578 { |
|
1579 iTrace->Trace(_L("COMASuplSession::GetLocalIPAddress"), KTraceFileName, __LINE__); |
|
1580 |
|
1581 if (iSessionIDFlag) |
|
1582 { |
|
1583 return KErrNone; |
|
1584 } |
|
1585 |
|
1586 TInetAddr address; |
|
1587 TInt err = iConnRequestor->GetLocalIPAddress(address); |
|
1588 if (err != KErrNone) |
|
1589 { |
|
1590 return err; |
|
1591 } |
|
1592 |
|
1593 if ( address.Family() == KAfInet) //This routine will convert IPV4 address in TBuf8<4> |
|
1594 { |
|
1595 TUint32 ipAddress = address.Address(); |
|
1596 TPtr8 ptrIPAddress(reinterpret_cast<TUint8*>(&ipAddress), |
|
1597 sizeof(ipAddress), sizeof(ipAddress)); |
|
1598 TBuf8<KIP4AddressLength> localIPAddress; |
|
1599 localIPAddress.Append(ptrIPAddress); |
|
1600 COMASuplSETSessionID* suplSETSessionId = NULL; |
|
1601 iSuplSessionId->SETSessionID(suplSETSessionId); |
|
1602 ReverseString(localIPAddress,KIP4AddressLength); |
|
1603 suplSETSessionId->SetSuplSETSessionIDIPv4(iSETSessionUniqueId, |
|
1604 localIPAddress); |
|
1605 //#if _DEBUG |
|
1606 TBuf<64> msg; |
|
1607 TBuf<16> ipaddress; |
|
1608 address.Output(ipaddress); |
|
1609 msg.Copy(_L("Its IP4 Address. Local IP Address is ")); |
|
1610 msg.Append(ipaddress); |
|
1611 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1612 //#endif |
|
1613 } |
|
1614 |
|
1615 if ( address.Family() == KAfInet6 ) // This routine will convert IPV6 address in TBuf8<16> |
|
1616 { |
|
1617 TBuf8<KIP6AddressLength> localIP6Address; |
|
1618 const TIp6Addr &ip6Addr = address.Ip6Address(); |
|
1619 for(TInt i = 0;i < 4; ++i ) |
|
1620 { |
|
1621 TUint32 ipAddress = ip6Addr.u.iAddr32[i]; |
|
1622 TPtr8 ptrIPAddress(reinterpret_cast<TUint8*>(&ipAddress), |
|
1623 sizeof(ipAddress), sizeof(ipAddress)); |
|
1624 TBuf8<KIP4AddressLength> localIPAddress; |
|
1625 localIPAddress.Append(ptrIPAddress); |
|
1626 localIP6Address.Append(localIPAddress); |
|
1627 } |
|
1628 |
|
1629 COMASuplSETSessionID* suplSETSessionId = NULL; |
|
1630 iSuplSessionId->SETSessionID(suplSETSessionId); |
|
1631 ReverseString(localIP6Address,KIP6AddressLength); |
|
1632 suplSETSessionId->SetSuplSETSessionIDIPv6(iSETSessionUniqueId, |
|
1633 localIP6Address); |
|
1634 //#if _DEBUG |
|
1635 TBuf<64> msg; |
|
1636 TBuf<16> ipaddress; |
|
1637 address.Output(ipaddress); |
|
1638 msg.Copy(_L("Its IP6 Address. Local IP Address is ")); |
|
1639 msg.Append(ipaddress); |
|
1640 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1641 //#endif |
|
1642 } |
|
1643 |
|
1644 return KErrNone; |
|
1645 } |
|
1646 |
|
1647 |
|
1648 // ----------------------------------------------------------------------------- |
|
1649 // COMASuplSession::SetEncodedSuplInitL |
|
1650 // Sets the Encoded SUPL INIT. This is required |
|
1651 // to compute the VER in SUPL POS INIT |
|
1652 // (other items were commented in a header). |
|
1653 // ----------------------------------------------------------------------------- |
|
1654 // |
|
1655 void COMASuplSession::SetEncodedSuplInitL(HBufC8 *aEncodedSuplInit) |
|
1656 { |
|
1657 TInt len = aEncodedSuplInit->Length(); |
|
1658 if(iEncodedSuplInit) |
|
1659 { |
|
1660 delete iEncodedSuplInit; |
|
1661 iEncodedSuplInit = NULL; |
|
1662 } |
|
1663 |
|
1664 iEncodedSuplInit = HBufC8::NewL(len); |
|
1665 *iEncodedSuplInit = *aEncodedSuplInit; |
|
1666 } |
|
1667 |
|
1668 // ----------------------------------------------------------------------------- |
|
1669 // COMASuplSession::SuplSessionID |
|
1670 // Returns SessionID of Session |
|
1671 // (other items were commented in a header). |
|
1672 // ----------------------------------------------------------------------------- |
|
1673 // |
|
1674 COMASuplSessionID* COMASuplSession::SuplSessionID() const |
|
1675 { |
|
1676 return iSuplSessionId; |
|
1677 } |
|
1678 |
|
1679 // ----------------------------------------------------------------------------- |
|
1680 // COMASuplSession::GetServerAddressL |
|
1681 // Gets the Server Name and returns it back to the client |
|
1682 // (other items were commented in a header). |
|
1683 // ----------------------------------------------------------------------------- |
|
1684 // |
|
1685 EXPORT_C TInt COMASuplSession::GetServerAddressL(TDes& ahslpAddress) |
|
1686 { |
|
1687 if(iSessionCompletionCode == KErrNone) |
|
1688 { |
|
1689 iConnRequestor->GetUsedServerAddress(ahslpAddress); |
|
1690 iTrace->Trace(_L("Session has suceeded...returning address"), KTraceFileName, __LINE__); |
|
1691 iTrace->Trace(ahslpAddress, KTraceFileName, __LINE__); |
|
1692 return KErrNone; |
|
1693 } |
|
1694 else |
|
1695 { |
|
1696 iTrace->Trace(_L("Session has failed...returning Error"), KTraceFileName, __LINE__); |
|
1697 return KErrNotFound; |
|
1698 } |
|
1699 } |
|
1700 |
|
1701 // ----------------------------------------------------------------------------- |
|
1702 // COMASuplSession::GetPosition |
|
1703 // Gets the Position from the SUPL framework and returns it back to the client |
|
1704 // (other items were commented in a header). |
|
1705 // ----------------------------------------------------------------------------- |
|
1706 // |
|
1707 EXPORT_C TInt COMASuplSession::GetPosition(TPositionInfo& aSuplPosInfo) |
|
1708 { |
|
1709 TBool aPositionQualityError=TRUE; |
|
1710 iTrace->Trace(_L("COMASuplSession::GetPosition(TPositionInfo)"), KTraceFileName, __LINE__); |
|
1711 if(!iPosition) |
|
1712 { |
|
1713 iTrace->Trace(_L("COMASuplSession::GetPosition ... Position is Empty"), KTraceFileName, __LINE__); |
|
1714 return KErrNotFound; |
|
1715 } |
|
1716 |
|
1717 TPosition posInfo; |
|
1718 TOMASuplUtcTime UtcTime; |
|
1719 TOMASuplPositionEstimate PosEstimate; |
|
1720 TDateTime TimeStamp; |
|
1721 TInt ZoneCode,Zone,altitude,AltitudeUncertainty, HorizontalAccuracy; |
|
1722 TOMASuplAltitudeInfo AltitudeInfo; |
|
1723 TInt latitude,longitude; |
|
1724 TOMASuplPositionEstimate::TOMASuplLatitudeSign LatSign; |
|
1725 TOMASuplAltitudeInfo::TOMASuplAltitudeDirection altitudeDirection; |
|
1726 TOMASuplUncertainty Uncertainty; |
|
1727 TInt UncertaintySemiMajor, UncertaintySemiMinor, OrientationMajorAxis; |
|
1728 TReal UncertaintySemiMajorReal, UncertaintySemiMinorReal, AltitudeUncertaintyReal; |
|
1729 TInt confidence; |
|
1730 |
|
1731 iPosition->GetPosition(UtcTime,PosEstimate); |
|
1732 UtcTime.GetUtcTime(TimeStamp,ZoneCode,Zone); |
|
1733 TInt altErr = PosEstimate.GetAltitudeInfo(AltitudeInfo); |
|
1734 PosEstimate.GetPositionEstimate(LatSign,latitude,longitude); |
|
1735 TInt err = PosEstimate.GetConfidence(confidence); |
|
1736 altitude = 0; |
|
1737 if (altErr == KErrNone) |
|
1738 AltitudeInfo.GetAltitudeInfo(altitudeDirection,altitude,AltitudeUncertainty); |
|
1739 |
|
1740 TTime time(TimeStamp); |
|
1741 posInfo.SetTime(time); |
|
1742 |
|
1743 if(LatSign == TOMASuplPositionEstimate::ESouth ) |
|
1744 { |
|
1745 latitude = latitude * -1; |
|
1746 } |
|
1747 |
|
1748 // Conversion of latitude and longitude |
|
1749 TReal64 newLat, newLong; |
|
1750 newLat = latitude; |
|
1751 newLong = longitude; |
|
1752 //Conversion as per GAD and OMA Spec |
|
1753 newLat = (newLat/8388608)*90; |
|
1754 newLong = (newLong/16777216)*360; |
|
1755 |
|
1756 if (altErr == KErrOMASuplParamNotSet) |
|
1757 posInfo.SetCoordinate((TReal64)newLat,(TReal64)newLong); |
|
1758 else |
|
1759 posInfo.SetCoordinate((TReal64)newLat,(TReal64)newLong,(float)altitude); |
|
1760 PosEstimate.GetUncertainty(Uncertainty); |
|
1761 Uncertainty.GetUncertainty(UncertaintySemiMajor,UncertaintySemiMinor, |
|
1762 OrientationMajorAxis); |
|
1763 TBuf<64> msg; |
|
1764 msg.Copy(_L("Uncertainty Semi major")); |
|
1765 msg.AppendNum(UncertaintySemiMajor); |
|
1766 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1767 msg.Copy(_L("Uncertainty Semi Minor")); |
|
1768 msg.AppendNum(UncertaintySemiMinor); |
|
1769 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1770 msg.Copy(_L("Orientation to Major axis ")); |
|
1771 msg.AppendNum(OrientationMajorAxis); |
|
1772 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1773 msg.Copy(_L("Altitude ")); |
|
1774 msg.AppendNum(altitude); |
|
1775 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1776 msg.Copy(_L("Altitude uncertainty ")); |
|
1777 msg.AppendNum(AltitudeUncertainty); |
|
1778 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1779 |
|
1780 // Convert uncertainty to meters |
|
1781 TReal pwrMjr, pwrMnr, pwrAlt; |
|
1782 Math::Pow(pwrMjr, 1.1, UncertaintySemiMajor); |
|
1783 Math::Pow(pwrMnr, 1.1, UncertaintySemiMinor); |
|
1784 Math::Pow(pwrAlt, 1.070000, AltitudeUncertainty); |
|
1785 UncertaintySemiMajorReal = 10 * (pwrMjr -1); |
|
1786 UncertaintySemiMinorReal = 10 * (pwrMnr -1); |
|
1787 AltitudeUncertaintyReal = 10 * (pwrAlt -1); |
|
1788 |
|
1789 TReal MultiplyFactor; |
|
1790 |
|
1791 // Default set accuracy values to NaN |
|
1792 TRealX nan; |
|
1793 nan.SetNaN(); |
|
1794 |
|
1795 posInfo.SetHorizontalAccuracy(nan); |
|
1796 posInfo.SetVerticalAccuracy(nan); |
|
1797 if (err == KErrOMASuplParamNotSet||confidence<=0 || confidence>=100) |
|
1798 { |
|
1799 |
|
1800 TReal32 horizAccr; |
|
1801 horizAccr = KUncertaintyConversionFactor * ( KCEP68ConversionFactor * (UncertaintySemiMajorReal + UncertaintySemiMinorReal ) ); |
|
1802 posInfo.SetHorizontalAccuracy(horizAccr); |
|
1803 if (AltitudeUncertaintyReal > 0) |
|
1804 posInfo.SetVerticalAccuracy(AltitudeUncertaintyReal); |
|
1805 |
|
1806 } |
|
1807 else |
|
1808 { |
|
1809 |
|
1810 TReal lnResult,a_Sigma,b_Sigma; |
|
1811 Math::Ln(lnResult,(1-confidence/100.0)); |
|
1812 Math::Sqrt(MultiplyFactor,(-2*lnResult)); |
|
1813 |
|
1814 a_Sigma=UncertaintySemiMajorReal/MultiplyFactor; |
|
1815 |
|
1816 b_Sigma=UncertaintySemiMinorReal/MultiplyFactor; |
|
1817 |
|
1818 HorizontalAccuracy=0.7542*(a_Sigma+b_Sigma); |
|
1819 |
|
1820 posInfo.SetHorizontalAccuracy(HorizontalAccuracy); |
|
1821 TReal32 clientHorAcc; |
|
1822 if(iClientQop.GetHorizontalAccuracy(clientHorAcc)!=KErrNotFound) |
|
1823 { |
|
1824 if(HorizontalAccuracy<clientHorAcc) |
|
1825 { |
|
1826 aPositionQualityError=FALSE; |
|
1827 } |
|
1828 } |
|
1829 |
|
1830 /* Calculation for vertical accuracy */ |
|
1831 /* If confidence is 68, then vertical accuracy = altitude uncertainty */ |
|
1832 if (altitude > 0 && altErr == KErrNone) |
|
1833 { |
|
1834 if (confidence == 68 && AltitudeUncertaintyReal > 0) |
|
1835 posInfo.SetVerticalAccuracy(AltitudeUncertaintyReal); |
|
1836 else |
|
1837 { |
|
1838 TReal32 chiValue=0, verticalAccuracy=0; |
|
1839 if (confidence < 6) |
|
1840 { |
|
1841 chiValue = chisquare[1]; |
|
1842 } |
|
1843 else |
|
1844 { |
|
1845 chiValue = chisquare[confidence/5]; |
|
1846 } |
|
1847 verticalAccuracy = AltitudeUncertaintyReal/chiValue; |
|
1848 if (verticalAccuracy > 0) |
|
1849 { |
|
1850 posInfo.SetVerticalAccuracy(verticalAccuracy); |
|
1851 TReal32 clientVerAcc; |
|
1852 if(iClientQop.GetVerticalAccuracy(clientVerAcc)!=KErrNotFound) |
|
1853 { |
|
1854 if(verticalAccuracy<clientVerAcc) |
|
1855 { |
|
1856 aPositionQualityError=FALSE; |
|
1857 } |
|
1858 } |
|
1859 } |
|
1860 } |
|
1861 } |
|
1862 } |
|
1863 |
|
1864 TInt aClientTime; |
|
1865 if(iClientQop.GetDelay(aClientTime)!=KErrNotFound) |
|
1866 { |
|
1867 TTimeIntervalSeconds aDelay; |
|
1868 |
|
1869 iSessionEndTime.SecondsFrom(iSessionStartTime,aDelay); |
|
1870 |
|
1871 if(aClientTime< aDelay.Int()) |
|
1872 aPositionQualityError=FALSE; |
|
1873 } |
|
1874 |
|
1875 /*Set the position to TPositionInfo*/ |
|
1876 aSuplPosInfo.SetPosition(posInfo); |
|
1877 |
|
1878 if(aPositionQualityError!=TRUE) |
|
1879 return KSuplPositionQualityLoss; |
|
1880 return KErrNone; |
|
1881 } |
|
1882 |
|
1883 // ----------------------------------------------------------------------------- |
|
1884 // COMASuplSession::GetPosition |
|
1885 // Gets the Position from the SUPL framework and returns it back to the client |
|
1886 // (other items were commented in a header). |
|
1887 // ----------------------------------------------------------------------------- |
|
1888 // |
|
1889 EXPORT_C TInt COMASuplSession::GetPosition(HPositionGenericInfo& aSuplPosInfo ) |
|
1890 { |
|
1891 TBool aPositionQualityError=TRUE; |
|
1892 iTrace->Trace(_L("COMASuplSession::GetPosition(HPositionGenericInfo)"), KTraceFileName, __LINE__); |
|
1893 if(!iPosition) |
|
1894 { |
|
1895 iTrace->Trace(_L("COMASuplSession::GetPosition ... Position is Empty"), KTraceFileName, __LINE__); |
|
1896 return KErrNotFound; |
|
1897 } |
|
1898 |
|
1899 TRAP_IGNORE(StoreCurrentCellIDL(aSuplPosInfo)); |
|
1900 |
|
1901 TPosition posInfo; |
|
1902 TOMASuplUtcTime UtcTime; |
|
1903 TOMASuplPositionEstimate PosEstimate; |
|
1904 TDateTime TimeStamp; |
|
1905 TInt ZoneCode,Zone,altitude,AltitudeUncertainty, HorizontalAccuracy; |
|
1906 TOMASuplAltitudeInfo AltitudeInfo; |
|
1907 TInt latitude,longitude; |
|
1908 TOMASuplPositionEstimate::TOMASuplLatitudeSign LatSign; |
|
1909 TOMASuplAltitudeInfo::TOMASuplAltitudeDirection AltitudeDirection; |
|
1910 TOMASuplUncertainty Uncertainty; |
|
1911 TInt UncertaintySemiMajor, UncertaintySemiMinor, OrientationMajorAxis; |
|
1912 TReal UncertaintySemiMajorReal, UncertaintySemiMinorReal, AltitudeUncertaintyReal; |
|
1913 TInt confidence; |
|
1914 |
|
1915 iPosition->GetPosition(UtcTime,PosEstimate); |
|
1916 UtcTime.GetUtcTime(TimeStamp,ZoneCode,Zone); |
|
1917 TInt altErr = PosEstimate.GetAltitudeInfo(AltitudeInfo); |
|
1918 PosEstimate.GetPositionEstimate(LatSign,latitude,longitude); |
|
1919 TInt err = PosEstimate.GetConfidence(confidence); |
|
1920 altitude = 0; |
|
1921 if (altErr == KErrNone) |
|
1922 AltitudeInfo.GetAltitudeInfo(AltitudeDirection,altitude,AltitudeUncertainty); |
|
1923 PosEstimate.GetUncertainty(Uncertainty); |
|
1924 Uncertainty.GetUncertainty(UncertaintySemiMajor,UncertaintySemiMinor, |
|
1925 OrientationMajorAxis); |
|
1926 // Convert uncertainty to meters |
|
1927 TReal pwrMjr, pwrMnr, pwrAlt; |
|
1928 Math::Pow(pwrMjr, 1.1, UncertaintySemiMajor); |
|
1929 Math::Pow(pwrMnr, 1.1, UncertaintySemiMinor); |
|
1930 Math::Pow(pwrAlt, 1.070000, AltitudeUncertainty); |
|
1931 UncertaintySemiMajorReal = 10 * (pwrMjr -1); |
|
1932 UncertaintySemiMinorReal = 10 * (pwrMnr -1); |
|
1933 AltitudeUncertaintyReal = 10 * (pwrAlt -1); |
|
1934 |
|
1935 TReal MultiplyFactor; |
|
1936 |
|
1937 TBuf<64> msg; |
|
1938 msg.Copy(_L("Uncertainty Semi major")); |
|
1939 msg.AppendNum(UncertaintySemiMajor); |
|
1940 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1941 msg.Copy(_L("Uncertainty Semi Minor")); |
|
1942 msg.AppendNum(UncertaintySemiMinor); |
|
1943 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1944 msg.Copy(_L("Orientation to Major axis ")); |
|
1945 msg.AppendNum(OrientationMajorAxis); |
|
1946 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1947 msg.Copy(_L("Altitude ")); |
|
1948 msg.AppendNum(altitude); |
|
1949 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1950 msg.Copy(_L("Altitude uncertainty ")); |
|
1951 msg.AppendNum(AltitudeUncertainty); |
|
1952 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
1953 |
|
1954 // Default set accuracy values to NaN |
|
1955 TRealX nan; |
|
1956 nan.SetNaN(); |
|
1957 |
|
1958 posInfo.SetHorizontalAccuracy(nan); |
|
1959 posInfo.SetVerticalAccuracy(nan); |
|
1960 |
|
1961 if (err == KErrOMASuplParamNotSet||confidence<=0 || confidence>=100) |
|
1962 { |
|
1963 iTrace->Trace(_L("Confidance Not Set"), KTraceFileName, __LINE__); |
|
1964 |
|
1965 TReal32 horizAccr; |
|
1966 horizAccr = KUncertaintyConversionFactor * ( KCEP68ConversionFactor * (UncertaintySemiMajorReal + UncertaintySemiMinorReal ) ); |
|
1967 posInfo.SetHorizontalAccuracy(horizAccr); |
|
1968 if (AltitudeUncertaintyReal > 0) |
|
1969 posInfo.SetVerticalAccuracy(AltitudeUncertaintyReal); |
|
1970 } |
|
1971 else |
|
1972 { |
|
1973 iTrace->Trace(_L("Confidance is Set"), KTraceFileName, __LINE__); |
|
1974 |
|
1975 TReal lnResult,a_Sigma,b_Sigma; |
|
1976 Math::Ln(lnResult,(1-confidence/100.0)); |
|
1977 Math::Sqrt(MultiplyFactor,(-2*lnResult)); |
|
1978 |
|
1979 a_Sigma=UncertaintySemiMajorReal/MultiplyFactor; |
|
1980 b_Sigma=UncertaintySemiMinorReal/MultiplyFactor; |
|
1981 |
|
1982 HorizontalAccuracy=0.7542*(a_Sigma+b_Sigma); |
|
1983 |
|
1984 posInfo.SetHorizontalAccuracy(HorizontalAccuracy); |
|
1985 TReal32 clientHorAcc; |
|
1986 if(iClientQop.GetHorizontalAccuracy(clientHorAcc)!=KErrNotFound) |
|
1987 { |
|
1988 if(HorizontalAccuracy<clientHorAcc) |
|
1989 { |
|
1990 aPositionQualityError=FALSE; |
|
1991 } |
|
1992 } |
|
1993 |
|
1994 |
|
1995 /* If confidence is 68, then vertical accuracy = altitude uncertainty */ |
|
1996 if (altitude > 0 && altErr == KErrNone) |
|
1997 { |
|
1998 if (confidence == 68 && AltitudeUncertaintyReal > 0) |
|
1999 posInfo.SetVerticalAccuracy(AltitudeUncertaintyReal); |
|
2000 else |
|
2001 { |
|
2002 TReal32 chiValue=0, verticalAccuracy=0; |
|
2003 if (confidence < 6) |
|
2004 { |
|
2005 chiValue = chisquare[1]; |
|
2006 } |
|
2007 else |
|
2008 { |
|
2009 chiValue = chisquare[confidence/5]; |
|
2010 } |
|
2011 verticalAccuracy = AltitudeUncertaintyReal/chiValue; |
|
2012 if (verticalAccuracy > 0) |
|
2013 { |
|
2014 posInfo.SetVerticalAccuracy(verticalAccuracy); |
|
2015 TReal32 clientVerAcc; |
|
2016 if(iClientQop.GetVerticalAccuracy(clientVerAcc)!=KErrNotFound) |
|
2017 { |
|
2018 if(verticalAccuracy<clientVerAcc) |
|
2019 { |
|
2020 aPositionQualityError=FALSE; |
|
2021 } |
|
2022 else |
|
2023 aPositionQualityError=FALSE; |
|
2024 } |
|
2025 } |
|
2026 } |
|
2027 } |
|
2028 } |
|
2029 |
|
2030 TTime time(TimeStamp); |
|
2031 posInfo.SetTime(time); |
|
2032 |
|
2033 if(LatSign == TOMASuplPositionEstimate::ESouth ) |
|
2034 { |
|
2035 latitude = latitude * -1; |
|
2036 } |
|
2037 |
|
2038 // Conversion of latitude and longitude |
|
2039 TReal64 newLat, newLong; |
|
2040 newLat = latitude; |
|
2041 newLong = longitude; |
|
2042 newLat = (newLat/8388608)*90; |
|
2043 newLong = (newLong/16777216)*360; |
|
2044 if (altErr == KErrOMASuplParamNotSet) |
|
2045 posInfo.SetCoordinate((TReal64)newLat,(TReal64)newLong); |
|
2046 else |
|
2047 posInfo.SetCoordinate((TReal64)newLat,(TReal64)newLong,(float)altitude); |
|
2048 |
|
2049 /*Set the position to TPositionInfo*/ |
|
2050 aSuplPosInfo.SetPosition(posInfo); |
|
2051 |
|
2052 /* Set GenInfo related fields */ |
|
2053 TOMASuplVelocityType VelType; |
|
2054 COMASuplHorizVelocity* HorizVel; |
|
2055 COMASuplVelocity* SuplVel; |
|
2056 TUint16 HorSpeed; |
|
2057 TUint16 Bearing; |
|
2058 TUint8 VertDirection; |
|
2059 TUint8 VertSpeed; |
|
2060 TUint8 UncertSpeed; |
|
2061 TUint8 HorUncertSpeed,VerUncertSpeed; |
|
2062 |
|
2063 iTrace->Trace(_L("Before iPosition->GetVelocity"), KTraceFileName, __LINE__); |
|
2064 TInt ret = iPosition->GetVelocity(SuplVel); |
|
2065 iTrace->Trace(_L("After iPosition->GetVelocity"), KTraceFileName, __LINE__); |
|
2066 if (ret == KErrNone) |
|
2067 { |
|
2068 |
|
2069 VelType = SuplVel->VelType(); |
|
2070 |
|
2071 HorizVel = SuplVel->Velocity(); |
|
2072 |
|
2073 switch(VelType) |
|
2074 { |
|
2075 case EHorizVelocity: |
|
2076 { |
|
2077 iTrace->Trace(_L("Start of COMASuplSession::GetPosition(HPositionGenericInfo) velType = EHorizVelocity"), KTraceFileName, __LINE__); |
|
2078 aSuplPosInfo.SetRequestedField(EPositionFieldHorizontalSpeed); |
|
2079 HorizVel->GetHorizVel(Bearing, HorSpeed); |
|
2080 aSuplPosInfo.SetValue(EPositionFieldHorizontalSpeed, (TReal32)HorSpeed); |
|
2081 iTrace->Trace(_L("End of COMASuplSession::GetPosition(HPositionGenericInfo) velType = EHorizVelocity"), KTraceFileName, __LINE__); |
|
2082 break; |
|
2083 } |
|
2084 case EHorizAndVertVelocity: |
|
2085 { |
|
2086 iTrace->Trace(_L("Start of COMASuplSession::GetPosition(HPositionGenericInfo) velType = EHorizAndVertVelocity"), KTraceFileName, __LINE__); |
|
2087 COMASuplHorizAndVertVelocity* horizVertVel = (COMASuplHorizAndVertVelocity*)HorizVel; |
|
2088 horizVertVel->GetHorizAndVertVel(Bearing, HorSpeed, VertDirection, |
|
2089 VertSpeed); |
|
2090 aSuplPosInfo.SetRequestedField(EPositionFieldHorizontalSpeed); |
|
2091 aSuplPosInfo.SetValue(EPositionFieldHorizontalSpeed, (TReal32)HorSpeed); |
|
2092 aSuplPosInfo.SetRequestedField(EPositionFieldVerticalSpeed); |
|
2093 aSuplPosInfo.SetValue(EPositionFieldVerticalSpeed, (TReal32)VertSpeed); |
|
2094 iTrace->Trace(_L("End of COMASuplSession::GetPosition(HPositionGenericInfo) velType = EHorizAndVertVelocity"), KTraceFileName, __LINE__); |
|
2095 break; |
|
2096 } |
|
2097 case EHorizUncertVelocity: |
|
2098 { |
|
2099 iTrace->Trace(_L("Start of COMASuplSession::GetPosition(HPositionGenericInfo) velType = EHorizUncertVelocity"), KTraceFileName, __LINE__); |
|
2100 COMASuplHorizUncertVelocity* horizUncertVel = (COMASuplHorizUncertVelocity*)HorizVel; |
|
2101 aSuplPosInfo.SetRequestedField(EPositionFieldHorizontalSpeed); |
|
2102 horizUncertVel->GetHorizUncertVel(Bearing, HorSpeed, UncertSpeed); |
|
2103 aSuplPosInfo.SetValue(EPositionFieldHorizontalSpeed, (TReal32)HorSpeed); |
|
2104 aSuplPosInfo.SetRequestedField(EPositionFieldHorizontalSpeedError); |
|
2105 aSuplPosInfo.SetValue(EPositionFieldHorizontalSpeedError, (TReal32)UncertSpeed); |
|
2106 iTrace->Trace(_L("End of COMASuplSession::GetPosition(HPositionGenericInfo) velType = EHorizUncertVelocity"), KTraceFileName, __LINE__); |
|
2107 break; |
|
2108 } |
|
2109 case EHorizAndVertUncertVelocity: |
|
2110 { |
|
2111 iTrace->Trace(_L("Start of COMASuplSession::GetPosition(HPositionGenericInfo) velType = EHorizAndVertUncertVelocity"), KTraceFileName, __LINE__); |
|
2112 COMASuplHorizAndVertUncertVelocity* horizVertUncertVel = (COMASuplHorizAndVertUncertVelocity*)HorizVel; |
|
2113 aSuplPosInfo.SetRequestedField(EPositionFieldHorizontalSpeed); |
|
2114 horizVertUncertVel->GetHorizVertUncertVel(Bearing, HorSpeed, |
|
2115 VertDirection, |
|
2116 VertSpeed,HorUncertSpeed,VerUncertSpeed); |
|
2117 aSuplPosInfo.SetValue(EPositionFieldHorizontalSpeed, (TReal32)HorSpeed); |
|
2118 aSuplPosInfo.SetRequestedField(EPositionFieldHorizontalSpeedError); |
|
2119 aSuplPosInfo.SetValue(EPositionFieldHorizontalSpeedError, (TReal32)HorUncertSpeed); |
|
2120 aSuplPosInfo.SetRequestedField(EPositionFieldVerticalSpeed); |
|
2121 aSuplPosInfo.SetValue(EPositionFieldVerticalSpeed, (TReal32)VertSpeed); |
|
2122 aSuplPosInfo.SetRequestedField(EPositionFieldVerticalSpeedError); |
|
2123 aSuplPosInfo.SetValue(EPositionFieldVerticalSpeedError, (TReal32)VerUncertSpeed); |
|
2124 iTrace->Trace(_L("End of COMASuplSession::GetPosition(HPositionGenericInfo) velType = EHorizAndVertUncertVelocity"), KTraceFileName, __LINE__); |
|
2125 break; |
|
2126 } |
|
2127 } |
|
2128 } |
|
2129 TInt aClientTime; |
|
2130 if(iClientQop.GetDelay(aClientTime)!=KErrNotFound) |
|
2131 { |
|
2132 TTimeIntervalSeconds aDelay; |
|
2133 iSessionEndTime.SecondsFrom(iSessionStartTime,aDelay); |
|
2134 |
|
2135 if(aClientTime< aDelay.Int()) |
|
2136 aPositionQualityError=FALSE; |
|
2137 } |
|
2138 |
|
2139 if(aPositionQualityError==FALSE) |
|
2140 return KSuplPositionQualityLoss; |
|
2141 return KErrNone; |
|
2142 } |
|
2143 |
|
2144 |
|
2145 // ----------------------------------------------------------------------------- |
|
2146 // COMASuplSession::HandleOMASuplMessage |
|
2147 // Handles OMA Supl messages & starts processing according to state of session. |
|
2148 // (other items were commented in a header). |
|
2149 // ----------------------------------------------------------------------------- |
|
2150 // |
|
2151 void COMASuplSession::HandleOMASuplMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage,TRequestStatus& aStatus,TInt aSessionIdSeed,TInt aErrorCode) |
|
2152 { |
|
2153 delete iSuplState; |
|
2154 iSuplState = NULL; |
|
2155 |
|
2156 iSETSessionUniqueId = aSessionIdSeed; |
|
2157 iRunRequestStatus = & aStatus; |
|
2158 *iRunRequestStatus = KRequestPending; |
|
2159 |
|
2160 TInt networkMode = 1; |
|
2161 networkMode = GetNetworkModeL(); |
|
2162 |
|
2163 TBuf<64> msg; |
|
2164 if ( networkMode == ECoreAppUIsNetworkConnectionNotAllowed ) |
|
2165 { |
|
2166 msg.Copy(_L("The device is in OFFLINE mode.")); |
|
2167 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
2168 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
2169 return; |
|
2170 } |
|
2171 else |
|
2172 { |
|
2173 msg.Copy(_L("The device is in ON LINE mode.")); |
|
2174 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
2175 } |
|
2176 |
|
2177 CSuplSettings::TSuplSettingsUsage usage = iSuplSettings->SUPLUsage(); |
|
2178 |
|
2179 if (usage == CSuplSettings::ESuplUsageDisabled) |
|
2180 { |
|
2181 msg.Copy(_L("SUPL Usage is disabled")); |
|
2182 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
2183 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
2184 return; |
|
2185 } |
|
2186 |
|
2187 COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsnMessage->MessageType(); |
|
2188 |
|
2189 if(messageType == COMASuplAsnMessageBase::ESUPL_INIT && aErrorCode == KErrNone) |
|
2190 { |
|
2191 HandleOMASuplMessageL(aDecodedAsnMessage); |
|
2192 } |
|
2193 else //Other messages than SUPL_INIT.... Send End |
|
2194 { |
|
2195 CreateCloneMessageL(aDecodedAsnMessage); |
|
2196 UpdateSuplSessionIDL(); |
|
2197 |
|
2198 iSuplSessionState = ESUPL_INITIALIZED; |
|
2199 iSuplMsgType = ESUPL_END; |
|
2200 |
|
2201 if((aErrorCode == KErrCompletion && messageType == COMASuplAsnMessageBase::ESUPL_INIT) || |
|
2202 (aErrorCode == KErrOMASuplOutOfRangeParameter && messageType == COMASuplAsnMessageBase::ESUPL_INIT) || |
|
2203 (aErrorCode == KErrOMASuplMessageLengthMismatch && messageType == COMASuplAsnMessageBase::ESUPL_INIT) || |
|
2204 (aErrorCode == KErrOMASuplShortFrame && messageType == COMASuplAsnMessageBase::ESUPL_INIT)) |
|
2205 { |
|
2206 iErrorStatusCode = COMASuplEnd::EUnexpectedDataValue; |
|
2207 if(aErrorCode == KErrOMASuplMessageLengthMismatch) |
|
2208 { |
|
2209 iErrorStatusCode = COMASuplEnd::EProtocolError; |
|
2210 } |
|
2211 if(aErrorCode == KErrOMASuplShortFrame) |
|
2212 { |
|
2213 iErrorStatusCode = COMASuplEnd::EDataMissing; |
|
2214 } |
|
2215 TInt len = iHSLPAddress.Length(); |
|
2216 HBufC8 *hslpAdress = NULL; |
|
2217 if(len > 0) |
|
2218 { |
|
2219 hslpAdress = HBufC8::NewL(iHSLPAddress.Length()); |
|
2220 hslpAdress->Des().Copy(iHSLPAddress); |
|
2221 } |
|
2222 |
|
2223 else if(len ==0) |
|
2224 { |
|
2225 iTrace->Trace(_L("Length of HSLP Address is = 0, passing the HSLP generated frm IMSI"), KTraceFileName, __LINE__); |
|
2226 hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length()); |
|
2227 CleanupStack::PushL(hslpAdress); |
|
2228 hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi()); |
|
2229 CleanupStack::Pop(hslpAdress); |
|
2230 } |
|
2231 CleanupStack::PushL(hslpAdress); |
|
2232 iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress); |
|
2233 CleanupStack::PopAndDestroy(hslpAdress); |
|
2234 } |
|
2235 else |
|
2236 { |
|
2237 iErrorStatusCode = COMASuplEnd::EUnexpectedMessage; |
|
2238 iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl); |
|
2239 } |
|
2240 |
|
2241 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
2242 iSuplState->SetMsgStateObserver(this); |
|
2243 iSuplState->GenerateMessageL(); |
|
2244 iSuplSessionState = ESUPL_GENERATE; |
|
2245 } |
|
2246 } |
|
2247 |
|
2248 // ----------------------------------------------------------------------------- |
|
2249 // COMASuplSession::HandleOMASuplMessage |
|
2250 // Handles OMA Supl messages & starts processing according to state of session. |
|
2251 // (other items were commented in a header). |
|
2252 // ----------------------------------------------------------------------------- |
|
2253 // |
|
2254 void COMASuplSession::HandleOMASuplMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage) |
|
2255 { |
|
2256 CreateCloneMessageL(aDecodedAsnMessage); |
|
2257 if(CheckProtocolVersionL(aDecodedAsnMessage)) //Checks version with supported version |
|
2258 { |
|
2259 COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsnMessage->MessageType(); |
|
2260 |
|
2261 if(messageType != COMASuplAsnMessageBase::ESUPL_POS) |
|
2262 { |
|
2263 iCompleteSelfRequestor->CompleteSelf(); //This will result in call of RequestCompleted() |
|
2264 } |
|
2265 else |
|
2266 { |
|
2267 RequestCompletedL(); |
|
2268 } |
|
2269 } |
|
2270 } |
|
2271 |
|
2272 // ----------------------------------------------------------------------------- |
|
2273 // COMASuplSession::RequestCompleted |
|
2274 // |
|
2275 // (other items were commented in a header). |
|
2276 // ----------------------------------------------------------------------------- |
|
2277 // |
|
2278 void COMASuplSession::RequestCompletedL() |
|
2279 { |
|
2280 //Start Next Processing...... |
|
2281 iTrace->Trace(_L("COMASuplSession::RequestCompleted...Retriving message type"), KTraceFileName, __LINE__); |
|
2282 |
|
2283 COMASuplAsnMessageBase::TSuplMessageType messageType = iDecodedAsnMessage->MessageType(); |
|
2284 |
|
2285 switch(messageType) |
|
2286 { |
|
2287 case COMASuplAsnMessageBase::ESUPL_RESPONSE: |
|
2288 { |
|
2289 iSuplSessionState = ESUPL_RECEIVED; |
|
2290 iTrace->Trace(_L("Received Message is of SUPL_RESPONSE type..."), KTraceFileName, __LINE__); |
|
2291 CancelAllOperations(); |
|
2292 if(iSuplMsgType == ESUPL_START) |
|
2293 { |
|
2294 iSuplMsgType = ESUPL_RESPONSE; |
|
2295 ProcessSuplResponseL(); |
|
2296 } |
|
2297 else |
|
2298 { |
|
2299 iTrace->Trace(_L("COMASuplSession::RequestCompletedL...Protocol Error..."), KTraceFileName, __LINE__); |
|
2300 // Send SUPL End with Protocol Error |
|
2301 HandleSuplErrorL(KErrOMASuplProtocolError); |
|
2302 } |
|
2303 break; |
|
2304 |
|
2305 } |
|
2306 case COMASuplAsnMessageBase::ESUPL_POS: |
|
2307 { |
|
2308 iTrace->Trace(_L("Received Message is of SUPL_POS type..."), KTraceFileName, __LINE__); |
|
2309 if(iOMASuplPOSRequestor) // |
|
2310 { |
|
2311 //if(((iSuplMsgType == ESUPL_POS || iSuplMsgType == ESUPL_POSINIT)) && !IsLastPOSMessage()) |
|
2312 if(((iSuplMsgType == ESUPL_POS || iSuplMsgType == ESUPL_POSINIT))) //Changed for SUPL_POS after UT3 |
|
2313 { |
|
2314 iSuplMsgType = ESUPL_POS; |
|
2315 iTimer->StopTimer(); // Added by Manish |
|
2316 iSuplState->StopTimer(); |
|
2317 ProcessSuplPosL(); |
|
2318 } |
|
2319 else |
|
2320 { |
|
2321 iSuplSessionState = ESUPL_RECEIVED; |
|
2322 CancelAllOperations(); |
|
2323 iTrace->Trace(_L("COMASuplSession::RequestCompletedL...Protocol Error..."), KTraceFileName, __LINE__); |
|
2324 // Send SUPL End with Protocol Error |
|
2325 HandleSuplErrorL(KErrOMASuplProtocolError); |
|
2326 } |
|
2327 } |
|
2328 else // POS is not there |
|
2329 { |
|
2330 iSuplSessionState = ESUPL_RECEIVED; |
|
2331 CancelAllOperations(); |
|
2332 iTrace->Trace(_L("COMASuplSession::RequestCompletedL...Protocol Error..."), KTraceFileName, __LINE__); |
|
2333 // Send SUPL End with Protocol Error |
|
2334 HandleSuplErrorL(KErrOMASuplProtocolError); |
|
2335 } |
|
2336 break; |
|
2337 } |
|
2338 case COMASuplAsnMessageBase::ESUPL_END: |
|
2339 { |
|
2340 iSuplSessionState = ESUPL_RECEIVED; |
|
2341 iTrace->Trace(_L("Received Message is of SUPL_END type..."), KTraceFileName, __LINE__); |
|
2342 CancelAllOperations(); |
|
2343 //Close Connection--- Bug fix |
|
2344 iConnRequestor->CloseConnection(); |
|
2345 iPortNum = 0; |
|
2346 //Remove entry from Settings to inform UI that trigger session has stop |
|
2347 RemoveActiveSession(); |
|
2348 if(IsGenerationInProgress()) //Check is generation going on |
|
2349 { |
|
2350 // Invoke SessionTerminate |
|
2351 iSessionObserver.TerminateSession(this, KErrCompletion); |
|
2352 break; |
|
2353 } |
|
2354 |
|
2355 if(iSuplMsgType != ESUPL_END) |
|
2356 { |
|
2357 iSuplMsgType = ESUPL_END; //::POS:: |
|
2358 ProcessSuplEndL(); |
|
2359 } |
|
2360 break; |
|
2361 } |
|
2362 |
|
2363 case COMASuplAsnMessageBase::ESUPL_INIT: //::POS:: |
|
2364 { |
|
2365 iTrace->Trace(_L("Received Message is of ESUPL_INIT type..."), KTraceFileName, __LINE__); |
|
2366 iSuplSessionState = ESUPL_RECEIVED; |
|
2367 CancelAllOperations(); |
|
2368 iSuplMsgType = ESUPL_INIT; //::POS:: |
|
2369 ProcessSuplInitL(); |
|
2370 break; |
|
2371 } |
|
2372 |
|
2373 case COMASuplAsnMessageBase::ESUPL_AUTH_REQ: |
|
2374 case COMASuplAsnMessageBase::ESUPL_AUTH_RESP: |
|
2375 { |
|
2376 iTrace->Trace(_L("Received Message is of ESUPL_AUTH_RESPONCE/ESUPL_AUTH_REQ type..."), KTraceFileName, __LINE__); |
|
2377 iSuplSessionState = ESUPL_RECEIVED; |
|
2378 CancelAllOperations(); |
|
2379 iSuplMsgType = ESUPL_AUTH_RESP; |
|
2380 ProcessSuplAuthResponceL(); |
|
2381 break; |
|
2382 } |
|
2383 case COMASuplAsnMessageBase::ESUPL_TRIG_RESPONSE: |
|
2384 { |
|
2385 iSuplSessionState = ESUPL_RECEIVED; |
|
2386 iTrace->Trace(_L("Received Message is of SUPL_TRIGGER_RESPONSE type..."), KTraceFileName, __LINE__); |
|
2387 CancelAllOperations(); |
|
2388 if(iSuplMsgType == ESUPL_TRIG_START) |
|
2389 { |
|
2390 iSuplMsgType = ESUPL_TRIG_RESPONSE; |
|
2391 ProcessSuplTriggerResponseL(); |
|
2392 //Start timer without waiting for clientNotify |
|
2393 if (iRequestType == ESUPL_TERMINAL) |
|
2394 StartPeriodicTriggerTimer(); |
|
2395 } |
|
2396 else |
|
2397 { |
|
2398 iTrace->Trace(_L("COMASuplSession::RequestCompletedL...Protocol Error..."), KTraceFileName, __LINE__); |
|
2399 // Send SUPL End with Protocol Error |
|
2400 HandleSuplErrorL(KErrOMASuplProtocolError); |
|
2401 } |
|
2402 break; |
|
2403 |
|
2404 } |
|
2405 |
|
2406 case COMASuplAsnMessageBase::ESUPL_REPORT: |
|
2407 { |
|
2408 iSuplSessionState = ESUPL_RECEIVED; |
|
2409 iTrace->Trace(_L("Received Message is of SUPL_REPORT type..."), KTraceFileName, __LINE__); |
|
2410 CancelAllOperations(); |
|
2411 |
|
2412 if (iInterval > KMaxIntervalTime) |
|
2413 iConnRequestor->CloseConnection(); |
|
2414 |
|
2415 if(IsGenerationInProgress()) //Check is generation going on |
|
2416 { |
|
2417 // Invoke SessionTerminate |
|
2418 if (iRequestType != ESUPL_NETWORK) |
|
2419 iSessionObserver.TerminateSession(this, KErrCompletion); |
|
2420 break; |
|
2421 } |
|
2422 |
|
2423 //if(iSuplMsgType != ESUPL_REPORT) |
|
2424 if(iSuplMsgType == ESUPL_POS || iSuplMsgType == ESUPL_POSINIT) |
|
2425 { |
|
2426 iSuplMsgType = ESUPL_REPORT; //::POS:: |
|
2427 ProcessSuplReportL(); |
|
2428 if (iNumFixes == 0 && iRequestType == ESUPL_NETWORK) |
|
2429 { |
|
2430 iTrace->Trace(_L("StartTimer for SUPL_TRIGGER_REPORT..."), KTraceFileName, __LINE__); |
|
2431 iSuplState->SetMsgStateObserver(this); |
|
2432 iSuplState->StartTimer(); |
|
2433 } |
|
2434 |
|
2435 } |
|
2436 else |
|
2437 { |
|
2438 iTrace->Trace(_L("COMASuplSession::RequestCompletedL...Protocol Error..."), KTraceFileName, __LINE__); |
|
2439 // Send SUPL End with Protocol Error |
|
2440 HandleSuplErrorL(KErrOMASuplProtocolError); |
|
2441 } |
|
2442 /* if(iSuplMsgType != ESUPL_REPORT) |
|
2443 { |
|
2444 iSuplMsgType = ESUPL_REPORT; //::POS:: |
|
2445 ProcessSuplReportL(); |
|
2446 } */ |
|
2447 break; |
|
2448 } |
|
2449 case COMASuplAsnMessageBase::ESUPL_TRIG_STOP: |
|
2450 { |
|
2451 iSuplSessionState = ESUPL_RECEIVED; |
|
2452 iTrace->Trace(_L("Received Message is of SUPL_TRIGGER_STOP type..."), KTraceFileName, __LINE__); |
|
2453 CancelAllOperations(); |
|
2454 |
|
2455 if(iSuplMsgType != ESUPL_TRIG_STOP) |
|
2456 { |
|
2457 iSuplMsgType = ESUPL_TRIG_STOP; //::POS:: |
|
2458 ProcessSuplTriggerStopL(); |
|
2459 } |
|
2460 break; |
|
2461 } |
|
2462 default: |
|
2463 { |
|
2464 iSuplSessionState = ESUPL_RECEIVED; |
|
2465 iTrace->Trace(_L("Received Message is of UNKNOWN type..."), KTraceFileName, __LINE__); |
|
2466 CancelAllOperations(); |
|
2467 HandleSuplErrorL(KErrOMASuplProtocolError); |
|
2468 break; |
|
2469 |
|
2470 } |
|
2471 } |
|
2472 } |
|
2473 |
|
2474 |
|
2475 // ----------------------------------------------------------------------------- |
|
2476 // COMASuplSession::CancelAllOperations |
|
2477 // |
|
2478 // (other items were commented in a header). |
|
2479 // ----------------------------------------------------------------------------- |
|
2480 // |
|
2481 void COMASuplSession::CancelAllOperations() |
|
2482 { |
|
2483 if(iSuplState) |
|
2484 { |
|
2485 iSuplState->CancelOperation(); |
|
2486 } |
|
2487 |
|
2488 iTrace->Trace(_L("iConnRequestor->Cancel..."), KTraceFileName, __LINE__); |
|
2489 iConnRequestor->Cancel(); |
|
2490 iTrace->Trace(_L("iCompleteSelfRequestor->Cancel..."), KTraceFileName, __LINE__); |
|
2491 iCompleteSelfRequestor->Cancel(); |
|
2492 |
|
2493 if(iOMASuplPOSRequestor) |
|
2494 iOMASuplPOSRequestor->Cancel(); |
|
2495 |
|
2496 iTrace->Trace(_L("iTimer->StopTimer..."), KTraceFileName, __LINE__); |
|
2497 iTimer->StopTimer(); |
|
2498 } |
|
2499 |
|
2500 // ----------------------------------------------------------------------------- |
|
2501 // COMASuplSession::ProcessSuplResponse |
|
2502 // Process SUPL RESPONSE |
|
2503 // (other items were commented in a header). |
|
2504 // ----------------------------------------------------------------------------- |
|
2505 // |
|
2506 void COMASuplSession::ProcessSuplResponseL() |
|
2507 { |
|
2508 iTrace->Trace(_L("Processing SUPL Response..."), KTraceFileName, __LINE__); |
|
2509 |
|
2510 // Recreate SUPL STATE |
|
2511 delete iSuplState; |
|
2512 iSuplState = NULL; |
|
2513 |
|
2514 iSuplState = COMASuplResponseState::NewL(); |
|
2515 iSuplState->SetVersion(iSuplVersion); |
|
2516 TInt err = iSuplState->ProcessMessageL(iDecodedAsnMessage); |
|
2517 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplReceived); |
|
2518 iSuplMsgType = ESUPL_RESPONSE; |
|
2519 |
|
2520 iPosMethod = static_cast<COMASuplResponseState *>(iSuplState)->GetPosMethod(); |
|
2521 |
|
2522 TBuf<128> msg(_L("ProcessSuplResponseL() got iPosMethod: ")); |
|
2523 msg.AppendNum(iPosMethod); |
|
2524 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
2525 if(KErrNone == err) |
|
2526 { |
|
2527 iSuplSessionState = ESUPL_GENERATE; |
|
2528 UpdateSuplSessionIDL(); |
|
2529 OperationCompleteL(KErrNone); |
|
2530 } |
|
2531 else |
|
2532 { |
|
2533 HandleSuplErrorL(err); |
|
2534 } |
|
2535 |
|
2536 } |
|
2537 |
|
2538 // ----------------------------------------------------------------------------- |
|
2539 // COMASuplSession::ProcessSuplPosL |
|
2540 // Process SUPL POS |
|
2541 // (other items were commented in a header). |
|
2542 // ----------------------------------------------------------------------------- |
|
2543 // |
|
2544 void COMASuplSession::ProcessSuplPosL() |
|
2545 { |
|
2546 iTrace->Trace(_L("Processing SUPL Pos..."), KTraceFileName, __LINE__); |
|
2547 TInt error = KErrNone; |
|
2548 |
|
2549 // Recreate SUPL STATE if the previous state was not ESUPL_POS |
|
2550 if(iSuplState) |
|
2551 { |
|
2552 if(COMASuplState::ESUPL_POS != iSuplState->GetSuplState()) |
|
2553 { |
|
2554 delete iSuplState; |
|
2555 iSuplState = NULL; |
|
2556 |
|
2557 iSuplState = COMASuplPosState::NewL(iPOSSession,iUT3_PosTimer,iSETCapabilities,iOMASuplAsnHandlerBaseImpl); |
|
2558 } |
|
2559 |
|
2560 iSuplState->SetVersion(iSuplVersion); |
|
2561 error = iSuplState->ProcessMessageL(iDecodedAsnMessage); |
|
2562 |
|
2563 //This is for generating SUPL_POS, after UT3 timer started & received SUPL_POS. |
|
2564 |
|
2565 //!iIsFirstPOSMessage this is for putting new request if we |
|
2566 //gets SUPL_POS even if first POS message from SET failed to generate data |
|
2567 if( KErrNone == error && ( IsLastPOSMessage() || !iIsFirstPOSMessage )) |
|
2568 { |
|
2569 iTrace->Trace(_L("Generating POS ... After starting UT3 OR After failing of Generation of first POS message..."), KTraceFileName, __LINE__); |
|
2570 iSuplMsgType = ESUPL_POS; |
|
2571 iSuplSessionState = ESUPL_GENERATE; |
|
2572 GenerateSuplMessageL(); |
|
2573 iSuplSessionState = ESUPL_ENCODE; |
|
2574 } |
|
2575 } |
|
2576 |
|
2577 if(KErrNone != error) |
|
2578 { |
|
2579 TBuf<64> msg(_L("Error while Processing SUPL Pos is : ")); |
|
2580 msg.AppendNum(error); |
|
2581 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
2582 HandleSuplErrorL(error); |
|
2583 } |
|
2584 |
|
2585 } |
|
2586 |
|
2587 // ----------------------------------------------------------------------------- |
|
2588 // COMASuplSession::ProcessSuplEndL |
|
2589 // Process SUPL RESPONSE |
|
2590 // (other items were commented in a header). |
|
2591 // ----------------------------------------------------------------------------- |
|
2592 // |
|
2593 void COMASuplSession::ProcessSuplEndL() |
|
2594 { |
|
2595 iTrace->Trace(_L("COMASuplSession::ProcessSuplEndL..."), KTraceFileName, __LINE__); |
|
2596 |
|
2597 // Recreate SUPL STATE |
|
2598 delete iSuplState; |
|
2599 iSuplState = NULL; |
|
2600 |
|
2601 iSuplState = COMASuplEndState::NewL(COMASuplEnd::EUnspecified,iOMASuplAsnHandlerBaseImpl); |
|
2602 iSuplState->SetVersion(iSuplVersion); |
|
2603 TInt err = iSuplState->ProcessMessageL(iDecodedAsnMessage); |
|
2604 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplReceived); |
|
2605 |
|
2606 LogEndTime(); //Log end time if QoP & delay in Qop is present. |
|
2607 |
|
2608 if(KErrOMASuplVersionNotMatching != err) //KErrNone == err)..changed for new requirement... |
|
2609 // Even if there is status code in SUPL_END ... still process SUPL_END |
|
2610 { |
|
2611 if(iRequestType == COMASuplSession::ESUPL_TERMINAL) |
|
2612 { |
|
2613 // if it is a trigger request, complete the |
|
2614 // request immediately as we don't expect position |
|
2615 // information in SUPL_END |
|
2616 if (iTriggerSession) |
|
2617 { |
|
2618 // Invoke SessionTerminate |
|
2619 iTriggerSession = EFalse; // reset the flag |
|
2620 iSessionObserver.TerminateSession(this, KErrNone); |
|
2621 } |
|
2622 else |
|
2623 { |
|
2624 // Delete Position |
|
2625 delete iPosition; |
|
2626 iPosition = NULL; |
|
2627 |
|
2628 COMASuplEndState *currState = static_cast <COMASuplEndState *>(iSuplState); |
|
2629 COMASuplEnd::TOMASuplStatusCode statusCode = currState->GetStatusCode(); |
|
2630 |
|
2631 if (statusCode == COMASuplEnd::EPosMethodMismatch) |
|
2632 { |
|
2633 iFailedCaps = iAllowedCapabilities; |
|
2634 iCapsFail = ETrue; |
|
2635 } |
|
2636 |
|
2637 // Retrieve Position |
|
2638 COMASuplPosition *currPosition = currState->GetPosition(); |
|
2639 if(currPosition) //Position is in SUPL_END |
|
2640 { |
|
2641 iPosition =static_cast <COMASuplPosition *>(currPosition->CloneL()); |
|
2642 |
|
2643 if(KErrNone == err) |
|
2644 { |
|
2645 iTrace->Trace(_L("Received SUPL_END Without Status Code"), KTraceFileName, __LINE__); |
|
2646 // Invoke SessionTerminate |
|
2647 iSessionObserver.TerminateSession(this,KErrNone); |
|
2648 } |
|
2649 else // Position & status code is present...thats why completing with KErrCompletion. |
|
2650 { |
|
2651 iTrace->Trace(_L("Received SUPL_END With Status Code"), KTraceFileName, __LINE__); |
|
2652 // Invoke SessionTerminate |
|
2653 // Changed error code as location Fw uses position if it completes with +ve value. //KErrCompletion |
|
2654 iSessionObserver.TerminateSession(this,KSuplPositionPresent); |
|
2655 } |
|
2656 } |
|
2657 else |
|
2658 { |
|
2659 if(iOMASuplPOSRequestor) |
|
2660 { |
|
2661 iPosition = COMASuplPosition::NewL(); |
|
2662 iOMASuplPOSRequestor->SetObserver(this); |
|
2663 err = iOMASuplPOSRequestor->GetPositionL(iPosition); |
|
2664 if(err != KErrNone) |
|
2665 { |
|
2666 delete iPosition; |
|
2667 iPosition = NULL; |
|
2668 // Invoke SessionTerminate |
|
2669 iSessionObserver.TerminateSession(this, err); |
|
2670 } |
|
2671 } |
|
2672 else //Position && iOMASuplPOSRequestor are not there |
|
2673 { |
|
2674 // Invoke SessionTerminate |
|
2675 iSessionObserver.TerminateSession(this, KErrNone); |
|
2676 } |
|
2677 |
|
2678 } |
|
2679 } |
|
2680 } |
|
2681 else |
|
2682 { |
|
2683 // Invoke SessionTerminate //Close session |
|
2684 iSessionObserver.TerminateSession(this, KErrNone); |
|
2685 } |
|
2686 } |
|
2687 else |
|
2688 { |
|
2689 // Handle Error |
|
2690 HandleSuplErrorL(err); |
|
2691 } |
|
2692 } |
|
2693 |
|
2694 |
|
2695 // ----------------------------------------------------------------------------- |
|
2696 // COMASuplSession::ProcessSuplInitL |
|
2697 // Process SUPL INIT |
|
2698 // (other items were commented in a header). |
|
2699 // ----------------------------------------------------------------------------- |
|
2700 // |
|
2701 void COMASuplSession::ProcessSuplInitL() |
|
2702 { |
|
2703 iTrace->Trace(_L("COMASuplSession::ProcessSuplInitL..."), KTraceFileName, __LINE__); |
|
2704 |
|
2705 TInt ret = ServerAddressCheckForSuplInitL(); |
|
2706 if(ret != KErrNone) |
|
2707 { |
|
2708 HandleSuplErrorL(KErrGeneral); |
|
2709 return; |
|
2710 } |
|
2711 |
|
2712 // Recreate SUPL STATE |
|
2713 delete iSuplState; |
|
2714 iSuplState = NULL; |
|
2715 UpdateSuplSessionIDL(); |
|
2716 iSuplState = COMASuplInitState::NewL(iPrivacyTimer,iHSLPAddress,*this,iSETMode,iNetworkPrivacy); |
|
2717 iSuplState->SetVersion(iSuplVersion); |
|
2718 static_cast<COMASuplInitState*>(iSuplState)->SetSessionId(iSETSessionUniqueId); |
|
2719 TInt err = iSuplState->ProcessMessageL(iDecodedAsnMessage);//will result in PrivacyCheckCompleteL |
|
2720 |
|
2721 if (static_cast<COMASuplInitState*>(iSuplState)->IsTriggerSession()) |
|
2722 { |
|
2723 iTriggerSession = ETrue; |
|
2724 iTriggerType = static_cast<COMASuplInitState*>(iSuplState)->GetTriggerType(); |
|
2725 } |
|
2726 |
|
2727 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplReceived); |
|
2728 |
|
2729 iPosMethod = static_cast<COMASuplInitState*>(iSuplState)->GetPosMethod(); |
|
2730 |
|
2731 TBuf<128> msg(_L("COMASuplSession::ProcessSuplInitL() got iPosMethod : ")); |
|
2732 msg.AppendNum(iPosMethod); |
|
2733 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
2734 if(KErrOMASuplNoPosition == err || KErrSuplServiceNotSupported == err || |
|
2735 KErrOMANonProxyModeNotSupported == err ) |
|
2736 { |
|
2737 HandleSuplInitErrorL(err); |
|
2738 return; |
|
2739 } |
|
2740 |
|
2741 if(KErrNone != err) |
|
2742 { |
|
2743 HandleSuplErrorL(err); |
|
2744 } |
|
2745 } |
|
2746 |
|
2747 // ----------------------------------------------------------------------------- |
|
2748 // COMASuplSession::ProcessSuplAuthResponceL |
|
2749 // Process SUPL AUTH RESPONSE |
|
2750 // (other items were commented in a header). |
|
2751 // ----------------------------------------------------------------------------- |
|
2752 // |
|
2753 void COMASuplSession::ProcessSuplAuthResponceL() |
|
2754 { |
|
2755 // No need to create state class object for now.... |
|
2756 // if needed in future ... we can write it...since it will add more code which is |
|
2757 //equivalent to current implementation. |
|
2758 |
|
2759 delete iSuplState; |
|
2760 iSuplState = NULL; |
|
2761 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplReceived); // inform to POS |
|
2762 HandleSuplErrorL(KErrOMASuplProtocolError); |
|
2763 } |
|
2764 |
|
2765 // ----------------------------------------------------------------------------- |
|
2766 // COMASuplSession::ProcessSuplTriggerResponse |
|
2767 // Process SUPL RESPONSE |
|
2768 // (other items were commented in a header). |
|
2769 // ----------------------------------------------------------------------------- |
|
2770 // |
|
2771 void COMASuplSession::ProcessSuplTriggerResponseL() |
|
2772 { |
|
2773 iTrace->Trace(_L("Processing SUPL Trigger Response..."), KTraceFileName, __LINE__); |
|
2774 |
|
2775 // Recreate SUPL STATE |
|
2776 if (iSuplState) |
|
2777 { |
|
2778 iTrace->Trace(_L("Deleting SUPL state..."), KTraceFileName, __LINE__); |
|
2779 delete iSuplState; |
|
2780 iSuplState = NULL; |
|
2781 } |
|
2782 |
|
2783 iTrace->Trace(_L("Creating trigger Response..."), KTraceFileName, __LINE__); |
|
2784 iSuplState = COMASuplTriggerResponseState::NewL(); |
|
2785 iTrace->Trace(_L("Setting version..."), KTraceFileName, __LINE__); |
|
2786 iSuplState->SetVersion(iSuplVersion); |
|
2787 iTrace->Trace(_L("Calling ProcessMessageL..."), KTraceFileName, __LINE__); |
|
2788 TInt err = iSuplState->ProcessMessageL(iDecodedAsnMessage); |
|
2789 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplReceived); |
|
2790 iSuplMsgType = ESUPL_TRIG_RESPONSE; |
|
2791 |
|
2792 iPosMethod = static_cast<COMASuplTriggerResponseState *>(iSuplState)->GetPosMethod(); |
|
2793 |
|
2794 TBuf<128> msg(_L("ProcessSuplTriggerResponseL() got iPosMethod: ")); |
|
2795 msg.AppendNum(iPosMethod); |
|
2796 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
2797 |
|
2798 //If no error, complete request |
|
2799 if (iRequestType == ESUPL_NETWORK) |
|
2800 { |
|
2801 //iTrace->Trace(_L(" Calling COMASuplSession2::LaunchNotifyDialogL..."), KTraceFileName, __LINE__); |
|
2802 //LaunchNotifyDialogL(); |
|
2803 //Inform UI that ,trigger session has started... |
|
2804 //InsertActiveSessionL(); |
|
2805 TBool trgFlag = static_cast<COMASuplTriggerResponseState *>(iSuplState)->GetTriggerParamsFlag(); |
|
2806 |
|
2807 // If it is a NI request, read trigger params |
|
2808 if (trgFlag) |
|
2809 { |
|
2810 TOMASuplTriggerParams trgParams = static_cast<COMASuplTriggerResponseState *>(iSuplState)->GetTriggerParams(); |
|
2811 TOMASuplPeriodicParams perTrgParams; |
|
2812 trgParams.GetPeriodicParams(perTrgParams); |
|
2813 |
|
2814 perTrgParams.GetSuplPeriodicParams((TInt32&)iNumFixes, (TInt32&)iInterval); |
|
2815 perTrgParams.GetStartTimeSet((TInt32&)iStartTime); |
|
2816 iTotalNoOfFixes = iNumFixes; |
|
2817 iStartTimeCopy = iStartTime; |
|
2818 |
|
2819 //Close connection |
|
2820 if (iInterval > KMaxIntervalTime || iStartTime > KMaxStartTime) |
|
2821 iConnRequestor->CloseConnection(); |
|
2822 //For NI request, we don't get notify request |
|
2823 StartPeriodicTriggerTimer(); |
|
2824 iClientNotify = ETrue; |
|
2825 } |
|
2826 else |
|
2827 { |
|
2828 //HandleSuplErrorL(err); |
|
2829 iErrorStatusCode = COMASuplEnd::EDataMissing; |
|
2830 iSuplSessionState = ESUPL_GENERATE; |
|
2831 iSuplMsgType = ESUPL_END; |
|
2832 GenerateSuplMessageL(); |
|
2833 } |
|
2834 } |
|
2835 else |
|
2836 { |
|
2837 if(KErrNone == err) |
|
2838 { |
|
2839 if(iRunRequestStatus) |
|
2840 { |
|
2841 User::RequestComplete(iRunRequestStatus,KErrNone); |
|
2842 } |
|
2843 GetPeriodicTriggerParams(); |
|
2844 //Inform UI that ,trigger session has started... |
|
2845 InsertActiveSessionL(); |
|
2846 //Close connection |
|
2847 if (iInterval > KMaxIntervalTime || iStartTime > KMaxStartTime) |
|
2848 iConnRequestor->CloseConnection(); |
|
2849 } |
|
2850 else |
|
2851 { |
|
2852 HandleSuplErrorL(err); |
|
2853 } |
|
2854 } |
|
2855 //Update session ID received in trigger response |
|
2856 UpdateSuplSessionIDL(); |
|
2857 //Inform UI that ,trigger session has started... |
|
2858 // InsertActiveSessionL(); |
|
2859 |
|
2860 |
|
2861 } |
|
2862 |
|
2863 // ----------------------------------------------------------------------------- |
|
2864 // COMASuplSession::ProcessSuplReportL |
|
2865 // Process SUPL RESPONSE |
|
2866 // (other items were commented in a header). |
|
2867 // ----------------------------------------------------------------------------- |
|
2868 // |
|
2869 void COMASuplSession::ProcessSuplReportL() |
|
2870 { |
|
2871 iTrace->Trace(_L("COMASuplSession::ProcessSuplReportL..."), KTraceFileName, __LINE__); |
|
2872 |
|
2873 // Recreate SUPL STATE |
|
2874 delete iSuplState; |
|
2875 iSuplState = NULL; |
|
2876 iTrace->Trace(_L("After state delete ProcessSuplReportL..."), KTraceFileName, __LINE__); |
|
2877 TBuf<32> tempBuf; |
|
2878 tempBuf.Append(_L("Timer Value:")); |
|
2879 tempBuf.AppendNum(iUT2_PosInitTimer); |
|
2880 iTrace->Trace(tempBuf, KTraceFileName, __LINE__); |
|
2881 iSuplState = COMASuplReportState::NewL(iUT2_PosInitTimer, iOMASuplAsnHandlerBaseImpl); |
|
2882 iSuplState->SetVersion(iSuplVersion); |
|
2883 TInt err = iSuplState->ProcessMessageL(iDecodedAsnMessage); |
|
2884 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplReceived); |
|
2885 |
|
2886 LogEndTime(); //Log end time if QoP & delay in Qop is present. |
|
2887 |
|
2888 //Decrement number of fixes requested |
|
2889 iNumFixes--; |
|
2890 |
|
2891 |
|
2892 if(iRequestType == COMASuplSession::ESUPL_TERMINAL) |
|
2893 { |
|
2894 iTrace->Trace(_L("ProcessSuplReportL..., terminal request"), KTraceFileName, __LINE__); |
|
2895 // Delete Position |
|
2896 delete iPosition; |
|
2897 iPosition = NULL; |
|
2898 UpdateActiveTriggerSession(); //Update UI for trigger info... |
|
2899 COMASuplReportState *currState = static_cast <COMASuplReportState *>(iSuplState); |
|
2900 // Retrieve Position |
|
2901 COMASuplPosition *currPosition = currState->GetPositionL(); |
|
2902 if(currPosition) //Position is in SUPL_REPORT for network based positioning |
|
2903 { |
|
2904 iTrace->Trace(_L("ProcessSuplReportL..., Position present"), KTraceFileName, __LINE__); |
|
2905 iPosition = static_cast <COMASuplPosition *>(currPosition->CloneL()); |
|
2906 TPositionInfo position; |
|
2907 GetPosition(position); |
|
2908 if (iNumFixes == 0) |
|
2909 { |
|
2910 iTrace->Trace(_L("ProcessSuplReportL, last fix generation SUPL END"), KTraceFileName, __LINE__); |
|
2911 iSuplSessionState = ESUPL_GENERATE; |
|
2912 iSuplMsgType = ESUPL_END; |
|
2913 GenerateSuplMessageL(); |
|
2914 } |
|
2915 else |
|
2916 { |
|
2917 if (iTotalNoOfFixes != iNumFixes || iClientNotify)//if this is the first fix and client notify is true then complete the request |
|
2918 { |
|
2919 iTrace->Trace(_L("ProcessSuplReportL, Completing session"), KTraceFileName, __LINE__); |
|
2920 if( iTrgFireInfo ) |
|
2921 { |
|
2922 iTrgFireInfo->Set(position); |
|
2923 } |
|
2924 CompleteSession(KErrNone); |
|
2925 } |
|
2926 } |
|
2927 } |
|
2928 else //Position is with POS Plugin for MS-BASED case |
|
2929 { |
|
2930 if(iOMASuplPOSRequestor) |
|
2931 { |
|
2932 iPosition = COMASuplPosition::NewL(); |
|
2933 iOMASuplPOSRequestor->SetObserver(this); |
|
2934 err = iOMASuplPOSRequestor->GetPositionL(iPosition); |
|
2935 if(err != KErrNone) |
|
2936 { |
|
2937 delete iPosition; |
|
2938 iPosition = NULL; |
|
2939 // Invoke SessionTerminate |
|
2940 if (iRequestType != ESUPL_NETWORK) |
|
2941 iSessionObserver.TerminateSession(this, err); |
|
2942 } |
|
2943 } |
|
2944 else //Position && iOMASuplPOSRequestor are not there |
|
2945 { |
|
2946 // Invoke SessionTerminate |
|
2947 if (iRequestType != ESUPL_NETWORK) |
|
2948 { |
|
2949 if (iNumFixes == 0) |
|
2950 { |
|
2951 iTrace->Trace(_L("ProcessSuplReportL, last fix generation SUPL END"), KTraceFileName, __LINE__); |
|
2952 iSuplSessionState = ESUPL_GENERATE; |
|
2953 iSuplMsgType = ESUPL_END; |
|
2954 GenerateSuplMessageL(); |
|
2955 } |
|
2956 else |
|
2957 { |
|
2958 iTrace->Trace(_L("ProcessSuplReportL..., completing session"), KTraceFileName, __LINE__); |
|
2959 iSessionObserver.TerminateSession(this, KErrNone); |
|
2960 } |
|
2961 } |
|
2962 } |
|
2963 } |
|
2964 //Start timer without waiting for client's Notify request |
|
2965 if (iNumFixes != 0) |
|
2966 StartPeriodicTriggerTimer(); |
|
2967 } |
|
2968 |
|
2969 //For NI request, we don't get notify request |
|
2970 if (iNumFixes != 0 && iRequestType == ESUPL_NETWORK) |
|
2971 { |
|
2972 iClientNotify = ETrue; |
|
2973 StartPeriodicTriggerTimer(); |
|
2974 LaunchNotifyDialogL(); |
|
2975 //UpdateActiveTriggerSession(); //Update UI for trigger info... |
|
2976 } |
|
2977 |
|
2978 if (iNumFixes == 0 && iRequestType == ESUPL_NETWORK) |
|
2979 { |
|
2980 LaunchNotifyDialogL(); |
|
2981 } |
|
2982 } |
|
2983 |
|
2984 // ----------------------------------------------------------------------------- |
|
2985 // COMASuplSession::ProcessSuplTriggerStopL |
|
2986 // Process SUPL RESPONSE |
|
2987 // (other items were commented in a header). |
|
2988 // ----------------------------------------------------------------------------- |
|
2989 // |
|
2990 void COMASuplSession::ProcessSuplTriggerStopL() |
|
2991 { |
|
2992 iTrace->Trace(_L("COMASuplSession::ProcessSuplTriggerStopL..."), KTraceFileName, __LINE__); |
|
2993 |
|
2994 // Recreate SUPL STATE |
|
2995 delete iSuplState; |
|
2996 iSuplState = NULL; |
|
2997 iTrace->Trace(_L("After state delete ProcessSuplTriggerStopL..."), KTraceFileName, __LINE__); |
|
2998 |
|
2999 iSuplState = COMASuplTriggerStopState::NewL(iOMASuplAsnHandlerBaseImpl); |
|
3000 iSuplState->SetVersion(iSuplVersion); |
|
3001 TInt err = iSuplState->ProcessMessageL(iDecodedAsnMessage); |
|
3002 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplReceived); |
|
3003 |
|
3004 LogEndTime(); //Log end time if QoP & delay in Qop is present. |
|
3005 |
|
3006 // For all requests, send SUPL END |
|
3007 { |
|
3008 iErrorStatusCode = COMASuplEnd::EVer2SessionStopped; |
|
3009 GenerateSuplEndL(); |
|
3010 } |
|
3011 } |
|
3012 // ----------------------------------------------------------------------------- |
|
3013 // COMASuplSession::UpdateSuplSessionIDL |
|
3014 // Update SLP Sesssion ID with rececived slp id. |
|
3015 // (other items were commented in a header). |
|
3016 // ----------------------------------------------------------------------------- |
|
3017 // |
|
3018 void COMASuplSession::UpdateSuplSessionIDL() |
|
3019 { |
|
3020 iTrace->Trace(_L("COMASuplSession::UpdateSuplSessionIDL"), KTraceFileName, __LINE__); |
|
3021 COMASuplSessionID* retrivedSessionID = NULL; |
|
3022 |
|
3023 if(!iDecodedAsnMessage) |
|
3024 return; |
|
3025 |
|
3026 iDecodedAsnMessage->SessionId(retrivedSessionID); |
|
3027 UpdateSLPSessionIDL(retrivedSessionID); |
|
3028 } |
|
3029 |
|
3030 // ----------------------------------------------------------------------------- |
|
3031 // COMASuplSession::UpdateSessionID |
|
3032 // Update SLP Sesssion ID with received session ID. |
|
3033 // (other items were commented in a header). |
|
3034 // ----------------------------------------------------------------------------- |
|
3035 // |
|
3036 void COMASuplSession::UpdateSLPSessionIDL(COMASuplSessionID *aSessionID) |
|
3037 { |
|
3038 iTrace->Trace(_L("Start of COMASuplSession::UpdateSLPSessionIDL"), KTraceFileName, __LINE__); |
|
3039 if(aSessionID) |
|
3040 { |
|
3041 COMASuplSLPSessionID* suplSLPID = NULL; |
|
3042 aSessionID->SLPSessionID(suplSLPID); |
|
3043 |
|
3044 if(suplSLPID) |
|
3045 { |
|
3046 TBuf8<KSLPSessionID> sessionId; |
|
3047 COMASuplSLPSessionID* slpNewSessionId = COMASuplSLPSessionID::NewL(); |
|
3048 CleanupStack::PushL(slpNewSessionId); |
|
3049 COMASuplSLPAddress* slpNewIPAddress = COMASuplSLPAddress::NewL(); |
|
3050 CleanupStack::Pop(slpNewSessionId); |
|
3051 |
|
3052 COMASuplSLPAddress* slpIPAddress = NULL; |
|
3053 suplSLPID->SuplSLPSessionID(sessionId,slpIPAddress); |
|
3054 slpNewSessionId->SetSuplSLPSessionID(sessionId,slpNewIPAddress); |
|
3055 |
|
3056 if(slpIPAddress) |
|
3057 { |
|
3058 COMASuplSLPAddress::TSuplSLPAddressType addressType = slpIPAddress->SLPAddressType(); |
|
3059 if(addressType == COMASuplSLPAddress::EFqdn) |
|
3060 { |
|
3061 HBufC8* fqdn = NULL; |
|
3062 TInt err = slpIPAddress->Fqdn(fqdn); |
|
3063 if(err == KErrNone) |
|
3064 { |
|
3065 //Ownership transfer towords COMASuplSLPAddress |
|
3066 HBufC8* newFqdn = fqdn->AllocL(); |
|
3067 slpNewIPAddress->SetFqdn(newFqdn); |
|
3068 } |
|
3069 } |
|
3070 |
|
3071 if( addressType == COMASuplSLPAddress::EIPv4Address ) |
|
3072 { |
|
3073 TBuf8<KIPv4Address> ipAddress; |
|
3074 TInt err = slpIPAddress->IPvAddress(ipAddress); |
|
3075 if(err == KErrNone) |
|
3076 slpNewIPAddress->SetIPv4Address(ipAddress); |
|
3077 } |
|
3078 |
|
3079 if(addressType == COMASuplSLPAddress::EIPv6Address ) |
|
3080 { |
|
3081 TBuf8<KIPv6Address> ipAddress; |
|
3082 TInt err = slpIPAddress->IPvAddress(ipAddress); |
|
3083 if(err == KErrNone) |
|
3084 slpNewIPAddress->SetIPv6Address(ipAddress); |
|
3085 } |
|
3086 } |
|
3087 |
|
3088 iSuplSessionId->SetSLPSessionID(slpNewSessionId); |
|
3089 } |
|
3090 |
|
3091 ///////////log ////////////////// |
|
3092 |
|
3093 #if defined(_DEBUG) //This is only for logging purpose. |
|
3094 iTrace->Trace(_L("After UpdateSuplSessionIDL"), KTraceFileName, __LINE__); |
|
3095 TBuf<128> msg; |
|
3096 COMASuplSETSessionID* suplSETID = NULL; |
|
3097 iSuplSessionId->SETSessionID(suplSETID); |
|
3098 |
|
3099 COMASuplSLPSessionID* suplSlpID = NULL; |
|
3100 iSuplSessionId->SLPSessionID(suplSlpID); |
|
3101 |
|
3102 //SET Part |
|
3103 if(suplSETID) |
|
3104 { |
|
3105 msg.Copy(_L("SET Session ID : ")); |
|
3106 TBuf<4> id; |
|
3107 TInt SETSessionID; |
|
3108 TBuf8<32> IPvAddress8; |
|
3109 TBuf<32> ipAddress; |
|
3110 suplSETID->SuplSETSessionID(SETSessionID,IPvAddress8); |
|
3111 |
|
3112 TLex8 lex(IPvAddress8); |
|
3113 TChar chr; |
|
3114 |
|
3115 chr = lex.Get(); |
|
3116 TUint i = chr; |
|
3117 ipAddress.AppendNum(i); |
|
3118 ipAddress.Append(_L(".")); |
|
3119 |
|
3120 chr = lex.Get(); |
|
3121 i = chr; |
|
3122 ipAddress.AppendNum(i); |
|
3123 ipAddress.Append(_L(".")); |
|
3124 |
|
3125 chr = lex.Get(); |
|
3126 i = chr; |
|
3127 ipAddress.AppendNum(i); |
|
3128 ipAddress.Append(_L(".")); |
|
3129 |
|
3130 chr = lex.Get(); |
|
3131 i = chr; |
|
3132 ipAddress.AppendNum(i); |
|
3133 |
|
3134 id.AppendNum(SETSessionID); |
|
3135 msg.Append(id); |
|
3136 msg.Append(_L(" IPAddress/IMSI :")); |
|
3137 msg.Append(ipAddress); |
|
3138 } |
|
3139 else |
|
3140 { |
|
3141 msg.Copy(_L("SET Session Id is not set.")); |
|
3142 } |
|
3143 |
|
3144 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
3145 |
|
3146 //SLP Part |
|
3147 if(suplSlpID) |
|
3148 { |
|
3149 msg.Copy(_L("SLP Session ID : ")); |
|
3150 TBuf8<4> sessionId8; |
|
3151 TBuf<32> sessionId; |
|
3152 TBuf8<64> ipAddress8(_L8("No Address field in SLP Session ID")); |
|
3153 TBuf<64> ipAddress; |
|
3154 |
|
3155 COMASuplSLPAddress* slpIPAddress = NULL; |
|
3156 suplSlpID->SuplSLPSessionID(sessionId8,slpIPAddress); |
|
3157 |
|
3158 if(slpIPAddress) |
|
3159 { |
|
3160 COMASuplSLPAddress::TSuplSLPAddressType addrType = slpIPAddress->SLPAddressType(); |
|
3161 TInt err; |
|
3162 HBufC8 *fqdnAddr; |
|
3163 |
|
3164 if (addrType == COMASuplSLPAddress::EFqdn) |
|
3165 { |
|
3166 iTrace->Trace(_L("SLP Address is of type FQDN"),KTraceFileName, __LINE__); |
|
3167 err = slpIPAddress->Fqdn(fqdnAddr); |
|
3168 } |
|
3169 else |
|
3170 { |
|
3171 iTrace->Trace(_L("SLP Address is of type IPv*"),KTraceFileName, __LINE__); |
|
3172 err = slpIPAddress->IPvAddress(ipAddress8); |
|
3173 } |
|
3174 |
|
3175 if(err != KErrNone) |
|
3176 { |
|
3177 msg.Copy(_L("SLP Address is not set.")); |
|
3178 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
3179 return; |
|
3180 } |
|
3181 } |
|
3182 |
|
3183 TLex8 lex(ipAddress8); |
|
3184 TChar chr; |
|
3185 |
|
3186 chr = lex.Get(); |
|
3187 TUint i = chr; |
|
3188 ipAddress.AppendNum(i); |
|
3189 ipAddress.Append(_L(".")); |
|
3190 |
|
3191 chr = lex.Get(); |
|
3192 i = chr; |
|
3193 ipAddress.AppendNum(i); |
|
3194 ipAddress.Append(_L(".")); |
|
3195 |
|
3196 chr = lex.Get(); |
|
3197 i = chr; |
|
3198 ipAddress.AppendNum(i); |
|
3199 ipAddress.Append(_L(".")); |
|
3200 |
|
3201 chr = lex.Get(); |
|
3202 i = chr; |
|
3203 ipAddress.AppendNum(i); |
|
3204 |
|
3205 TLex8 lex1(sessionId8); |
|
3206 for(i = 0; i < 4; ++i) |
|
3207 { |
|
3208 chr = lex1.Get(); |
|
3209 TUint num = chr; |
|
3210 sessionId.Append(chr); |
|
3211 } |
|
3212 |
|
3213 msg.Append(sessionId); |
|
3214 msg.Append(_L(" IPAddress : ")); |
|
3215 msg.Append(ipAddress); |
|
3216 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
3217 |
|
3218 } |
|
3219 else |
|
3220 { |
|
3221 msg.Copy(_L("SLP Session Id is not set.")); |
|
3222 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
3223 } |
|
3224 |
|
3225 #endif |
|
3226 //////////////////////////////// |
|
3227 } |
|
3228 } |
|
3229 |
|
3230 // ----------------------------------------------------------------------------- |
|
3231 // COMASuplSession::UpdateSETSessionID |
|
3232 // Update SET Sesssion ID with received session ID. |
|
3233 // (other items were commented in a header). |
|
3234 // ----------------------------------------------------------------------------- |
|
3235 // |
|
3236 void COMASuplSession::UpdateSETSessionIDL(COMASuplSessionID *aSessionID) |
|
3237 { |
|
3238 |
|
3239 iTrace->Trace(_L("Start of COMASuplSession::UpdateSETSessionIDL"), KTraceFileName, __LINE__); |
|
3240 if(aSessionID) |
|
3241 { |
|
3242 COMASuplSETSessionID* retrivedSETSessionId = NULL; |
|
3243 aSessionID->SETSessionID(retrivedSETSessionId); |
|
3244 |
|
3245 if(retrivedSETSessionId) |
|
3246 { |
|
3247 COMASuplSETSessionID::TSuplSETIDType addressType = retrivedSETSessionId->SuplSETIDType(); |
|
3248 |
|
3249 if(addressType == COMASuplSETSessionID::EIPv4Address) |
|
3250 { |
|
3251 TInt sessionUniqueNo; |
|
3252 TBuf8<KIP4AddressLength> IPvAddress; |
|
3253 retrivedSETSessionId->SuplSETSessionID(sessionUniqueNo,IPvAddress); |
|
3254 |
|
3255 COMASuplSETSessionID* suplSETSessionId = NULL; |
|
3256 iSuplSessionId->SETSessionID(suplSETSessionId); |
|
3257 suplSETSessionId->SetSuplSETSessionIDIPv4(sessionUniqueNo,IPvAddress); |
|
3258 iSessionIDFlag = ETrue; |
|
3259 } |
|
3260 else if(addressType == COMASuplSETSessionID::EIPv6Address) |
|
3261 { |
|
3262 TInt sessionUniqueNo; |
|
3263 TBuf8<KIP6AddressLength> IPvAddress; |
|
3264 retrivedSETSessionId->SuplSETSessionID(sessionUniqueNo,IPvAddress); |
|
3265 |
|
3266 COMASuplSETSessionID* suplSETSessionId = NULL; |
|
3267 iSuplSessionId->SETSessionID(suplSETSessionId); |
|
3268 suplSETSessionId->SetSuplSETSessionIDIPv6(sessionUniqueNo,IPvAddress); |
|
3269 iSessionIDFlag = ETrue; |
|
3270 } |
|
3271 else // IMSI |
|
3272 { |
|
3273 TInt sessionUniqueNo; |
|
3274 TBuf8<KIMSILength> IMSI; |
|
3275 retrivedSETSessionId->SuplSETSessionID(sessionUniqueNo, IMSI); |
|
3276 |
|
3277 COMASuplSETSessionID* suplSETSessionId = NULL; |
|
3278 iSuplSessionId->SETSessionID(suplSETSessionId); |
|
3279 suplSETSessionId->SetSuplSETSessionIDIMSI(sessionUniqueNo, IMSI); |
|
3280 iSessionIDFlag = ETrue; |
|
3281 } |
|
3282 } |
|
3283 } |
|
3284 iTrace->Trace(_L("End of COMASuplSession::UpdateSETSessionIDL"), KTraceFileName, __LINE__); |
|
3285 } |
|
3286 |
|
3287 // ----------------------------------------------------------------------------- |
|
3288 // COMASuplSession::CreateCloneMessageL |
|
3289 // Creates Clone of COMASuplAsnMessageBase |
|
3290 // (other items were commented in a header). |
|
3291 // ----------------------------------------------------------------------------- |
|
3292 // |
|
3293 void COMASuplSession::CreateCloneMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage) |
|
3294 { |
|
3295 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL"), KTraceFileName, __LINE__); |
|
3296 delete iDecodedAsnMessage; |
|
3297 iDecodedAsnMessage = NULL; |
|
3298 |
|
3299 COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsnMessage->MessageType(); |
|
3300 TInt error; |
|
3301 switch(messageType) |
|
3302 { |
|
3303 case COMASuplAsnMessageBase::ESUPL_START: |
|
3304 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : ESUPL_START"), KTraceFileName, __LINE__); |
|
3305 iDecodedAsnMessage = COMASuplStart::NewL(); |
|
3306 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3307 break; |
|
3308 case COMASuplAsnMessageBase::ESUPL_RESPONSE: |
|
3309 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : ESUPL_RESPONSE"), KTraceFileName, __LINE__); |
|
3310 iDecodedAsnMessage = COMASuplResponse::NewL(); |
|
3311 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3312 break; |
|
3313 case COMASuplAsnMessageBase::ESUPL_POSINIT: |
|
3314 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : ESUPL_POSINIT"), KTraceFileName, __LINE__); |
|
3315 iDecodedAsnMessage = COMASuplPosInit::NewL(); |
|
3316 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3317 break; |
|
3318 case COMASuplAsnMessageBase::ESUPL_POS: |
|
3319 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : SUPL_POS"), KTraceFileName, __LINE__); |
|
3320 iDecodedAsnMessage = COMASuplPos::NewL(); |
|
3321 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3322 break; |
|
3323 |
|
3324 case COMASuplAsnMessageBase::ESUPL_END: |
|
3325 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : ESUPL_END"), KTraceFileName, __LINE__); |
|
3326 iDecodedAsnMessage = COMASuplEnd::NewL(); |
|
3327 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3328 break; |
|
3329 case COMASuplAsnMessageBase::ESUPL_INIT: |
|
3330 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : ESUPL_INIT"), KTraceFileName, __LINE__); |
|
3331 iDecodedAsnMessage = COMASuplInitVer2::NewL(); |
|
3332 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3333 break; |
|
3334 case COMASuplAsnMessageBase::ESUPL_AUTH_RESP: |
|
3335 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : ESUPL_AUTH_RESP"), KTraceFileName, __LINE__); |
|
3336 iDecodedAsnMessage = COMASuplAuthResponse::NewL(); |
|
3337 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3338 break; |
|
3339 case COMASuplAsnMessageBase::ESUPL_AUTH_REQ: |
|
3340 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : ESUPL_AUTH_RESP"), KTraceFileName, __LINE__); |
|
3341 iDecodedAsnMessage = COMASuplAuthRequest::NewL(); |
|
3342 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3343 break; |
|
3344 |
|
3345 case COMASuplAsnMessageBase::ESUPL_TRIG_START: |
|
3346 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL : ESUPL_TRIG_START"), KTraceFileName, __LINE__); |
|
3347 iDecodedAsnMessage = COMASuplTriggeredStart::NewL(); |
|
3348 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3349 break; |
|
3350 |
|
3351 case COMASuplAsnMessageBase::ESUPL_TRIG_RESPONSE: |
|
3352 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL:ESUPL_TRIG_RESPONSE"), KTraceFileName, __LINE__); |
|
3353 iDecodedAsnMessage = COMASuplTriggeredResponse::NewL(); |
|
3354 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3355 break; |
|
3356 |
|
3357 case COMASuplAsnMessageBase::ESUPL_TRIG_STOP: |
|
3358 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL:ESUPL_TRIG_STOP"), KTraceFileName, __LINE__); |
|
3359 iDecodedAsnMessage = COMASuplTriggeredStop::NewL(); |
|
3360 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3361 break; |
|
3362 |
|
3363 case COMASuplAsnMessageBase::ESUPL_REPORT: |
|
3364 iTrace->Trace(_L("COMASuplSession::CreateCloneMessageL:ESUPL_REPORT"), KTraceFileName, __LINE__); |
|
3365 iDecodedAsnMessage = COMASuplReport::NewL(); |
|
3366 iDecodedAsnMessage->Clone(aDecodedAsnMessage,error); |
|
3367 break; |
|
3368 default: |
|
3369 break; |
|
3370 } |
|
3371 } |
|
3372 |
|
3373 // ----------------------------------------------------------------------------- |
|
3374 // COMASuplSession::CancelSession |
|
3375 // Cancels an in-progress RunSession on the Session |
|
3376 // What action to be taken for cancelRunSession will be depend on State of session. |
|
3377 // (other items were commented in a header). |
|
3378 // ----------------------------------------------------------------------------- |
|
3379 // |
|
3380 void COMASuplSession::CancelSession() |
|
3381 { |
|
3382 iTrace->Trace(_L("COMASuplSession::CancelSession"), KTraceFileName, __LINE__); |
|
3383 CancelAllOperations(); |
|
3384 iConnRequestor->CancelReadOperation(); |
|
3385 |
|
3386 switch(iSuplSessionState) |
|
3387 { |
|
3388 case ESUPL_INITIALIZED: |
|
3389 case ESUPL_CONNECTING: |
|
3390 case ESUPL_SESSION_ERROR: |
|
3391 { |
|
3392 iSuplSessionState = ESUPL_SESSION_ERROR; |
|
3393 break; |
|
3394 } |
|
3395 |
|
3396 case ESUPL_RECEIVED: |
|
3397 { |
|
3398 if (iSuplMsgType == ESUPL_TRIG_RESPONSE) |
|
3399 { |
|
3400 } |
|
3401 else |
|
3402 { |
|
3403 iSuplSessionState = ESUPL_SESSION_ERROR; |
|
3404 if(iSuplMsgType == ESUPL_END) |
|
3405 { |
|
3406 if(iOMASuplPOSRequestor) |
|
3407 iOMASuplPOSRequestor->Cancel(); |
|
3408 } |
|
3409 } |
|
3410 break; |
|
3411 } |
|
3412 |
|
3413 case ESUPL_GENERATE: |
|
3414 case ESUPL_ENCODE: |
|
3415 { |
|
3416 if(iSuplMsgType == ESUPL_START) //No need to send SUPL_END to SLP |
|
3417 { |
|
3418 iSuplSessionState = ESUPL_SESSION_ERROR; |
|
3419 break; |
|
3420 } |
|
3421 } |
|
3422 case ESUPL_SEND: |
|
3423 { |
|
3424 iErrorStatusCode = COMASuplEnd::EUnspecified; |
|
3425 iSuplSessionState = ESUPL_GENERATE; |
|
3426 iSuplMsgType = ESUPL_END; |
|
3427 if(iOMASuplPOSRequestor) //Reset observer |
|
3428 { |
|
3429 iOMASuplPOSRequestor->SetObserver(NULL); |
|
3430 } |
|
3431 TRAP_IGNORE(GenerateSuplMessageL()); |
|
3432 //iSuplSessionState = ESUPL_SESSION_ERROR; Cancel Bug |
|
3433 break; |
|
3434 } |
|
3435 default: break; |
|
3436 } |
|
3437 } |
|
3438 |
|
3439 // ----------------------------------------------------------------------------- |
|
3440 // COMASuplSession::CancelRunSession |
|
3441 // Cancels an in-progress RunSession on the Session |
|
3442 // What action to be taken for cancelRunSession will be depend on State of session. |
|
3443 // (other items were commented in a header). |
|
3444 // ----------------------------------------------------------------------------- |
|
3445 // |
|
3446 void COMASuplSession::CancelRunSession() |
|
3447 { |
|
3448 CancelSession(); |
|
3449 if(iSuplSessionState == ESUPL_SEND) |
|
3450 { |
|
3451 CompleteSession(KErrCancel); |
|
3452 } |
|
3453 else |
|
3454 { |
|
3455 //Close Connection : bug Fix. |
|
3456 iConnRequestor->CloseConnection(); |
|
3457 iPortNum = 0; |
|
3458 iSessionObserver.TerminateSession(this, KErrCancel); |
|
3459 } |
|
3460 } |
|
3461 |
|
3462 // ----------------------------------------------------------------------------- |
|
3463 // COMASuplSession::HandleGenerationErrorL |
|
3464 // Cancels an in-progress RunSession on the Session |
|
3465 // What action to be taken for cancelRunSession will be depend on State of session. |
|
3466 // (other items were commented in a header). |
|
3467 // ----------------------------------------------------------------------------- |
|
3468 // |
|
3469 void COMASuplSession::HandleGenerationErrorL(TInt aErr) |
|
3470 { |
|
3471 TBool cancelSendRequestor = ETrue; |
|
3472 if(iSuplState) |
|
3473 { |
|
3474 switch(iSuplState->GetSuplState()) |
|
3475 { |
|
3476 case COMASuplState::ESUPL_START: |
|
3477 { |
|
3478 break; |
|
3479 } |
|
3480 case COMASuplState::ESUPL_POS: |
|
3481 case COMASuplState::ESUPL_POS_INIT: |
|
3482 { |
|
3483 iErrorStatusCode = COMASuplEnd::EUnspecified; |
|
3484 if(aErr == KErrSuplposMethodMismatch) |
|
3485 iErrorStatusCode = COMASuplEnd::EPosProtocolMismatch;//COMASuplEnd::EPosMethodMismatch; |
|
3486 cancelSendRequestor = EFalse; |
|
3487 iSuplSessionState = ESUPL_GENERATE; |
|
3488 iSuplMsgType = ESUPL_END; |
|
3489 GenerateSuplMessageL(); |
|
3490 break; |
|
3491 } |
|
3492 case COMASuplState::ESUPL_END: |
|
3493 { |
|
3494 //Close Connection : bug Fix. |
|
3495 iConnRequestor->CloseConnection(); |
|
3496 iPortNum = 0; |
|
3497 iSessionObserver.TerminateSession(this, aErr); |
|
3498 cancelSendRequestor = EFalse; |
|
3499 break; |
|
3500 } |
|
3501 default: break; |
|
3502 } |
|
3503 } |
|
3504 |
|
3505 if(cancelSendRequestor) |
|
3506 { |
|
3507 CancelAllOperations(); |
|
3508 CleanUp(); |
|
3509 CompleteSession(aErr); |
|
3510 } |
|
3511 |
|
3512 } |
|
3513 // ----------------------------------------------------------------------------- |
|
3514 // COMASuplSession::HandleInitilizationErrorL |
|
3515 // Cancels an in-progress RunSession on the Session |
|
3516 // What action to be taken for cancelRunSession will be depend on State of session. |
|
3517 // (other items were commented in a header). |
|
3518 // ----------------------------------------------------------------------------- |
|
3519 // |
|
3520 void COMASuplSession::HandleInitilizationErrorL(TInt aErr) |
|
3521 { |
|
3522 CancelAllOperations(); |
|
3523 CleanUp(); |
|
3524 CompleteSession(aErr); |
|
3525 } |
|
3526 |
|
3527 // ----------------------------------------------------------------------------- |
|
3528 // COMASuplSession::HandleConnectionErrorL |
|
3529 // Cancels an in-progress RunSession on the Session |
|
3530 // What action to be taken for cancelRunSession will be depend on State of session. |
|
3531 // (other items were commented in a header). |
|
3532 // ----------------------------------------------------------------------------- |
|
3533 // |
|
3534 void COMASuplSession::HandleConnectionErrorL(TInt aErr) |
|
3535 { |
|
3536 CancelAllOperations(); |
|
3537 //Close Connection |
|
3538 iConnRequestor->CloseConnection(); |
|
3539 iPortNum = 0; |
|
3540 iSessionObserver.TerminateSession(this, aErr); |
|
3541 } |
|
3542 |
|
3543 // ----------------------------------------------------------------------------- |
|
3544 // COMASuplSession::HandleEncodingErrorL |
|
3545 // Cancels an in-progress RunSession on the Session |
|
3546 // What action to be taken for cancelRunSession will be depend on State of session. |
|
3547 // (other items were commented in a header). |
|
3548 // ----------------------------------------------------------------------------- |
|
3549 // |
|
3550 void COMASuplSession::HandleEncodingErrorL(TInt aErr) |
|
3551 { |
|
3552 TBool cancelSendRequestor = ETrue; |
|
3553 if(iSuplState) |
|
3554 { |
|
3555 iErrorStatusCode = COMASuplEnd::EUnspecified; |
|
3556 |
|
3557 if(aErr == KErrOMASETCapMisMatch ) |
|
3558 { |
|
3559 iErrorStatusCode = COMASuplEnd::EPosMethodMismatch; |
|
3560 iFailedCaps = iAllowedCapabilities; |
|
3561 iCapsFail = ETrue; |
|
3562 } |
|
3563 |
|
3564 if(aErr == KErrSuplposMethodMismatch) |
|
3565 { |
|
3566 iErrorStatusCode = COMASuplEnd::EPosProtocolMismatch; |
|
3567 } |
|
3568 if(aErr == KErrOMAManParamMissing) |
|
3569 { |
|
3570 iErrorStatusCode = COMASuplEnd::EDataMissing; |
|
3571 } |
|
3572 |
|
3573 if(aErr == KErrArgument) |
|
3574 { |
|
3575 iErrorStatusCode = COMASuplEnd::EUnexpectedDataValue; |
|
3576 } |
|
3577 |
|
3578 if(aErr == KErrOMASuplPosInfo || aErr == KErrOMASuplPosInActive || aErr == KErrOMASuplDataMissing) |
|
3579 { |
|
3580 iErrorStatusCode = COMASuplEnd::EDataMissing; |
|
3581 } |
|
3582 |
|
3583 switch(iSuplState->GetSuplState()) |
|
3584 { |
|
3585 case COMASuplState::ESUPL_START:break; |
|
3586 case COMASuplState::ESUPL_POS: |
|
3587 { |
|
3588 //This is for,even though we gets error(no pos payload data) for first POS message from plugin |
|
3589 // Just ignore it ... Don't put new pending request for POS message plugin. |
|
3590 if(iIsFirstPOSMessage && ( aErr == KErrOMAManParamMissing || aErr == KErrOMASuplParamNotSet || aErr == KErrOMASuplPosInfo)) |
|
3591 { |
|
3592 iTrace->Trace(_L("Failed to Generate First messsage from POS...still continueing.."), KTraceFileName, __LINE__); |
|
3593 iIsFirstPOSMessage = EFalse; |
|
3594 return; |
|
3595 } |
|
3596 } |
|
3597 case COMASuplState::ESUPL_POS_INIT: |
|
3598 { |
|
3599 cancelSendRequestor = EFalse; |
|
3600 iSuplSessionState = ESUPL_GENERATE; |
|
3601 iSuplMsgType = ESUPL_END; |
|
3602 GenerateSuplMessageL(); |
|
3603 break; |
|
3604 } |
|
3605 |
|
3606 case COMASuplState::ESUPL_END: |
|
3607 { |
|
3608 iConnRequestor->CloseConnection(); |
|
3609 iPortNum = 0; |
|
3610 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
3611 return; |
|
3612 } |
|
3613 |
|
3614 default: break; |
|
3615 } |
|
3616 } |
|
3617 |
|
3618 if(cancelSendRequestor) |
|
3619 { |
|
3620 CancelAllOperations(); |
|
3621 CleanUp(); |
|
3622 CompleteSession(KErrGeneral); |
|
3623 } |
|
3624 |
|
3625 } |
|
3626 // ----------------------------------------------------------------------------- |
|
3627 // COMASuplSession::HandleSendErrorL |
|
3628 // Cancels an in-progress RunSession on the Session |
|
3629 // What action to be taken for cancelRunSession will be depend on State of session. |
|
3630 // (other items were commented in a header). |
|
3631 // ----------------------------------------------------------------------------- |
|
3632 // |
|
3633 void COMASuplSession::HandleSendErrorL(TInt aErr) |
|
3634 { |
|
3635 // if error code is KErrDisconnected, then close connection |
|
3636 // and set the state accordingly |
|
3637 if (aErr == KErrDisconnected) |
|
3638 { |
|
3639 //Close Connection |
|
3640 iConnRequestor->CloseConnection(); |
|
3641 iSessionObserver.TerminateSession(this, aErr); |
|
3642 iDisconnected = ETrue; |
|
3643 } |
|
3644 else |
|
3645 { |
|
3646 TBool cancelSendRequestor = ETrue; |
|
3647 if(aErr == KErrTimedOut) |
|
3648 { |
|
3649 iErrorStatusCode = COMASuplEnd::EUnspecified; |
|
3650 cancelSendRequestor = EFalse; |
|
3651 iSuplSessionState = ESUPL_GENERATE; |
|
3652 iSuplMsgType = ESUPL_END; |
|
3653 GenerateSuplMessageL(); |
|
3654 } |
|
3655 |
|
3656 if(aErr == KErrSuplposMethodMismatch) |
|
3657 { |
|
3658 iErrorStatusCode = COMASuplEnd::EPosProtocolMismatch; |
|
3659 cancelSendRequestor = EFalse; |
|
3660 iSuplSessionState = ESUPL_GENERATE; |
|
3661 iSuplMsgType = ESUPL_END; |
|
3662 GenerateSuplMessageL(); |
|
3663 } |
|
3664 |
|
3665 aErr = KErrCompletion; |
|
3666 |
|
3667 if(cancelSendRequestor) |
|
3668 { |
|
3669 CancelAllOperations(); |
|
3670 CleanUp(); |
|
3671 CompleteSession(aErr); |
|
3672 } |
|
3673 } |
|
3674 |
|
3675 } |
|
3676 // ----------------------------------------------------------------------------- |
|
3677 // COMASuplSession::HandlePacketsErrorL |
|
3678 // HandlePacketsErrorL |
|
3679 // |
|
3680 // (other items were commented in a header). |
|
3681 // ----------------------------------------------------------------------------- |
|
3682 // |
|
3683 void COMASuplSession::HandlePacketsErrorL(TInt aErr) |
|
3684 { |
|
3685 TBool cancelSendRequestor = ETrue; |
|
3686 |
|
3687 if(iSuplMsgType == ESUPL_INIT) |
|
3688 { |
|
3689 HandleSuplInitErrorL(aErr); |
|
3690 return; |
|
3691 } |
|
3692 |
|
3693 if(aErr == KErrSuplEndProtocolError ) |
|
3694 { |
|
3695 aErr = KErrCompletion; |
|
3696 switch(iSuplMsgType) |
|
3697 { |
|
3698 case ESUPL_START: |
|
3699 case ESUPL_RESPONSE: |
|
3700 case ESUPL_END: |
|
3701 { |
|
3702 //Close Connection |
|
3703 iConnRequestor->CloseConnection(); |
|
3704 iPortNum = 0; |
|
3705 iSessionObserver.TerminateSession(this, aErr); |
|
3706 break; |
|
3707 } |
|
3708 case ESUPL_REPORT: |
|
3709 { |
|
3710 //Close Connection |
|
3711 iConnRequestor->CloseConnection(); |
|
3712 break; |
|
3713 } |
|
3714 default: break; |
|
3715 } |
|
3716 } |
|
3717 |
|
3718 if(aErr == KErrOMASuplProtocolError ) |
|
3719 { |
|
3720 aErr = KErrCompletion; |
|
3721 switch(iSuplMsgType) |
|
3722 { |
|
3723 case ESUPL_START: |
|
3724 case ESUPL_INIT: |
|
3725 case ESUPL_POS: |
|
3726 case ESUPL_RESPONSE: |
|
3727 case ESUPL_POSINIT: |
|
3728 case ESUPL_TRIG_START: |
|
3729 case ESUPL_AUTH_RESP: |
|
3730 { |
|
3731 iErrorStatusCode = COMASuplEnd::EUnexpectedMessage; |
|
3732 cancelSendRequestor = EFalse; |
|
3733 iSuplSessionState = ESUPL_GENERATE; |
|
3734 iSuplMsgType = ESUPL_END; |
|
3735 GenerateSuplMessageL(); |
|
3736 break; |
|
3737 } |
|
3738 |
|
3739 case ESUPL_END: |
|
3740 { |
|
3741 //Close Connection |
|
3742 iConnRequestor->CloseConnection(); |
|
3743 iPortNum = 0; |
|
3744 iSessionObserver.TerminateSession(this, aErr); |
|
3745 break; |
|
3746 } |
|
3747 |
|
3748 default: break; |
|
3749 } |
|
3750 } |
|
3751 |
|
3752 if( aErr == KErrOMANonProxyModeNotSupported) //aErr == KErrOMASuplVersionNotMatching || |
|
3753 { |
|
3754 iErrorStatusCode = COMASuplEnd::ENonProxyModeNotSupported; |
|
3755 |
|
3756 aErr = KErrCompletion; |
|
3757 |
|
3758 if(iSuplState) |
|
3759 { |
|
3760 switch(iSuplState->GetSuplState()) |
|
3761 { |
|
3762 case COMASuplState::ESUPL_RESPONSE: |
|
3763 { |
|
3764 cancelSendRequestor = EFalse; |
|
3765 iSuplSessionState = ESUPL_GENERATE; |
|
3766 iSuplMsgType = ESUPL_END; |
|
3767 GenerateSuplMessageL(); |
|
3768 break; |
|
3769 } |
|
3770 default: break; |
|
3771 } |
|
3772 } |
|
3773 } |
|
3774 |
|
3775 if(cancelSendRequestor) |
|
3776 { |
|
3777 CancelAllOperations(); |
|
3778 CleanUp(); |
|
3779 CompleteSession(aErr); |
|
3780 } |
|
3781 } |
|
3782 |
|
3783 // ----------------------------------------------------------------------------- |
|
3784 // COMASuplSession::HandleSuplInitErrorL |
|
3785 // Handle Init related error |
|
3786 // (other items were commented in a header). |
|
3787 // ----------------------------------------------------------------------------- |
|
3788 // |
|
3789 void COMASuplSession::HandleSuplInitErrorL(TInt aErr) |
|
3790 { |
|
3791 iTrace->Trace(_L("Start COMASuplSession::HandleSuplInitError"), KTraceFileName, __LINE__); |
|
3792 |
|
3793 if(aErr == KErrOMAInvalidHSLPAddress) |
|
3794 { |
|
3795 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError HSLP Address is not matching..."), KTraceFileName, __LINE__); |
|
3796 //Close Connection : bug Fix. |
|
3797 iConnRequestor->CloseConnection(); |
|
3798 iPortNum = 0; |
|
3799 iSessionObserver.TerminateSession(this, KErrCompletion); |
|
3800 return; |
|
3801 } |
|
3802 |
|
3803 TBool setStatusCode = ETrue; |
|
3804 |
|
3805 |
|
3806 if(aErr == KErrSuplInvalidSessionID) |
|
3807 { |
|
3808 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Received SET Session ID"), KTraceFileName, __LINE__); |
|
3809 iErrorStatusCode = COMASuplEnd::EInvalidSessionId; |
|
3810 |
|
3811 COMASuplSessionID* retrivedSessionID = NULL; |
|
3812 iDecodedAsnMessage->SessionId(retrivedSessionID); |
|
3813 |
|
3814 // Set the SessionId. |
|
3815 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Update SET Session ID"), KTraceFileName, __LINE__); |
|
3816 UpdateSETSessionIDL(retrivedSessionID); |
|
3817 |
|
3818 } |
|
3819 |
|
3820 if(aErr == KErrOMANonProxyModeNotSupported) |
|
3821 { |
|
3822 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Received Nonproxymode data"), KTraceFileName, __LINE__); |
|
3823 iErrorStatusCode = COMASuplEnd::ENonProxyModeNotSupported; |
|
3824 } |
|
3825 |
|
3826 if(KErrAccessDenied == aErr || KErrOMASuplDenied == aErr) |
|
3827 { |
|
3828 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError KErrAccessDenied|| KErrOMASuplDenied"), KTraceFileName, __LINE__); |
|
3829 iErrorStatusCode = COMASuplEnd::EConsentDeniedByUser; |
|
3830 } |
|
3831 |
|
3832 if(aErr == KErrOMASuplNoPosition || KErrOMASuplInformationOnly == aErr) |
|
3833 { |
|
3834 //Supl End with No Position |
|
3835 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError KErrOMASuplNoPosition || KErrOMASuplInformationOnly"), KTraceFileName, __LINE__); |
|
3836 setStatusCode = EFalse; |
|
3837 } |
|
3838 |
|
3839 if(KErrOMASuplAccepted == aErr) |
|
3840 { |
|
3841 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError EConsentGrantedByUser"), KTraceFileName, __LINE__); |
|
3842 iErrorStatusCode = COMASuplEnd::EConsentGrantedByUser; |
|
3843 } |
|
3844 |
|
3845 if (KErrSuplServiceNotSupported == aErr) |
|
3846 { |
|
3847 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError E"), KTraceFileName, __LINE__); |
|
3848 iErrorStatusCode = COMASuplEnd::EVer2ServiceNotSupported; |
|
3849 } |
|
3850 TInt len = iHSLPAddress.Length(); |
|
3851 HBufC8 *hslpAdress = NULL; |
|
3852 if(len > 0) |
|
3853 { |
|
3854 hslpAdress = HBufC8::NewL(iHSLPAddress.Length()); |
|
3855 hslpAdress->Des().Copy(iHSLPAddress); |
|
3856 } |
|
3857 |
|
3858 else if(len ==0) |
|
3859 { |
|
3860 iTrace->Trace(_L("HSLP generated frm IMSI"), KTraceFileName, __LINE__); |
|
3861 hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length()); |
|
3862 CleanupStack::PushL(hslpAdress); |
|
3863 hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi()); |
|
3864 CleanupStack::Pop(hslpAdress); |
|
3865 |
|
3866 } |
|
3867 CleanupStack::PushL(hslpAdress); |
|
3868 |
|
3869 delete iSuplState; |
|
3870 iSuplState = NULL; |
|
3871 |
|
3872 if(setStatusCode) |
|
3873 { |
|
3874 iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress); |
|
3875 } |
|
3876 else |
|
3877 { |
|
3878 iSuplState = COMASuplEndState::NewL(iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress ); |
|
3879 } |
|
3880 |
|
3881 CleanupStack::PopAndDestroy(hslpAdress); |
|
3882 |
|
3883 iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Send SUPL_END for SUPL_INIT"), KTraceFileName, __LINE__); |
|
3884 |
|
3885 |
|
3886 iSuplSessionState = ESUPL_INITIALIZED; |
|
3887 iSuplState->SetMsgStateObserver(this); |
|
3888 iSuplMsgType = ESUPL_END; |
|
3889 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
3890 iSuplState->GenerateMessageL(); |
|
3891 iSuplSessionState = ESUPL_GENERATE; |
|
3892 } |
|
3893 |
|
3894 // ----------------------------------------------------------------------------- |
|
3895 // COMASuplSession::HandleInvalidParameterErrorL |
|
3896 // Handles error occured related invalid parameter. |
|
3897 // (other items were commented in a header). |
|
3898 // ----------------------------------------------------------------------------- |
|
3899 // |
|
3900 void COMASuplSession::HandleInvalidParameterErrorL(COMASuplAsnMessageBase* aDecodedAsnMessage) |
|
3901 { |
|
3902 iTrace->Trace(_L("COMASuplSession::HandleInvalidParameterErrorL"), KTraceFileName, __LINE__); |
|
3903 if(CheckProtocolVersionL(aDecodedAsnMessage)) //Checks version with supported version |
|
3904 { |
|
3905 COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsnMessage->MessageType(); |
|
3906 CancelAllOperations(); |
|
3907 if(messageType == COMASuplAsnMessageBase::ESUPL_END) |
|
3908 { |
|
3909 //Close Connection : bug Fix. |
|
3910 iConnRequestor->CloseConnection(); |
|
3911 iPortNum = 0; |
|
3912 iSessionObserver.TerminateSession(this, KErrCompletion); |
|
3913 } |
|
3914 else |
|
3915 { |
|
3916 |
|
3917 iErrorStatusCode = COMASuplEnd::EUnexpectedDataValue; |
|
3918 |
|
3919 if((messageType == COMASuplAsnMessageBase::ESUPL_POSINIT || |
|
3920 messageType == COMASuplAsnMessageBase::ESUPL_START || |
|
3921 messageType == COMASuplAsnMessageBase::ESUPL_RESPONSE) |
|
3922 && (iRequestType == ESUPL_NETWORK)) |
|
3923 { |
|
3924 iErrorStatusCode = COMASuplEnd::EUnexpectedMessage; |
|
3925 } |
|
3926 |
|
3927 if(iRequestType == ESUPL_TERMINAL ) //Protocol errors |
|
3928 { |
|
3929 if( ! (iSuplMsgType == ESUPL_START && messageType == COMASuplAsnMessageBase::ESUPL_RESPONSE) |
|
3930 || |
|
3931 (iSuplMsgType == ESUPL_POSINIT && messageType == COMASuplAsnMessageBase::ESUPL_POS) |
|
3932 ) |
|
3933 |
|
3934 { |
|
3935 iErrorStatusCode = COMASuplEnd::EUnexpectedMessage; |
|
3936 } |
|
3937 } |
|
3938 |
|
3939 iSuplSessionState = ESUPL_GENERATE; |
|
3940 iSuplMsgType = ESUPL_END; |
|
3941 GenerateSuplMessageL(); |
|
3942 } |
|
3943 } |
|
3944 } |
|
3945 // ----------------------------------------------------------------------------- |
|
3946 // COMASuplSession::TerminateSession |
|
3947 // Terminates session |
|
3948 // (other items were commented in a header). |
|
3949 // ----------------------------------------------------------------------------- |
|
3950 // |
|
3951 void COMASuplSession::TerminateSession() |
|
3952 { |
|
3953 iTrace->Trace(_L("COMASuplSession::TerminateSession"), KTraceFileName, __LINE__); |
|
3954 if(iSuplSessionState != ESUPL_SESSION_ERROR) |
|
3955 { |
|
3956 CancelRunSession(); |
|
3957 } |
|
3958 else |
|
3959 { |
|
3960 SessionEnd(); |
|
3961 CompleteSession(KErrCancel); |
|
3962 } |
|
3963 return; |
|
3964 } |
|
3965 |
|
3966 // ----------------------------------------------------------------------------- |
|
3967 // COMASuplSession::SuplVersion |
|
3968 // returns SUPL Version |
|
3969 // (other items were commented in a header). |
|
3970 // ----------------------------------------------------------------------------- |
|
3971 // |
|
3972 TReal COMASuplSession::SuplVersion() |
|
3973 { |
|
3974 return KSuplPOSPluginVersion; |
|
3975 } |
|
3976 |
|
3977 // ----------------------------------------------------------------------------- |
|
3978 // COMASuplSession::SetPOSMsgPluginState |
|
3979 // Informs Protocol state to POS if present |
|
3980 // (other items were commented in a header). |
|
3981 // ----------------------------------------------------------------------------- |
|
3982 // |
|
3983 void COMASuplSession::SetPOSMsgPluginState(COMASuplPosSessionBase::TOMASuplMsgState aSuplMsgState) |
|
3984 { |
|
3985 if(iPOSSession != NULL) |
|
3986 { |
|
3987 iTrace->Trace(_L("Setting State of POS Msg Plugin"), KTraceFileName, __LINE__); |
|
3988 |
|
3989 COMASuplPosSessionBase::TOMASuplMsg SuplMsg = COMASuplPosSessionBase::EOMASuplStart; |
|
3990 |
|
3991 switch(iSuplMsgType) |
|
3992 { |
|
3993 case ESUPL_START: |
|
3994 SuplMsg = COMASuplPosSessionBase::EOMASuplStart; |
|
3995 break; |
|
3996 case ESUPL_RESPONSE: |
|
3997 SuplMsg = COMASuplPosSessionBase::EOMASuplResponse; |
|
3998 break; |
|
3999 case ESUPL_INIT: |
|
4000 SuplMsg = COMASuplPosSessionBase::EOMASuplInit; |
|
4001 break; |
|
4002 case ESUPL_POSINIT: |
|
4003 SuplMsg = COMASuplPosSessionBase::EOMASuplPosInit; |
|
4004 break; |
|
4005 case ESUPL_POS: |
|
4006 SuplMsg = COMASuplPosSessionBase::EOMASuplPos; |
|
4007 break; |
|
4008 case ESUPL_END: |
|
4009 SuplMsg = COMASuplPosSessionBase::EOMASuplEnd; |
|
4010 break; |
|
4011 default: |
|
4012 break; |
|
4013 } |
|
4014 |
|
4015 iPOSSession->SetSuplState(SuplMsg,aSuplMsgState); |
|
4016 } |
|
4017 |
|
4018 } |
|
4019 // ----------------------------------------------------------------------------- |
|
4020 // COMASuplSession::IsLastPOSMessage |
|
4021 // Checks about last POS message with POS handler |
|
4022 // (other items were commented in a header). |
|
4023 // ----------------------------------------------------------------------------- |
|
4024 // |
|
4025 TBool COMASuplSession::IsLastPOSMessage() |
|
4026 { |
|
4027 if( iPOSSession && iSuplState) |
|
4028 { |
|
4029 COMASuplPosState* state = static_cast <COMASuplPosState *>(iSuplState); |
|
4030 TBool ret = state->IsLastMessage(); |
|
4031 return ret; |
|
4032 } |
|
4033 else |
|
4034 { |
|
4035 return EFalse; |
|
4036 } |
|
4037 } |
|
4038 // ----------------------------------------------------------------------------- |
|
4039 // COMASuplSession::IsSegmentedDone() |
|
4040 // Checks about segmentation of pospayload |
|
4041 // (other items were commented in a header). |
|
4042 // ----------------------------------------------------------------------------- |
|
4043 // |
|
4044 TBool COMASuplSession::IsSegmentationDone() |
|
4045 { |
|
4046 if( iPOSSession && iSuplState) |
|
4047 { |
|
4048 COMASuplPosState* state = static_cast <COMASuplPosState *>(iSuplState); |
|
4049 TBool ret = state->IsSegmentationDone(); |
|
4050 return ret; |
|
4051 } |
|
4052 else |
|
4053 { |
|
4054 return EFalse; |
|
4055 } |
|
4056 } |
|
4057 |
|
4058 |
|
4059 // ----------------------------------------------------------------------------- |
|
4060 // COMASuplSession::CopySETCapabilities |
|
4061 // (other items were commented in a header). |
|
4062 // ----------------------------------------------------------------------------- |
|
4063 void COMASuplSession::CopySETCapabilities() |
|
4064 { |
|
4065 if(iSuplMsgType == ESUPL_START) |
|
4066 { |
|
4067 COMASuplStartState *startState = static_cast <COMASuplStartState *>(iSuplState); |
|
4068 COMASuplSETCapabilities *setCaps = startState->Capabilities(); |
|
4069 |
|
4070 TOMASuplPosTechnology posTech; |
|
4071 COMASuplSETCapabilities::TOMASuplPrefMethod prefMethod; |
|
4072 TOMASuplPosProtocol posProtocol; |
|
4073 |
|
4074 setCaps->GetSETCapabilities(posTech,prefMethod,posProtocol); |
|
4075 |
|
4076 iSETCapabilities->SetSETCapabilities(posTech,prefMethod, posProtocol); |
|
4077 } |
|
4078 |
|
4079 if (iTriggerSession && iSuplMsgType == ESUPL_TRIG_START) |
|
4080 { |
|
4081 COMASuplTriggerStartState *trgStartState = static_cast <COMASuplTriggerStartState *>(iSuplState); |
|
4082 COMASuplSETCapabilities *setCaps = trgStartState->Capabilities(); |
|
4083 |
|
4084 TOMASuplPosTechnology posTech; |
|
4085 COMASuplSETCapabilities::TOMASuplPrefMethod prefMethod; |
|
4086 TOMASuplPosProtocol posProtocol; |
|
4087 |
|
4088 setCaps->GetSETCapabilities(posTech,prefMethod,posProtocol); |
|
4089 |
|
4090 iSETCapabilities->SetSETCapabilities(posTech,prefMethod, posProtocol); |
|
4091 } |
|
4092 |
|
4093 if(iSuplMsgType == ESUPL_POSINIT && iRequestType == ESUPL_NETWORK && !iTriggerSession) |
|
4094 { |
|
4095 TOMASuplPosTechnology posTechnology; |
|
4096 COMASuplSETCapabilities::TOMASuplPrefMethod prefMethod; |
|
4097 TOMASuplPosProtocol posProtocol; |
|
4098 |
|
4099 TBool GpsSETAssisted = EFalse; |
|
4100 TBool GpsSETBased = EFalse; |
|
4101 TBool AutonomousGps = EFalse; |
|
4102 TBool FLT = EFalse; |
|
4103 TBool eOTD = EFalse; |
|
4104 TBool oTDOA = EFalse; |
|
4105 |
|
4106 TBool TIA801 = EFalse; |
|
4107 TBool RRLP = EFalse; |
|
4108 TBool RRC = EFalse; |
|
4109 |
|
4110 posTechnology.SetPosTechnology(GpsSETAssisted,GpsSETBased,AutonomousGps,FLT, |
|
4111 eOTD,oTDOA); |
|
4112 posProtocol.SetPosProtocol(TIA801,RRLP,RRC); |
|
4113 prefMethod = COMASuplSETCapabilities::EOMANoPreferred; |
|
4114 iSETCapabilities->SetSETCapabilities(posTechnology,prefMethod,posProtocol); |
|
4115 } |
|
4116 } |
|
4117 |
|
4118 // ----------------------------------------------------------------------------- |
|
4119 // COMASuplSession::PrivacyCheckCompleteL |
|
4120 // (other items were commented in a header). |
|
4121 // ----------------------------------------------------------------------------- |
|
4122 void COMASuplSession::PrivacyCheckCompleteL(TInt aCompletionCode) |
|
4123 { |
|
4124 if(aCompletionCode == KErrNone) |
|
4125 { |
|
4126 iTrace->Trace(_L("COMASuplSession::PrivacyCheckCompleteL No Error"), KTraceFileName, __LINE__); |
|
4127 static_cast<COMASuplInitState*>(iSuplState)->GetRequestorIDAndName(iRequestID,iRequestorName); |
|
4128 static_cast<COMASuplInitState*>(iSuplState)->GetPrivacyStatus(iPrivacyOverride); |
|
4129 static_cast<COMASuplInitState*>(iSuplState)->GetSuplPrivacyRequestInfo(iSuplReqInfo); |
|
4130 |
|
4131 iSuplSessionState = ESUPL_INITIALIZED; |
|
4132 iSuplMsgType = ESUPL_POSINIT; |
|
4133 if (iSuplUsage >= 2) |
|
4134 { |
|
4135 COMASuplInit* suplInit = static_cast <COMASuplInit *>(iDecodedAsnMessage); |
|
4136 COMASuplNotification* notif; |
|
4137 TInt error = suplInit->Notification(notif); |
|
4138 COMASuplNotification::TOMASuplNotificationType notifType = notif->SuplNotification(); |
|
4139 if (notifType == COMASuplNotification::ENotificationOnly) |
|
4140 { |
|
4141 InitializeL(iRequestID); //APE Centric |
|
4142 } |
|
4143 else |
|
4144 { |
|
4145 //iRequestID = 0; //APE Centric |
|
4146 CheckForSuplUsageL(); |
|
4147 } |
|
4148 } |
|
4149 else |
|
4150 InitializeL(iRequestID); |
|
4151 } |
|
4152 else |
|
4153 { |
|
4154 iTrace->Trace(_L("COMASuplSession::PrivacyCheckCompleteL with Error "), KTraceFileName, __LINE__); |
|
4155 if (iSuplUsage >= 2) |
|
4156 { |
|
4157 iNwInitError = ETrue; |
|
4158 iNwInitCompletionCode = aCompletionCode; |
|
4159 CheckForSuplUsageL(); |
|
4160 } |
|
4161 else |
|
4162 HandleSuplInitErrorL(aCompletionCode); |
|
4163 } |
|
4164 } |
|
4165 |
|
4166 // ----------------------------------------------------------------------------- |
|
4167 // COMASuplSession::SetConfigurationParameters...sets configuration parameters |
|
4168 // (other items were commented in a header). |
|
4169 // ----------------------------------------------------------------------------- |
|
4170 void COMASuplSession::SetConfigurationParameters(TInt& aUT1_StartTimer,TInt& aUT2_PosInitTimer, |
|
4171 TInt& aUT3_PosTimer,TInt& aPrivacyTimer, |
|
4172 TInt& aSETMode, |
|
4173 TInt& aSuplUsage, |
|
4174 TInt& aPersistFailTimer, |
|
4175 TInt& aSuplInitTimeOut) |
|
4176 { |
|
4177 iUT1_StartTimer = aUT1_StartTimer; |
|
4178 iUT2_PosInitTimer = aUT2_PosInitTimer; |
|
4179 iUT3_PosTimer = aUT3_PosTimer; |
|
4180 iPrivacyTimer = aPrivacyTimer; |
|
4181 iSETMode = aSETMode; |
|
4182 iSuplUsage = aSuplUsage; |
|
4183 iPersistFailTimer = aPersistFailTimer; |
|
4184 iSuplInitTimeOut = aSuplInitTimeOut; |
|
4185 } |
|
4186 |
|
4187 // ----------------------------------------------------------------------------- |
|
4188 // COMASuplSession::IsGenerationInProgress...check about status of generation of message |
|
4189 // (other items were commented in a header). |
|
4190 // ----------------------------------------------------------------------------- |
|
4191 TBool COMASuplSession::IsGenerationInProgress() |
|
4192 { |
|
4193 if( iSuplMsgType == ESUPL_POSINIT && iSuplState) |
|
4194 { |
|
4195 COMASuplPosInitState* state = static_cast <COMASuplPosInitState *>(iSuplState); |
|
4196 TBool ret = state->IsGenerationInProgress(); |
|
4197 return ret; |
|
4198 } |
|
4199 else |
|
4200 { |
|
4201 return EFalse; |
|
4202 } |
|
4203 } |
|
4204 |
|
4205 // ----------------------------------------------------------------------------- |
|
4206 // COMASuplSession::LogEndTime...log the end time if delay is present in QoP |
|
4207 // (other items were commented in a header). |
|
4208 // ----------------------------------------------------------------------------- |
|
4209 void COMASuplSession::LogEndTime() |
|
4210 { |
|
4211 if(!iIsQoPPresent) |
|
4212 { |
|
4213 return; |
|
4214 } |
|
4215 |
|
4216 TInt delay; |
|
4217 if(iClientQop.GetDelay(delay) != KErrNotFound) |
|
4218 { |
|
4219 iSessionEndTime.HomeTime(); |
|
4220 } |
|
4221 } |
|
4222 |
|
4223 // ----------------------------------------------------------------------------- |
|
4224 // COMASuplSession::SetIMSIL |
|
4225 // Updates IMSI value in SET Session ID |
|
4226 // ----------------------------------------------------------------------------- |
|
4227 void COMASuplSession::SetIMSI() |
|
4228 { |
|
4229 |
|
4230 { |
|
4231 iTrace->Trace(_L("COMASuplSession::SetIMSIL Start"), KTraceFileName, __LINE__); |
|
4232 TInt length = iIMSI.Length(); |
|
4233 TBuf8<KIMSILength> imsi; |
|
4234 TUint8 val; |
|
4235 TInt index = 0; |
|
4236 |
|
4237 while ( index <= length ) |
|
4238 { |
|
4239 val = 0; |
|
4240 if (index == length) |
|
4241 { |
|
4242 val = 15 << 4; |
|
4243 val |= 15; |
|
4244 imsi.Append(val); |
|
4245 break; |
|
4246 } |
|
4247 const TUint16& t = iIMSI[index]; |
|
4248 TInt8 i = t - 48; |
|
4249 if ( ++index != length ) |
|
4250 { |
|
4251 const TUint16& h = iIMSI[index]; |
|
4252 TInt8 j = h - 48; |
|
4253 val = j << 4; |
|
4254 val |= i; |
|
4255 } |
|
4256 else |
|
4257 { |
|
4258 val = 15 << 4; |
|
4259 val |= i; |
|
4260 } |
|
4261 |
|
4262 imsi.Append(val); |
|
4263 index++; |
|
4264 } |
|
4265 |
|
4266 if (!iSessionIDFlag) |
|
4267 { |
|
4268 COMASuplSETSessionID* suplSETSessionId = NULL; |
|
4269 iSuplSessionId->SETSessionID( suplSETSessionId ); |
|
4270 suplSETSessionId->SetSuplSETSessionIDIMSI( iSETSessionUniqueId, imsi ); |
|
4271 } |
|
4272 |
|
4273 iTrace->Trace(_L("COMASuplSession::SetIMSI End"), KTraceFileName, __LINE__); |
|
4274 } |
|
4275 } |
|
4276 |
|
4277 // ----------------------------------------------------------------------------- |
|
4278 // COMASuplSession::IsIMSIVariant |
|
4279 // Checks to determine if IMSI needs to be included in the SUPL message |
|
4280 // ----------------------------------------------------------------------------- |
|
4281 TBool COMASuplSession::IsIMSIVariant() |
|
4282 { |
|
4283 if(iIMSI.Length() && |
|
4284 ( |
|
4285 (iRequestType == ESUPL_TERMINAL && iSuplMsgType == ESUPL_START) || |
|
4286 (iRequestType == ESUPL_TERMINAL && iSuplMsgType == ESUPL_TRIG_START) || |
|
4287 (iRequestType == ESUPL_NETWORK && iSuplMsgType == ESUPL_TRIG_START && iTriggerSession) || |
|
4288 (iRequestType == ESUPL_TERMINAL && iSuplMsgType == ESUPL_POSINIT && iTriggerSession) || |
|
4289 (iRequestType == ESUPL_NETWORK && iSuplMsgType == ESUPL_POSINIT) || |
|
4290 (iRequestType == ESUPL_NETWORK && iSuplMsgType == ESUPL_END) |
|
4291 )) |
|
4292 { |
|
4293 return ETrue; |
|
4294 } |
|
4295 else |
|
4296 { |
|
4297 return EFalse; |
|
4298 } |
|
4299 } |
|
4300 |
|
4301 |
|
4302 // ----------------------------------------------------------------------------- |
|
4303 // COMASuplSession::SettingsUICompleted |
|
4304 // |
|
4305 // ----------------------------------------------------------------------------- |
|
4306 |
|
4307 void COMASuplSession::SettingsUICompletedL(TInt /*aError*/) |
|
4308 { |
|
4309 iTrace->Trace(_L("COMASuplSession::SettingsUICompleted ..."), KTraceFileName, __LINE__); |
|
4310 |
|
4311 } |
|
4312 |
|
4313 |
|
4314 // ----------------------------------------------------------------------------- |
|
4315 // COMASuplSession::HandleInvalidMessageL |
|
4316 // Sends SUPL_END with status code with wrong message |
|
4317 // ----------------------------------------------------------------------------- |
|
4318 void COMASuplSession::HandleInvalidMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage) |
|
4319 { |
|
4320 |
|
4321 if(CheckProtocolVersionL(aDecodedAsnMessage)) //Checks version with supported version |
|
4322 { |
|
4323 iTrace->Trace(_L("COMASuplSession::HandleInvalidMessageL...Sending SUPL_END for invalid message"), KTraceFileName, __LINE__); |
|
4324 iErrorStatusCode = COMASuplEnd::EUnexpectedMessage; |
|
4325 iSuplSessionState = ESUPL_GENERATE; |
|
4326 iSuplMsgType = ESUPL_END; |
|
4327 GenerateSuplMessageL(); |
|
4328 } |
|
4329 } |
|
4330 |
|
4331 // ----------------------------------------------------------------------------- |
|
4332 // COMASuplSession::HandleInvalidMessageLengthL |
|
4333 // Sends SUPL_END with status code with protocol error |
|
4334 // ----------------------------------------------------------------------------- |
|
4335 void COMASuplSession::HandleInvalidMessageLengthL() |
|
4336 { |
|
4337 iTrace->Trace(_L("COMASuplSession::HandleInvalidMessageLengthL...Sending SUPL_END for invalid message length"), KTraceFileName, __LINE__); |
|
4338 iErrorStatusCode = COMASuplEnd::EProtocolError; |
|
4339 iSuplSessionState = ESUPL_GENERATE; |
|
4340 iSuplMsgType = ESUPL_END; |
|
4341 GenerateSuplMessageL(); |
|
4342 } |
|
4343 |
|
4344 // ----------------------------------------------------------------------------- |
|
4345 // COMASuplSession::CheckProtocolVersion |
|
4346 // Returns true if its matching else false |
|
4347 // ----------------------------------------------------------------------------- |
|
4348 TBool COMASuplSession::CheckProtocolVersionL(COMASuplAsnMessageBase* aDecodedAsn) |
|
4349 { |
|
4350 TOMASuplVersion version; |
|
4351 COMASuplSessionID* SessionID = NULL; |
|
4352 aDecodedAsn->MessageBase(version,SessionID); |
|
4353 |
|
4354 TInt recMajor,recMinor,recServInd; |
|
4355 version.SuplVersion(recMajor,recMinor,recServInd); |
|
4356 |
|
4357 if(recMajor == KSuplMajorVersion ) |
|
4358 { |
|
4359 return ETrue; |
|
4360 } |
|
4361 else |
|
4362 { |
|
4363 COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsn->MessageType(); |
|
4364 if(messageType == COMASuplAsnMessageBase::ESUPL_END) |
|
4365 { |
|
4366 iTrace->Trace(_L("Received message is SUPL_END...with wrong Version.Terminating session"), KTraceFileName, __LINE__); |
|
4367 iSessionObserver.TerminateSession(this, KErrCompletion); |
|
4368 } |
|
4369 else |
|
4370 { |
|
4371 iTrace->Trace(_L("Received message with wrong version."), KTraceFileName, __LINE__); |
|
4372 |
|
4373 delete iSuplState; |
|
4374 iSuplState = NULL; |
|
4375 iSuplMsgType = ESUPL_END; |
|
4376 iErrorStatusCode = COMASuplEnd::EVersionNotSupported; |
|
4377 SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating); |
|
4378 |
|
4379 if(iRequestType == ESUPL_NETWORK ) |
|
4380 { |
|
4381 if (messageType == COMASuplAsnMessageBase::ESUPL_INIT) |
|
4382 { |
|
4383 iSuplSessionState = ESUPL_INITIALIZED; |
|
4384 TInt len = iHSLPAddress.Length(); |
|
4385 HBufC8 *hslpAdress = NULL; |
|
4386 if(len > 0) |
|
4387 { |
|
4388 hslpAdress = HBufC8::NewL(iHSLPAddress.Length()); |
|
4389 hslpAdress->Des().Copy(iHSLPAddress); |
|
4390 } |
|
4391 else if(len ==0) |
|
4392 { |
|
4393 iTrace->Trace(_L("Length of HSLP Address is = 0, passing the HSLP generated frm IMSI"), KTraceFileName, __LINE__); |
|
4394 hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length()); |
|
4395 CleanupStack::PushL(hslpAdress); |
|
4396 hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi()); |
|
4397 CleanupStack::Pop(hslpAdress); |
|
4398 } |
|
4399 |
|
4400 CleanupStack::PushL(hslpAdress); |
|
4401 ServerAddressCheckForSuplInitL(); |
|
4402 iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress); |
|
4403 CleanupStack::PopAndDestroy(hslpAdress); |
|
4404 |
|
4405 // Set the SessionId. |
|
4406 iTrace->Trace(_L("COMASuplSession::CheckProtocolVersionL Update SLP Session ID"), KTraceFileName, __LINE__); |
|
4407 UpdateSLPSessionIDL(SessionID); |
|
4408 |
|
4409 iTrace->Trace(_L("COMASuplSession::CheckProtocolVersionL Update SET Session ID"), KTraceFileName, __LINE__); |
|
4410 UpdateSETSessionIDL(SessionID); |
|
4411 iSuplState->SetMsgStateObserver(this); |
|
4412 iSuplState->GenerateMessageL(); |
|
4413 iSuplSessionState = ESUPL_GENERATE; |
|
4414 } |
|
4415 else |
|
4416 { |
|
4417 iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl); |
|
4418 UpdateSLPSessionIDL(SessionID); |
|
4419 UpdateSETSessionIDL(SessionID); |
|
4420 iSuplState->SetMsgStateObserver(this); |
|
4421 iRequestType = ESUPL_INVALID_SESSION; |
|
4422 iSuplSessionState = ESUPL_GENERATE; |
|
4423 iSuplState->GenerateMessageL(); |
|
4424 } |
|
4425 |
|
4426 } |
|
4427 else |
|
4428 { |
|
4429 iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl); |
|
4430 iSuplSessionState = ESUPL_ENCODE; |
|
4431 iSuplState->SetMsgStateObserver(this); |
|
4432 UpdateSLPSessionIDL(SessionID); |
|
4433 UpdateSETSessionIDL(SessionID); |
|
4434 iSuplState->GenerateMessageL(); |
|
4435 } |
|
4436 } |
|
4437 |
|
4438 return EFalse; |
|
4439 } |
|
4440 |
|
4441 } |
|
4442 |
|
4443 // ----------------------------------------------------------------------------- |
|
4444 // COMASuplSession::GetRemainingPosPayloadL |
|
4445 // Returns remaining pos payload |
|
4446 // ----------------------------------------------------------------------------- |
|
4447 COMASuplPosPayload* COMASuplSession::GetRemainingPosPayloadL() |
|
4448 { |
|
4449 if( iSuplState && COMASuplState::ESUPL_POS_INIT == iSuplState->GetSuplState()) |
|
4450 { |
|
4451 COMASuplPosInitState* state = static_cast <COMASuplPosInitState *>(iSuplState); |
|
4452 return state->GetRemainingPospayLoadL(); |
|
4453 } |
|
4454 else |
|
4455 { |
|
4456 return NULL; |
|
4457 } |
|
4458 } |
|
4459 |
|
4460 // ----------------------------------------------------------------------------- |
|
4461 // COMASuplSession::IsWholeMessageSent |
|
4462 // Is whole message get sent |
|
4463 // ----------------------------------------------------------------------------- |
|
4464 TBool COMASuplSession::IsWholeMessageSentL() |
|
4465 { |
|
4466 COMASuplState::TSuplMessageType msgType = iSuplState->GetSuplState(); |
|
4467 switch(msgType) |
|
4468 { |
|
4469 case COMASuplState::ESUPL_POS_INIT: |
|
4470 { |
|
4471 COMASuplPosPayload* remainingPosPayload = GetRemainingPosPayloadL(); |
|
4472 if(remainingPosPayload ) |
|
4473 return EFalse; |
|
4474 else |
|
4475 return ETrue; |
|
4476 } |
|
4477 |
|
4478 case COMASuplState::ESUPL_POS: |
|
4479 { |
|
4480 return !IsSegmentationDone(); |
|
4481 } |
|
4482 default : //For Start , End |
|
4483 { |
|
4484 return ETrue; |
|
4485 } |
|
4486 } |
|
4487 } |
|
4488 |
|
4489 // ----------------------------------------------------------------------------- |
|
4490 // COMASuplSession::GetNetworkModeL() |
|
4491 // Checks wheather phone is online or Offline mode... |
|
4492 // ----------------------------------------------------------------------------- |
|
4493 |
|
4494 TInt COMASuplSession::GetNetworkModeL() |
|
4495 { |
|
4496 |
|
4497 TInt networkMode; |
|
4498 // get network mode |
|
4499 CRepository* centralRepository = CRepository::NewLC(KCRUidCoreApplicationUIs); |
|
4500 User::LeaveIfError(centralRepository->Get(KCoreAppUIsNetworkConnectionAllowed, networkMode)); |
|
4501 CleanupStack::PopAndDestroy(centralRepository); |
|
4502 return networkMode; |
|
4503 } |
|
4504 |
|
4505 // ----------------------------------------------------------------------------- |
|
4506 // COMASuplSession::SetSessionUIFlag |
|
4507 // Sets/Resets the Session UI flag |
|
4508 // ----------------------------------------------------------------------------- |
|
4509 void COMASuplSession::SetSessionUIFlag(TBool aValue) |
|
4510 { |
|
4511 iUIFlag = aValue; |
|
4512 } |
|
4513 |
|
4514 // ----------------------------------------------------------------------------- |
|
4515 // COMASuplSession::GetSessionUIFlag |
|
4516 // Returns Session UI flag |
|
4517 // ----------------------------------------------------------------------------- |
|
4518 TBool COMASuplSession::GetSessionUIFlag() |
|
4519 { |
|
4520 return iUIFlag; |
|
4521 } |
|
4522 |
|
4523 |
|
4524 |
|
4525 // ----------------------------------------------------------------------------- |
|
4526 // ----------------------------------------------------------------------------- |
|
4527 // COMASuplSession::CloseAllOperations |
|
4528 // Close all operations...from here we will stop all processing releated with session and will |
|
4529 // not send SUPL_END |
|
4530 // ----------------------------------------------------------------------------- |
|
4531 void COMASuplSession::CloseAllOperations() |
|
4532 { |
|
4533 iCompleteSelfRequestor->CompleteInvalidSLPSession(); |
|
4534 } |
|
4535 |
|
4536 // ----------------------------------------------------------------------------- |
|
4537 // COMASuplSession::HandleInvalidSLPSessionL |
|
4538 // Relinquish control to Communication manager.... |
|
4539 // |
|
4540 // ----------------------------------------------------------------------------- |
|
4541 void COMASuplSession::HandleInvalidSLPSession() |
|
4542 { |
|
4543 iTrace->Trace(_L("Cancelling All operations..since received invalid SLP session..."), KTraceFileName, __LINE__); |
|
4544 iConnRequestor->CancelReadOperation(); |
|
4545 CancelAllOperations(); |
|
4546 iConnRequestor->CloseConnection(); |
|
4547 iPortNum = 0; |
|
4548 iSessionObserver.TerminateSession(this, KErrCompletion);//// Invoke Terminate Session |
|
4549 } |
|
4550 |
|
4551 // ----------------------------------------------------------------------------- |
|
4552 // COMASuplSession::IsUIDisplayedL |
|
4553 // Checks whether UI is displayed or not previously |
|
4554 // |
|
4555 // ----------------------------------------------------------------------------- |
|
4556 |
|
4557 TBool COMASuplSession::IsUIDisplayedL() |
|
4558 { |
|
4559 /* |
|
4560 TBool retValue = EFalse; |
|
4561 RBuf HSLPIPAddress; |
|
4562 RBuf IAP_Name; |
|
4563 RBuf Imsi; |
|
4564 CSuplSettings::TSuplSettingsChangedBy changedBy; |
|
4565 |
|
4566 HSLPIPAddress.CreateL(KMaxIPAddressLength); |
|
4567 CleanupClosePushL(HSLPIPAddress); |
|
4568 |
|
4569 IAP_Name.CreateL(KMaxIapNameLength); |
|
4570 CleanupClosePushL(IAP_Name); |
|
4571 |
|
4572 Imsi.CreateL(KMaxImsiLength); |
|
4573 CleanupClosePushL(Imsi); |
|
4574 |
|
4575 TInt error = iSuplStorageSettings->Get(HSLPIPAddress, IAP_Name, Imsi, changedBy); |
|
4576 |
|
4577 if(!error && (IAP_Name.Length() != 0)) |
|
4578 { |
|
4579 if (IAP_Name.Compare(_L("-")) == 0) |
|
4580 retValue = ETrue; |
|
4581 } |
|
4582 CleanupStack::PopAndDestroy(3); |
|
4583 return retValue; |
|
4584 */ |
|
4585 return EFalse; |
|
4586 } |
|
4587 |
|
4588 |
|
4589 // ----------------------------------------------------------------------------- |
|
4590 // COMASuplSession::SetSETSessionIdL |
|
4591 // Sets the proper SET Session id depending on the type of Varient. |
|
4592 // |
|
4593 // ----------------------------------------------------------------------------- |
|
4594 |
|
4595 TInt COMASuplSession::SetApproriateSETSessionId() |
|
4596 { |
|
4597 TInt err = KErrNone; |
|
4598 if( IsIMSIVariant() ) |
|
4599 { |
|
4600 SetIMSI(); |
|
4601 } |
|
4602 else |
|
4603 { |
|
4604 err = GetLocalIPAddress(); |
|
4605 } |
|
4606 |
|
4607 return err; |
|
4608 } |
|
4609 |
|
4610 // ----------------------------------------------------------------------------- |
|
4611 // COMASuplSession::TimerExpiredL |
|
4612 // Checks whether UI is displayed or not previously |
|
4613 // |
|
4614 // ----------------------------------------------------------------------------- |
|
4615 void COMASuplSession::TimerExpiredL() |
|
4616 { |
|
4617 iTrace->Trace(_L("Timer Expired for SUPL_POSINIT"), KTraceFileName, __LINE__); |
|
4618 OperationCompleteL(KErrTimedOut); |
|
4619 } |
|
4620 |
|
4621 // ----------------------------------------------------------------------------- |
|
4622 // COMASuplSession::SettingsUsageUICompletedL |
|
4623 // |
|
4624 // ----------------------------------------------------------------------------- |
|
4625 void COMASuplSession::SettingsUsageUICompletedL(TInt aError) |
|
4626 { |
|
4627 iUIFlag = EFalse; |
|
4628 TBuf<64> msg; |
|
4629 msg.Copy(_L("SUPL Usage UI completed with ... ")); |
|
4630 msg.AppendNum(aError); |
|
4631 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
4632 |
|
4633 iPrevUsageResult = aError; |
|
4634 |
|
4635 |
|
4636 |
|
4637 if (aError == KErrNone) |
|
4638 { |
|
4639 iProtocolManager.UpdateAllSubSessnsInSameSession(iIpcSessionId); |
|
4640 |
|
4641 if (isTimeoutDialogTimerStarted) |
|
4642 { |
|
4643 iTrace->Trace(_L("COMASuplSession::SettingsUsageUICompletedL, stopping timer "), KTraceFileName, __LINE__); |
|
4644 isTimeoutDialogTimerStarted = EFalse; |
|
4645 iDialogTimer->StopTimer(); |
|
4646 |
|
4647 //Compute how log the dialog was on |
|
4648 TTime nowTime; |
|
4649 nowTime.HomeTime(); |
|
4650 nowTime.SecondsFrom(iDlgStartTime, iDiffTime); |
|
4651 } |
|
4652 if (iNwInitError) |
|
4653 { |
|
4654 iNwInitError = EFalse; |
|
4655 HandleSuplInitErrorL(iNwInitCompletionCode); |
|
4656 } |
|
4657 else |
|
4658 InitializeL(iRequestID); |
|
4659 } |
|
4660 else if (aError == KErrCompletion) |
|
4661 CheckForSuplUsageL(); |
|
4662 else |
|
4663 { |
|
4664 TBuf<64> msg; |
|
4665 msg.Copy(_L("Error after SUPL Usage Popup... ")); |
|
4666 msg.AppendNum(aError); |
|
4667 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
4668 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
4669 return; |
|
4670 } |
|
4671 } |
|
4672 |
|
4673 // ----------------------------------------------------------------------------- |
|
4674 // COMASuplSession::CheckForSuplUsageL |
|
4675 // |
|
4676 // ----------------------------------------------------------------------------- |
|
4677 void COMASuplSession::CheckForSuplUsageL() |
|
4678 { |
|
4679 iTrace->Trace(_L("COMASuplSession::CheckForSuplUsageL Start"), KTraceFileName, __LINE__); |
|
4680 |
|
4681 if (iSuplUsage >= 1) |
|
4682 { |
|
4683 CSuplSettings::TSuplSettingsUsage usage = iSuplSettings->SUPLUsage(); |
|
4684 if (usage == CSuplSettings::ESuplUsageDisabled) |
|
4685 { |
|
4686 iTrace->Trace(_L("CheckForSuplUsageL, SUPL disabled"), KTraceFileName, __LINE__); |
|
4687 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
4688 } |
|
4689 else if (usage == CSuplSettings::ESuplUsageAutomatic) |
|
4690 { |
|
4691 if (iNwInitError) |
|
4692 { |
|
4693 iNwInitError = EFalse; |
|
4694 HandleSuplInitErrorL(iNwInitCompletionCode); |
|
4695 } |
|
4696 else |
|
4697 { |
|
4698 iTrace->Trace(_L("CheckForSuplUsageL, Initializing"), KTraceFileName, __LINE__); |
|
4699 InitializeL(iRequestID); |
|
4700 } |
|
4701 } |
|
4702 |
|
4703 else if (usage == CSuplSettings::ESuplUsageHomeAutomatic || usage == CSuplSettings::ESuplUsageAlwaysAsk) |
|
4704 { |
|
4705 if (iRoaming) |
|
4706 HandleRoamingCheckCompleteL(KErrNone, EFalse); |
|
4707 else |
|
4708 { |
|
4709 iEtelRoamingCheck = ETrue; |
|
4710 iProtocolManager.CheckForRoaming(); |
|
4711 } |
|
4712 } |
|
4713 } |
|
4714 else |
|
4715 InitializeL(iRequestID); |
|
4716 |
|
4717 } |
|
4718 |
|
4719 // ----------------------------------------------------------------------------- |
|
4720 // COMASuplSession::CheckForTimerExpiry |
|
4721 // |
|
4722 // ----------------------------------------------------------------------------- |
|
4723 void COMASuplSession::CheckForTimerExpiry() |
|
4724 { |
|
4725 if (iPersistFail) |
|
4726 { |
|
4727 TTime nowTime; |
|
4728 nowTime.HomeTime(); |
|
4729 TTimeIntervalMicroSeconds diff = nowTime.MicroSecondsFrom(iFailTime); |
|
4730 |
|
4731 if (diff > (iPersistFailTimer * KSecond) ) |
|
4732 iChanged = ETrue; |
|
4733 } |
|
4734 } |
|
4735 // ----------------------------------------------------------------------------- |
|
4736 // COMASuplSession::CheckForPreviousResultL |
|
4737 // |
|
4738 // ----------------------------------------------------------------------------- |
|
4739 void COMASuplSession::CheckForPreviousResultL() |
|
4740 { |
|
4741 CheckForTimerExpiry(); |
|
4742 if (iChanged) |
|
4743 { |
|
4744 iProtocolManager.CancelNotify(); |
|
4745 iEtelNotify = EFalse; |
|
4746 iPersistFail = EFalse; |
|
4747 iCapsFail = EFalse; |
|
4748 iChanged = EFalse; |
|
4749 CheckForSuplUsageL(); |
|
4750 return; |
|
4751 } |
|
4752 |
|
4753 // Check for previous request result |
|
4754 if (iPrevUsageResult == KErrNone && !iPersistFail && !iCapsFail) |
|
4755 { |
|
4756 InitializeL(iRequestID); |
|
4757 } |
|
4758 else if (iCapsFail && iAllowedCapabilities != iFailedCaps) |
|
4759 { |
|
4760 InitializeL(iRequestID); |
|
4761 } |
|
4762 else |
|
4763 { |
|
4764 |
|
4765 if (iPrevUsageResult != KErrNone) |
|
4766 iSessionObserver.TerminateSession(this, iPrevUsageResult); |
|
4767 else if (iPersistFail) |
|
4768 iSessionObserver.TerminateSession(this, iPrevReqResult); |
|
4769 else if (iCapsFail) |
|
4770 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
4771 } |
|
4772 } |
|
4773 |
|
4774 void COMASuplSession::HandleCurrentNetworkChangeL(TInt aErrorCode, TBool aHomeNw) |
|
4775 { |
|
4776 iTrace->Trace(_L("COMASuplSession::HandleCurrentNetworkChangeL"), KTraceFileName, __LINE__); |
|
4777 iEtelNotify = EFalse; |
|
4778 if (aErrorCode == KErrNone) |
|
4779 { |
|
4780 iChanged = ETrue; |
|
4781 if (!aHomeNw) |
|
4782 { |
|
4783 iRoaming = ETrue; |
|
4784 } |
|
4785 else |
|
4786 iRoaming = EFalse; |
|
4787 } |
|
4788 } |
|
4789 |
|
4790 void COMASuplSession::HandleRoamingCheckCompleteL(TInt aErrorCode, TBool aHomeNw) |
|
4791 { |
|
4792 iTrace->Trace(_L("COMASuplSession::HandleRoamingCheckCompleteL"), KTraceFileName, __LINE__); |
|
4793 iEtelRoamingCheck = EFalse; |
|
4794 if (aErrorCode == KErrNone) |
|
4795 { |
|
4796 iUsageHomeNW = aHomeNw; |
|
4797 iConnRequestor->UpdateSLPListForHomeUsage(iUsageHomeNW); |
|
4798 CSuplSettings::TSuplSettingsUsage usage = iSuplSettings->SUPLUsage(); |
|
4799 |
|
4800 if (usage == CSuplSettings::ESuplUsageAlwaysAsk) |
|
4801 { |
|
4802 TInt err; |
|
4803 if (!aHomeNw) |
|
4804 { |
|
4805 iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is roaming"), KTraceFileName, __LINE__); |
|
4806 err = iProtocolManager.LaunchSuplUsageSettingsUI(this, ETrue); |
|
4807 } |
|
4808 else |
|
4809 { |
|
4810 iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is not roaming"), KTraceFileName, __LINE__); |
|
4811 err = iProtocolManager.LaunchSuplUsageSettingsUI(this, EFalse); |
|
4812 } |
|
4813 |
|
4814 if(KErrNone != err && KErrInUse == err) |
|
4815 { |
|
4816 iTrace->Trace(_L("Dialog in use, setting flag"), KTraceFileName, __LINE__); |
|
4817 SetSuplUsageFlag(); |
|
4818 } |
|
4819 if( KErrNone == err && iRequestType == ESUPL_NETWORK ) |
|
4820 { |
|
4821 iTrace->Trace(_L("Network Session , starting timer"), KTraceFileName, __LINE__); |
|
4822 COMASuplInit* suplInit = static_cast <COMASuplInit*> (iDecodedAsnMessage); |
|
4823 TOMASuplQop qop; |
|
4824 TInt retVal = suplInit->Qop(qop); |
|
4825 TInt delay; |
|
4826 qop.Delay(delay); |
|
4827 //if delay is > 7, it is not valid |
|
4828 if (delay > 7) |
|
4829 delay = 0; |
|
4830 if(retVal == KErrNone && delay > 0) |
|
4831 { |
|
4832 TReal delayReal; |
|
4833 Math::Pow(delayReal, 2, (TReal)delay); |
|
4834 delay = (TInt) delayReal; |
|
4835 TBuf<128> msg(_L("Delay present in message, value is = ")); |
|
4836 msg.AppendNum(delay); |
|
4837 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
4838 isTimeoutDialogTimerStarted = ETrue; |
|
4839 iDialogTimer->StartTimer(delay); |
|
4840 } |
|
4841 else |
|
4842 { |
|
4843 if (iSuplInitTimeOut > 0) |
|
4844 { |
|
4845 TBuf<256> msg(_L("Delay value in CR is")); |
|
4846 msg.AppendNum(iSuplInitTimeOut); |
|
4847 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
4848 iDialogTimer->StartTimer(iSuplInitTimeOut * KSecond); |
|
4849 isTimeoutDialogTimerStarted = ETrue; |
|
4850 } |
|
4851 else |
|
4852 iTrace->Trace(_L("Timeout is <= 0"), KTraceFileName, __LINE__); |
|
4853 } |
|
4854 iDlgStartTime.HomeTime(); |
|
4855 } |
|
4856 else if (KErrNone != err) |
|
4857 { |
|
4858 iTrace->Trace(_L("Invoking HandleSuplErrorL"), KTraceFileName, __LINE__); |
|
4859 HandleSuplErrorL(err); |
|
4860 } |
|
4861 |
|
4862 } |
|
4863 else if (usage == CSuplSettings::ESuplUsageHomeAutomatic) |
|
4864 { |
|
4865 if (!aHomeNw) |
|
4866 { |
|
4867 TInt err; |
|
4868 //if (!iSuplSettings->IsUIActive() ) |
|
4869 { |
|
4870 iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is roaming"), KTraceFileName, __LINE__); |
|
4871 err = iProtocolManager.LaunchSuplUsageSettingsUI(this, ETrue); |
|
4872 |
|
4873 if(iSuplMsgType == ESUPL_INIT) |
|
4874 { |
|
4875 iTrace->Trace(_L("Dialog timer started"), KTraceFileName, __LINE__); |
|
4876 |
|
4877 COMASuplInit* suplInit = static_cast <COMASuplInit*> (iDecodedAsnMessage); |
|
4878 TOMASuplQop qop; |
|
4879 TInt retVal = suplInit->Qop(qop); |
|
4880 TInt delay; |
|
4881 qop.Delay(delay); |
|
4882 //if delay is > 7, it is not valid |
|
4883 if (delay > 7) |
|
4884 delay = 0; |
|
4885 if(retVal == KErrNone && delay > 0) |
|
4886 { |
|
4887 TReal delayReal; |
|
4888 Math::Pow(delayReal, 2, (TReal)delay); |
|
4889 delay = (TInt) delayReal; |
|
4890 TBuf<128> msg(_L("Delay present in message, value is = ")); |
|
4891 msg.AppendNum(delay); |
|
4892 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
4893 isTimeoutDialogTimerStarted = ETrue; |
|
4894 iDialogTimer->StartTimer(delay); |
|
4895 } |
|
4896 else |
|
4897 { |
|
4898 if (iSuplInitTimeOut > 0) |
|
4899 { |
|
4900 isTimeoutDialogTimerStarted = ETrue; |
|
4901 iDialogTimer->StartTimer(iSuplInitTimeOut * KSecond); |
|
4902 } |
|
4903 else |
|
4904 iTrace->Trace(_L("Timeout is <= 0"), KTraceFileName, __LINE__); |
|
4905 } |
|
4906 } |
|
4907 } |
|
4908 |
|
4909 |
|
4910 if(!iSuplSettings->IsUIActive() && KErrNone != err) |
|
4911 { |
|
4912 SetSuplUsageFlag(); |
|
4913 } |
|
4914 else |
|
4915 { |
|
4916 iTrace->Trace(_L("Invoking HandleSuplErrorL"), KTraceFileName, __LINE__); |
|
4917 HandleSuplErrorL(err); |
|
4918 } |
|
4919 } |
|
4920 else |
|
4921 { |
|
4922 if (iNwInitError) |
|
4923 { |
|
4924 iNwInitError = EFalse; |
|
4925 HandleSuplInitErrorL(iNwInitCompletionCode); |
|
4926 } |
|
4927 else |
|
4928 InitializeL(iRequestID); |
|
4929 } |
|
4930 } |
|
4931 } |
|
4932 else |
|
4933 { |
|
4934 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
4935 } |
|
4936 } |
|
4937 TInt COMASuplSession::SuplIpcSessionID() |
|
4938 { |
|
4939 return iIpcSessionId; |
|
4940 } |
|
4941 |
|
4942 void COMASuplSession::UpdateSuplUsage() |
|
4943 { |
|
4944 iPrevUsageResult = KErrNone; |
|
4945 } |
|
4946 |
|
4947 void COMASuplSession::SettingsChanged() |
|
4948 { |
|
4949 iChanged = ETrue; |
|
4950 } |
|
4951 |
|
4952 void COMASuplSession::HandleIapSettingsChangeL(TInt aErrorCode) |
|
4953 { |
|
4954 iTrace->Trace(_L("COMASuplSession::HandleIapSettingsChangeL"), KTraceFileName, __LINE__); |
|
4955 if (aErrorCode >= 0) |
|
4956 iChanged = ETrue; |
|
4957 } |
|
4958 |
|
4959 void COMASuplSession::CheckForPersistentFailure(TInt aErrorCode) |
|
4960 { |
|
4961 if (iRequestType == ESUPL_TERMINAL) |
|
4962 { |
|
4963 if ( |
|
4964 (aErrorCode <= KErrDndNameNotFound && aErrorCode >= KErrDndServerUnusable) || // DNS errors |
|
4965 (aErrorCode <= KErrGprsAndNonGprsServicesNotAllowed && aErrorCode >= KErrGprsFeatureNotSupported) || // GPRS errors |
|
4966 (aErrorCode <= KErrSSLNoSharedCipher && aErrorCode >= KErrSSLDllLeave) || // TLS errors |
|
4967 (aErrorCode == KErrCouldNotConnect) // Server does not exist |
|
4968 ) |
|
4969 { |
|
4970 iPersistFail = ETrue; |
|
4971 iPrevReqResult = KErrGeneral; |
|
4972 |
|
4973 iFailTime.HomeTime(); |
|
4974 |
|
4975 iTrace->Trace(_L("COMASuplSession::CheckForPersistentFailure, listening to network change"), KTraceFileName, __LINE__); |
|
4976 iEtelNotify = ETrue; |
|
4977 iProtocolManager.NotifyCurrentNetworkChange(); |
|
4978 |
|
4979 iTrace->Trace(_L("COMASuplSession::CheckForPersistentFailure, listening to IAP change"), KTraceFileName, __LINE__); |
|
4980 if (!iIapNotifier->IsActive()) |
|
4981 iIapNotifier->NotifyIapSettingsChange(); |
|
4982 } |
|
4983 } |
|
4984 } |
|
4985 void COMASuplSession::SetSuplUsageFlag() |
|
4986 { |
|
4987 iUsageDialog = ETrue; |
|
4988 } |
|
4989 |
|
4990 void COMASuplSession::ReSetSuplUsageFlag() |
|
4991 { |
|
4992 iUsageDialog = EFalse; |
|
4993 } |
|
4994 |
|
4995 TBool COMASuplSession::GetSuplUsageFlag() |
|
4996 { |
|
4997 return iUsageDialog; |
|
4998 } |
|
4999 |
|
5000 void COMASuplSession::StartUsageDialogLaunchL() |
|
5001 { |
|
5002 iTrace->Trace(_L("COMASuplSession::StartUsageDialogLaunchL"), KTraceFileName, __LINE__); |
|
5003 ReSetSuplUsageFlag(); |
|
5004 iTrace->Trace(_L("COMASuplSession::StartUsageDialogLaunchL, flag reset done"), KTraceFileName, __LINE__); |
|
5005 |
|
5006 CSuplSettings::TSuplSettingsUsage usage = iSuplSettings->SUPLUsage(); |
|
5007 if (usage == CSuplSettings::ESuplUsageAlwaysAsk) |
|
5008 { |
|
5009 TInt err; |
|
5010 if (!iUsageHomeNW) |
|
5011 { |
|
5012 iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is roaming"), KTraceFileName, __LINE__); |
|
5013 err = iProtocolManager.LaunchSuplUsageSettingsUI(this, ETrue); |
|
5014 |
|
5015 if(iRequestType == ESUPL_NETWORK && err == KErrNone) |
|
5016 { |
|
5017 iTrace->Trace(_L("starting Dialog timer "), KTraceFileName, __LINE__); |
|
5018 |
|
5019 COMASuplInit* suplInit = static_cast <COMASuplInit*> (iDecodedAsnMessage); |
|
5020 TOMASuplQop qop; |
|
5021 TInt retVal = suplInit->Qop(qop); |
|
5022 TInt delay; |
|
5023 qop.Delay(delay); |
|
5024 //if delay is > 7, it is not valid |
|
5025 if (delay > 7) |
|
5026 delay = 0; |
|
5027 if(retVal == KErrNone && delay > 0) |
|
5028 { |
|
5029 TReal delayReal; |
|
5030 Math::Pow(delayReal, 2, (TReal)delay); |
|
5031 delay = (TInt) delayReal; |
|
5032 TBuf<128> msg(_L("Delay present in message, value is = ")); |
|
5033 msg.AppendNum(delay); |
|
5034 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
5035 isTimeoutDialogTimerStarted = ETrue; |
|
5036 iDialogTimer->StartTimer(delay); |
|
5037 } |
|
5038 else |
|
5039 { |
|
5040 if (iSuplInitTimeOut > 0) |
|
5041 { |
|
5042 iTrace->Trace(_L("Delay not present in message"), KTraceFileName, __LINE__); |
|
5043 TBuf<256> msg(_L("Delay value in CR is ")); |
|
5044 msg.AppendNum(iSuplInitTimeOut); |
|
5045 iDialogTimer->StartTimer(iSuplInitTimeOut * KSecond); |
|
5046 isTimeoutDialogTimerStarted = ETrue; |
|
5047 } |
|
5048 else |
|
5049 iTrace->Trace(_L("Timeout is <= 0"), KTraceFileName, __LINE__); |
|
5050 } |
|
5051 } |
|
5052 } |
|
5053 else |
|
5054 { |
|
5055 iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is not roaming"), KTraceFileName, __LINE__); |
|
5056 err = iProtocolManager.LaunchSuplUsageSettingsUI(this, EFalse); |
|
5057 |
|
5058 if( iRequestType == ESUPL_NETWORK && err == KErrNone) |
|
5059 { |
|
5060 iTrace->Trace(_L("starting Dialog timer "), KTraceFileName, __LINE__); |
|
5061 |
|
5062 COMASuplInit* suplInit = static_cast <COMASuplInit*> (iDecodedAsnMessage); |
|
5063 TOMASuplQop qop; |
|
5064 TInt retVal = suplInit->Qop(qop); |
|
5065 TInt delay; |
|
5066 qop.Delay(delay); |
|
5067 //if delay is > 7, it is not valid |
|
5068 if (delay > 7) |
|
5069 delay = 0; |
|
5070 if(retVal == KErrNone && delay > 0) |
|
5071 { |
|
5072 TReal delayReal; |
|
5073 Math::Pow(delayReal, 2, (TReal)delay); |
|
5074 delay = (TInt) delayReal; |
|
5075 TBuf<128> msg(_L("Delay present in message, value is = ")); |
|
5076 msg.AppendNum(delay); |
|
5077 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
5078 isTimeoutDialogTimerStarted = ETrue; |
|
5079 iDialogTimer->StartTimer(delay); |
|
5080 } |
|
5081 else |
|
5082 { |
|
5083 if (iSuplInitTimeOut > 0) |
|
5084 { |
|
5085 iTrace->Trace(_L("Delay not present in message"), KTraceFileName, __LINE__); |
|
5086 TBuf<256> msg(_L("Delay value in CR is")); |
|
5087 msg.AppendNum(iSuplInitTimeOut); |
|
5088 iDialogTimer->StartTimer(iSuplInitTimeOut * KSecond); |
|
5089 isTimeoutDialogTimerStarted = ETrue; |
|
5090 } |
|
5091 else |
|
5092 iTrace->Trace(_L("Timeout is <= 0"), KTraceFileName, __LINE__); |
|
5093 } |
|
5094 } |
|
5095 } |
|
5096 |
|
5097 if(KErrNone != err) |
|
5098 { |
|
5099 iTrace->Trace(_L("Invoking HandleSuplErrorL"), KTraceFileName, __LINE__); |
|
5100 HandleSuplErrorL(err); |
|
5101 } |
|
5102 } |
|
5103 else if (usage == CSuplSettings::ESuplUsageHomeAutomatic) |
|
5104 { |
|
5105 if (!iUsageHomeNW) |
|
5106 { |
|
5107 TInt err; |
|
5108 iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is roaming"), KTraceFileName, __LINE__); |
|
5109 err = iProtocolManager.LaunchSuplUsageSettingsUI(this, ETrue); |
|
5110 |
|
5111 if(KErrNone != err) |
|
5112 { |
|
5113 iTrace->Trace(_L("Invoking HandleSuplErrorL"), KTraceFileName, __LINE__); |
|
5114 HandleSuplErrorL(err); |
|
5115 } |
|
5116 |
|
5117 if(iRequestType == ESUPL_NETWORK && err == KErrNone) |
|
5118 { |
|
5119 iTrace->Trace(_L("starting Dialog timer "), KTraceFileName, __LINE__); |
|
5120 |
|
5121 COMASuplInit* suplInit = static_cast <COMASuplInit*> (iDecodedAsnMessage); |
|
5122 TOMASuplQop qop; |
|
5123 TInt retVal = suplInit->Qop(qop); |
|
5124 TInt delay; |
|
5125 qop.Delay(delay); |
|
5126 //if delay is > 7, it is not valid |
|
5127 if (delay > 7) |
|
5128 delay = 0; |
|
5129 if(retVal == KErrNone && delay > 0) |
|
5130 { |
|
5131 TReal delayReal; |
|
5132 Math::Pow(delayReal, 2, (TReal)delay); |
|
5133 delay = (TInt) delayReal; |
|
5134 TBuf<128> msg(_L("Delay present in message, value is = ")); |
|
5135 msg.AppendNum(delay); |
|
5136 iTrace->Trace(msg, KTraceFileName, __LINE__); |
|
5137 isTimeoutDialogTimerStarted = ETrue; |
|
5138 iDialogTimer->StartTimer(delay); |
|
5139 } |
|
5140 else |
|
5141 { |
|
5142 if (iSuplInitTimeOut > 0) |
|
5143 { |
|
5144 iTrace->Trace(_L("Delay not present in message"), KTraceFileName, __LINE__); |
|
5145 TBuf<256> msg(_L("Delay value in CR is")); |
|
5146 msg.AppendNum(iSuplInitTimeOut); |
|
5147 iDialogTimer->StartTimer(iSuplInitTimeOut * KSecond); |
|
5148 isTimeoutDialogTimerStarted = ETrue; |
|
5149 } |
|
5150 else |
|
5151 iTrace->Trace(_L("Timeout is <= 0"), KTraceFileName, __LINE__); |
|
5152 } |
|
5153 } |
|
5154 } |
|
5155 else |
|
5156 { |
|
5157 if (iNwInitError) |
|
5158 { |
|
5159 iNwInitError = EFalse; |
|
5160 HandleSuplInitErrorL(iNwInitCompletionCode); |
|
5161 } |
|
5162 else |
|
5163 InitializeL(iRequestID); |
|
5164 } |
|
5165 } |
|
5166 } |
|
5167 |
|
5168 TBool COMASuplSession::IsEtelNotifySet() |
|
5169 { |
|
5170 iTrace->Trace(_L("COMASuplSession::IsEtelNotifySet"), KTraceFileName, __LINE__); |
|
5171 return iEtelNotify; |
|
5172 } |
|
5173 |
|
5174 TBool COMASuplSession::IsEtelRoamingSet() |
|
5175 { |
|
5176 iTrace->Trace(_L("COMASuplSession::IsEtelRoamingSet"), KTraceFileName, __LINE__); |
|
5177 return iEtelRoamingCheck; |
|
5178 } |
|
5179 |
|
5180 // ----------------------------------------------------------------------------- |
|
5181 // COMASuplSession::DialogTimerExpiredL |
|
5182 // Checks whether UI is displayed or not previously |
|
5183 // |
|
5184 // ----------------------------------------------------------------------------- |
|
5185 void COMASuplSession::DialogTimerExpiredL() |
|
5186 { |
|
5187 if (iTrgTimer) |
|
5188 { |
|
5189 iTrgTimer = EFalse; |
|
5190 if (iStartTimerFlag) |
|
5191 { |
|
5192 iStartTimerFlag = EFalse; |
|
5193 StartPeriodicTriggerTimer(); |
|
5194 } |
|
5195 else |
|
5196 { |
|
5197 iTrace->Trace(_L("Timer Expired for trigger session"), KTraceFileName, __LINE__); |
|
5198 StartTriggerPosSessionL(); |
|
5199 } |
|
5200 } |
|
5201 else |
|
5202 { |
|
5203 iTrace->Trace(_L("Timer Expired for SUPL Dialog"), KTraceFileName, __LINE__); |
|
5204 |
|
5205 |
|
5206 if (!iIapDialogShown) |
|
5207 iProtocolManager.LaunchSuplDialogTimeoutUI(this); |
|
5208 else |
|
5209 iIapDlgTimerExpired = ETrue; |
|
5210 |
|
5211 } |
|
5212 return; |
|
5213 } |
|
5214 |
|
5215 // ----------------------------------------------------------------------------- |
|
5216 // COMASuplSession::SettingsTimeOutUICompletedL |
|
5217 // |
|
5218 // ----------------------------------------------------------------------------- |
|
5219 void COMASuplSession::SettingsTimeOutUICompletedL(TInt aError) |
|
5220 { |
|
5221 |
|
5222 TBuf<64> msg; |
|
5223 msg.Copy(_L("SUPL Timeout UI completed with ... ")); |
|
5224 msg.AppendNum(aError); |
|
5225 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5226 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
5227 return; |
|
5228 |
|
5229 } |
|
5230 |
|
5231 // ----------------------------------------------------------------------------- |
|
5232 // COMASuplSession::StoreCurrentCellIDL |
|
5233 // Stores current cell id in CR |
|
5234 // |
|
5235 // ----------------------------------------------------------------------------- |
|
5236 void COMASuplSession::StoreCurrentCellIDL(HPositionGenericInfo& /*aSuplPosInfo*/) |
|
5237 { |
|
5238 iTrace->Trace(_L("Calling StoreCurrentCellIDL"),KTraceFileName, __LINE__); |
|
5239 TPckg<TCellIdInfo> cellPkg(iCurrentCellId); |
|
5240 |
|
5241 #ifdef PRINT_MESSAGE |
|
5242 TBuf<64> msg; |
|
5243 msg.Copy(_L("cid=:")); |
|
5244 msg.AppendNum(iCurrentCellId.iCid); |
|
5245 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5246 |
|
5247 msg.Copy(_L("Lac=:")); |
|
5248 msg.AppendNum(iCurrentCellId.iLac); |
|
5249 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5250 |
|
5251 msg.Copy(_L("MCC=:")); |
|
5252 msg.AppendNum(iCurrentCellId.iMCC); |
|
5253 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5254 |
|
5255 msg.Copy(_L("MNC=:")); |
|
5256 msg.AppendNum(iCurrentCellId.iMNC); |
|
5257 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5258 #endif |
|
5259 |
|
5260 CRepository* ConfigurationCenRepSession = CRepository::NewL(KCRUidOMASuplConfiguration); |
|
5261 CleanupStack::PushL(ConfigurationCenRepSession); |
|
5262 User::LeaveIfError(ConfigurationCenRepSession->Set(KOMASuplCurrentCellid, cellPkg)); |
|
5263 |
|
5264 CleanupStack::PopAndDestroy(ConfigurationCenRepSession); |
|
5265 } |
|
5266 |
|
5267 // ----------------------------------------------------------------------------- |
|
5268 // COMASuplSession::ServerAddressCheckForSuplInitL() |
|
5269 // Stores current cell id in CR |
|
5270 // |
|
5271 // ----------------------------------------------------------------------------- |
|
5272 TInt COMASuplSession::ServerAddressCheckForSuplInitL() |
|
5273 { |
|
5274 TBuf<256> serverName; |
|
5275 TBuf<64> msg; |
|
5276 |
|
5277 COMASuplSLPAddress* slpAddress = NULL; |
|
5278 COMASuplInit* SuplInit = static_cast <COMASuplInit *>(iDecodedAsnMessage); |
|
5279 TInt err = SuplInit->SLPAddress(slpAddress); |
|
5280 |
|
5281 if(err == KErrOMASuplParamNotSet) |
|
5282 { |
|
5283 msg.Copy(_L("SLP address is NOT PRESENT in SUPL_INIT.")); |
|
5284 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5285 |
|
5286 //Set default slp to Conn Requestor... |
|
5287 iConnRequestor->UseDefaultServerL(); |
|
5288 return KErrNone; |
|
5289 } |
|
5290 |
|
5291 COMASuplSLPAddress::TSuplSLPAddressType addressType = slpAddress->SLPAddressType(); |
|
5292 if(addressType == COMASuplSLPAddress::EFqdn) |
|
5293 { |
|
5294 HBufC8* fqdn; |
|
5295 TInt err = slpAddress->Fqdn(fqdn); |
|
5296 serverName.Copy(fqdn->Des()); |
|
5297 msg.Copy(_L("SLP address as FQDN is PRESENT in SUPL_INIT:")); |
|
5298 msg.Append(serverName); |
|
5299 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5300 } |
|
5301 else |
|
5302 { |
|
5303 TBuf8<256> IPslpaddress; |
|
5304 slpAddress->IPvAddress(IPslpaddress); |
|
5305 serverName.Copy(IPslpaddress); |
|
5306 msg.Copy(_L("SLP address as IP is PRESENT in SUPL_INIT:")); |
|
5307 msg.Append(serverName); |
|
5308 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5309 |
|
5310 } |
|
5311 |
|
5312 TBool isExist = iSuplStorageSettings->IsSlpExists(serverName); |
|
5313 if(isExist) |
|
5314 { |
|
5315 //Set to Conn Requestor... |
|
5316 iConnRequestor->UseServerL(serverName); |
|
5317 return KErrNone; |
|
5318 } |
|
5319 else |
|
5320 { |
|
5321 msg.Copy(_L("Dropping Packet.SLP absent in server List:")); |
|
5322 msg.Append(serverName); |
|
5323 iTrace->Trace(msg,KTraceFileName, __LINE__); |
|
5324 return KErrNotFound; |
|
5325 } |
|
5326 |
|
5327 } |
|
5328 |
|
5329 void COMASuplSession::RunTriggerSessionL( |
|
5330 TRequestStatus& aStatus, |
|
5331 TSuplTerminalPeriodicTrigger& aTriggerParams, |
|
5332 const TDesC& aHslpAddress, |
|
5333 TBool aFallBack, |
|
5334 TInt aAllowedCapabilities, |
|
5335 TInt aSessionIdSeed, |
|
5336 TInt aRequestID) |
|
5337 { |
|
5338 iRunRequestStatus = & aStatus; |
|
5339 *iRunRequestStatus = KRequestPending; |
|
5340 |
|
5341 iRequestID = aRequestID; |
|
5342 |
|
5343 iTrace->Trace(_L("Start COMASuplSession::RunTriggerSessionL"), KTraceFileName, __LINE__); |
|
5344 |
|
5345 // Log Session Id |
|
5346 TBuf<64> id; |
|
5347 id.Append(_L("Session Id is ")); |
|
5348 id.AppendNum(aSessionIdSeed); |
|
5349 iTrace->Trace(id,KTraceFileName, __LINE__); |
|
5350 |
|
5351 // Log Capability from client |
|
5352 id.Copy(_L("Received Capability is ")); |
|
5353 id.AppendNum(aAllowedCapabilities); |
|
5354 iTrace->Trace(id,KTraceFileName, __LINE__); |
|
5355 |
|
5356 iSETSessionUniqueId = aSessionIdSeed; |
|
5357 |
|
5358 TInt networkMode = 1; |
|
5359 networkMode = GetNetworkModeL(); |
|
5360 |
|
5361 if ( networkMode == ECoreAppUIsNetworkConnectionNotAllowed ) |
|
5362 { |
|
5363 id.Copy(_L("The device is in OFFLINE mode.")); |
|
5364 iTrace->Trace(id,KTraceFileName, __LINE__); |
|
5365 iSessionObserver.TerminateSession(this, KErrGeneral); |
|
5366 return; |
|
5367 } |
|
5368 else |
|
5369 { |
|
5370 id.Copy(_L("The device is in ON LINE mode.")); |
|
5371 iTrace->Trace(id,KTraceFileName, __LINE__); |
|
5372 } |
|
5373 |
|
5374 if(aAllowedCapabilities == 0) |
|
5375 { |
|
5376 iAllowedCapabilities = KGpsSETAssisted | KGpsSETBased | KAutonomousGps| KAFLT | KECID | KEOTD | KOTDOA | KCID; |
|
5377 } |
|
5378 else |
|
5379 { |
|
5380 iAllowedCapabilities = aAllowedCapabilities; |
|
5381 } |
|
5382 |
|
5383 //Ownership transfer to iSuplSessionId |
|
5384 iSuplSessionId->SetSLPSessionID(NULL); |
|
5385 |
|
5386 //Set flag to indicate that it is a triggering session |
|
5387 iTriggerSession = ETrue; |
|
5388 |
|
5389 //Store trigger parameters |
|
5390 iTriggerParams = aTriggerParams; |
|
5391 |
|
5392 iConnRequestor->SetDefaultParametersL(aHslpAddress,aFallBack); |
|
5393 |
|
5394 CheckForSuplUsageL(); |
|
5395 |
|
5396 // Clear Position.... |
|
5397 delete iPosition; |
|
5398 iPosition = NULL; |
|
5399 |
|
5400 iTrace->Trace(_L("End of COMASuplSession::RunTriggerSessionL"), KTraceFileName, __LINE__); |
|
5401 } |
|
5402 |
|
5403 void COMASuplSession::GetPeriodicTriggerParams() |
|
5404 { |
|
5405 iTrace->Trace(_L("COMASuplSession::GetPeriodicTriggerParams"), KTraceFileName, __LINE__); |
|
5406 iTriggerParams.Get(iNumFixes, iInterval, iStartTime); |
|
5407 iTotalNoOfFixes = iNumFixes; |
|
5408 iStartTimeCopy = iStartTime; |
|
5409 } |
|
5410 |
|
5411 void COMASuplSession::StartPeriodicTriggerTimer() |
|
5412 { |
|
5413 if (iNumFixes != 0) |
|
5414 { |
|
5415 iTrace->Trace(_L("COMASuplSession::StartPeriodicTriggerTimer"), KTraceFileName, __LINE__); |
|
5416 //Set flag to indicate timer for trigger |
|
5417 iTrgTimer = ETrue; |
|
5418 if (iStartTime != 0) |
|
5419 { |
|
5420 iDialogTimer->StartTimer(iStartTime * KSecond); |
|
5421 iStartTime = 0; |
|
5422 iStartTimerFlag = ETrue; |
|
5423 } |
|
5424 else |
|
5425 { |
|
5426 if(iTotalNoOfFixes == iNumFixes) |
|
5427 { |
|
5428 iDialogTimer->StartTimer(0); |
|
5429 } |
|
5430 else |
|
5431 { |
|
5432 iDialogTimer->StartTimer(iInterval * KSecond); |
|
5433 } |
|
5434 } |
|
5435 } |
|
5436 } |
|
5437 |
|
5438 void COMASuplSession::StartTriggerPosSessionL() |
|
5439 { |
|
5440 iTrace->Trace(_L("COMASuplSession::StartTriggerPosSessionL"), KTraceFileName, __LINE__); |
|
5441 |
|
5442 if (iClientNotify || iTotalNoOfFixes == iNumFixes) |
|
5443 { |
|
5444 //Check if fix already exists with the POS Plug-in |
|
5445 //in which case whole of POS session is not required. |
|
5446 |
|
5447 iClientNotify = EFalse; |
|
5448 if (iInterval > KMaxIntervalTime || iDisconnected || iStartTime > KMaxStartTime) |
|
5449 { |
|
5450 |
|
5451 iTrace->Trace(_L("Setting state to INITIALIZED"), KTraceFileName, __LINE__); |
|
5452 iStartTimeCopy = 0; |
|
5453 iSuplSessionState = ESUPL_INITIALIZED; |
|
5454 } |
|
5455 else |
|
5456 { |
|
5457 iTrace->Trace(_L("Setting state to CONNECTING"), KTraceFileName, __LINE__); |
|
5458 iSuplSessionState = ESUPL_CONNECTING; |
|
5459 } |
|
5460 |
|
5461 OperationCompleteL(KErrNone); |
|
5462 } |
|
5463 else |
|
5464 { |
|
5465 //Reset number of fixes to 0 so that if notify |
|
5466 //request comes after cancel has started, it will |
|
5467 //get completed with error |
|
5468 iNumFixes = 0; |
|
5469 CancelTriggerSession(); |
|
5470 } |
|
5471 } |
|
5472 |
|
5473 void COMASuplSession::NotifyTriggerFiredL(TRequestStatus& aStatus, TSuplTriggerFireInfo& aFireInfo) |
|
5474 { |
|
5475 iTrace->Trace(_L("COMASuplSession::NotifyTriggerFiredL"), KTraceFileName, __LINE__); |
|
5476 iRunRequestStatus = & aStatus; |
|
5477 *iRunRequestStatus = KRequestPending; |
|
5478 iTrgFireInfo = &aFireInfo; |
|
5479 iClientNotify = ETrue; |
|
5480 if (iNumFixes == 0) |
|
5481 { |
|
5482 CompleteSession(KErrGeneral); |
|
5483 } |
|
5484 |
|
5485 } |
|
5486 |
|
5487 void COMASuplSession::CancelTriggerSession() |
|
5488 { |
|
5489 // Check if trigger session is in progress. If not trigger session, silently discard. |
|
5490 if (!iTriggerSession) |
|
5491 return; |
|
5492 |
|
5493 // If the trigger session is over and SUPL END is already sent, |
|
5494 // then also silently discard |
|
5495 if (iSuplMsgType == ESUPL_END) |
|
5496 return; |
|
5497 |
|
5498 // If timer is running, stop timer and send SUPL TRIGGER STOP. |
|
5499 // Else check if POS session in progress and send SUPL TRIGGER STOP |
|
5500 if (iDialogTimer->IsTimerStarted()) |
|
5501 { |
|
5502 iDialogTimer->StopTimer(); |
|
5503 } |
|
5504 |
|
5505 iTrgCancelRequest = ETrue; |
|
5506 // Check if the triggering POS session in progress |
|
5507 if (iSuplMsgType == ESUPL_POSINIT || iSuplMsgType == ESUPL_POS || iInterval <= 10) |
|
5508 { |
|
5509 iSuplSessionState = ESUPL_CONNECTING; |
|
5510 } |
|
5511 else |
|
5512 { |
|
5513 // If POS session is not in progress, need to check for interval and progress |
|
5514 iSuplSessionState = ESUPL_INITIALIZED; |
|
5515 } |
|
5516 |
|
5517 TRAP_IGNORE(OperationCompleteL(KErrNone)); |
|
5518 |
|
5519 |
|
5520 } |
|
5521 // ----------------------------------------------------------------------------- |
|
5522 // COMASuplSession::InsertActiveSessionL |
|
5523 // |
|
5524 // |
|
5525 // ----------------------------------------------------------------------------- |
|
5526 void COMASuplSession::InsertActiveSessionL() |
|
5527 { |
|
5528 iTrace->Trace(_L("Inserting New Trigger Session into DB..."), KTraceFileName, __LINE__); |
|
5529 CTriggerParams::TRequestType requestType; |
|
5530 if(iRequestType == ESUPL_TERMINAL) |
|
5531 { |
|
5532 requestType = CTriggerParams::ETerminalInitiated; |
|
5533 } |
|
5534 else |
|
5535 { |
|
5536 requestType = CTriggerParams::ENetworkInitiated; |
|
5537 } |
|
5538 |
|
5539 CTriggerParams* activeSessionParam = CTriggerParams::NewLC(); |
|
5540 activeSessionParam->Set(iSETSessionUniqueId,iRequestorName,ETrue,ETrue,CTriggerParams::EPeriodic,requestType,iNumFixes,iInterval); |
|
5541 iTrace->Trace(_L("Session Id : "), KTraceFileName, __LINE__); |
|
5542 TBuf<64> sessionId; |
|
5543 sessionId.AppendNum(iSETSessionUniqueId); |
|
5544 iTrace->Trace(sessionId, KTraceFileName, __LINE__); |
|
5545 |
|
5546 TInt err=iSuplStorageSettings->InsertSessionRecord(activeSessionParam); |
|
5547 CleanupStack::PopAndDestroy(activeSessionParam); |
|
5548 } |
|
5549 |
|
5550 // ----------------------------------------------------------------------------- |
|
5551 // COMASuplSession::RemoveActiveSession |
|
5552 // |
|
5553 // |
|
5554 // ----------------------------------------------------------------------------- |
|
5555 void COMASuplSession::RemoveActiveSession() |
|
5556 { |
|
5557 iTrace->Trace(_L("Removing Trigger Session from DB..."), KTraceFileName, __LINE__); |
|
5558 //may need to reset the iActiveSessionId to 0 so that self deletion event will not come to same session... |
|
5559 TInt err = iSuplStorageSettings->DeleteSessionRecord(iSETSessionUniqueId); |
|
5560 } |
|
5561 |
|
5562 void COMASuplSession::UpdateActiveTriggerSession() |
|
5563 { |
|
5564 iTrace->Trace(_L("Updating Trigger Session into DB..."), KTraceFileName, __LINE__); |
|
5565 iTrace->Trace(_L("Session Id : "), KTraceFileName, __LINE__); |
|
5566 TBuf<64> sessionId; |
|
5567 sessionId.AppendNum(iSETSessionUniqueId); |
|
5568 iTrace->Trace(sessionId, KTraceFileName, __LINE__); |
|
5569 |
|
5570 TInt err = iSuplStorageSettings->SetOutstandingTriggers(iSETSessionUniqueId,iNumFixes); |
|
5571 } |
|
5572 |
|
5573 // ----------------------------------------------------------------------------- |
|
5574 // COMASuplSession::AreYouHandlingThisSession |
|
5575 // |
|
5576 // |
|
5577 // ----------------------------------------------------------------------------- |
|
5578 TBool COMASuplSession::AreYouHandlingThisSession(TInt64& aActiveSessionId) |
|
5579 { |
|
5580 //We will consider only Network Initiated case,as there will be cancellation of only network initiated trigger only, nor SET initiated. |
|
5581 //return ((aActiveSessionId == iSETSessionUniqueId) && (iRequestType == ESUPL_NETWORK)); |
|
5582 return (aActiveSessionId == iSETSessionUniqueId); |
|
5583 } |
|
5584 |
|
5585 |
|
5586 void COMASuplSession::LaunchNotifyDialogL() |
|
5587 { |
|
5588 |
|
5589 iTrace->Trace(_L("COMASuplSession2::LaunchNotifyDialogL..."), KTraceFileName, __LINE__); |
|
5590 |
|
5591 if (!iPrivacyOverride && iTotalNoOfFixes == (iNumFixes+1)) |
|
5592 { |
|
5593 iTrace->Trace(_L("COMASuplSession2::LaunchNotifyDialogL...inside if"), KTraceFileName, __LINE__); |
|
5594 // Synchronous call |
|
5595 if (iSuplReqInfo) |
|
5596 iTrace->Trace(_L("iSuplReqInfo is not null"), KTraceFileName, __LINE__); |
|
5597 |
|
5598 if (iNetworkPrivacy) |
|
5599 iTrace->Trace(_L("iNetworkPrivacy is not null"), KTraceFileName, __LINE__); |
|
5600 |
|
5601 //Inform UI that ,trigger session has started... |
|
5602 InsertActiveSessionL(); |
|
5603 TInt privacyId; |
|
5604 iNetworkPrivacy->NotifyLocationRequestL(*iSuplReqInfo, privacyId); |
|
5605 iTrace->Trace(_L(" Calling InsertActiveSessionL"), KTraceFileName, __LINE__); |
|
5606 |
|
5607 } |
|
5608 else |
|
5609 if (!iPrivacyOverride) |
|
5610 { |
|
5611 iTrace->Trace(_L("Launch Notify dialog second if condition"), KTraceFileName, __LINE__); |
|
5612 CTriggerParams* aParamValues = CTriggerParams::NewL(); |
|
5613 iSuplStorageSettings->GetTriggerParams(iSETSessionUniqueId,aParamValues); |
|
5614 TInt64 sessionId; |
|
5615 TBool notificationPresent; |
|
5616 TBool triggerNotificationStatus; |
|
5617 CTriggerParams::TTriggerType triggerType; |
|
5618 CTriggerParams::TRequestType requestType; |
|
5619 TUint64 outstandingTrigger; |
|
5620 TUint64 interval; |
|
5621 |
|
5622 HBufC* sessionName = HBufC::NewL( KMaxSessionNameLength ); |
|
5623 |
|
5624 aParamValues->Get(sessionId,sessionName->Des(),notificationPresent,triggerNotificationStatus, |
|
5625 triggerType,requestType,outstandingTrigger,interval); |
|
5626 //triggerNotificationStatus = ETrue; |
|
5627 |
|
5628 UpdateActiveTriggerSession(); //Update UI for trigger info... |
|
5629 |
|
5630 if (triggerNotificationStatus) |
|
5631 { |
|
5632 iTrace->Trace(_L("calling notifylocreqL in second if"), KTraceFileName, __LINE__); |
|
5633 if (iSuplReqInfo) |
|
5634 iTrace->Trace(_L("iSuplReqInfo is not null"), KTraceFileName, __LINE__); |
|
5635 |
|
5636 if (iNetworkPrivacy) |
|
5637 iTrace->Trace(_L("iNetworkPrivacy is not null"), KTraceFileName, __LINE__); |
|
5638 |
|
5639 |
|
5640 |
|
5641 iNetworkPrivacy->NotifyLocationRequestL(*iSuplReqInfo, iRequestorId); |
|
5642 |
|
5643 } |
|
5644 |
|
5645 delete sessionName; |
|
5646 delete aParamValues; |
|
5647 |
|
5648 |
|
5649 } |
|
5650 |
|
5651 } |
|
5652 |
|
5653 TUint COMASuplSession::GetPortNumUsed() |
|
5654 { |
|
5655 return iPortNum; |
|
5656 } |
|
5657 |
|
5658 //End of File |