networkprotocolmodules/suplprotocolmodule/SuplProtocol/inc/suplprotocolmanager.h
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocolmodules/suplprotocolmodule/SuplProtocol/inc/suplprotocolmanager.h	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,305 @@
+// Copyright (c) 2008-2009 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 file defines the class that manages protocol aspects
+// of the SUPL Protocol Module operation.
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+ @deprecated
+*/
+
+#ifndef __SUPLPROTOCOLMANAGER_H__
+#define __SUPLPROTOCOLMANAGER_H__
+
+#include <e32base.h>
+#include <lbs/lbsnetcommon.h>
+#include <lbs/lbsnetprotocolbase.h>
+#include <etelmm.h>
+#include <lbs/lbssuplpushreceiver.h>
+#include "suplconflictmanager.h"
+#include "suplmolrfsmsession.h"
+#include "suplsessioncompleter.h"
+#include "suplnetworkinfohandler.h"
+
+class CSuplFsmSessionBase;
+class CSuplMolrFsmSession;
+class CSuplMtlrFsmSession;
+class CSuplAssistanceDataManager;
+class CSuplInit;
+
+class MSuplFsmSessionObserver;
+
+const TUint KSuplv1UidValue		= 0x10285A9C;
+
+/** We only support SUPL V1 at the moment.
+Future major revisions that are supported by this implementation will
+need their version numbers stored in the array further down.
+The definition for the version numbers can go here.
+@see CSuplProtocolManager
+*/
+const TUint8 KSupportedSuplVersion_001 = 1;
+
+/** SUPL Protocol Manager observer mixin definition.
+This interface is implemented by observers to handle calls from
+the Protocol Manager.
+This is currently only implemented by the Gateway Interface.
+@see CSuplProtocolManager
+*/
+class MSuplProtocolManagerObserver
+	{
+public:
+
+	/** Send privacy request to the observer.
+	@param aSessionId Unique session ID for this request
+	@param aEmergency Indicates an emergency request when ETrue
+	@param aPrivacy Privacy request information
+	@param aRequestInfo External requestor information
+	*/
+	virtual void PrivacyReq(const TLbsNetSessionId& aSessionId, TBool aEmergency, 
+					const TLbsNetPosRequestPrivacy& aPrivacy,
+					const TLbsExternalRequestInfo& aRequestInfo) = 0;
+
+	/** Send network-based location to the observer.
+	@param aSessionId Unique session ID
+	@param aReferenceLocation The reference location position
+	*/
+	virtual void NetworkLocationInd(const TLbsNetSessionId& aSessionId, 
+					const TPositionInfoBase& aPosInfo) = 0;
+
+	/** Send assistance data to the observer.
+	@param aGroupMask This identifies the data group relevant for this indication.
+	@param aData Assistance data set
+	@param aReason An error value for the assistance data
+	*/
+	virtual void AssistanceDataInd(const TLbsAsistanceDataGroup& aGroupMask,
+					const RLbsAssistanceDataBuilderSet& aData, TInt aReason) = 0;
+
+	/** Send location request to the observer.
+	@param aSessionId Unique session ID for this request
+	@param aEmergency Indicates an emergency request when ETrue
+	@param aType Identifies the type of request originator
+	@param aQuality The required location quality value.
+	@param aMethod The method to employ to obtain location
+	*/
+	virtual void LocationReq(const TLbsNetSessionId& aSessionId, 
+					const MLbsNetworkProtocolObserver::TLbsNetProtocolService& aType, 
+					const TLbsNetPosRequestQuality& aQuality,
+					const TLbsNetPosRequestMethod& aPosMethod) = 0;
+
+	/** Send session complete indication to the observer.
+	@param aSessionId Unique session ID
+	@param aReason An error or reason value for the session closing
+	*/
+	virtual void SessionCompleteInd(const TLbsNetSessionId& aSessionId, TInt aReason) = 0;
+
+	/** Request to get LBS capabilities from the observer.
+	@param aCapabilities Object to hold capabilities returned by LBS
+	*/
+	virtual void GetCapabilities(TLbsNetPosCapabilities& aCapabilities) = 0;
+
+	/** Send Status Update to the observer.
+	@param aActiveServiceMask The active services are represented by this mask.
+	*/
+	virtual void StatusUpdate(MLbsNetworkProtocolObserver::TLbsNetProtocolServiceMask aActiveServiceMask) = 0;
+	};
+	
+/** SUPL Protocol Manager class.
+This class manages protocol aspects of the protocol module operation.
+It employs various state machines to oversee individual protocol
+procedures and transfers requests, responses and indications to these
+state machines.
+@see CSuplMolrFsmSession
+@see CSuplMtlrFsmSession
+
+
+The protocol manager implements the MSuplFsmSessionObserver interface to
+receive messages from state machines.
+@see MSuplFsmSessionObserver
+
+The protocol manager is created by the Gateway Interface and uses the
+MSuplProtocolManagerObserver interface to communicate with it.
+@see MSuplProtocolManagerObserver
+
+@see MNetworkObserver
+
+The class also owns a CSuplAssistanceDataManager assistance data manager object.
+This is used to oversee all assistance data requests and responses.
+@see CSuplAssistanceDataManager
+*/
+NONSHARABLE_CLASS(CSuplProtocolManager): public CBase, public MSuplFsmSessionObserver,
+										 public MSuplNetworkInfoObserver,
+										 public MLbsSuplPushRecObserver
+	{
+
+	// SUPL sessions that can be conducted simultaneously. For SUPL V1 these are
+	// MTLR and MOLR. Note that LBS may request two types of MOLR sessions: one of 
+	// behalf of clients that want to use AGPS positioning and another on behalf of
+	// clients that are only interested in CellBased positioning, therefore two
+	// instance of the MOLR state machine may have to be instantiated.
+	//
+	enum TSuplSessionTypes
+	{
+		ESuplSessionMolr = 0,
+		ESuplSessionCellBasedMolr,
+		ESuplSessionMtlr,
+
+		// Keep this last (index limit for array traversal)
+		ESuplSessionLastType
+	};
+
+public:
+
+	static CSuplProtocolManager* NewL(MSuplProtocolManagerObserver& aGateway);
+	~CSuplProtocolManager();
+
+    // --------------------------- Methods called by the Network Gateway Interface -----------------------
+
+	void SelfLocationReq(const TLbsNetSessionId& aSessionId, const TLbsNetPosRequestOptionsBase& aOptions);
+	void SelfLocationCompleteInd(const TLbsNetSessionId& aSessionId, TInt aReason);
+	void SystemStatusInd(CLbsNetworkProtocolBase::TLbsSystemStatus aStatus);
+	void LocationResp(const TLbsNetSessionId& aSessionId, TInt aReason, const TPositionInfoBase& aPosInfo);
+    void PrivacyResp(const TLbsNetSessionId& aSessionId, const CLbsNetworkProtocolBase::TLbsPrivacyResponse& aResponse, TInt aReason);
+	void NetworkBasedLocationReq(const TLbsNetSessionId& aSessionId, const TLbsNetPosRequestOptionsBase& aOptions);
+	void NetworkBasedLocationCompleteInd(const TLbsNetSessionId& aSessionId, TInt aReason);
+	void AssistanceDataReq(TLbsAsistanceDataGroup aDataRequestMask);
+	void TransmitLocationReq(const TLbsNetSessionId& aSessionId, const TDesC& aDestination,
+							 TInt aPriority, const TLbsNetPosRequestOptionsBase& aOptions);
+	void TransmitLocationCompleteInd(const TLbsNetSessionId& aSessionId, TInt aReason);
+
+	// ----- MSuplFsmSessionObserver derived methods (called by state machines and state handlers)--------
+
+	MSuplProtocolManagerObserver& Gateway();
+	CSuplConnectionManager& ConnectionManager();
+	const TLbsNetSessionId& NewSessionId();
+	void ProcedureCompleteInd(const MLbsNetworkProtocolObserver::TLbsNetProtocolService& aService);
+	void LocationReq(const TLbsNetSessionId& aSessionId, 
+					 const MLbsNetworkProtocolObserver::TLbsNetProtocolService& aType, 
+					 const TLbsNetPosRequestQuality& aQuality, const TLbsNetPosRequestMethod& aPosMethod);
+	void PrivacyReq(const TLbsNetSessionId& aSessionId,
+					const TLbsNetPosRequestPrivacy& aPrivacy,
+				    const TLbsExternalRequestInfo& aRequestInfo);
+	void ProcessAssistanceData(const TLbsAsistanceDataGroup& aGroupMask, 
+							   const RLbsAssistanceDataBuilderSet& aData,const TInt& aReason,
+							   const MLbsNetworkProtocolObserver::TLbsNetProtocolService& aService);
+
+	// ---------------------------- MLbsSuplPushRecObserver derived methods -------------------------------
+
+	void OnSuplInit(TLbsSuplPushChannel aChannel, TLbsSuplPushRequestId aReqId, TDesC8& aMsg);
+
+
+	// ---------------------------- MSuplNetworkInfoObserver derived methods -------------------------------
+	
+	void NetInfoResults(const RMobilePhone::TMobilePhoneNetworkInfoV1& aNetworkInfo,
+						   const RMobilePhone::TMobilePhoneLocationAreaV1& aLocationArea);
+	void HomeMccMncResult(TUint aMcc, TUint aMnc);
+	void MsisdnResult(const TDesC& aTelNumber);
+	void CellInfoResults(const RMobilePhone::TMobilePhoneCellInfoV9& aCellInfo);
+
+private:
+
+	CSuplProtocolManager(MSuplProtocolManagerObserver& aGateway);
+	void ConstructL();
+
+	void StatusUpdate(const MLbsNetworkProtocolObserver::TLbsNetProtocolService& aService,const TBool& aIsOperationStarting);
+
+	CSuplConflictManager::TConflictResult ResolveConflict(
+					const MLbsNetworkProtocolObserver::TLbsNetProtocolService& aNewOperation, 
+					const TLbsNetPosRequestOptionsBase& aNewOperationOptions);
+	
+	void ProcessSuplInitL(TDesC8& aMsg);
+	void NetworkLocationReq(CSuplMessageBase* aSuplInit);
+	
+private:
+
+
+
+	/** Gateway interface reference.
+	*/
+	MSuplProtocolManagerObserver& iGateway;
+
+	/** Conflict Manager object pointer.
+	This object is created and owned by this class
+	*/
+	CSuplConflictManager* iConflictManager;
+
+	/** Connection Manager object pointer.
+	This object is created and owned by this class
+	*/
+	CSuplConnectionManager* iConnectionManager;
+
+	/** MO-LR state machine object pointer.
+	This object is created and owned by this class
+	*/
+	CSuplMolrFsmSession* iMoLr;
+
+	/** MT-LR state machine object pointer.
+	This object is created and owned by this class
+	*/
+	CSuplMtlrFsmSession* iMtLr;
+	
+	/** SUPL Push Receiver
+	Receives notification of SUPL messages that have
+	arrived via WAP/SMS push, specifically SUPL INIT messages.
+	This object is created and owned by this class
+	*/
+	CLbsSuplPushRec* iPushRec;
+	
+	/** Network Based Location state machine object pointer.
+	This object is created and owned by this class
+	*/
+	CSuplMolrFsmSession* iNetLoc;
+
+	/** Assistance data manager.
+	This object is created and owned by this class
+	*/
+	CSuplAssistanceDataManager* iAssistMgr;
+	
+	/** Session Completer Active Object
+	Used to asynchronously terminate session that
+	don't really require SUPL protocol usage.
+	*/
+	CSuplSessionCompleter* iSessionCompleter;
+
+	/** System Status session ID
+	This holds the latest status information reported by LBS
+	(tracking/non-tracking)
+	*/
+	CLbsNetworkProtocolBase::TLbsSystemStatus iLbsStatus;
+
+	/** Service status
+	This holds the latest service status information known by the module.
+	*/
+	MLbsNetworkProtocolObserver::TLbsNetProtocolServiceMask iActiveServiceMask;
+	
+	// New session IDs
+	TLbsNetSessionId iInternalSessionId;
+	
+	/** Active object to obtain network infomation from ETEL
+	*/
+	CSuplNetworkInfoHandler* iNetInfoHandler;
+	
+	/** Supported Major Versions Array
+	We only support SUPL V1 at the moment, the array below
+	is to allow for future supported major version numbers
+	to be recorded and tested against incoming packets.
+	*/
+	RArray<TUint8> iSupportedVersions;
+	};
+
+
+
+#endif // __SUPLPROTOCOLMANAGER_H__