diff -r 2b4ea9893b66 -r 6b6920c56e2f supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplfallbackhandler.cpp --- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplfallbackhandler.cpp Tue Aug 31 15:37:04 2010 +0300 +++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplfallbackhandler.cpp Wed Sep 01 12:24:21 2010 +0100 @@ -115,11 +115,11 @@ { iTrace->Trace(_L("COMASuplFallBackHandler::GetNextSLPAddressL"),KTraceFileName, __LINE__); - _LIT(KFormatTxt,"%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B"); - - TBuf<256> LogBuffer; - - if( aLastErrorCode != KErrNone)// If its KErrNone then its means server name is asked first time and no need for Tls failure check + _LIT(KFormatTxt,"%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B"); + + TBuf<256> LogBuffer; + + if( aLastErrorCode != KErrNone)// If its KErrNone then its means server name is asked first time and no need for Tls failure check { if( CheckErrorCodeL(aLastErrorCode) ) @@ -154,7 +154,7 @@ LogBuffer.AppendNum(err); iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - CleanupStack::PopAndDestroy(newParam); + CleanupStack::PopAndDestroy(&newParam); } else { @@ -175,7 +175,7 @@ delete iapName; } - CleanupStack::PopAndDestroy(param); + CleanupStack::PopAndDestroy(¶m); iTrace->Trace(_L("Fallback allowed & TLSAuth failed"),KTraceFileName, __LINE__); iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__); @@ -204,150 +204,149 @@ return KErrNotFound; } } + + //Check to see if the server list is empty. If it is create the HSLP Address from the IMSI and use that + // as the server address. This does not add the server to the list and this functionality should only + // be tried once + if(iSLPList->Count() <= 0 && (!iAttemptedBackupServer)) + { + iTrace->Trace(_L("Going to create and use alternative HSLP Address from IMSI"),KTraceFileName, __LINE__); - //Check to see if the server list is empty. If it is create the HSLP Address from the IMSI and use that - // as the server address. This does not add the server to the list and this functionality should only - // be tried once - if(iSLPList->Count() <= 0 && (!iAttemptedBackupServer)) - { - iTrace->Trace(_L("Going to create and use alternative HSLP Address from IMSI"),KTraceFileName, __LINE__); + iAttemptedBackupServer = ETrue; - iAttemptedBackupServer = ETrue; - - //Generate the HSLP Address - GenerateHslpAddressFromIMSIL(); + //Generate the HSLP Address + GenerateHslpAddressFromIMSIL(); - //Copy the generated address into the supplied function arguments - aHslpToBeUsedAddress.Copy(iGenratedHslpAddress); - aIAPName.Zero(); - aIAPName.Copy(iDefaultIAPName); - aTls = ETrue; - aPskTls = EFalse; - aIsIapDialogShown = ETrue; + //Copy the generated address into the supplied function arguments + aHslpToBeUsedAddress.Copy(iGenratedHslpAddress); + aIAPName.Zero(); + aIAPName.Copy(iDefaultIAPName); + aTls = ETrue; + aPskTls = EFalse; + aIsIapDialogShown = ETrue; - iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__); - LogBuffer.Copy(aHslpToBeUsedAddress); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__); + LogBuffer.Copy(aHslpToBeUsedAddress); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__); - LogBuffer.Copy(aIAPName); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__); + LogBuffer.Copy(aIAPName); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + + //Add the server to the list for future connections + CServerParams* param=CServerParams::NewL(); + CleanupStack::PushL(param); + User::LeaveIfError(param->Set( iGenratedHslpAddress,iDefaultIAPName,ETrue,ETrue,ETrue,EFalse )); + + TInt err = iSuplSettings.AddNewServer( param, aSLPId ); //Ignore error + LogBuffer.Copy(_L("AddNewServer() completed with err: ")); + LogBuffer.AppendNum(err); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - //Add the server to the list for future connections - CServerParams* param=CServerParams::NewL(); - CleanupStack::PushL(param); - User::LeaveIfError(param->Set( iGenratedHslpAddress,iDefaultIAPName,ETrue,ETrue,ETrue,EFalse )); - - TInt err = iSuplSettings.AddNewServer( param, aSLPId ); //Ignore error - LogBuffer.Copy(_L("AddNewServer() completed with err: ")); - LogBuffer.AppendNum(err); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - - CleanupStack::PopAndDestroy(¶m); + CleanupStack::PopAndDestroy(¶m); - return KErrNone; - } - - if( iSLPList->Count() <= 0 || iCurrentServerCounter >= iSLPList->Count() ) - { - LogBuffer.Copy(_L("No more servers available...")); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - return KErrNotFound; - } - - iTrace->Trace(_L("Trying next server..."),KTraceFileName, __LINE__); - - //Fallback Timer... - if(aLastErrorCode == KErrNone) //This means, server name is asked for first time only... - { - iTrace->Trace(_L("Start Time: "),KTraceFileName, __LINE__); - iFallBackStartTime.HomeTime(); - LogBuffer.Zero(); - iFallBackStartTime.FormatL(LogBuffer,KFormatTxt); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - } - else - { - TTime currentTime; - currentTime.HomeTime(); - TTimeIntervalMicroSeconds diff = currentTime.MicroSecondsFrom(iFallBackStartTime); - - - iTrace->Trace(_L("Current Time: "),KTraceFileName, __LINE__); - LogBuffer.Zero(); - currentTime.FormatL(LogBuffer,KFormatTxt); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - - LogBuffer.Copy(_L("Difference between time: ")); - LogBuffer.AppendNum(diff.Int64()); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - - if( diff.Int64() > iAllowedFallBackTimerValue) + return KErrNone; + } + + if( iSLPList->Count() <= 0 || iCurrentServerCounter >= iSLPList->Count() ) + { + LogBuffer.Copy(_L("No more servers available...")); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + return KErrNotFound; + } + + iTrace->Trace(_L("Trying next server..."),KTraceFileName, __LINE__); + + //Fallback Timer... + if(aLastErrorCode == KErrNone) //This means, server name is asked for first time only... + { + iTrace->Trace(_L("Start Time: "),KTraceFileName, __LINE__); + iFallBackStartTime.HomeTime(); + LogBuffer.Zero(); + iFallBackStartTime.FormatL(LogBuffer,KFormatTxt); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + } + else { - LogBuffer.Copy(_L("Timeout happened...")); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - - return KErrTimedOut; - } - } + TTime currentTime; + currentTime.HomeTime(); + TTimeIntervalMicroSeconds diff = currentTime.MicroSecondsFrom(iFallBackStartTime); + + + iTrace->Trace(_L("Current Time: "),KTraceFileName, __LINE__); + LogBuffer.Zero(); + currentTime.FormatL(LogBuffer,KFormatTxt); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + + LogBuffer.Copy(_L("Difference between time: ")); + LogBuffer.AppendNum(diff.Int64()); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + + if( diff.Int64() > iAllowedFallBackTimerValue) + { + LogBuffer.Copy(_L("Timeout happened...")); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - if(aLastErrorCode == KErrNone) //This will be called only once...for first time only - { - aSLPId = (*iSLPList)[0].iSLPId; - aHslpToBeUsedAddress.Copy((*iSLPList)[0].iHSLPAddress); - aIAPName.Copy((*iSLPList)[0].iIapName); - aTls = (*iSLPList)[0].iTls; - aPskTls = (*iSLPList)[0].iPskTls; - aIsIapDialogShown = (*iSLPList)[0].iIsIAPDialgShown; - iCurrentServerCounter++; - - iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__); - LogBuffer.Copy(aHslpToBeUsedAddress); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + return KErrTimedOut; + } + } - iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__); - LogBuffer.Copy(aIAPName); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - - iTrace->Trace(_L("iap dlg configuration:"),KTraceFileName, __LINE__); - LogBuffer.Delete(0,256); - LogBuffer.AppendNum(aIsIapDialogShown); - iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - - return KErrNone; - } - else - { - if(iIsFallBackAllowed && CheckErrorCodeL(aLastErrorCode))// Do not fallback in case if IMSI generated address failed for previous try. + if(aLastErrorCode == KErrNone) //This will be called only once...for first time only { - aSLPId = (*iSLPList)[iCurrentServerCounter].iSLPId; - aHslpToBeUsedAddress.Copy((*iSLPList)[iCurrentServerCounter].iHSLPAddress); - aIAPName.Copy((*iSLPList)[iCurrentServerCounter].iIapName); - aTls = (*iSLPList)[iCurrentServerCounter].iTls; - aPskTls = (*iSLPList)[iCurrentServerCounter].iPskTls; - aIsIapDialogShown = (*iSLPList)[iCurrentServerCounter].iIsIAPDialgShown; - iCurrentServerCounter++; - iTrace->Trace(_L("Fallback allowed & TLSAuth passed"),KTraceFileName, __LINE__); + aSLPId = (*iSLPList)[0].iSLPId; + aHslpToBeUsedAddress.Copy((*iSLPList)[0].iHSLPAddress); + aIAPName.Copy((*iSLPList)[0].iIapName); + aTls = (*iSLPList)[0].iTls; + aPskTls = (*iSLPList)[0].iPskTls; + aIsIapDialogShown = (*iSLPList)[0].iIsIAPDialgShown; + iCurrentServerCounter++; + iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__); LogBuffer.Copy(aHslpToBeUsedAddress); iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - + iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__); LogBuffer.Copy(aIAPName); iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); - + iTrace->Trace(_L("iap dlg configuration:"),KTraceFileName, __LINE__); LogBuffer.Delete(0,256); LogBuffer.AppendNum(aIsIapDialogShown); iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + return KErrNone; } else { - return KErrNotFound; + if(iIsFallBackAllowed && CheckErrorCodeL(aLastErrorCode))// Do not fallback in case if IMSI generated address failed for previous try. + { + aSLPId = (*iSLPList)[iCurrentServerCounter].iSLPId; + aHslpToBeUsedAddress.Copy((*iSLPList)[iCurrentServerCounter].iHSLPAddress); + aIAPName.Copy((*iSLPList)[iCurrentServerCounter].iIapName); + aTls = (*iSLPList)[iCurrentServerCounter].iTls; + aPskTls = (*iSLPList)[iCurrentServerCounter].iPskTls; + aIsIapDialogShown = (*iSLPList)[iCurrentServerCounter].iIsIAPDialgShown; + iCurrentServerCounter++; + iTrace->Trace(_L("Fallback allowed & TLSAuth passed"),KTraceFileName, __LINE__); + iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__); + LogBuffer.Copy(aHslpToBeUsedAddress); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + + iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__); + LogBuffer.Copy(aIAPName); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + + iTrace->Trace(_L("iap dlg configuration:"),KTraceFileName, __LINE__); + LogBuffer.Delete(0,256); + LogBuffer.AppendNum(aIsIapDialogShown); + iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); + return KErrNone; + } + else + { + return KErrNotFound; + } } - } - } // -----------------------------------------------------------------------------