diff -r e175e2ba2fb0 -r 3efc7a0e8755 supl/locationsuplfw/gateway/src/epos_csuplsessionrequest.cpp --- a/supl/locationsuplfw/gateway/src/epos_csuplsessionrequest.cpp Fri Jul 23 19:40:48 2010 +0530 +++ b/supl/locationsuplfw/gateway/src/epos_csuplsessionrequest.cpp Fri Aug 06 19:34:22 2010 +0530 @@ -49,7 +49,8 @@ iRequestPhase(ESuplReqInactive), iObserver(aObserver), iSessnMgr(aSessnMgr), - iSuplSessn(aSuplSessn) + iSuplSessn(aSuplSessn), + iParamExtendedFallback(NULL) { DEBUG_TRACE("CSuplSessionRequest::CSuplSessionRequest", __LINE__) CActiveScheduler::Add(this); @@ -60,7 +61,8 @@ iRequestPhase(ESuplReqInactive), iNetObserver(aObserver), iSessnMgr(aSessnMgr), - iSuplSessn(aSuplSessn) + iSuplSessn(aSuplSessn), + iParamExtendedFallback(NULL) { DEBUG_TRACE("CSuplSessionRequest::CSuplSessionRequest", __LINE__) CActiveScheduler::Add(this); @@ -95,6 +97,13 @@ CSuplSessionRequest::~CSuplSessionRequest() { DEBUG_TRACE("CSuplSessionRequest::~CSuplSessionRequest", __LINE__) + iSessnMgr.RemoveFromQueueForReIssueRequest(*this); + + if (iParamExtendedFallback) + { + delete iParamExtendedFallback; + } + if (IsActive()) Cancel(); } @@ -115,6 +124,17 @@ iSessnMgr.RunSuplSessionL(aSuplSessn, iStatus, aHslpAddress, fallBack, aSetCaps, aReqId, aFirstReq); SetActive(); + iParamFallback = ETrue; + iParamSuplSessn = aSuplSessn; + iParamSetCaps = aSetCaps; + iParamReqId = aReqId; + iParamFirstReq = aFirstReq; + if (iParamExtendedFallback) + { + delete iParamExtendedFallback; + iParamExtendedFallback = NULL; + } + iParamExtendedQopUsed = EFalse; } // --------------------------------------------------------- // CSuplSessionRequest::MakeSuplSessionRequestL @@ -132,6 +152,19 @@ iSessnMgr.RunSuplSessionL(aSuplSessn, iStatus, aHslpAddress, fallBack, aSetCaps, aReqId, aQop, aFirstReq); SetActive(); + + iParamFallback = ETrue; + iParamSuplSessn = aSuplSessn; + iParamSetCaps = aSetCaps; + iParamReqId = aReqId; + iParamFirstReq = aFirstReq; + if (iParamExtendedFallback) + { + delete iParamExtendedFallback; + iParamExtendedFallback = NULL; + } + iParamQop = aQop; + iParamExtendedQopUsed = ETrue; } void CSuplSessionRequest::MakeSuplSessionRequestL(CSuplSessionBase* aSuplSessn,const TDesC& aHslpAddress, TBool aFallBack, TInt aSetCaps, TInt aReqId, TBool aFirstReq) @@ -141,6 +174,20 @@ iStatus = KRequestPending; iSessnMgr.RunSuplSessionL(aSuplSessn, iStatus, aHslpAddress, aFallBack, aSetCaps, aReqId, aFirstReq); SetActive(); + + iParamFallback = aFallBack; + iParamSuplSessn = aSuplSessn; + iParamSetCaps = aSetCaps; + iParamReqId = aReqId; + iParamFirstReq = aFirstReq; + if (iParamExtendedFallback) + { + delete iParamExtendedFallback; + iParamExtendedFallback = NULL; + } + iParamExtendedFallback = HBufC::NewL(aHslpAddress.Length()); + *iParamExtendedFallback = aHslpAddress; + iParamExtendedQopUsed = EFalse; } void CSuplSessionRequest::MakeSuplSessionRequestL(CSuplSessionBase* aSuplSessn,const TDesC& aHslpAddress, TBool aFallBack, TInt aSetCaps, TInt aReqId, TSuplTerminalQop& aQop, TBool aFirstReq) @@ -150,6 +197,21 @@ iStatus = KRequestPending; iSessnMgr.RunSuplSessionL(aSuplSessn, iStatus, aHslpAddress, aFallBack, aSetCaps, aReqId, aQop, aFirstReq); SetActive(); + + iParamFallback = aFallBack; + iParamSuplSessn = aSuplSessn; + iParamSetCaps = aSetCaps; + iParamReqId = aReqId; + iParamFirstReq = aFirstReq; + iParamQop = aQop; + iParamExtendedQopUsed = ETrue; + if (iParamExtendedFallback) + { + delete iParamExtendedFallback; + iParamExtendedFallback = NULL; + } + iParamExtendedFallback = HBufC::NewL(aHslpAddress.Length()); + *iParamExtendedFallback = aHslpAddress; } // --------------------------------------------------------- @@ -212,50 +274,90 @@ { DEBUG_TRACE("CSuplSessionRequest::RunL", __LINE__) TInt err = iStatus.Int(); - switch (iRequestPhase) - { - case ESuplStartTriggerRequest: - case ESuplStopTriggerRequest: - { - iRequestPhase = ESuplReqInactive; - iObserver->CompleteTriggerRunSession(err); - break; - } - case ESuplTriggerFiredNotifyRequest: - { - iRequestPhase = ESuplReqInactive; - iObserver->CompleteTriggerFiredNotifyRequest(err); - break; - } - case ESuplSessionRequest: + + if(err != KErrNone && iRequestPhase == ESuplSessionRequest) + { + DEBUG_TRACE("Retrying session", __LINE__) + iRequestPhase = ESuplWaitingToRetrySession; + iSessnMgr.QueueForReIssueRequestL(*this); + } + else + { + switch (iRequestPhase) + { + case ESuplStartTriggerRequest: + case ESuplStopTriggerRequest: + { + iRequestPhase = ESuplReqInactive; + iObserver->CompleteTriggerRunSession(err); + break; + } + case ESuplTriggerFiredNotifyRequest: + { + iRequestPhase = ESuplReqInactive; + iObserver->CompleteTriggerFiredNotifyRequest(err); + break; + } + case ESuplSessionRequest: + case ESuplRetryingSession: + { + iRequestPhase = ESuplReqInactive; + iObserver->CompleteRunSession(err); + break; + } + case ESuplCancelRunSessionRequest: + { + iRequestPhase = ESuplReqInactive; + iObserver->CompleteRunSession(err); + break; + } + case ESuplForwardMessage: + { + iRequestPhase = ESuplReqInactive; + iNetObserver->CompleteForwardMessageL(iHandle); + break; + } + case ESuplLocationConversionRequest: + case ESuplCancelLocationConversionRequest: + { + iRequestPhase = ESuplReqInactive; + iObserver->CompleteRunSession(err); + break; + } + default : + DebugPanic(EPosSuplServerPanicRequestInconsistency); + } + } + } + +void CSuplSessionRequest::ReIssueRequestL() + { + DEBUG_TRACE("CSuplSessionRequest::ReIssueRequestL", __LINE__) + if(!iParamExtendedQopUsed) + { + if (!iParamExtendedFallback) { - iRequestPhase = ESuplReqInactive; - iObserver->CompleteRunSession(err); - break; + MakeSuplSessionRequestL(iParamSuplSessn, iParamSetCaps, iParamReqId, iParamFirstReq); } - case ESuplCancelRunSessionRequest: + else { - iRequestPhase = ESuplReqInactive; - iObserver->CompleteRunSession(err); - break; + MakeSuplSessionRequestL(iParamSuplSessn, *iParamExtendedFallback, iParamFallback, iParamSetCaps, iParamReqId, iParamFirstReq); } - case ESuplForwardMessage: - { - iRequestPhase = ESuplReqInactive; - iNetObserver->CompleteForwardMessageL(iHandle); - break; - } - case ESuplLocationConversionRequest: - case ESuplCancelLocationConversionRequest: + } + else + { + if (!iParamExtendedFallback) { - iRequestPhase = ESuplReqInactive; - iObserver->CompleteRunSession(err); - break; + MakeSuplSessionRequestL(iParamSuplSessn, iParamSetCaps, iParamReqId, iParamQop, iParamFirstReq); } - default : - DebugPanic(EPosSuplServerPanicRequestInconsistency); - } - } + else + { + MakeSuplSessionRequestL(iParamSuplSessn, *iParamExtendedFallback, iParamFallback, iParamSetCaps, iParamReqId, iParamQop, iParamFirstReq); + } + } + DEBUG_TRACE("Retry request succesfull", __LINE__) + iRequestPhase = ESuplRetryingSession; + } // --------------------------------------------------------- // CSuplSessionRequest::RunError