diff -r 000000000000 -r 9cfd9a3ee49c networkprotocolmodules/networkprotocolmodule/LbsProtocolModule/inc/cmtlrstatemachine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkprotocolmodules/networkprotocolmodule/LbsProtocolModule/inc/cmtlrstatemachine.h Tue Feb 02 01:50:39 2010 +0200 @@ -0,0 +1,215 @@ +// 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: +// This file defines the class for the MT-LR protocol state machine. +// +// + +/** + @file + @internalComponent + @test +*/ + +#ifndef __CMTLRSTATEMACHINE_H__ +#define __CMTLRSTATEMACHINE_H__ + +#include "cstatemachinebase.h" + + +/** MT-LR protocol state machine. +This class manages the MT-LR protocol procedure and is employed when the protocol +module is required to handle interactions for a mobile terminate locate request. + +The class implements the pure virtual methods defined by CStateMachineBase. +@see CStateMachineBase + +The class also implements a timer observer interface defined by MLbsCallbackTimerObserver +@see MLbsCallbackTimerObserver +*/ +NONSHARABLE_CLASS(CMtLrStateMachine) : public CStateMachineBase, public MLbsCallbackTimerObserver + { +public: + + /** MT-LR specific states + These are specific to MT-LR and identify the current state within the + MT-LR protocol procedure. + */ + enum TMtLrState + { + /** Not valid */ + EStateNull, + /** Network request received */ + EStateNetReqRecvd, + + /** LBS Privacy session started */ + EStatePrivacySessStarted, + /** LBS Privacy response received - no measurement control yet */ + EStatePrivacyRespRecvd, + /** LBS Privacy response received - after measurement control */ + EStatePrivacyRespRecvdAfterMeasure, + /** LBS Privacy rejected - no measurement control yet */ + EStatePrivacyReject, + /** LBS Privacy response received - after measurement control */ + EStatePrivacyRejectAfterMeasure, + + /** Measurement control received from the network */ + EStateMeasureDataRecvd, + /** Network reference location sent to LBS */ + EStateNetBasedLocSent, + /** Network location request received (and sent to LBS) */ + EStateLocReqByNet, + /** Location response received from LBS */ + EStateLocRespRecvd, + /** Location response sent to network */ + EStateLocSentToNet, + + + /** LBS Client session about to close - after measure control */ + EStateClientSessToCloseAfterMeasure, + /** LBS Client session about close to then wait for measure control */ + EStateClientSessToCloseWaitMeasure, + /** LBS Client session about close to then wait for location response */ + EStateClientSessToCloseWaitLocResp, + + /** LBS Client and network sessions closed */ + EStateSessionsClosed, + + /** Protocol procedure is cancelling */ + EStateCancelling + + }; + + /** Request identifiers used when a request is queued. + */ + enum TMtLrQueue + { + /** Privacy response received from LBS */ + EQueuePrivacyResponse = 100, + /** Location response received from LBS */ + EQueueLocResponse = 200, + /** Measurement control received from network */ + EQueueMeasurementControl = 300 + }; + +public: + + static CMtLrStateMachine* NewL(MStateMachineObserver& aObserver); + virtual ~CMtLrStateMachine(); + + CMtLrStateMachine::TMtLrState CurrentState(); + + void StartMtLrReqTimer(); + void StartMeasureControlTimer(); + void StartLocRespTimer(); + + TBool IsEmergency() const; + + TBool IsPrivacyResponseHandled() const; + const TLbsExternalRequestInfo& PrivacyReqInfo() const; + const CLbsNetworkProtocolBase::TLbsPrivacyResponse& PrivacyResponseValue() const; + const TLbsNetPosRequestPrivacy& PrivacyReq() const; + TBool IsRejectedWaitingMeasureControl() const; + + void MtLrReq(const TLbsExternalRequestInfo& aReqInfo, + const TLbsNetPosRequestPrivacy& aPrivacy); + void QueueMtLrReq(const TLbsExternalRequestInfo& aReqInfo, + const TLbsNetPosRequestPrivacy& aPrivacy); + void MtLrCancelInd(TInt aReason); + void PrivacyResp(const CLbsNetworkProtocolBase::TLbsPrivacyResponse& aResponse); + + // CStateMachineBase derived methods + + void MeasurementControlInd(const TPositionInfoBase& aPosInfo, + const TLbsNetPosRequestQuality& aQuality, + const TLbsNetPosRequestMethod& aPosMethod); + void MeasurementControlErrorInd(TInt aReason); + void NetworkErrorInd(); + + // CStateMachineBase pure virtual methods + void StartQueuedMachine(); + void PreStateTransition(); + void StateTransition(); + void PostStateTransition(); + void CancelProcedure(); + void DoQueuedRequest(TInt aRequest); + + void LocationResp(TInt aReason, const TPositionInfoBase& aPosInfo); + void MeasurementControlTimeout(); + + // MLbsCallbackTimerObserver methods + + void OnTimerEventL(TInt aTimerId); + TInt OnTimerError(TInt aTimerId, TInt aError); + +protected: + + CMtLrStateMachine(MStateMachineObserver& aObserver); + +private: + + void ConstructL(); + void InitialiseProcedure(); + void ProcedureDone(); + void CompleteProcedure(); + + void StorePrivacyReq(const TLbsExternalRequestInfo& aReqInfo, + const TLbsNetPosRequestPrivacy& aPrivacy); + void StorePrivacyResp(const CLbsNetworkProtocolBase::TLbsPrivacyResponse& iPrivacyResp); + +protected: + + /** Current MT-LR state + */ + TMtLrState iCurrentState; + + /** Timer for Privacy response required from LBS + */ + CLbsCallbackTimer* iMtLrReqIssuedTimer; + + /** Timer for Measurement Control expected by LBS + */ + CLbsCallbackTimer* iMeasureControlTimer; + + /** Timer for Location response expected by network + */ + CLbsCallbackTimer* iLocRespTimer; + + /** Privacy requestor information + */ + TLbsExternalRequestInfo iPrivacyReqInfo; + + /** Privacy response + */ + CLbsNetworkProtocolBase::TLbsPrivacyResponse iPrivacyResp; + + /** Flag indicates privacy response received + */ + TBool iPrivacyResponseRecvd; + + /** Flag indicates privacy response handled + */ + TBool iPrivacyResponseHandled; + + /** Indicates if privacy response arrived before measurement control + */ + TBool iIsPrivacyRespBeforeMeasureControl; + + /** Privacy request information + */ + TLbsNetPosRequestPrivacy iPrivacyRequest; + + }; + +#endif // __CMTLRSTATEMACHINE_H__ +