--- a/supl/locationsuplfw/gateway/src/epos_csuplsessionrequest.cpp Mon Jun 21 16:08:35 2010 +0300
+++ b/supl/locationsuplfw/gateway/src/epos_csuplsessionrequest.cpp Thu Jul 15 19:06:58 2010 +0300
@@ -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,11 @@
CSuplSessionRequest::~CSuplSessionRequest()
{
DEBUG_TRACE("CSuplSessionRequest::~CSuplSessionRequest", __LINE__)
+ iSessnMgr.RemoveFromQueueForReIssueRequest(*this);
+
+ if (iParamExtendedFallback)
+ delete iParamExtendedFallback;
+
if (IsActive())
Cancel();
}
@@ -115,6 +122,13 @@
iSessnMgr.RunSuplSessionL(aSuplSessn, iStatus, aHslpAddress, fallBack, aSetCaps, aReqId, aFirstReq);
SetActive();
+ iSessionStarted = ETrue;
+ iParamFallback = ETrue;
+ iParamSuplSessn = aSuplSessn;
+ iParamSetCaps = aSetCaps;
+ iParamReqId = aReqId;
+ iParamFirstReq = aFirstReq;
+ iParamExtendedQopUsed = EFalse;
}
// ---------------------------------------------------------
// CSuplSessionRequest::MakeSuplSessionRequestL
@@ -132,6 +146,15 @@
iSessnMgr.RunSuplSessionL(aSuplSessn, iStatus, aHslpAddress, fallBack, aSetCaps, aReqId, aQop, aFirstReq);
SetActive();
+
+ iSessionStarted = ETrue;
+ iParamFallback = ETrue;
+ iParamSuplSessn = aSuplSessn;
+ iParamSetCaps = aSetCaps;
+ iParamReqId = aReqId;
+ iParamFirstReq = aFirstReq;
+ iParamQop = aQop;
+ iParamExtendedQopUsed = ETrue;
}
void CSuplSessionRequest::MakeSuplSessionRequestL(CSuplSessionBase* aSuplSessn,const TDesC& aHslpAddress, TBool aFallBack, TInt aSetCaps, TInt aReqId, TBool aFirstReq)
@@ -141,6 +164,21 @@
iStatus = KRequestPending;
iSessnMgr.RunSuplSessionL(aSuplSessn, iStatus, aHslpAddress, aFallBack, aSetCaps, aReqId, aFirstReq);
SetActive();
+
+ iSessionStarted = ETrue;
+ 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 +188,22 @@
iStatus = KRequestPending;
iSessnMgr.RunSuplSessionL(aSuplSessn, iStatus, aHslpAddress, aFallBack, aSetCaps, aReqId, aQop, aFirstReq);
SetActive();
+
+ iSessionStarted = ETrue;
+ 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;
}
// ---------------------------------------------------------
@@ -198,6 +252,7 @@
if (IsActive())
{
iObserver->CompleteRunSession(KErrServerTerminated);
+ iSessionStarted = EFalse;
Cancel();
}
}
@@ -212,44 +267,85 @@
{
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:
+
+ iSessionStarted = EFalse;
+ 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;
+ }
+
+ 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;
- }
-
- default :
- DebugPanic(EPosSuplServerPanicRequestInconsistency);
- }
- }
+ }
+ else
+ {
+ if (!iParamExtendedFallback)
+ {
+ MakeSuplSessionRequestL(iParamSuplSessn, iParamSetCaps, iParamReqId, iParamQop, iParamFirstReq);
+ }
+ else
+ {
+ MakeSuplSessionRequestL(iParamSuplSessn, *iParamExtendedFallback, iParamFallback, iParamSetCaps, iParamReqId, iParamQop, iParamFirstReq);
+ }
+ }
+ DEBUG_TRACE("Retry request succesfull", __LINE__)
+ iRequestPhase = ESuplRetryingSession;
+ }
// ---------------------------------------------------------
// CSuplSessionRequest::RunError