supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplsession.cpp
branchRCL_3
changeset 8 6fcbaa43369c
parent 6 f3bd2a0973b9
child 13 9c303455e256
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplsession.cpp	Mon Mar 15 12:42:19 2010 +0200
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplsession.cpp	Wed Mar 31 22:18:21 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,128 @@
 //
 void COMASuplSession::HandleOMASuplMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage,TRequestStatus& aStatus,TInt aSessionIdSeed,TInt aErrorCode)
 	{
-		delete iSuplState;
-		iSuplState = NULL;
+	delete iSuplState;
+	iSuplState = NULL;
 		
-		iSETSessionUniqueId = aSessionIdSeed;
-		iRunRequestStatus = & aStatus;
-	    *iRunRequestStatus = KRequestPending;
+	iSETSessionUniqueId = aSessionIdSeed;
+	iRunRequestStatus = & aStatus;
+	*iRunRequestStatus = KRequestPending;
 	    
-		TInt networkMode = 1;
-		networkMode = GetNetworkModeL();
+	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;
-            }
+	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();
+	COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsnMessage->MessageType();
 	    
-	    if(messageType == COMASuplAsnMessageBase::ESUPL_INIT && aErrorCode == KErrNone)
+	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)
 	    	{
-	    		HandleOMASuplMessageL(aDecodedAsnMessage);
+			ServerAddressCheckForSuplInitL();
 	    	}
-	    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);
-						}
+		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);
 						
-						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);
-	    			}	
+					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
-				iSuplSessionState = ESUPL_GENERATE;
-				iSuplState->GenerateMessageL();
-				 
-	    	}	
+	    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 +2082,11 @@
 //
 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()
@@ -3255,26 +3286,48 @@
 		
 			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);	
+					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());
+						CleanupStack::PushL(hslpAdress);
+						hslpAdress->Des().Copy(iSuplSettings->SLPAddressfromImsi());
+						CleanupStack::Pop(hslpAdress);	
+						}
+						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);	
 					
 				}
-		CleanupStack::PushL(hslpAdress);
-		
-		delete iSuplState;
-		iSuplState = NULL;
-		
- 		if(setStatusCode)
- 			{
-	 			iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress);		
- 			}
- 		else
- 			{
- 				iSuplState = COMASuplEndState::NewL(iOMASuplAsnHandlerBaseImpl,iEncodedSuplInit,hslpAdress );
- 			} 		
+            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);
  		
@@ -3728,81 +3781,114 @@
 // -----------------------------------------------------------------------------
 TBool COMASuplSession::CheckProtocolVersionL(COMASuplAsnMessageBase* aDecodedAsn)
 	{
-		TOMASuplVersion version;
-		COMASuplSessionID* SessionID = NULL;
-		aDecodedAsn->MessageBase(version,SessionID);
-		
-		TInt recMajor,recMinor,recServInd;
-		version.SuplVersion(recMajor,recMinor,recServInd);		
-		
-		if(recMajor == KSuplMajorVersion )
-			{
-				return  ETrue;
-			} 
-		else
-			{
-			COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsn->MessageType();
-			if(messageType == COMASuplAsnMessageBase::ESUPL_END) 
-				{
-					iTrace->Trace(_L("Received message is SUPL_END...with wrong Version.Terminating session"), KTraceFileName, __LINE__); 
-					iSessionObserver.TerminateSession(this, KErrCompletion);	
-				}
-			else
-				{
-					iTrace->Trace(_L("Received message with wrong version."), KTraceFileName, __LINE__); 
-
-					delete iSuplState;
-					iSuplMsgType = ESUPL_END;
-					iErrorStatusCode = COMASuplEnd::EVersionNotSupported;	
-					SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating);	
-
-					if(iRequestType == ESUPL_NETWORK )
-					{
-						
-						iSuplSessionState = ESUPL_INITIALIZED;
-					    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);
-
-			            // Set the SessionId.
-				        iTrace->Trace(_L("COMASuplSession::CheckProtocolVersionL Update SLP Session ID"), KTraceFileName, __LINE__);
-			            UpdateSLPSessionIDL(SessionID);
-
-				        iTrace->Trace(_L("COMASuplSession::CheckProtocolVersionL Update SET Session ID"), KTraceFileName, __LINE__);
-			            UpdateSETSessionIDL(SessionID);
-						iSuplState->SetMsgStateObserver(this);
-						iSuplState->GenerateMessageL();
-						iSuplSessionState = ESUPL_GENERATE;
-
-					} 
-					else 							
-					{
-					    iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl);
-						iSuplSessionState = ESUPL_ENCODE;
-						iSuplState->SetMsgStateObserver(this);
-						iSuplState->GenerateMessageL();
-					}
-				}	
-				
-			return EFalse;
-			}	
-
+    TOMASuplVersion version;
+    COMASuplSessionID* SessionID = NULL;
+    aDecodedAsn->MessageBase(version,SessionID);
+    
+    TInt recMajor,recMinor,recServInd;
+    version.SuplVersion(recMajor,recMinor,recServInd);		
+    
+    if(recMajor == KSuplMajorVersion )
+        {
+        return  ETrue;
+        } 
+    else
+        {
+        COMASuplAsnMessageBase::TSuplMessageType messageType = aDecodedAsn->MessageType();
+        if(messageType == COMASuplAsnMessageBase::ESUPL_END) 
+            {
+            iTrace->Trace(_L("Received message is SUPL_END...with wrong Version.Terminating session"), KTraceFileName, __LINE__); 
+            iSessionObserver.TerminateSession(this, KErrCompletion);	
+            }
+        else
+            {
+            iTrace->Trace(_L("Received message with wrong version."), KTraceFileName, __LINE__); 
+
+            delete iSuplState;
+            iSuplMsgType = ESUPL_END;
+            iErrorStatusCode = COMASuplEnd::EVersionNotSupported;	
+            SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating);	
+
+            if(iRequestType == ESUPL_NETWORK )
+                {
+                if (messageType == COMASuplAsnMessageBase::ESUPL_INIT)    
+                    {                                
+                    iSuplSessionState = ESUPL_INITIALIZED;
+                    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("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);
+
+                    // Set the SessionId.
+                    iTrace->Trace(_L("COMASuplSession::CheckProtocolVersionL Update SLP Session ID"), KTraceFileName, __LINE__);
+                    UpdateSLPSessionIDL(SessionID);
+
+                    iTrace->Trace(_L("COMASuplSession::CheckProtocolVersionL Update SET Session ID"), KTraceFileName, __LINE__);
+                    UpdateSETSessionIDL(SessionID);
+                    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 							
+                {
+                iSuplState = COMASuplEndState::NewL(iErrorStatusCode,iOMASuplAsnHandlerBaseImpl);
+                iSuplSessionState = ESUPL_ENCODE;
+                iSuplState->SetMsgStateObserver(this);
+                iSuplState->GenerateMessageL();
+                }
+            }	
+        return EFalse;
+        }	
 	}
 
 // -----------------------------------------------------------------------------