supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplsession.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 15 Sep 2010 12:40:28 +0300
branchRCL_3
changeset 49 10852b179f64
parent 45 6b6920c56e2f
child 55 ea98413ce11f
permissions -rw-r--r--
Revision: 201035 Kit: 201036

/*
* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:   This class provides the the implementation for CSuplSessionBase
*								 to provide the session objects for OMA SUPL Protocol Handler
*
*/



#ifndef C_COMASUPLSESSION_H
#define C_COMASUPLSESSION_H

// INCLUDES
#include <e32def.h>
#include <e32base.h>
#include <e32cmn.h> 

#include "epos_suplterminalparams.h"
#include "epos_comasupliapchangenotifier.h"
#include "epos_comasupletelnotifier.h"
#include "epos_csuplprotocolmanagerbase.h"
#include "epos_csuplsessionbase.h"
#include "lbs/epos_momasuplobserver.h"
#include "lbs/epos_comasuplpossessionbase.h"

#include "epos_comasuplasnmessagebase.h"
#include "epos_comasuplend.h"

#include "epos_momasuplconnobserver.h"
#include "epos_comasupluicompletionobserver.h"
#include "epos_comasupletelcompletionobserver.h"
#include "epos_momasuplprivacyobserver.h"
#include "epos_comasuplcompleteselfrequestor.h"
#include "epos_comasuplstate.h"
#include "epos_omasuplconstants.h"
#include "epos_comasuplsettingslauncher.h"
#include "epos_momasupltimeoutnotifier.h"
#include "epos_tomasuplposmethod.h"
#include "epos_momasupldialogtimeoutnotifier.h"
#include "epos_csuplsettingsinternal.h"

#include "EPos_CPosNetworkPrivacy.h"


class RMobilePhone;
class TOMASuplVersion;
class COMASuplSessionID;
class CSuplCommunicationManager;
class COMASuplConnRequestor;
class COMASuplTrace;
class COMASuplSettings;
class COMASuplState;
class COMASuplPosition;
class MOMASuplSessionObserver;
class TPositionInfo;
class COMASuplPosHandlerBase;
class COMASuplPosSessionBase;
class COMASuplSETCapabilities;
class COMASuplPOSRequestor;
class CSuplSettings;
class COMASuplTimeoutTimer;
class COMASuplDialogTimer;

class COMASUPLProtocolManager1;
class COMASuplAsnHandlerBase;

struct TCellIdInfo
    {
	    TInt iMNC;
	    TInt iMCC;
	    TInt iCid;
	    TInt iLac; 
    };

//class COMASuplETelNotifier;
/**
*  SUPL Session Object in OMA SUPL Protocol Handler plug-in
*  This class is responsible for processing and generating 
*  the OMA SUPL protocol messages
*
*  @lib EPosOMASUPLProtocolHandler.lib
*  @since S60 v3.1u
*/

class COMASuplSession : public CSuplSessionBase,
						public MOMASuplConnObserver,
						public MCompleteSelfRequest,
						public MOMASuplMsgStateObserver,
						public MOMASuplObserver,
						public MOMASuplPrivacyObserver,
						public MOMASuplTimeOutNotifier,
                        public MOMASuplEtelCompletionObserver,
                        public MOMASuplIapChangeNotifierObserver
{

  public:  // Constructors and destructor
    
	    // State Enums
	  enum TOMASuplSessionState
			{
				ESUPL_INITIALIZED = 0x001,
				ESUPL_CONNECTING,
				ESUPL_GENERATE,
				ESUPL_ENCODE,
				ESUPL_SEND,
				ESUPL_RECEIVED,
				ESUPL_SESSION_ERROR,
				ESUPL_TERMINATED
			};
			
			enum TOMASuplMsgType
			{
				ESUPL_START,
				ESUPL_RESPONSE,
				ESUPL_INIT,
				ESUPL_POSINIT,
				ESUPL_POS,
				ESUPL_END,
				ESUPL_AUTH_REQ,
				ESUPL_AUTH_RESP    	

			};
			
			// Request Type enum
			enum TOMASuplReqType
			{
				ESUPL_NETWORK,
				ESUPL_TERMINAL,
				ESUPL_INVALID_SESSION,
				ESUPL_NETWORK_INVALID_SESSION
			};
        
	public:  // Constructors and destructor        

			/**
			* NewL,Two-phased constructor.
			* @since S60 v3.1u
			* @param aCommManager,communication manager for sending packet to SLP CSuplCommunicationManager 
			* @param aMobilePhone,RMobilePhone
			* @param aSettings ,settings for holding HSLP IP address & IAP Id.
			* @param aRequestType,Type of request SET , NET or Invalid session
			* @param aSessionObserver,observer for this class.
			* @return None
			*/
		    static COMASuplSession* NewL(CSuplCommunicationManager& aCommManager,
																		RMobilePhone& aMobilePhone,
																		COMASuplSettings*& aSettings,
																		CSuplSettingsInternal* aSettingsStorage,
																		TOMASuplReqType aRequestType,
																		MOMASuplSessionObserver &aSessionObserver,
																		COMASuplPosHandlerBase *aPosHandler,
																		TDes& aIMSI,
																		COMASUPLProtocolManager1 &aProtoMgr,
																		TInt aIpcSessionId,
																		COMASuplAsnHandlerBase* aOMASuplAsnHandlerBase
                                    );
	private:        

			/**
			* Destructor.
			*/
			 ~COMASuplSession();

	public:

			/**
			* Delete Session Explicitly.
			* @since  S60 v3.1u
			* @param  None
			* @return None
			*/
			void DestroySession();
			/**
	        * Handles Pos handler unload.
	        * @since  S60 v3.1u
	        * @param  None
	        * @return None
	        */         
	         void PosPlugInUnloaded();

	public: //For all Observers
	
	        /**
	        * OperationComplete Method, Completion of any Async operation
	        * @since S60 v3.1u
	        * @param aErrorCode, Error code,if any
	        * @return None
	        */
			void OperationCompleteL(TInt aErrorCode);
			
			/**
	        * GetPositionComplete Method, Completion of get position opertaion from Pos Module
	        * @since S60 v3.1u
	        * @param aErrorCode, Error code,if any
	        * @return None
	        */
			void GetPositionComplete(TInt aError);
			
			
	public: 			 
			/**
			* InitializeL Method.
			* @since S60 v3.1u
			* @param aRequestID, Request Identification number.
			* @return None
			*/
			virtual void InitializeL(TInt aRequestID);

			/**
			* CleanUp Method.
			* @since S60 v3.1
			* @param None
			* @return None
			*/
			virtual void CleanUp();

			/**
			* RunSuplSession Method.
			* @since S60 v3.1
			* @param aStatus, aSynchronous service request   
			* @param aAllowedCapabilities, Capabilities of SET
			* @param aSessionIdSeed, seed value of session
			* @param aRequestID, Request Identification number.
			* @param aIsStaleCellId, indicates if this session is for a stale cell id conversion
			* @param aLocationId , contains cell id parameters for which position is to be retrieved,ownership is transferred to this object
			* @param aPrompt indicates if the user is to be prompted when making location requests
			* @param aWlanOnly ,request to connect server using wlan connection only using OCC Api's
			* @return None
			*/
			virtual void RunSuplSessionL(TRequestStatus& aStatus, TBool aFirstReq, const TDesC& aHslpAddress, TBool aFallBack, TInt aAllowedCapabilities, 
										 TInt aSessionIdSeed, TInt aRequestID = 0,TBool aIsStaleCellId = EFalse,COMASuplLocationId* aLocationId = NULL,TBool aPrompt = EFalse,TBool aWlanOnly = EFalse);
										 
			/**
			* RunSessionL, Starts the SUPL Sesssion for Terminal Initiated Location Request
			* @since S60 v3.1
			* @param       aStatus, 	  On completion, sets status of the request
			* @param       aAllowedCapabilities , Allowed capabilities of SET
			* @param 	   aSessionIdSeed, seed value of session
			* @Param:      aQop,  specifies the quality of position
			* @param       aRequestID , Request ID of Session
			* @return      None
			*/
		  virtual void  RunSuplSessionL(TRequestStatus& aStatus, TBool aFirstReq,
		                                        const TDesC& aHslpAddress, TBool aFallBack,
		  										TInt aAllowedCapabilities,TInt aSessionIdSeed,
		  										TSuplTerminalQop& aQop, TInt aRequestID = 0);
										 
			/**
			* RunInvalidSessionL Method
			* @since S60 v3.1u
			* @param aSessionId, the invalid session Id received by COMASUPLProtocolManager1
			* @return None
			*/	 
			virtual void RunInvalidSessionL(COMASuplAsnMessageBase* aDecodedMsg);

			/**
			* HandleInvalidSLPSession Method
			* @since S60 v3.1u
			* @none
			* @return None
			*/	 
			void HandleInvalidSLPSession();

			/**
			* GetPosition Method.
			* @since S60 v3.1u
			* @param aSuplPosInfo,
			* @return TInt 
			*/
			virtual TInt GetPosition(TPositionInfo& aSuplPosInfo);        									 

			virtual TInt GetServerAddressL(TDes& ahslpAddress);
			/**
			* GetPosition Method.
			* @since S60 v3.1u
			* @param aSuplPosInfo,HPositionGenericInfo
			* @return TInt 
			*/
			virtual TInt GetPosition(HPositionGenericInfo& aSuplPosInfo);        									 
			/**
			* SetEncodedSuplInitL Method.
			* @since S60 v3.1u
			* @param aEncodedSuplInit A HBufC pointer holding the
			* encoded SUPL INIT packet
			* @return none
			*/
			void SetEncodedSuplInitL(HBufC8 *aEncodedSuplInit);       									 

		    void HandleCurrentNetworkChangeL(TInt aErrorCode, TBool aHomeNw);

		    void HandleRoamingCheckCompleteL(TInt aErrorCode, TBool aHomeNw);
            void HandleIapSettingsChangeL(TInt aErrorCode);
			/**
			* SuplIpcSessionID Method. Returns IPC session ID 
			* @since S60 v3.2
			* @param None
			* @return None
			*/
			TInt SuplIpcSessionID();

			/**
			* UpdateSuplUsage Method.  Updates SUPL usage 
			* @since S60 v3.2
			* @param None
			* @return None
			*/
			void UpdateSuplUsage();

			/**
			* SettingsChanged Method.  Updates flag to indicate that
            * settings has changed 
			* @since S60 v3.2
			* @param None
			* @return None
			*/
            void SettingsChanged();
			
    protected:  // New functions
        
    protected:  //COMASuplCompleteSelfRequestor
    
			/**
			* RequestCompleted Method.,Called after self complete completed
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
	    	void RequestCompletedL();
    	
    private:
			/**
			* C++ default constructor.
			* @since S60 v3.1u
			* @param aMobilePhone,RMobilePhone 
			* @param aRequestType,Type of request SET , NET or Invalid session
			* @param aSessionObserver,observer for this class.
			* @return None
			*/
			COMASuplSession(RMobilePhone& aMobilePhone,
											TOMASuplReqType aRequestType,
											COMASuplPosHandlerBase *aPosHandler,
											MOMASuplSessionObserver& aSessionObserver,
											COMASuplSettings*& aSettings,
											COMASUPLProtocolManager1 &aProtoMgr,
											TInt aIpcSessionId,
											COMASuplAsnHandlerBase* aOMASuplAsnHandlerBase
                            );
		
			/**
			* By default Symbian 2nd phase constructor is private.
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void ConstructL(CSuplCommunicationManager &aCommManager, 
			                CSuplSettingsInternal* aSettingsStorage,
			                TDes& aIMSI);
	private:
	
			/**
			* GetLocalIPAddress Method. Reads Local IP address
			* @since S60 v3.1u
			* @param None,
			* @return TUint32, IPAddress in TUint32 form 
			*/
			TInt GetLocalIPAddress();	

			/**
			* UpdateSuplSessionIDL Method,Updates SLP sessionId,which got from SLP
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void UpdateSuplSessionIDL();	

			/**
			* UpdateSLPSessionID Method,Updates SLP sessionId,which got from SLP
			* @since S60 v3.1u
			* @param aSessionID,SLP Session id by which current sessions id to update.
			* @return None
			*/
			void UpdateSLPSessionIDL(COMASuplSessionID *aSessionID);

			/**
			* UpdateSLPSessionID Method,Updates SLP sessionId,which got from SLP
			* @since S60 v3.1u
			* @param aSessionID,SLP Session id by which current sessions id to update.
			* @return None
			*/
			void UpdateSETSessionIDL(COMASuplSessionID *aSessionID);

			/**
			* CreateCloneMessageL Method,Creates Clone of COMASuplAsnMessageBase
			* @since S60 v3.1u
			* @param @aDecodedAsnMessage,Clone to be create COMASuplAsnMessageBase
			* @return None
			*/
			void CreateCloneMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage);

			/**
			* GenerateSuplMessage Method,generates SUPL Message
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void GenerateSuplMessageL();

			/**
			* GenerateSuplStartL Method,generates SUPL_START Message
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void GenerateSuplStartL();		

			/**
			* GenerateSuplPosInitL Method,generates SUPL_POS_INIT Message
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void GenerateSuplPosInitL();		
		
			/**
			* GenerateSuplEndL Method,generates SUPL_END Message
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void GenerateSuplEndL();				
				
			/**
			* GenerateSuplPosL Method,generates SUPL_POS Message
			* @since Series 60 3.1u
			* @param None
			* @return None
			*/
			void GenerateSuplPosL();				

			/**
			* ProcessSuplResponseL Method,processes SUPL_RESPONCE Message
			* @since S60 v3.1u
			* @param None
			* @return Message to be sent to SLP
			*/
			void ProcessSuplResponseL();		

			/**
			* ProcessSuplEndL Method.
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void ProcessSuplEndL();		

			/**
			* ProcessSuplPosL Method.
			* @since S60 v3.1u
			* @param None
			* @return None
			**/
			void ProcessSuplPosL();

			/**
			* ProcessSuplInitL Method.
			* @since S60 v3.1u
			* @param None
			* @return None
			**/
			void ProcessSuplInitL();
			
			/**
			* ProcessSuplAuthResponceL Method.
			* @since S60 v3.1
			* @param None
			* @return None
			**/
			void ProcessSuplAuthResponceL();

			/**
			* CancelAllOperations Method.
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void CancelAllOperations();		

			/**
			* CopySETCapabilities Method.
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void CopySETCapabilities();	

			/**
			* ConnectionRequired Method,Checks for need of connection
			* @since S60 v3.1u
			* @param None
			* @return True if neeeded
			*/
			TBool ConnectionRequired();
			/**
			* CancelAllOperations Method.
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void CancelSession();		

			/**
			* ValidatePosition Method.
			* @since S60 v3.1u
			* @param aPosition of type COMASuplPosition
			* @return KErrNone if position is valid, KErrArgument otherwise.
			*/
            TInt ValidatePosition(COMASuplPosition *aPosition);
            
			/**
			* GetNetworkModeL Method.
			* @since S60 v3.1
			* @param None
			* @return 0 if phone is in offline mode , 1 for online mode
			*/
			TInt GetNetworkModeL();
			
			/**
			* CheckForSuplUsageL Method.  Checks for SUPL Usage in SUPL settings
			* @since S60 v3.2
			* @param None
			* @return None
			*/
			void CheckForSuplUsageL();

			/**
			* CheckForTimerExpiry Method.  Checks for timer expiry 
			* @since S60 v3.2
			* @param None
			* @return None
			*/
            void CheckForTimerExpiry();

			/**
			* CheckForPreviousResultL Method.  Checks for the previous request result
			* @since S60 v3.2
			* @param None
			* @return None
			*/
			void CheckForPreviousResultL();
		
	private: //Error Handling functions

			/**
			* HandleSuplError Method. Handles all the errors occurs while processing session.
			* @since S60 v3.1u
			* @param aErr,error code 
			* @return None,
			*/
			void HandleSuplErrorL(TInt aErr);	

			/**
			* HandleSuplError Method. Handles all the errors occurs while generating message for session.
			* @since S60 v3.1u
			* @param aErr,error code 
			* @return None,
			*/
			void HandleGenerationErrorL(TInt aErr);

			/**
			* HandleSuplError Method. Handles all the errors occurs while initilization of session.
			* @since S60 v3.1u
			* @param aErr,error code 
			* @return None,
			*/
			void HandleInitilizationErrorL(TInt aErr);

			/**
			* HandleSuplError Method. Handles all the errors occurs while connection to SLP.
			* @since S60 v3.1u
			* @param aErr,error code 
			* @return None,
			*/
			void HandleConnectionErrorL(TInt aErr);

			/**
			* HandleSuplError Method. Handles all the errors occurs while encoding message.
			* @since S60 v3.1u
			* @param aErr,error code 
			* @return None,
			*/
			void HandleEncodingErrorL(TInt aErr);

			/**
			* HandleSuplError Method. Handles all the errors occurs while sending packet to SLP.
			* @since S60 v3.1u
			* @param aErr,error code 
			* @return None,
			*/
			void HandleSendErrorL(TInt aErr);
				
			/**
			* HandleSuplError Method. Handles all the errors occurs while receiving packet.
			* @since S60 v3.1u
			* @param aErr,error code 
			* @return None,
			*/
			void HandlePacketsErrorL(TInt aErr);

			/**
			* HandleSuplInitErrorL Method. Handles all the errors during processing of SUPL_INIT.
			* @since S60 v3.1u
			* @param aErr,error code 
			* @return None,
			*/
			void HandleSuplInitErrorL(TInt aErr);

			/**
			* StartInvalidSession Method,creates invalid session.
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void StartInvalidSessionL();		
			
	public: //Handle error 
	
			/* HandleInvalidParameterErrorL Method. 
			* @since S60 v3.1u
			* @param aDecodedAsnMessage, Decoded ASN message, received from SLP  
			* @return None
			*/
			void HandleInvalidParameterErrorL(COMASuplAsnMessageBase* aDecodedAsnMessage);
			
			/* HandleWrongSuplVersion Method. 
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void HandleWrongSuplVersionL();
			
			/* HandleInvalidMessageL Method. 
			* @since S60 v3.1
			* @param None
			* @return None
			*/
			void HandleInvalidMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage);
			
			/* HandleInvalidMessageLengthL Method. 
			* @since S60 v3.1
			* @param None
			* @return None
			*/
			void HandleInvalidMessageLengthL();
	public:
	
			/**
			* SetSETSessionID Method,Sets SET SessionID of Session
			* @since S60 v3.1u
			* @param aSessionId, unique no to assign to SET session id.
			* @return None
			*/
			void SetSETSessionID(TInt aSessionId);

			/**
			* SuplSessionID Method. returns SessionID of Session
			* @since S60 v3.1u
			* @param None,
			* @return SETSessionID of session
			*/
			COMASuplSessionID* SuplSessionID() const;

			/**
			* HandleOMASuplMessage Method. 
			* @since S60 v3.1u
			* @param aDecodedAsnMessage, Decoded ASN message, received from SLP  
			* @return None
			*/
			void HandleOMASuplMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage);
			
			/**
			* HandleOMASuplMessage Method. 
			* @since S60 v3.1u
			* @param aDecodedAsnMessage, Decoded ASN message, received from SLP  
			* @return None
			*/
			void HandleOMASuplMessageL(COMASuplAsnMessageBase* aDecodedAsnMessage,TRequestStatus& aStatus,TInt aSeedValue,TInt aErrorCode);

			/**
			* RequestType Method. 
			* @since S60 v3.1u
			* @param None
			* @return Two possible values - Network Initiated Request, Terminal Initiated Request
			*/
			COMASuplSession::TOMASuplReqType RequestType();

			/**
			* SessionEnd Method,Ends the session
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void SessionEnd();
				
			/**
			* CompleteSession Method.
			* @since S60 v3.1u
			* @param aCompletionCode, Request completion code
			* @return None
			*/
			void CompleteSession(TInt aCompletionCode);
			
			/**
			* CancelRunSession Method,cancels session
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			virtual void CancelRunSession();
			
			virtual void CancelTriggerSession();
			/**
			* SetConfigurationParameters Method,Sets different setting from CR
			* @since S60 v3.1u
			* @param aUT1_StartTimer, SUPL_START Timer value
			* @param aUT2_PosInitTimer, SUPL_POS_INIT Timer value
			* @param aUT3_PosTimer, SUPL_POS Timer value
			* @param aPrivacyTimer, privacy timer value
			* @param aSLPMode, Mode of SLP Proxy Non Proxy
            * @param aSuplUsage, SUPL Usage mode
            * @param aPersistFailTimer, Timer value for persistent failure
			* @return None
			*/
			void SetConfigurationParameters(TInt& aUT1_StartTimer,TInt& aUT2_PosInitTimer,
											TInt& aUT3_PosTimer,  TInt& aPrivacyTimer, 
											TInt& aSLPMode,
                                            TInt& aSuplUsage,
                                            TInt& aPersistFailTimer,
                                            TInt& aSuplInitTimeOut);
			/**
			* CloseAllOperations Method,Closes session
			* @since S60 v3.1
			* @param None
			* @return None
			*/
			void CloseAllOperations();
			
	public://MOMASuplObserver			

			/**
			* SuplVersion Method.
			* @since S60 v3.1u
			* @param None
			* @return TReal,version of protocol
			*/
			TReal SuplVersion();
			
			/**
			* TerminateSession Method,terminates session
			* @since S60 v3.1u
			* @param None
			* @return None
			*/
			void TerminateSession();
		
	public:	//MOMASuplPrivacyObserver
			/**
			* PrivacyCheckCompleteL Method.
			* @since S60 3.1u
			* @param aErrorCode, error code - Specifying whether accepted or rejected
			* @return None
			*/ 
			void PrivacyCheckCompleteL(TInt aErrorCode);
			
	public:
			/**
			* CheckProtocolVersion, Checks protocol version
			* @since S60 v3.1          
			* @param      None. 
			* @return     True if version of received SUPL message is matching with supported version.
			*/
			TBool CheckProtocolVersionL(COMASuplAsnMessageBase* aDecodedAsn);
    private: // UI
			/**
			* SessionUIFlag, sets session UI flag 
			* @since S60 v3.2          
			* @param      None. 
			* @return     None 
			*/
			void SetSessionUIFlag(TBool aValue);
    public:
            TBool GetSessionUIFlag();            
			
	private: //internal			

			/**
			* SetPOSMsgPluginState Method,Sets state of POS Session
			* @since S60 v3.1u
			* @param aSuplMsgState,state of message
			* @return None
			*/
			void SetPOSMsgPluginState(COMASuplPosSessionBase::TOMASuplMsgState aSuplMsgState);
			
			/**
			* IsLastPOSMessage Method,Checks for last message from plugin
			* @since S60 v3.1u
			* @param aSuplMsgState,state of message
			* @return None
			*/
			TBool IsLastPOSMessage();
			
			/**
			* IsSegmentationDone Method,Checks segmentation
			* @since S60 v3.1
			* @param None
			* @return TBool,ETrue it is done by posstate class
			*/
			TBool IsSegmentationDone();
			
			/**
			* IsGenerationInProgress Method,checks about generation status of message
			* @since S60 v3.1u
			* @param None
			* @return TBool
			*/
			TBool IsGenerationInProgress();
			
			/**
			* LogEndTime Method,logs end  time, if in Qop , delay is present
			* @since S60 v3.1
			* @param None
			* @return None
			*/
			void LogEndTime();
			
			/**
			* SetIMSIL Method, Updates Session ID with IMSI if specified
			* @since S60 v3.1
			* @param None
			* @return TInt, error code 
			*/
			void SetIMSI();
			
			/**
			* IsIMSIVariant Method,checks if IMSI needs to be included in SUPL message
			* @since S60 v3.1u
			* @param None
			* @return TBool
			*/
			TBool IsIMSIVariant();
			
			/**
			* GetRemainingPosPayloadL Method,Retrives if any pos payload is remainig dutin POS_INIT message
			* @since S60 v3.1
			* @param None
			* @return Pospayload which needs to send
			*/
			COMASuplPosPayload* GetRemainingPosPayloadL();
			
			/**
			* IsWholeMessageSent LMethod,
			* @since S60 v3.1
			* @param None
			* @return ETrue 
			*/
			TBool IsWholeMessageSentL();

			/**
			* IsUIDisplayedL Method,
			* @since S60 v3.1
			* @param None
			* @return TBool 
			*/
            TBool IsUIDisplayedL();
            /**
			* SetApproriateSETSessionId  Method,Sets the appropriate session id
			* @since S60 v3.2
			* @param None
			* @return TInt 
			*/
            TInt SetApproriateSETSessionId();

            /**
			* CheckForPersistentFailure Method, checks for persistent failure
			* @since S60 v3.2
			* @param None
			* @return TInt 
			*/
            void CheckForPersistentFailure(TInt aErrorCode);
            
			/**
			* Timeout Notifier Method.
			* @since Series 60 3.1M
			* @param None
			* @return None
			*/
			virtual void TimerExpiredL();
            
			
    public:  // Usage dialog
            void SetSuplUsageFlag();
            void ReSetSuplUsageFlag();
            TBool GetSuplUsageFlag();
            void StartUsageDialogLaunchL();
            TBool IsEtelNotifySet();
            TBool IsEtelRoamingSet();
            TBool HasMeLaunchedUsageDialog();
			TUint GetPortNumUsed();
	 private:
	 
	 	void StoreCurrentCellIDL(HPositionGenericInfo& aSuplPosInfo);		
	 	TInt ServerAddressCheckForSuplInitL();
	 	
	private:    // Data


            COMASuplIapNotifier* iIapNotifier;
    
			// Asynchronous request 
			TRequestStatus* iRunRequestStatus; 

			// Request ID of SuplSession
			TInt iRequestID;

			//Supl Version
			TOMASuplVersion iSuplVersion;

			//SET capabilities
			COMASuplSETCapabilities* iSETCapabilities;
			
			//Allowed  capabilities
			TInt iAllowedCapabilities;
			
			//State of Supl Session
			TOMASuplSessionState iSuplSessionState;

			// Message Type
			TOMASuplMsgType iSuplMsgType;

			//Session ID
			COMASuplSessionID* iSuplSessionId; 

			// Connection Requestor
			COMASuplConnRequestor *iConnRequestor;

			//Connected RMobilePhone session
			RMobilePhone& iMobilePhone;
			
			//Type of Request SET OR NET
			TOMASuplReqType iRequestType;

			//Encoded Buffer
			HBufC8* iEncodedBuffer; 

			//Trace Utility
			COMASuplTrace* iTrace;

			//Unique Identifier, holding id of SET session.
			TInt iSETSessionUniqueId;

			//Decoded ASN message
			COMASuplAsnMessageBase* iDecodedAsnMessage;

			//Self Request Completor
			COMASuplCompleteSelfRequestor* iCompleteSelfRequestor;

			//State holder
			COMASuplState *iSuplState;

			// Position for Terminal Initiated Cases
			COMASuplPosition* iPosition;

			//Error Code for SUPL END
			COMASuplEnd::TOMASuplStatusCode iErrorStatusCode;
			
			//POS Handler
			COMASuplPosHandlerBase* iPosHandler;

			//POS Session 
			COMASuplPosSessionBase* iPOSSession; 

			//POS Requestor
			COMASuplPOSRequestor* iOMASuplPOSRequestor;

        	// Reference to CSuplSettingsInternal
        	CSuplSettingsInternal* iSuplStorageSettings;
			
			// HSLP Address
			const TDesC8& iHSLPAddress;	
			
			// This buffer is used only in case we get a SUPL INIT
			// packet from the SLP. This is used to compute the
			// VER of the Encoded SUPL INTI packet
			HBufC8* iEncodedSuplInit;
			
			// Container to store IMSI
			RBuf iIMSI;
			
			// Session Observer for TerminateSession
			MOMASuplSessionObserver &iSessionObserver;

        	// Reference to OMA Supl Settings
        	COMASuplSettings*& iSuplSettings;
			
            // Reference to protocol manager to invoke settings UI
            COMASUPLProtocolManager1 &iProtocolManager;
			
			//UT1 Timer for SUPL_START
			TInt iUT1_StartTimer;

			//UT2 Timer for SUPL_POS_INIT
			TInt iUT2_PosInitTimer;

			//UT3 Timer for SUPL_POS
			TInt iUT3_PosTimer;

			//Privacy Timer
			TInt iPrivacyTimer;

			//SET Mode 
			TInt iSETMode;
			
            //SUPL Usage configuration
            TInt iSuplUsage;

            // Timer for persistent failure
            TInt iPersistFailTimer;

			TBool iIsQoPPresent;
			
			//Received QoP from Client Lib
			TSuplTerminalQop iClientQop;
			
						
			TTime iSessionStartTime;
			
			TTime iSessionEndTime;
			//Is POS message is First one or Not.
			TBool iIsFirstPOSMessage;

            // UI Flag
            TBool iUIFlag;
            
	      	TBool iSessionIDFlag;
	            
			//Decoded ASN message
			COMASuplAsnMessageBase* iDecodedNETAsnMessage;

			TInt iNETErrorCode;
            TInt iRequestId;
			
			//Timeout Timer
			COMASuplTimeoutTimer* iTimer;
	
            //Roaming indicator
            TBool iRoaming;

            //Previous request result
            TInt  iPrevUsageResult;
            //Change flag to track if any change has happened
            TInt    iChanged;

            TInt  iIpcSessionId;

            TBool iNwInitError;

            TInt iNwInitCompletionCode;

            TBool iPersistFail;

            TInt iPrevReqResult;

			TInt iFailedCaps;

            TBool iCapsFail;

            TTime iFailTime;
            TBool iUsageDialog;

            TBool iUsageHomeNW;

            TOMASuplPosMethod iPosMethod;
            
            TBool iEtelNotify;

            TBool iEtelRoamingCheck;

            TCellIdInfo iCurrentCellId;

            TBool isTimeoutDialogTimerStarted;
            TInt iSuplInitTimeOut;
            TTime iDlgStartTime;
            TTimeIntervalSeconds iDiffTime;
            TBool iIapDialogShown;
            TBool iIapDlgTimerExpired;
            HBufC8* iHslpAddress;
            
            TInt iSessionCompletionCode;
            TInt iNetworkType;
            
            COMASuplAsnHandlerBase* iOMASuplAsnHandlerBaseImpl; 
            
            // Network privacy handle.Ownership is with this object
            CPosNetworkPrivacy* iNetworkPrivacy;
            //Stale cell id which for which position is to be retrieved.Ownership is with this object
            COMASuplLocationId* iStaleLocationId;
			//indicates if this session is for a stale cell id conversion
            TBool   iIsStaleLocIdPresent;
			//indicates if the user needs to be prompted when making a location request
            TBool   iStaleLocIdPrompt;
            TBool iIhaveLaunchedUsagedialog;

            TUint iPortNum;
            
            //To indicate WLAN connection for OCC
            TBool iWlanOnly; 
    };

#endif      // C_COMASUPLSESSION_H
            
// End of File