supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplsession.cpp
changeset 20 82ee1f804b63
parent 18 3825cf2dc8c2
child 22 4c4ed41530db
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplsession.cpp	Fri Apr 16 15:23:31 2010 +0300
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplsession.cpp	Mon May 03 12:54:42 2010 +0300
@@ -83,6 +83,7 @@
 #include "epos_omasuplconfigurationkeys.h"
 #include "epos_csuplsettingparams.h"
 #include "epos_comasuplasnbase.h"
+#include "epos_csuplsettingsconstants.h"
 
 
 _LIT(KTraceFileName,"SUPL_OMA_SESSION::EPos_COMASuplSession.cpp");
@@ -1512,7 +1513,8 @@
 			TOMASuplUtcTime UtcTime;
 			TOMASuplPositionEstimate PosEstimate;
 			TDateTime TimeStamp;
-			TInt ZoneCode,Zone,altitude,AltitudeUncertainty, HorizontalAccuracy;
+			TInt ZoneCode,Zone,altitude, HorizontalAccuracy;
+			TInt AltitudeUncertainty = 0;
 			TOMASuplAltitudeInfo AltitudeInfo;
 			TInt latitude,longitude;
 			TOMASuplPositionEstimate::TOMASuplLatitudeSign LatSign;
@@ -1696,7 +1698,8 @@
 			TOMASuplUtcTime UtcTime;
 			TOMASuplPositionEstimate PosEstimate;
 			TDateTime TimeStamp;
-			TInt ZoneCode,Zone,altitude,AltitudeUncertainty, HorizontalAccuracy;
+			TInt ZoneCode,Zone,altitude, HorizontalAccuracy;
+			TInt AltitudeUncertainty = 0;
 			TOMASuplAltitudeInfo AltitudeInfo;
 			TInt latitude,longitude;
 			TOMASuplPositionEstimate::TOMASuplLatitudeSign LatSign;
@@ -1947,101 +1950,126 @@
 //
 void COMASuplSession::HandleOMASuplMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage,TRequestStatus& aStatus,TInt aSessionIdSeed,TInt aErrorCode)
 	{
-		delete iSuplState;
-		iSuplState = NULL;
-		
-		iSETSessionUniqueId = aSessionIdSeed;
-		iRunRequestStatus = & aStatus;
-	    *iRunRequestStatus = KRequestPending;
-	    
-		TInt networkMode = 1;
-		networkMode = GetNetworkModeL();
-		
-		TBuf<64> msg;
-		if ( networkMode == ECoreAppUIsNetworkConnectionNotAllowed )
-			{
-				msg.Copy(_L("The device is in OFFLINE mode."));
-				iTrace->Trace(msg,KTraceFileName, __LINE__); 
-				iSessionObserver.TerminateSession(this, KErrGeneral);
-				return;
-			}
-		else
-			{
-				msg.Copy(_L("The device is in ON LINE mode."));
-				iTrace->Trace(msg,KTraceFileName, __LINE__); 
-			}
-
-        CSuplSettings::TSuplSettingsUsage usage = iSuplSettings->SUPLUsage();
-
-        if (usage == CSuplSettings::ESuplUsageDisabled)
-            {                
-			msg.Copy(_L("SUPL Usage is disabled"));
-			iTrace->Trace(msg,KTraceFileName, __LINE__); 
-	        iSessionObserver.TerminateSession(this, KErrGeneral);	
-			return;
+    delete iSuplState;
+    iSuplState = NULL;
+    
+    iSETSessionUniqueId = aSessionIdSeed;
+    iRunRequestStatus = & aStatus;
+    *iRunRequestStatus = KRequestPending;
+    
+    TInt networkMode = 1;
+    networkMode = GetNetworkModeL();
+    
+    TBuf<64> msg;
+    if ( networkMode == ECoreAppUIsNetworkConnectionNotAllowed )
+        {
+            msg.Copy(_L("The device is in OFFLINE mode."));
+            iTrace->Trace(msg,KTraceFileName, __LINE__); 
+            iSessionObserver.TerminateSession(this, KErrGeneral);
+            return;
+        }
+    else
+        {
+            msg.Copy(_L("The device is in ON LINE mode."));
+            iTrace->Trace(msg,KTraceFileName, __LINE__); 
+        }
+
+    CSuplSettings::TSuplSettingsUsage usage = iSuplSettings->SUPLUsage();
+
+    if (usage == CSuplSettings::ESuplUsageDisabled)
+        {                
+        msg.Copy(_L("SUPL Usage is disabled"));
+        iTrace->Trace(msg,KTraceFileName, __LINE__); 
+        iSessionObserver.TerminateSession(this, KErrGeneral);	
+        return;
+        }
+    
+    COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsnMessage->MessageType();
+    
+    if(messageType == COMASuplAsnMessageBase::ESUPL_INIT && aErrorCode == KErrNone)
+        {
+            HandleOMASuplMessageL(aDecodedAsnMessage);
+        }
+    else //Other messages than SUPL_INIT.... Send End
+        {
+        CreateCloneMessageL(aDecodedAsnMessage);		
+        UpdateSuplSessionIDL();
+        if (iRequestType == ESUPL_NETWORK && messageType == COMASuplAsnMessageBase::ESUPL_INIT)
+            {
+            ServerAddressCheckForSuplInitL();
             }
-	    
-	    COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsnMessage->MessageType();
-	    
-	    if(messageType == COMASuplAsnMessageBase::ESUPL_INIT && aErrorCode == KErrNone)
-	    	{
-	    		HandleOMASuplMessageL(aDecodedAsnMessage);
-	    	}
-	    else //Other messages than SUPL_INIT.... Send End
-	    	{
-	    		CreateCloneMessageL(aDecodedAsnMessage);		
-	    		UpdateSuplSessionIDL();
- 
-				iSuplSessionState = ESUPL_INITIALIZED;
-				iSuplMsgType = ESUPL_END;
-
-	    		if((aErrorCode == KErrCompletion && messageType == COMASuplAsnMessageBase::ESUPL_INIT) ||
-	    			(aErrorCode == KErrOMASuplOutOfRangeParameter && messageType == COMASuplAsnMessageBase::ESUPL_INIT) ||
-	    			(aErrorCode == KErrOMASuplMessageLengthMismatch && messageType == COMASuplAsnMessageBase::ESUPL_INIT) ||
-						(aErrorCode == KErrOMASuplShortFrame && messageType == COMASuplAsnMessageBase::ESUPL_INIT))	    			
-	    			{
-	    				iErrorStatusCode = COMASuplEnd::EUnexpectedDataValue;
-	    				if(aErrorCode == KErrOMASuplMessageLengthMismatch)
-	    					{
-	    						iErrorStatusCode = COMASuplEnd::EProtocolError;
-	    					}
-      				if(aErrorCode == KErrOMASuplShortFrame)
-	    					{
-	    						iErrorStatusCode = COMASuplEnd::EDataMissing;
-	    					}
-						TInt len = iHSLPAddress.Length();
-						HBufC8 *hslpAdress = NULL;
-						if(len > 0)
-						{
-							hslpAdress = HBufC8::NewL(iHSLPAddress.Length());
-							hslpAdress->Des().Copy(iHSLPAddress);
-						}
-						
-						else if(len ==0)
-						{
-						iTrace->Trace(_L("Length of HSLP Address is = 0, passing the HSLP generated frm IMSI"), KTraceFileName, __LINE__);
-						hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length());
-						CleanupStack::PushL(hslpAdress);
-						hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi());	
-						CleanupStack::Pop(hslpAdress);						
-						}
-						CleanupStack::PushL(hslpAdress);
-						iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress);		
-						CleanupStack::PopAndDestroy(hslpAdress);
-	    			}
-	    		else
-	    			{
-	    				iErrorStatusCode = COMASuplEnd::EUnexpectedMessage;
-	    				iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl);
-	    			}	
-	    			
-	    		SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating);	
-				iSuplState->SetMsgStateObserver(this);
-				//SMP Changes
-				iSuplSessionState = ESUPL_GENERATE;
-				iSuplState->GenerateMessageL();
-				 
-	    	}	
+
+        iSuplSessionState = ESUPL_INITIALIZED;
+        iSuplMsgType = ESUPL_END;
+
+        if((aErrorCode == KErrCompletion && messageType == COMASuplAsnMessageBase::ESUPL_INIT) ||
+            (aErrorCode == KErrOMASuplOutOfRangeParameter && messageType == COMASuplAsnMessageBase::ESUPL_INIT) ||
+            (aErrorCode == KErrOMASuplMessageLengthMismatch && messageType == COMASuplAsnMessageBase::ESUPL_INIT) ||
+            (aErrorCode == KErrOMASuplShortFrame && messageType == COMASuplAsnMessageBase::ESUPL_INIT))	    			
+            {
+            iErrorStatusCode = COMASuplEnd::EUnexpectedDataValue;
+            if(aErrorCode == KErrOMASuplMessageLengthMismatch)
+                {
+                    iErrorStatusCode = COMASuplEnd::EProtocolError;
+                }
+            if(aErrorCode == KErrOMASuplShortFrame)
+                {
+                    iErrorStatusCode = COMASuplEnd::EDataMissing;
+                }
+            TInt len = iHSLPAddress.Length();
+            HBufC8 *hslpAdress = NULL;
+            if(len > 0)
+                {
+                hslpAdress = HBufC8::NewL(iHSLPAddress.Length());
+                hslpAdress->Des().Copy(iHSLPAddress);
+                }
+            else if(len ==0)
+                {
+                CServerParams* serverParams = CServerParams::NewL();
+                CleanupStack::PushL(serverParams);
+            
+                if (iSuplStorageSettings->GetDefaultServer(serverParams) == KErrNotFound )
+                    {
+                    iTrace->Trace(_L("HSLP generated frm IMSI"), KTraceFileName, __LINE__);
+                    hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length());
+                    hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi());	
+                    }		
+                else
+                    {
+                    iTrace->Trace(_L("Sending End with ver for Default HSLP"), KTraceFileName, __LINE__);
+                    TInt64 slpId;
+                    TBool aServerEnabled, aSimChangeRemove, aUsageInHomeNw, aEditable;
+                    HBufC* serverAddr = HBufC::NewL(KMaxHSLPAddrLen);
+                    HBufC* iapName = HBufC::NewL(KMaxIAPLen);
+                    CleanupStack::PushL(serverAddr);
+                    CleanupStack::PushL(iapName);
+                    serverParams->Get(slpId,serverAddr->Des(),iapName->Des(),aServerEnabled, aSimChangeRemove, aUsageInHomeNw, aEditable);
+                    hslpAdress = HBufC8::NewL(serverAddr->Length());
+                    hslpAdress->Des().Copy(*serverAddr);
+                
+                    CleanupStack::PopAndDestroy(iapName);
+                    CleanupStack::PopAndDestroy(serverAddr);
+                    }
+                CleanupStack::PopAndDestroy(serverParams);
+                }
+            delete iSuplState;
+            iSuplState = NULL;
+            CleanupStack::PushL(hslpAdress);
+            iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress);		
+            CleanupStack::PopAndDestroy(hslpAdress);
+            }
+        else
+            {
+            iErrorStatusCode = COMASuplEnd::EUnexpectedMessage;
+            iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl);
+            }	
+            
+        SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating);	
+        iSuplState->SetMsgStateObserver(this);
+        //SMP Changes
+        iSuplState->GenerateMessageL(); //Has to be here because initialisation has to be done for NI case in decode failed scenario.
+        iSuplSessionState = ESUPL_GENERATE;
+        }	
 	}
 
 // -----------------------------------------------------------------------------
@@ -2052,10 +2080,10 @@
 //
 void COMASuplSession::HandleOMASuplMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage)
 	{
+		CreateCloneMessageL(aDecodedAsnMessage);		
 		if(CheckProtocolVersionL(aDecodedAsnMessage)) //Checks version with supported version
 		{
 			COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsnMessage->MessageType();
-			CreateCloneMessageL(aDecodedAsnMessage);		
 			if(messageType != COMASuplAsnMessageBase::ESUPL_POS)
 				{
 					iCompleteSelfRequestor->CompleteSelf(); //This will result in call of RequestCompleted()
@@ -3190,106 +3218,123 @@
 //
 void COMASuplSession::HandleSuplInitErrorL(TInt aErr)
 	{
-		iTrace->Trace(_L("Start COMASuplSession::HandleSuplInitError"), KTraceFileName, __LINE__); 
-		
-		if(aErr == KErrOMAInvalidHSLPAddress)
-			{
-				iTrace->Trace(_L("COMASuplSession::HandleSuplInitError HSLP Address is not matching..."), KTraceFileName, __LINE__);
-				//Close Connection : bug Fix.
-				iConnRequestor->CloseConnection();
-                iPortNum = 0;
-				iSessionObserver.TerminateSession(this, KErrCompletion);
-				return;
-			}
-				
-		TBool setStatusCode = ETrue;
-		
-	
-		
-		if(aErr == KErrSuplInvalidSessionID)
-			{
-				iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Received SET Session ID"), KTraceFileName, __LINE__);
-				iErrorStatusCode = COMASuplEnd::EInvalidSessionId;	
-
-			    COMASuplSessionID* retrivedSessionID = NULL;
-			    iDecodedAsnMessage->SessionId(retrivedSessionID);
-
-			    // Set the SessionId.
-				iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Update SET Session ID"), KTraceFileName, __LINE__);
-			    UpdateSETSessionIDL(retrivedSessionID);
-
-			}
-			
-		if(aErr == KErrOMANonProxyModeNotSupported)
-			{
-				iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Received Nonproxymode data"), KTraceFileName, __LINE__);
-				iErrorStatusCode = COMASuplEnd::ENonProxyModeNotSupported;	
-			}
-
-		if(KErrAccessDenied == aErr || KErrOMASuplDenied == aErr)
-			{
-				iTrace->Trace(_L("COMASuplSession::HandleSuplInitError KErrAccessDenied|| KErrOMASuplDenied"), KTraceFileName, __LINE__);
-				iErrorStatusCode = COMASuplEnd::EConsentDeniedByUser;	
-			}
-	
-		if(aErr == KErrOMASuplNoPosition || KErrOMASuplInformationOnly == aErr)
-			{
-				//Supl End with No Position
-				iTrace->Trace(_L("COMASuplSession::HandleSuplInitError KErrOMASuplNoPosition || KErrOMASuplInformationOnly"), KTraceFileName, __LINE__);
-				setStatusCode = EFalse;
-			}
-		
-		if(KErrOMASuplAccepted == aErr)
-			{
-				iTrace->Trace(_L("COMASuplSession::HandleSuplInitError EConsentGrantedByUser"), KTraceFileName, __LINE__);
-				iErrorStatusCode = COMASuplEnd::EConsentGrantedByUser;	
-			}
-		
-		TInt len = iHSLPAddress.Length();
-		HBufC8 *hslpAdress = NULL;
-		if(len > 0)
-		{
-			hslpAdress = HBufC8::NewL(iHSLPAddress.Length());
-			hslpAdress->Des().Copy(iHSLPAddress);
-		}
-		
-			else if(len ==0)
-				{
-					iTrace->Trace(_L("HSLP generated frm IMSI"), KTraceFileName, __LINE__);
-					hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length());
-					CleanupStack::PushL(hslpAdress);
-					hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi());
-					CleanupStack::Pop(hslpAdress);	
-					
-				}
-		CleanupStack::PushL(hslpAdress);
-		
-		delete iSuplState;
-		iSuplState = NULL;
-		
- 		if(setStatusCode)
- 			{
-	 			iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress);		
- 			}
- 		else
- 			{
- 				iSuplState = COMASuplEndState::NewL(iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress );
- 			} 		
- 			
- 		CleanupStack::PopAndDestroy(hslpAdress);
- 		
-		iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Send SUPL_END for SUPL_INIT"), KTraceFileName, __LINE__);
-		
-		//iSuplSessionState = ESUPL_GENERATE;		
-		iSuplSessionState = ESUPL_INITIALIZED;
-		iSuplState->SetMsgStateObserver(this);
-		iSuplMsgType = ESUPL_END;
-		SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating);	
-		//SMP Changes
-		
-		iSuplState->GenerateMessageL();
-		iSuplSessionState = ESUPL_GENERATE; // HAs to be here because initialisation has to be complete..
-	
+    iTrace->Trace(_L("Start COMASuplSession::HandleSuplInitError"), KTraceFileName, __LINE__); 
+    
+    if(aErr == KErrOMAInvalidHSLPAddress)
+        {
+            iTrace->Trace(_L("COMASuplSession::HandleSuplInitError HSLP Address is not matching..."), KTraceFileName, __LINE__);
+            //Close Connection : bug Fix.
+            iConnRequestor->CloseConnection();
+            iPortNum = 0;
+            iSessionObserver.TerminateSession(this, KErrCompletion);
+            return;
+        }
+            
+    TBool setStatusCode = ETrue;
+    
+
+    
+    if(aErr == KErrSuplInvalidSessionID)
+        {
+            iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Received SET Session ID"), KTraceFileName, __LINE__);
+            iErrorStatusCode = COMASuplEnd::EInvalidSessionId;	
+
+            COMASuplSessionID* retrivedSessionID = NULL;
+            iDecodedAsnMessage->SessionId(retrivedSessionID);
+
+            // Set the SessionId.
+            iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Update SET Session ID"), KTraceFileName, __LINE__);
+            UpdateSETSessionIDL(retrivedSessionID);
+
+        }
+        
+    if(aErr == KErrOMANonProxyModeNotSupported)
+        {
+            iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Received Nonproxymode data"), KTraceFileName, __LINE__);
+            iErrorStatusCode = COMASuplEnd::ENonProxyModeNotSupported;	
+        }
+
+    if(KErrAccessDenied == aErr || KErrOMASuplDenied == aErr)
+        {
+            iTrace->Trace(_L("COMASuplSession::HandleSuplInitError KErrAccessDenied|| KErrOMASuplDenied"), KTraceFileName, __LINE__);
+            iErrorStatusCode = COMASuplEnd::EConsentDeniedByUser;	
+        }
+
+    if(aErr == KErrOMASuplNoPosition || KErrOMASuplInformationOnly == aErr)
+        {
+            //Supl End with No Position
+            iTrace->Trace(_L("COMASuplSession::HandleSuplInitError KErrOMASuplNoPosition || KErrOMASuplInformationOnly"), KTraceFileName, __LINE__);
+            setStatusCode = EFalse;
+        }
+    
+    if(KErrOMASuplAccepted == aErr)
+        {
+            iTrace->Trace(_L("COMASuplSession::HandleSuplInitError EConsentGrantedByUser"), KTraceFileName, __LINE__);
+            iErrorStatusCode = COMASuplEnd::EConsentGrantedByUser;	
+        }
+    
+    TInt len = iHSLPAddress.Length();
+    HBufC8 *hslpAdress = NULL;
+    if(len > 0)
+        {
+        hslpAdress = HBufC8::NewL(iHSLPAddress.Length());
+        hslpAdress->Des().Copy(iHSLPAddress);
+        }
+    else if(len ==0)
+        {
+        CServerParams* serverParams = CServerParams::NewL();
+        CleanupStack::PushL(serverParams);
+        
+        if (iSuplStorageSettings->GetDefaultServer(serverParams) == KErrNotFound )
+            {
+            iTrace->Trace(_L("HSLP generated frm IMSI"), KTraceFileName, __LINE__);
+            hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length());
+            hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi());
+            }
+        else
+            {
+            iTrace->Trace(_L("Default HSLP"), KTraceFileName, __LINE__);
+            TInt64 slpId;
+            TBool aServerEnabled, aSimChangeRemove, aUsageInHomeNw, aEditable;
+            HBufC* serverAddr = HBufC::NewL(KMaxHSLPAddrLen);
+            HBufC* iapName = HBufC::NewL(KMaxIAPLen);
+            CleanupStack::PushL(serverAddr);
+            CleanupStack::PushL(iapName);
+            serverParams->Get(slpId,serverAddr->Des(),iapName->Des(),aServerEnabled, aSimChangeRemove, aUsageInHomeNw, aEditable);
+            hslpAdress = HBufC8::NewL(serverAddr->Length());
+            hslpAdress->Des().Copy(*serverAddr);
+        
+            CleanupStack::PopAndDestroy(iapName);
+            CleanupStack::PopAndDestroy(serverAddr);
+            }
+        CleanupStack::PopAndDestroy(serverParams);	
+        }
+
+    delete iSuplState;
+    iSuplState = NULL;
+    CleanupStack::PushL(hslpAdress);
+    if(setStatusCode)
+        {
+            iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress);		
+        }
+    else
+        {
+            iSuplState = COMASuplEndState::NewL(iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress );
+        } 		
+        
+    CleanupStack::PopAndDestroy(hslpAdress);
+    
+    iTrace->Trace(_L("COMASuplSession::HandleSuplInitError Send SUPL_END for SUPL_INIT"), KTraceFileName, __LINE__);
+    
+    //iSuplSessionState = ESUPL_GENERATE;		
+    iSuplSessionState = ESUPL_INITIALIZED;
+    iSuplState->SetMsgStateObserver(this);
+    iSuplMsgType = ESUPL_END;
+    SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating);	
+    //SMP Changes
+    
+    iSuplState->GenerateMessageL();
+    iSuplSessionState = ESUPL_GENERATE; // HAs to be here because initialisation has to be complete..
 	}
 
 // -----------------------------------------------------------------------------
@@ -3758,6 +3803,8 @@
 
 					if(iRequestType == ESUPL_NETWORK )
 					{
+                if (messageType == COMASuplAsnMessageBase::ESUPL_INIT)    
+                    {                                
 						
 						iSuplSessionState = ESUPL_INITIALIZED;
 					    TInt len = iHSLPAddress.Length();
@@ -3769,14 +3816,39 @@
 					    }
 				   	else if(len ==0)
 					{
-					iTrace->Trace(_L("Length of HSLP Address is = 0, passing the HSLP generated frm IMSI"), KTraceFileName, __LINE__);
-					hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length());
-					CleanupStack::PushL(hslpAdress);
-					hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi());	
-					CleanupStack::Pop(hslpAdress);
-					    }
+                        CServerParams* serverParams = CServerParams::NewL();
+                        CleanupStack::PushL(serverParams);
+        
+                        if (iSuplStorageSettings->GetDefaultServer(serverParams) == KErrNotFound )
+                            {
+							iTrace->Trace(_L("Length of HSLP Address is = 0, passing the HSLP generated frm IMSI"), KTraceFileName, __LINE__);
+							hslpAdress = HBufC8::NewL(iSuplSettings->SLPAddressfromImsi().Length());
+							hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi());	
+                            }		
+                        else
+                            {
+                            iTrace->Trace(_L("Sending End with ver for Default HSLP"), KTraceFileName, __LINE__);
+                            TInt64 slpId;
+                            TBool aServerEnabled, aSimChangeRemove, aUsageInHomeNw, aEditable;
+                            HBufC* serverAddr = HBufC::NewL(KMaxHSLPAddrLen);
+                            HBufC* iapName = HBufC::NewL(KMaxIAPLen);
+                            CleanupStack::PushL(serverAddr);
+                            CleanupStack::PushL(iapName);
+                            serverParams->Get(slpId,serverAddr->Des(),iapName->Des(),aServerEnabled, aSimChangeRemove, aUsageInHomeNw, aEditable);
+                            hslpAdress = HBufC8::NewL(serverAddr->Length());
+                            hslpAdress->Des().Copy(*serverAddr);
+            
+                            CleanupStack::PopAndDestroy(iapName);
+                            CleanupStack::PopAndDestroy(serverAddr);
+						    }
+                        CleanupStack::PopAndDestroy(serverParams);
+                        }
+                    
+	                    delete iSuplState;
+	                    iSuplState = NULL;
 						
 					    CleanupStack::PushL(hslpAdress);
+	                    ServerAddressCheckForSuplInitL();
 					    iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress);		
 					    CleanupStack::PopAndDestroy(hslpAdress);
 
@@ -3789,6 +3861,17 @@
 						iSuplState->SetMsgStateObserver(this);
 						iSuplState->GenerateMessageL();
 						iSuplSessionState = ESUPL_GENERATE;
+                    }
+                else
+                    {                                
+                    iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl);		
+                    UpdateSLPSessionIDL(SessionID);
+                    UpdateSETSessionIDL(SessionID);
+                    iSuplState->SetMsgStateObserver(this);
+                    iRequestType = ESUPL_INVALID_SESSION;
+                    iSuplSessionState = ESUPL_GENERATE;
+                    iSuplState->GenerateMessageL();
+                    }
 
 					} 
 					else