telephonyprotocols/umtsgprsscpr/spudfsm/src/tpdpstate.cpp
changeset 42 3adadc800673
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/umtsgprsscpr/spudfsm/src/tpdpstate.cpp	Fri Jun 11 14:49:29 2010 +0300
@@ -0,0 +1,269 @@
+// 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:
+// Base class to the various states required in Spud FSM. Each real state is derived from
+// this base class. The bass class is never instanciated but it's base functionality is 
+// used for default handling in the most part.
+// 
+//
+
+/**
+ @file 
+ @internalComponent
+*/
+ 
+#include <networking/umtsnifcontrolif.h>
+#include "cpdpfsmfactory.h"
+#include "tpdpstate.h"
+#include "spudfsmdebuglogger.h"
+#include "pdpfsmnmspace.h"
+#include "reteldriverinput.h"
+#include "PDPFSM.h"
+
+// Literals for TPdpState::LogOperation
+
+_LIT(KPdpFsm_EPhoneOpened, "PdpFsm::EPhoneOpened");
+_LIT(KPdpFsm_EPhoneOpenedFailed, "PdpFsm::EPhoneOpenedFailed");
+_LIT(KPdpFsm_EQoSSet, "PdpFsm::EQoSSet");
+_LIT(KPdpFsm_EQoSSetFailed, "PdpFsm::EQoSSetFailed");
+_LIT(KPdpFsm_ETftSet, "PdpFsm::ETftSet");
+_LIT(KPdpFsm_ETftSetFailed, "PdpFsm::ETftSetFailed");
+_LIT(KPdpFsm_ETftChanged, "PdpFsm::ETftChanged");
+_LIT(KPdpFsm_ETftChangedFailed, "PdpFsm::ETftChangedFailed");
+_LIT(KPdpFsm_E1ryPdpContextCreated, "PdpFsm::E1ryPdpContextCreated");
+_LIT(KPdpFsm_E1ryPdpContextCreatedFailed, "PdpFsm::E1ryPdpContextCreatedFailed");
+_LIT(KPdpFsm_E2ryPdpContextCreated, "PdpFsm::E2ryPdpContextCreated");
+_LIT(KPdpFsm_E2ryPdpContextCreatedFailed, "PdpFsm::E2ryPdpContextCreatedFailed");
+_LIT(KPdpFsm_EPdpActivated, "PdpFsm::EPdpActivated");
+_LIT(KPdpFsm_EPdpActivatedFailed, "PdpFsm::EPdpActivatedFailed");
+_LIT(KPdpFsm_EContextDeleted, "PdpFsm::EContextDeleted");
+_LIT(KPdpFsm_EContextDeletedFailed, "PdpFsm::EContextDeletedFailed");
+_LIT(KPdpFsm_EQoSProfileChangeNetwork, "PdpFsm::EQoSProfileChangeNetwork");
+_LIT(KPdpFsm_EConfigGPRSChangeNetwork, "PdpFsm::EConfigGPRSChangeNetwork");
+_LIT(KPdpFsm_EPacketStatusChangeNetwork, "PdpFsm::EPacketStatusChangeNetwork");
+_LIT(KPdpFsm_EPdpContextModified, "PdpFsm::EPdpContextModified");
+_LIT(KPdpFsm_EPdpContextModifiedFailed, "PdpFsm::EPdpContextModifiedFailed");
+_LIT(KRPacketContext_EStatusUnknown, "RPacketContext::EStatusUnknown");
+_LIT(KRPacketContext_EStatusInactive, "RPacketContext::EStatusInactive");
+_LIT(KRPacketContext_EStatusActivating, "RPacketContext::EStatusActivating");
+_LIT(KRPacketContext_EStatusActive, "RPacketContext::EStatusActive");
+_LIT(KRPacketContext_EStatusDeactivating, "RPacketContext::EStatusDeactivating");
+_LIT(KRPacketContext_EStatusSuspended, "RPacketContext::EStatusSuspended");
+_LIT(KRPacketContext_EStatusDeleted, "RPacketContext::EStatusDeleted");
+_LIT(KEContextStatusChangeNetwork_Unknown, "EContextStatusChangeNetwork_Unknown");
+_LIT(KRPacketService_EStatusUnattached, "RPacketService::EStatusUnattached");
+_LIT(KRPacketService_EStatusAttached, "RPacketService::EStatusAttached");
+_LIT(KRPacketService_EStatusActive, "RPacketService::EStatusActive");
+_LIT(KRPacketService_EStatusSuspended, "RPacketService::EStatusSuspended");
+_LIT(KEServiceStatusChangeNetwork_Unknown, "EServiceStatusChangeNetwork_Unknown");
+_LIT(KSpudMan_EContextCreate, "SpudMan::EContextCreate");
+_LIT(KSpudMan_EContextDelete, "SpudMan::EContextDelete");
+_LIT(KSpudMan_EContextActivate, "SpudMan::EContextActivate");
+_LIT(KSpudMan_ERegisterEventHandler, "SpudMan::ERegisterEventHandler");
+_LIT(KSpudMan_EContextSetEvents, "SpudMan::EContextSetEvents");
+_LIT(KSpudMan_EContextQoSSet, "SpudMan::EContextQoSSet");
+_LIT(KSpudMan_EContextModifyActive, "SpudMan::EContextModifyActive");
+_LIT(KSpudMan_EContextTFTModify, "SpudMan::EContextTFTModify");
+_LIT(KSpudMan_ENifSetDefaultQoS, "SpudMan::ENifSetDefaultQoS");
+_LIT(KSpudMan_EStartupPrimaryContextCreation, "SpudMan::EStartupPrimaryContextCreation");
+_LIT(KSpudMan_ESetDefaultQoS, "SpudMan::ESetDefaultQoS");
+_LIT(KSpudMan_ECreatePrimaryPDPContext, "SpudMan::ECreatePrimaryPDPContext");
+_LIT(KSpudMan_ECreateSecondaryPDPContext, "SpudMan::ECreateSecondaryPDPContext");
+_LIT(KSpudMan_ESuspend, "SpudMan::ESuspend");
+_LIT(KSpudMan_EResume, "SpudMan::EResume");
+_LIT(KSpudMan_E1ryPdpActivate, "SpudMan::E1ryPdpActivate");
+_LIT(KSpudMan_ECancelContextCreate, "SpudMan::ECancelContextCreate");
+_LIT(KSpudMan_EGetNegQoS, "SpudMan::EGetNegQoS");
+_LIT(KUnknown, "Unknown");
+
+
+TPdpState::TPdpState()
+#ifdef _DEBUG
+	: iName()
+#endif		
+{
+	SPUDFSMVERBOSE_FNLOG("TPdpState::TPdpState()");
+}
+
+TInt TPdpState::Input (CPdpFsm& aFsm, const TInt aOperation, const TInt /*aErrorCode*/)
+{
+	SPUDFSMVERBOSE_FNLOG("TPdpState::Input()");
+	SPUDFSMVERBOSE_LOG1(_L("aOperation : %d"), aOperation);
+
+	if (aOperation == PdpFsm::EContextDeleted || aOperation == SpudMan::EContextDelete ||
+		(aOperation == PdpFsm::EContextStatusChangeNetwork && aFsm.iContextStatus == RPacketContext::EStatusDeleted))
+	{
+		aFsm.ChangeStateToClosing();
+		EtelDriverCancel (aFsm);
+		EtelDriverInput(aFsm, EtelDriver::EContextDelete);
+		return KErrNone;
+	}
+
+	SPUDFSMVERBOSE_LOG1(_L("!!! Unhandled Operation (%S)!!!"), LogOperation (aFsm, aOperation));
+	return KErrGeneral;
+}
+
+void TPdpState::EtelDriverInput (CPdpFsm& aFsm, EtelDriver::TEtelInput aOperation)
+{
+	SPUDFSMVERBOSE_LOG1(_L("EtelDriverInput : %d"), aOperation);
+	aFsm.EtelInput (aOperation);
+}
+
+void TPdpState::EtelDriverCancel (CPdpFsm& aFsm)
+{
+	SPUDFSMVERBOSE_LOG(_L("EtelDriverCancel"));
+	aFsm.EtelCancel();
+}
+
+void TPdpState::SpudManNotify (CPdpFsm& aFsm, TInt aNotification, TInt aParam)
+{
+	SPUDFSMVERBOSE_LOG1(_L("SpudManNotify : %d"), aNotification);
+	aFsm.SpudInput (aNotification, aParam);
+}
+
+const TDesC * TPdpState::LogOperation (CPdpFsm& aFsm, TInt aOperation)
+{
+	switch (aOperation)
+	{
+	// ETel notifications
+	case PdpFsm::EPhoneOpened:
+		return &KPdpFsm_EPhoneOpened;
+	case PdpFsm::EPhoneOpenedFailed:
+		return &KPdpFsm_EPhoneOpenedFailed;
+	case PdpFsm::EQoSSet:
+		return &KPdpFsm_EQoSSet;
+	case SpudMan::EGetNegQoS:
+		return &KSpudMan_EGetNegQoS;
+	case PdpFsm::EQoSSetFailed:
+		return &KPdpFsm_EQoSSetFailed;
+	case PdpFsm::ETftSet:
+		return &KPdpFsm_ETftSet;
+	case PdpFsm::ETftSetFailed:
+		return &KPdpFsm_ETftSetFailed;
+	case PdpFsm::ETftChanged:
+		return &KPdpFsm_ETftChanged;
+	case PdpFsm::ETftChangedFailed:
+		return &KPdpFsm_ETftChangedFailed;
+	case PdpFsm::E1ryPdpContextCreated:
+		return &KPdpFsm_E1ryPdpContextCreated;
+	case PdpFsm::E1ryPdpContextCreatedFailed:
+		return &KPdpFsm_E1ryPdpContextCreatedFailed;
+	case PdpFsm::E2ryPdpContextCreated:
+		return &KPdpFsm_E2ryPdpContextCreated;
+	case PdpFsm::E2ryPdpContextCreatedFailed:
+		return &KPdpFsm_E2ryPdpContextCreatedFailed;
+	case PdpFsm::EPdpActivated:
+		return &KPdpFsm_EPdpActivated;
+	case PdpFsm::EPdpActivatedFailed:
+		return &KPdpFsm_EPdpActivatedFailed;
+	case PdpFsm::EContextDeleted:
+		return &KPdpFsm_EContextDeleted;
+	case PdpFsm::EContextDeletedFailed:
+		return &KPdpFsm_EContextDeletedFailed;
+	case PdpFsm::EPdpContextModified:
+		return &KPdpFsm_EPdpContextModified;
+	case PdpFsm::EPdpContextModifiedFailed:
+		return &KPdpFsm_EPdpContextModifiedFailed;
+		
+//		
+//	// network signals
+	case PdpFsm::EQoSProfileChangeNetwork:
+		//RPacketQoS::TQoSR99_R4Negotiated
+		return &KPdpFsm_EQoSProfileChangeNetwork;
+	case PdpFsm::EConfigGPRSChangeNetwork:
+		//RPacketContext::TContextConfigGPRS
+		return &KPdpFsm_EConfigGPRSChangeNetwork;
+	case PdpFsm::EContextStatusChangeNetwork:
+		switch (aFsm.iContextStatus)
+		{
+		case RPacketContext::EStatusUnknown:
+			return &KRPacketContext_EStatusUnknown;
+		case RPacketContext::EStatusInactive:
+			return &KRPacketContext_EStatusInactive;
+		case RPacketContext::EStatusActivating:
+			return &KRPacketContext_EStatusActivating;
+		case RPacketContext::EStatusActive:
+			return &KRPacketContext_EStatusActive;
+		case RPacketContext::EStatusDeactivating:
+			return &KRPacketContext_EStatusDeactivating;
+		case RPacketContext::EStatusSuspended:
+			return &KRPacketContext_EStatusSuspended;
+		case RPacketContext::EStatusDeleted:
+			return &KRPacketContext_EStatusDeleted;
+		}
+		return &KEContextStatusChangeNetwork_Unknown;
+	case PdpFsm::EServiceStatusChangeNetwork:
+		{
+		RPacketService::TStatus ns;
+		
+			aFsm.iPdpFsmFactory->iPdpFsmInterface->Get(ns);
+
+			switch (ns)
+			{
+			case RPacketService::EStatusUnattached:
+				return &KRPacketService_EStatusUnattached;
+			case RPacketService::EStatusAttached:
+				return &KRPacketService_EStatusAttached;
+			case RPacketService::EStatusActive:	
+				return &KRPacketService_EStatusActive;
+			case RPacketService::EStatusSuspended:
+				return &KRPacketService_EStatusSuspended;
+			}
+		}
+		return &KEServiceStatusChangeNetwork_Unknown;
+	case PdpFsm::EPacketStatusChangeNetwork: // not used in eteldriver
+		return &KPdpFsm_EPacketStatusChangeNetwork;
+		
+	// spudman signals
+	case SpudMan::EContextCreate:
+		return &KSpudMan_EContextCreate;
+	case SpudMan::EContextDelete:
+		return &KSpudMan_EContextDelete;
+	case SpudMan::EContextActivate:
+		return &KSpudMan_EContextActivate;
+	case SpudMan::ERegisterEventHandler:
+		return &KSpudMan_ERegisterEventHandler;
+	case SpudMan::EContextSetEvents:
+		return &KSpudMan_EContextSetEvents;
+	case SpudMan::EContextQoSSet:
+		return &KSpudMan_EContextQoSSet;
+	case SpudMan::EContextModifyActive:
+		return &KSpudMan_EContextModifyActive;
+	case SpudMan::EContextTFTModify:
+		return &KSpudMan_EContextTFTModify;
+	case SpudMan::ENifSetDefaultQoS:
+		return &KSpudMan_ENifSetDefaultQoS;
+	case SpudMan::EStartupPrimaryContextCreation:
+		return &KSpudMan_EStartupPrimaryContextCreation;
+
+	case SpudMan::ESetDefaultQoS:
+		return &KSpudMan_ESetDefaultQoS;
+	case SpudMan::ECreatePrimaryPDPContext:
+		return &KSpudMan_ECreatePrimaryPDPContext;
+	case SpudMan::ECreateSecondaryPDPContext:
+		return &KSpudMan_ECreateSecondaryPDPContext;
+	case SpudMan::ESuspend:
+		return &KSpudMan_ESuspend;
+	case SpudMan::EResume:
+		return &KSpudMan_EResume;
+	case SpudMan::E1ryPdpActivate:
+		return &KSpudMan_E1ryPdpActivate;
+	case SpudMan::ECancelContextCreate:
+		return &KSpudMan_ECancelContextCreate;
+				
+	default:
+		return &KUnknown;
+	}
+
+	
+}