--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmgmt/networkgateway/inc/netgateway.h Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,281 @@
+// 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 the main objects in the LBS Network Gateway.
+//
+//
+
+/**
+ @file
+ @internalTechnology
+ @released
+*/
+
+#ifndef LBSNETGATEWAY_H_
+#define LBSNETGATEWAY_H_
+
+#include <e32base.h>
+#include <e32property.h>
+#include <lbs/lbsnetclasstypes.h>
+#include "lbscommoninternaldatatypes.h"
+#include <lbs/lbsnetcommon.h>
+#include <lbs/lbsnetprotocolbase.h>
+#include <lbs/lbsadmin.h>
+#include "lbsprocesssupervisor.h"
+#include "agpschannel.h"
+#include "netrequestchannel.h"
+#include "netlocationchannel.h"
+#include "netregstatusmonitor.h"
+#include "LbsLogger.h"
+#include "LbsExternalLocateLogEvent.h"
+#if defined(_DEBUG)
+#include "LbsOomListener.h"
+#endif
+#include "rlbslocmonitorsession.h"
+#include "rlbslocmonitorareapositioner.h"
+#include "cpsyrequestchannel.h"
+
+class CNetworkRegistrationStatusMonitor;
+class CRejectPrivacyRequestCallback;
+class CNetObserver;
+
+const TLbsNetSessionId KInvalidNetSessionId = TLbsNetSessionId(TUid::Uid(0x00000001), 0xACACACAC);
+
+class CProtocolModuleInfo : public CBase
+ {
+ public:
+ static CProtocolModuleInfo* NewL(TLbsProtocolModuleId aModuleId, CNetObserver* aObs, CLbsNetworkProtocolBase* aNetworkProtocol, TBool aHome, TBool aRoaming);
+ ~CProtocolModuleInfo();
+
+ TLbsProtocolModuleId ModuleUid();
+ void SetObserver(CNetObserver* aObserver);
+ CNetObserver* Observer();
+ void SetProtocolModule(CLbsNetworkProtocolBase* aProtocolModule);
+ CLbsNetworkProtocolBase* ProtocolModule();
+ void SetHome();
+ TBool Home();
+ void SetRoaming();
+ TBool Roaming();
+
+ private:
+ CProtocolModuleInfo(TLbsProtocolModuleId aModuleId, CNetObserver* aObs, CLbsNetworkProtocolBase* aNetworkProtocol, TBool aHome, TBool aRoaming);
+ void ConstructL();
+
+ private:
+ TLbsProtocolModuleId iModuleId;
+ CNetObserver* iObs;
+ CLbsNetworkProtocolBase* iNetworkProtocol;
+ TBool iHome;
+ TBool iRoaming;
+ };
+
+
+/** The main class in the Network Gateway.
+
+This class acts as the junction point where messages to/from
+the network module are translated into messsages sent to/from
+the various components of the LBS sub-system.
+
+It contains a number of active objects to service the asynchronous
+requests coming from the other LBS components via either
+publish & subscribe (RProperty) or a message queue (RMsgQueue).
+
+It also implements the observer interface from the Network Protocol
+plugin module in order to receive messages from the network.
+
+*/
+class CNetworkGateway : public CBase,
+ public MLbsNetworkProtocolObserver2,
+ public MNetworkLocationObserver,
+ public MAgpsObserver,
+ public MNetworkRequestObserver,
+ public MLbsProcessCloseDown,
+ public MLbsProcessReset,
+ public MNetworkRegistrationStatusObserver,
+ public MPsyRequestObserver
+ {
+ friend class CNetObserver;
+
+public:
+ static CNetworkGateway* NewL();
+ ~CNetworkGateway();
+
+ void SetReceivingProtocolModule(TLbsProtocolModuleId aId);
+
+protected:
+ // Process messages coming in from other LBS sub-components
+
+ //from MNetworkLocationObserver (NLM)
+ void ProcessNetworkLocationMessage(const TLbsNetLocMsgBase& aMessage);
+
+ // from MPsyRequestObserver
+ void ProcessPsyMessage(const TLbsNetInternalMsgBase& aMessage);
+
+ //from MNetworkRequestObserver
+ void ProcessNetRequestMessage(const TLbsNetInternalMsgBase& aMessage);
+
+ //from MAgpsObserver (from the AGPS manager)
+ void OnAssistanceDataRequest(TLbsAsistanceDataGroupInt aDataItemMask);
+ void OnSelfLocationRequest(const TLbsNetSessionIdInt& aSessionId, const TLbsNetPosRequestOptionsAssistanceInt& aOptions);
+ void OnSelfLocationCancel(const TLbsNetSessionIdInt& aSessionId, TInt aReason);
+ void OnSystemStatusAdvice(TBool aTracking);
+
+ // from MNetworkRegistrationStatusObserver
+ void OnNetworkRegistrationStatusChange(
+ RLbsNetworkRegistrationStatus::TLbsNetworkRegistrationStatus aStatus);
+
+protected:
+ // Process messages coming in from the network
+ // (see MLbsNetworkProtocolObserver2)
+ void GetCurrentCapabilities(TLbsNetPosCapabilities& aCapabilities) const;
+
+ void ProcessStatusUpdate(TLbsNetProtocolServiceMask aActiveServiceMask);
+
+ void ProcessPrivacyRequest(const TLbsNetSessionId& aSessionId,
+ TBool aEmergency,
+ const TLbsNetPosRequestPrivacy& aPrivacy,
+ const TLbsExternalRequestInfo& aRequestInfo);
+
+ void ProcessLocationRequest(const TLbsNetSessionId& aSessionId,
+ TBool aEmergency,
+ TLbsNetProtocolService aService,
+ const TLbsNetPosRequestQuality& aQuality,
+ const TLbsNetPosRequestMethod& aMethod);
+
+ void ProcessSessionComplete(const TLbsNetSessionId& aSessionId,
+ TInt aReason);
+
+ void ProcessAssistanceData(TLbsAsistanceDataGroup aDataMask,
+ const RLbsAssistanceDataBuilderSet& aData,
+ TInt aReason);
+
+ void ProcessAssistanceData(TLbsAsistanceDataGroup aDataMask,
+ const RLbsAssistanceDataBuilderSet& aData,
+ TInt aReason,
+ const TLbsNetSessionIdArray& aSessionIdArray);
+
+ void ProcessLocationUpdate(const TLbsNetSessionId& aSessionId,
+ const TPositionInfoBase& aPosInfo);
+
+protected:
+ // Process the close-down request from LbsRoot
+ void OnProcessCloseDown();
+
+ // Process a (test-only) request to reset the internal state
+ // of data buffers, etc. E.g. The assistance data properties.
+ void OnProcessReset();
+ void ResetAssistanceDataBufferL();
+
+
+private:
+
+ CNetworkGateway();
+ void ConstructL();
+
+ // Values representing sessions that require module info to be stored.
+ // Keep exactly in this order as we use these values to index into arrays.
+ enum _TSessionTypes
+ {
+ ESelfLocation =0,
+ ENetworkLocation,
+ EPSYLocation,
+ EX3p, // last of the SET Initiated
+ EMtlrHome,
+ EMtlrRoaming,
+ EInvalidSession
+ };
+ typedef TUint32 TSessionTypes;
+
+ // Determine the original PM for a session using the given session id.
+ CLbsNetworkProtocolBase* FindOriginalPMFromID(const TLbsNetSessionId& aId, TSessionTypes& aType);
+
+ void LoadProtocolModuleL(TLbsProtocolModuleId aModuleId);
+
+ CLbsNetworkProtocolBase* DefaultPm();
+ TBool ValidPm(TUid aPmUid);
+
+ CProtocolModuleInfo* ModuleInfo(TLbsProtocolModuleId aUid);
+ void DeleteLoadedModules();
+
+ CLbsAdmin::TGpsMode GetAdminGpsMode() const;
+
+ TBool IsProtocolModulePermitted(TUid aProtocolUid) const;
+
+ void ConvertToTLbsNetPosRequestQualityInt(
+ const TLbsNetPosRequestQuality& aSource,
+ TLbsNetPosRequestQualityInt& aDest) const;
+ void ConvertToTLbsNetPosRequestQuality(
+ const TLbsNetPosRequestQualityInt& aSource,
+ TLbsNetPosRequestQuality& aDest) const;
+ void ConvertToTLbsNetPosRequestOptions(
+ const TLbsNetPosRequestOptionsInt& aSource,
+ TLbsNetPosRequestOptions& aDest) const;
+ void ConvertToTLbsNetPosRequestOptionsAssistance(
+ const TLbsNetPosRequestOptionsAssistanceInt& aSource,
+ TLbsNetPosRequestOptionsAssistance& aDest) const;
+ void ConvertToTLbsNetPosRequestOptionsTechnology(
+ const TLbsNetPosRequestOptionsTechnologyInt& aSource,
+ TLbsNetPosRequestOptionsTechnology& aDest) const;
+private:
+ CLbsAdmin* iAdmin;
+ CNetworkLocationChannel* iNetworkLocationChannel;
+ CAgpsChannel* iAgpsChannel;
+ CNetworkRequestChannel* iNetworkRequestChannel;
+ CPsyRequestChannel* iPSYChannel;
+ CLbsCloseDownRequestDetector* iCloseDownRequestDetector;
+ CNetworkRegistrationStatusMonitor* iNetworkRegistrationStatusMonitor;
+
+ // Logging
+ RLbsLogger iLogger;
+ CLbsExternalLocateLogEvent* iExternalLogEvent;
+ TBool iSeenLocationUpdate;
+ TBool iCancelled; // Required as reason still comes into SessionComplete as KErrNone
+
+ // Monitoring home/roaming status
+ TLbsAdminProtocolModulesInfo::TLbsProtocolModuleIdArray iHomePmUidArray;
+ TInt iHomePmCount;
+
+ TLbsAdminProtocolModulesInfo::TLbsProtocolModuleIdArray iRoamingPmUidArray;
+ TInt iRoamingPmCount;
+
+ CProtocolModuleInfo* iModules[KLbsAdminMaxProtocolModuleIds*2];
+ RLbsNetworkRegistrationStatus::TLbsNetworkRegistrationStatus iRegistrationStatus;
+
+ TInt iDefaultHomePmIndex;
+ TInt iDefaultRoamingPmIndex;
+
+ TUint iPmCount;
+ TLbsAdminProtocolModuleLoadingInfo iLoadInfo;
+
+ TLbsProtocolModuleId iHomePmUid;
+ TLbsProtocolModuleId iRoamingPmUid;
+
+ /** A member used to make callbacks asynchronously */
+ CRejectPrivacyRequestCallback* iRejectPrivacyRequest;
+
+ // For all types of session, we store the module that is being used.
+ CLbsNetworkProtocolBase* iModuleForSession[EInvalidSession];
+
+ TLbsProtocolModuleId iReceivingModuleId;
+ #if defined(_DEBUG)
+ CLbsOomListener* iOomListener;
+ #endif
+
+ // Session with the location monitor
+ RLbsLocMonitorSession iLocMonSession;
+ // Subsession with the location monitor
+ RLbsLocMonitorAreaPositioner iLocMonSubSession;
+ };
+
+
+#endif // LBSNETGATEWAY_H_