--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/umtsgprsscpr/spudfsm/src/cpdpfsm.cpp Fri Jun 11 14:49:29 2010 +0300
@@ -0,0 +1,431 @@
+// Copyright (c) 2004-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:
+// PDP FSM implementation
+// @internalTechnology
+//
+//
+
+
+#include "tpdpstates.h"
+#include "cpdpfsm.h"
+#include "cpdpfsmfactory.h"
+#include "spudfsmdebuglogger.h"
+#include "eteldrivernmspace.h"
+
+void CPdpFsm::ConstructL()
+ {
+ // Create EtelDriver for this ID - does nothing on ETel
+ iEtelDriverInput->CreatePdpL(iPdpId);
+
+ // we need a state
+ iState = &iPdpFsmFactory->iStateInitialised;
+ }
+
+CPdpFsm* CPdpFsm::NewL(TContextId aPdpId, CPdpFsmFactory * aPdpFsmFactory, REtelDriverInput * aEtelDriverInput)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::NewL()");
+ CPdpFsm* self = new (ELeave)CPdpFsm(aPdpId, aPdpFsmFactory, aEtelDriverInput);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CPdpFsm::CPdpFsm(TContextId aPdpId, CPdpFsmFactory * aPdpFsmFactory, REtelDriverInput * aEtelDriverInput) :
+ iPdpFsmFactory(aPdpFsmFactory),
+ iEtelDriverInput(aEtelDriverInput),
+ iPdpId(aPdpId)
+// NOTE: Both pointers are valid when called - see CPdpFsmFactory and CPdpFsmInterface.
+// No other caller is expected.
+ {
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ }
+
+CPdpFsm::~CPdpFsm()
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::~CPdpFsm()");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ }
+
+
+TInt CPdpFsm::Input (const TInt aOperation, const TInt aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Input()");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+#ifdef _DEBUG // NOT DEBUGRELEASE
+ SPUDFSMVERBOSE_LOG1(_L("State : %S"), &iState->iName);
+#endif
+
+ SPUDFSM_LOG3(_L("Pdp ID %d, State '%S', Operation '%S'"),iPdpId, &iState->iName, iState->LogOperation(*this, aOperation));
+
+ return iState->Input (*this, aOperation, aParam);
+ }
+
+
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+void CPdpFsm::Get(RPacketQoS::TQoSR5Requested& aParam)
+{
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(QoSR5Req)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ ASSERT(iQosRequested.ExtensionId() == TPacketDataConfigBase::KConfigRel5);
+ aParam = iQosRequested.RequestedQoSR5();
+}
+
+void CPdpFsm::Get(RPacketQoS::TQoSR5Negotiated& aParam)
+{
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(QoSR5Neg)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ ASSERT(iQosNegotiated.ExtensionId() == TPacketDataConfigBase::KConfigRel5);
+ aParam = iQosNegotiated.NegotiatedQoSR5();
+}
+
+#else
+// !SYMBIAN_NETWORKING_UMTSR5
+
+void CPdpFsm::Get(RPacketQoS::TQoSR99_R4Requested& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(QosReq)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ aParam = iQosRequested.RequestedQoSR99_R4();
+ }
+
+void CPdpFsm::Get(RPacketQoS::TQoSR99_R4Negotiated& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(QoSNeg)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ aParam = iQosNegotiated.NegotiatedQoSR99_R4();
+ }
+
+#endif
+// SYMBIAN_NETWORKING_UMTSR5
+
+
+void CPdpFsm::Get(TTFTInfo& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(TFTInfo)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ aParam = iTFT;
+ }
+
+void CPdpFsm::Get(TTFTOperationCode& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(TFTOperationCode)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ aParam = iTFTOperationCode;
+ }
+
+void CPdpFsm::Get(RPacketContext::TDataChannelV2& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(RPacketContext::TDataChannelV2)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ aParam = iDataChannelV2;
+ }
+
+void CPdpFsm::Get(RPacketContext::TContextConfigGPRS& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(RPacketContext::TContextConfigGPRS)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ aParam = iGPRS;
+ }
+
+void CPdpFsm::Get(RPacketContext::TContextStatus& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Get(RPacketContext::TContextStatus)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ aParam = iContextStatus;
+ }
+
+
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+void CPdpFsm::Set(const RPacketQoS::TQoSR5Requested& aParam)
+{
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(QoSR5Req)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iQosRequested = aParam;
+}
+
+void CPdpFsm::Set(const RPacketQoS::TQoSR5Negotiated& aParam)
+{
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(QoSR5Neg)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iQosNegotiated = aParam;
+}
+
+#else
+// !SYMBIAN_NETWORKING_UMTSR5
+
+
+void CPdpFsm::Set(const RPacketQoS::TQoSR99_R4Requested& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(QoSReq)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iQosRequested = aParam;
+
+ }
+
+
+void CPdpFsm::Set(const RPacketQoS::TQoSR99_R4Negotiated& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(QoSNeg)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iQosNegotiated = aParam;
+ }
+
+
+#endif
+// SYMBIAN_NETWORKING_UMTSR5
+
+
+void CPdpFsm::Set(const TTFTInfo& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(TFT)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iTFT = aParam;
+ }
+
+void CPdpFsm::Set(const TTFTOperationCode& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(TFTOperationCode)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iTFTOperationCode = aParam;
+ }
+
+void CPdpFsm::Set(const RPacketContext::TDataChannelV2& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(RPacketContext::TDataChannelV2)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iDataChannelV2 = aParam;
+ }
+
+void CPdpFsm::Set(const RPacketContext::TContextStatus& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(RPacketContext::TContextStatus)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iContextStatus = aParam;
+ }
+
+void CPdpFsm::Set(const RPacketContext::TContextConfigGPRS& aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::Set(RPacketContext::TContextConfigGPRS)");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iGPRS = aParam;
+ }
+
+void CPdpFsm::EtelInput (EtelDriver::TEtelInput aOperation)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::EtelInput");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iEtelDriverInput->Input (iPdpId, aOperation);
+ }
+
+void CPdpFsm::EtelCancel (void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::EtelCancel");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iEtelDriverInput->CancelPdp (iPdpId);
+ }
+
+void CPdpFsm::GetLastErrorCause (TInt& aLastErrorCause)
+{
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::GetLastErrorCause");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iEtelDriverInput->GetLastErrorCause (iPdpId, aLastErrorCause);
+}
+
+void CPdpFsm::SpudInput (TInt aNotification, TInt aParam)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::SpudInput");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+
+ iPdpFsmFactory->SpudInput (iPdpId, aNotification, aParam);
+ }
+
+// state change members
+
+void CPdpFsm::ChangeStateToInitialised(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToInitialised");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : Initialised"));
+
+ iState = &iPdpFsmFactory->iStateInitialised;
+ }
+
+void CPdpFsm::ChangeStateToOpeningPhone(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToOpeningPhone");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : OpeningPhone"));
+
+ iState = &iPdpFsmFactory->iStateOpeningPhone;
+ }
+
+void CPdpFsm::ChangeStateToCreatingPrimary(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToCreatingPrimary");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : CreatingPrimary"));
+
+ iState = &iPdpFsmFactory->iStateCreatingPrimary;
+ }
+
+void CPdpFsm::ChangeStateToActivatingPrimary(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToActivatingPrimary");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : ActivatingPrimary"));
+
+ iState = &iPdpFsmFactory->iStateActivatingPrimary;
+ }
+
+void CPdpFsm::ChangeStateToCreatingSecondary(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToCreatingSecondary");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : CreatingSecondary"));
+
+ iState = &iPdpFsmFactory->iStateCreatingSecondary;
+ }
+
+void CPdpFsm::ChangeStateToCreatedSecondary(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToCreatedSecondary");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : CreatedSecondary"));
+
+ iState = &iPdpFsmFactory->iStateCreatedSecondary;
+ }
+
+void CPdpFsm::ChangeStateToSettingTFT(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToSettingTFT");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : SettingTFT"));
+
+ iState = &iPdpFsmFactory->iStateSettingTFT;
+ }
+
+void CPdpFsm::ChangeStateToSettingQoS(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToSettingQoS");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : SettingQoS"));
+
+ iState = &iPdpFsmFactory->iStateSettingQoS;
+ }
+
+void CPdpFsm::ChangeStateToActivatingSecondary(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToActivatingSecondary");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : ActivatingSecondary"));
+
+ iState = &iPdpFsmFactory->iStateActivatingSecondary;
+ }
+
+void CPdpFsm::ChangeStateToOpen(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToOpen");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : Open"));
+
+ iState = &iPdpFsmFactory->iStateOpen;
+ }
+
+void CPdpFsm::ChangeStateToChangingQoS(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToChangingQoS");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : ChangingQoS"));
+
+ iState = &iPdpFsmFactory->iStateChangingQoS;
+ }
+
+void CPdpFsm::ChangeStateToChangingTFT(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToChangingTFT");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : ChangingTFT"));
+
+ iState = &iPdpFsmFactory->iStateChangingTFT;
+ }
+
+void CPdpFsm::ChangeStateToGettingNegQoS(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToGettingNegQoS");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : GettingNegQoS"));
+
+ iState = &iPdpFsmFactory->iStateGettingNegQoS;
+ }
+
+
+
+void CPdpFsm::ChangeStateToModifingActive(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToModifingActive");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : ModifingActive"));
+
+ iState = &iPdpFsmFactory->iStateModifyingActive;
+ }
+
+void CPdpFsm::ChangeStateToSuspended(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToSuspended");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : Suspended"));
+
+ iState = &iPdpFsmFactory->iStateSuspended;
+ }
+
+void CPdpFsm::ChangeStateToClosing(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToClosing");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : Closing"));
+
+ iState = &iPdpFsmFactory->iStateClosing;
+ }
+
+void CPdpFsm::ChangeStateToStopping(void)
+ {
+ SPUDFSMVERBOSE_FNLOG("CPdpFsm::ChangeStateToStopping");
+ SPUDFSMVERBOSE_LOG1(_L("Pdp ID %d"),iPdpId);
+ SPUDFSM_LOG(_L("New State : Stopping"));
+
+ iState = &iPdpFsmFactory->iStateStopping;
+ }