locationrequestmgmt/networkrequesthandler/inc/x3phandler.h
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationrequestmgmt/networkrequesthandler/inc/x3phandler.h	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,187 @@
+// Copyright (c) 2006-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:
+// Definition of network position (reference/final) handler sub-component of the NRH
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef _X3PHANDLER_H 
+#define _X3PHANDLER_H
+
+#include <lbs/lbsloccommon.h>
+#include <lbs/lbsadmin.h>
+#include "LbsInternalInterface.h"
+#include "ngmessageswitch.h"
+#include "x3prequest.h"
+#include "agpsinterfacehandler.h"
+
+/* Observer class used to inform of the status of an ongoing X3P
+*/
+class MX3pHandlerObserver
+	{
+public:
+	/* Notification of the completion of an X3P.
+	
+	Note that the X3P may have completed because of an error, 
+	in which case aPositionInfo will not be valid.
+	
+	@param aSessionId SessionId of the completed session
+	@param aPositionInfo Contains the position sent to the network. 
+						 If there was an error during the transmit
+						 location service then this value will be
+						 invalid
+	@param aReason Reason the session was completed. KErrNone if the
+				   the session completed normally. KErrCancel if the 
+				   session was cancelled (either by the client of the
+				   network). KErrTimedOut if the session timed out
+				   before it could be completed.
+	*/
+	virtual void OnTransmitLocationComplete(const TLbsNetSessionIdInt& aSessionId,
+											const TPositionInfoBase& aPositionInfo,
+											TInt aReason) = 0;
+											
+	/* Notification of network-provided Reference Location.
+	
+	Note that aReason may show an error has happened, 
+	in which case aPositionInfo will not be valid.
+	
+	@param aSessionId SessionId of the session where the request originated.
+	@param aPositionInfo Contains the reference position provided by the network. 
+						 If there was an error during the transmit
+						 location service then this value will be
+						 invalid.
+	@param aReason Reason the location is being notified. KErrNone if the
+				   the location has been normally provided by the network.
+				   KErrCancel if the session was cancelled (either by the
+				   client of the network). KErrTimedOut if the session timed
+				   out before it could be completed.
+	*/									
+	virtual void OnReferenceLocationAvailable(const TLbsNetSessionIdInt& aSessionId,
+									  const TPositionInfoBase& aPositionInfo) = 0;
+	};
+	
+/*
+ * Defines functions called by the server's subsessions to pass on
+ * requests from an X3P client
+ */ 
+class MX3pHandlerNotifier
+	{
+public:
+	virtual TInt OnTransmitPosition(const TDesC& aDestinationId,
+									TUint aTransmitPriority,
+									const TLbsTransmitPositionOptions& aTransmitOptions,
+									TLbsNetSessionIdInt& aSessionId) = 0;
+	virtual void OnCancelTransmitPosition(const TLbsNetSessionIdInt& aSessionId) = 0;
+	
+    virtual void AddObserverL(MX3pHandlerObserver* aObserver) = 0;
+    virtual void RemoveObserver(MX3pHandlerObserver* aObserver) = 0;
+	};
+	
+/* 
+*/
+class CX3pHandler : public CBase, 
+                    public MX3pRequestObserver,
+                    public MNGMessageSwitchObserver,
+                    public MX3pHandlerNotifier
+    {
+public:
+	static CX3pHandler* NewL(CNGMessageSwitch& aMessageSwitch, MX3pStatusHandler& aX3pStatusHandler, CLbsAdmin& aLbsAdmin);
+	~CX3pHandler(); 
+    
+public: // From class MNGMessageSwitchObserver
+	void OnMTLRRequest(const TLbsNetSessionIdInt& aSessionId,
+					   TLbsNetworkEnumInt::TLbsNetProtocolServiceInt aSessionType, 
+					   TBool aIsEmergency,
+					   const TLbsExternalRequestInfo& aExternalRequestInfo,
+					   const TLbsNetPosRequestPrivacyInt& aNetPosRequestPrivacy);
+	
+	void OnSessionComplete(const TLbsNetSessionIdInt& aSessionId, TInt aReason);
+
+	void OnNetLocRequest(const TLbsNetSessionIdInt& aSessionId, 
+						 const TLbsNetPosRequestMethodInt& aNetPosMethod,
+						 TLbsNetworkEnumInt::TLbsNetProtocolServiceInt aSessionType, 
+						 TBool aIsEmergency,
+						 const TLbsNetPosRequestQualityInt& aQuality);
+	void OnNetLocResponse(const TLbsNetSessionIdInt& aSessionId,
+								 const TLbsNetPosRequestQualityInt& aQuality);
+	
+	void OnNetLocReferenceUpdate(const TLbsNetSessionIdInt& aSessionId, 
+								 const TPositionInfoBase& aPosInfo);
+
+	void OnNetLocFinalUpdate(const TLbsNetSessionIdInt& aSessionId, 
+							 const TPositionInfoBase& aPosInfo);
+    
+public: // From MX3pRequestObserver
+	void OnRequestTimeout(const TLbsNetSessionIdInt& aTimedOutRequestId);
+
+protected:
+	CX3pHandler(CNGMessageSwitch& aMessageSwitch, MX3pStatusHandler& aX3pStatusHandler, CLbsAdmin& aLbsAdmin);
+    void ConstructL();
+    
+protected: // From MX3pServerHandler 
+	TInt OnTransmitPosition(const TDesC& aDestinationId,
+							TUint aTransmitPriority,
+							const TLbsTransmitPositionOptions& aTransmitOptions,
+							TLbsNetSessionIdInt& aSessionId);
+	void OnCancelTransmitPosition(const TLbsNetSessionIdInt& aSessionId);
+	
+    void AddObserverL(MX3pHandlerObserver* aObserver);
+    void RemoveObserver(MX3pHandlerObserver* aObserver);
+    
+private:
+	// Request a new X3P
+	void TransmitLocationRequestL(const TDesC& aDestinationID,
+								  TUint aTransmitPriority, 
+								  const TLbsTransmitPositionOptions& aTransmitOptions,
+								  TLbsNetSessionIdInt& aSessionId);
+	// Cancel a current X3P session
+	void TransmitLocationCancel(const TLbsNetSessionIdInt& aSessionId);
+
+private:
+	void HandleTimedOutRequest(const TLbsNetSessionIdInt& aRequestId);
+	void HandleCompletedRequest(const TLbsNetSessionIdInt& aRequestId, TInt aReason);
+	void ActivateRequest();
+	TInt HighestPriorityIndex();
+	void RecalculateActiveIndex(const TLbsNetSessionIdInt& aSessionId);
+	TInt FindSessionById(const TLbsNetSessionIdInt& aSessionId);
+	void HandleReferenceLocation(const TLbsNetSessionIdInt& aRequestId, const TPositionInfo& aRefPosInfo);
+	void UpdateX3pStatus();
+	void GetAdminTechnologyType(TPositionModuleInfo::TTechnologyType& aMode);
+    
+private:
+	CNGMessageSwitch&			iMessageSwitch;
+	TInt						iNextSessionId;
+	CLbsAdmin&					iAdmin;
+	TInt						iActiveRequestIndex;
+	CX3pRequest*				iActiveRequest;
+	RPointerArray<CX3pRequest>	iX3pRequests;
+	RPointerArray<MX3pHandlerObserver>	iX3pObservers;
+
+	TLbsNetSessionIdInt			iTimedOutRequestId;
+	TPositionInfo				iRefPosInfo;
+	
+	TBool						iReceivedFinalNetPosInfo;
+	TPositionInfo				iFinalNetPosInfo;
+	
+	MX3pStatusHandler& iX3pStatusHandler;
+	CLbsAdmin::TLbsBehaviourMode iLbsBehaviourMode;
+	TPositionModuleInfoExtended::TDeviceGpsModeCapabilities iDeviceGpsModeCaps;	
+    };
+
+
+#endif // _X3PHANDLER_H