supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplfallbackhandler.cpp
branchRCL_3
changeset 24 9c303455e256
parent 23 5944cae565c9
child 44 2b4ea9893b66
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplfallbackhandler.cpp	Tue May 11 16:36:36 2010 +0300
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplfallbackhandler.cpp	Tue May 25 13:09:42 2010 +0300
@@ -136,6 +136,47 @@
             		aTls = ETrue;
             		aPskTls = EFalse;
             		aIsIapDialogShown = ETrue;
+					
+					CServerParams* param = CServerParams::NewL();
+					CleanupStack::PushL(param);
+					
+					//Find out if this alternative generated SUPL server is in the SUPL Settings list
+					TInt err = iSuplSettings.GetSlpInfoAddress(iGenratedHslpAddress, param);
+					if(err == KErrNotFound)
+						{
+						//Server does not exist
+						iTrace->Trace(_L("Server does not exist in list so adding it in."),KTraceFileName, __LINE__);
+						CServerParams* newParam=CServerParams::NewL();
+						CleanupStack::PushL(newParam);
+						User::LeaveIfError(newParam->Set( iGenratedHslpAddress,iDefaultIAPName,ETrue,ETrue,ETrue,EFalse ));
+
+						err = iSuplSettings.AddNewServer( newParam, aSLPId ); //Ignore error
+						LogBuffer.Copy(_L("AddNewServer() completed with err: "));
+						LogBuffer.AppendNum(err);
+						iTrace->Trace(LogBuffer,KTraceFileName, __LINE__); 		
+						
+						CleanupStack::PopAndDestroy(&newParam);
+						}
+					else
+						{
+						//Server exists, get the SLP ID and the IAP Access point for this server
+						HBufC* hslpAddress =  HBufC::NewL(KHSLPAddressLength);       
+						HBufC* iapName =  HBufC::NewL(KMaxIapNameLength);
+						TBool serverEnabled;
+						TBool simChangeRemove;
+						TBool usageInHomeNw;
+						TBool editable;
+						
+						iTrace->Trace(_L("Server already exists, getting the SLP ID and Access Point."),KTraceFileName, __LINE__);
+						
+						param->Get(aSLPId,hslpAddress->Des(),iapName->Des(),serverEnabled,simChangeRemove,usageInHomeNw,editable);
+						aIAPName.Copy(iapName->Des());
+						
+						delete hslpAddress;
+						delete iapName;
+						}
+					
+					CleanupStack::PopAndDestroy(&param);
                                 
             		iTrace->Trace(_L("Fallback allowed & TLSAuth failed"),KTraceFileName, __LINE__);
             		iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__);
@@ -192,6 +233,18 @@
 		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__); 		
+		
+		CleanupStack::PopAndDestroy(&param);
 
 		return KErrNone;
 		}