diff -r d6e4203b7ebe -r 5944cae565c9 supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplfallbackhandler.cpp --- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplfallbackhandler.cpp Tue Apr 27 17:05:00 2010 +0300 +++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplfallbackhandler.cpp Tue May 11 16:36:36 2010 +0300 @@ -42,7 +42,8 @@ // ----------------------------------------------------------------------------- // COMASuplFallBackHandler::COMASuplFallBackHandler(CSuplSettingsInternal& aSettings): - iSuplSettings(aSettings) + iSuplSettings(aSettings), + iAttemptedBackupServer(EFalse) { } @@ -113,6 +114,8 @@ TInt COMASuplFallBackHandler::GetNextSLPAddressL(TInt64& aSLPId, TDes& aHslpToBeUsedAddress,TDes& aIAPName,TBool& aTls, TBool& aPskTls,TInt aLastErrorCode,TBool& aIsIapDialogShown) { + 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; @@ -160,7 +163,38 @@ { 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__); + + iAttemptedBackupServer = ETrue; + + //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; + + 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__); + + return KErrNone; + } if( iSLPList->Count() <= 0 || iCurrentServerCounter >= iSLPList->Count() ) {