diff -r 000000000000 -r 9cfd9a3ee49c networkprotocolmodules/networkprotocolmodule/LbsProtocolModule/src/cmtlrstatehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkprotocolmodules/networkprotocolmodule/LbsProtocolModule/src/cmtlrstatehandler.cpp Tue Feb 02 01:50:39 2010 +0200 @@ -0,0 +1,301 @@ +// 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 provides the implementation of the class for +// the MT-LR protocol state handler +// +// + +/** + @file + @internalTechnology + @released +*/ + +#include "cmtlrstatemachine.h" +#include "cmtlrstatehandler.h" + + +/** Static constructor. +@param aMachine A reference to the parent state machine. +@return A new instance of the CMtLrStateHandler class +*/ +CMtLrStateHandler* CMtLrStateHandler::NewL(CStateMachineBase& aMachine) + { + CMtLrStateHandler* self = new (ELeave) CMtLrStateHandler(aMachine); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +/** Standard constructor. +@param aMachine A reference to the parent state machine. +*/ +CMtLrStateHandler::CMtLrStateHandler(CStateMachineBase& aMachine) +: CStateHandlerBase(aMachine) + { + } + + +/** Standard destructor. +*/ +CMtLrStateHandler::~CMtLrStateHandler() + { + } + + +/** Private second-stage constructor. +*/ +void CMtLrStateHandler::ConstructL() + { + } + + +/** Initialise state attributes +*/ +void CMtLrStateHandler::Initialise() + { + } + + +/** Perform entry actions. +This is called from the state machine to perform any actions +associated with entering the current state. +*/ +void CMtLrStateHandler::EntryActions() + { + CNetworkInterface::TNetworkError netError = CNetworkInterface::ENone; + + // Retrieve current state and act accordingly + CMtLrStateMachine& mtlrMachine = reinterpret_cast (iMachine); + switch(mtlrMachine.CurrentState()) + { + + case CMtLrStateMachine::EStateNull: + // No action required + break; + + case CMtLrStateMachine::EStateNetReqRecvd: + // No action required + break; + + case CMtLrStateMachine::EStatePrivacySessStarted: + // Forward request to gateway + mtlrMachine.Observer().Gateway()->PrivacyReq( + mtlrMachine.SessionId(), + mtlrMachine.IsEmergency(), + mtlrMachine.PrivacyReq(), + mtlrMachine.PrivacyReqInfo()); + break; + + case CMtLrStateMachine::EStatePrivacyRespRecvd: + // Forward response to network + mtlrMachine.Observer().Network()->MtLrResp(mtlrMachine.PrivacyResponseValue()); + break; + + case CMtLrStateMachine::EStatePrivacyRespRecvdAfterMeasure: + // Forward response to network + mtlrMachine.Observer().Network()->MtLrResp(mtlrMachine.PrivacyResponseValue()); + break; + + case CMtLrStateMachine::EStatePrivacyReject: + // no action required + break; + + case CMtLrStateMachine::EStatePrivacyRejectAfterMeasure: + // no action required + break; + + case CMtLrStateMachine::EStateMeasureDataRecvd: + // No action required + break; + + case CMtLrStateMachine::EStateNetBasedLocSent: + // Send network location to gateway + mtlrMachine.Observer().Gateway()->NetworkLocationInd( + mtlrMachine.SessionId(), + mtlrMachine.ReferenceLoc()); + break; + + case CMtLrStateMachine::EStateLocReqByNet: + // Send location request to gateway + mtlrMachine.Observer().Gateway()->LocationReq( + mtlrMachine.SessionId(), + mtlrMachine.IsEmergency(), + mtlrMachine.LocReqType(), + mtlrMachine.LocReqQuality(), + mtlrMachine.PosMethod()); + // Start a timer for the anticipated response + mtlrMachine.StartLocRespTimer(); + break; + + case CMtLrStateMachine::EStateLocRespRecvd: + // No action required + break; + + case CMtLrStateMachine::EStateLocSentToNet: + // If a location response does not indicate an error then forward it to network + if (KErrNone == mtlrMachine.LocRespReason()) + { + netError = mtlrMachine.Observer().Network()->LocationResp(mtlrMachine.LocRespPosition()); + } + break; + + case CMtLrStateMachine::EStateClientSessToCloseWaitMeasure: + // Send session completion data to gateway + mtlrMachine.Observer().Gateway()->SessionCompleteInd(mtlrMachine.SessionId(), + mtlrMachine.ClientCloseReason()); + break; + + case CMtLrStateMachine::EStateClientSessToCloseAfterMeasure: + // Send session completion data to gateway + mtlrMachine.Observer().Gateway()->SessionCompleteInd(mtlrMachine.SessionId(), + mtlrMachine.ClientCloseReason()); + break; + + case CMtLrStateMachine::EStateClientSessToCloseWaitLocResp: + // Send session completion data to gateway + mtlrMachine.Observer().Gateway()->SessionCompleteInd(mtlrMachine.SessionId(), + mtlrMachine.ClientCloseReason()); + break; + + case CMtLrStateMachine::EStateSessionsClosed: + // If a location response error has been reported then forward it to network + if (KErrNone != mtlrMachine.LocRespReason()) + { + netError = mtlrMachine.Observer().Network()->LocationResp(mtlrMachine.LocRespReason()); + } + break; + + case CMtLrStateMachine::EStateCancelling: + // Is privacy response handled yet? + if (!mtlrMachine.IsPrivacyResponseHandled()) + { + mtlrMachine.Observer().Network()->MtLrResp(mtlrMachine.PrivacyResponseValue()); + } + break; + + default: + User::Panic(KProtocolModulePanic, EProtocolModuleMtLrState); + break; + } + + // Handle network-related error + if (CNetworkInterface::ENone != netError) + { + mtlrMachine.Observer().NetworkErrorReported(); + } + + } + + +/** Perform exit actions. +This is called from the state machine to perform any actions +associated with exiting from the current state. +*/ +void CMtLrStateHandler::ExitActions() + { + CNetworkInterface::TNetworkError netError = CNetworkInterface::ENone; + + // Retrieve current state and act accordingly + CMtLrStateMachine& mtlrMachine = reinterpret_cast (iMachine); + switch(mtlrMachine.CurrentState()) + { + + case CMtLrStateMachine::EStateNull: + // no action required + break; + + case CMtLrStateMachine::EStateNetReqRecvd: + // no action required + break; + + case CMtLrStateMachine::EStatePrivacySessStarted: + break; + + case CMtLrStateMachine::EStatePrivacyRespRecvd: + // no action required + break; + + case CMtLrStateMachine::EStatePrivacyRespRecvdAfterMeasure: + // no action required + break; + + case CMtLrStateMachine::EStatePrivacyReject: + // no action required + break; + + case CMtLrStateMachine::EStatePrivacyRejectAfterMeasure: + // no action required + break; + + case CMtLrStateMachine::EStateMeasureDataRecvd: + // no action required + break; + + case CMtLrStateMachine::EStateNetBasedLocSent: + // no action required + break; + + case CMtLrStateMachine::EStateLocReqByNet: + // no action required + break; + + case CMtLrStateMachine::EStateLocRespRecvd: + // no action required + break; + + case CMtLrStateMachine::EStateLocSentToNet: + // no action required + break; + + case CMtLrStateMachine::EStateClientSessToCloseWaitMeasure: + // no action required + break; + + case CMtLrStateMachine::EStateClientSessToCloseAfterMeasure: + // no action required + break; + + case CMtLrStateMachine::EStateClientSessToCloseWaitLocResp: + // no action required + break; + + case CMtLrStateMachine::EStateSessionsClosed: + // no action required + break; + + case CMtLrStateMachine::EStateCancelling: + // no action required + break; + + default: + User::Panic(KProtocolModulePanic, EProtocolModuleMtLrState); + break; + } + + // Handle network-related error + // this function is stubbed for future expansion + // coverity [dead_error_condition] + if (CNetworkInterface::ENone != netError) + { + // coverity [dead_error_line] + mtlrMachine.Observer().NetworkErrorReported(); + } + + + } + +