telephonyprotocols/umtsgprsscpr/spudfsm/src/cpdpfsmfactory.cpp
author hgs
Thu, 29 Jul 2010 12:12:57 +0100
changeset 56 ab72d5c1d770
parent 44 8b72faa1200f
permissions -rw-r--r--
201029_05
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     2
// All rights reserved.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     7
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    10
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    11
// Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    12
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    13
// Description:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    14
// PDP FSM factory implementation
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    15
// 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    16
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    17
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    18
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    19
 @file 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    20
 @internalComponent
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    21
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    22
 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    23
#include "cpdpfsmfactory.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    24
#include "spudfsmdebuglogger.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    25
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    26
// NewL 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    27
CPdpFsmFactory* CPdpFsmFactory::NewL ()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    28
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    29
	SPUDFSMVERBOSE_FNLOG("CPdpFsmFactory::NewL()");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    30
	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    31
	return new (ELeave) CPdpFsmFactory ();	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    32
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    33
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    34
#if defined(__VC32__)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    35
#if (_MSC_VER >= 1200)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    36
#pragma warning(disable:4355) 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    37
#endif
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    38
#endif
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    39
//Cpdpfsmfactory.cpp(22...) : warning C4355: 'this' : used in base member initializer list
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    40
// these warnings are benign unless the designed usage of SpudFsm changes such that SpudFsm is used
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    41
// as a base class to something else, in which case this code will have to change IFF the this pointer
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    42
// passed is used in the states c'tor. Currently, the pointer is just stored.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    43
// In V9, e32def.h turns this warning off.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    44
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    45
CPdpFsmFactory::CPdpFsmFactory()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    46
: iStateInitialised (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    47
  iStateOpeningPhone (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    48
  iStateCreatingPrimary (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    49
  iStateActivatingPrimary (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    50
  iStateCreatingSecondary (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    51
  iStateCreatedSecondary (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    52
  iStateSettingQoS (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    53
  iStateSettingTFT (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    54
  iStateActivatingSecondary (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    55
  iStateOpen (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    56
  iStateChangingQoS (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    57
  iStateChangingTFT (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    58
  iStateGettingNegQoS (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    59
  iStateModifyingActive (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    60
  iStateSuspended (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    61
  iStateClosing (this),
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    62
  iStateStopping (this)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    63
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    64
	SPUDFSMVERBOSE_FNLOG("CPdpFsmFactory::CPdpFsmFactory()");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    65
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    66
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    67
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    68
CPdpFsmFactory::~CPdpFsmFactory()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    69
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    70
	SPUDFSMVERBOSE_FNLOG("CPdpFsmFactory::~CPdpFsmFactory()");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    71
	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    72
	delete iEtelDriverInput;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    73
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    74
    iContexts.DeleteAll();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    75
    iContexts.Reset();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    76
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    77
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    78
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    79
void CPdpFsmFactory::InitL(TName& aTsyName, CPdpFsmInterface * aPdpFsmInterface)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    80
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    81
	SPUDFSMVERBOSE_FNLOG("CPdpFsmFactory::InitL()");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    82
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    83
	iPdpFsmInterface = aPdpFsmInterface;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    84
	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    85
	iTsyName = aTsyName;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    86
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    87
	// lets kick off the ETelDriver first then we only alloc FSMs if it works
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    88
	//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    89
	iEtelDriverInput = new (ELeave) REtelDriverInput;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    90
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    91
	iEtelDriverInput->OpenL (*iPdpFsmInterface);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    92
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    93
	// Only create PDP contexts if specifically requested.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    94
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    95
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    96
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    97
void CPdpFsmFactory::Close (void)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    98
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    99
	SPUDFSMVERBOSE_FNLOG("CPdpFsmFactory::Close()");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   100
	iEtelDriverInput->Close();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   101
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   102
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   103
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   104
/** 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   105
@return may return NULL if there is no PDP context with that Id
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   106
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   107
CPdpFsm* CPdpFsmFactory::GetFsmContext (TContextId aPdpId)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   108
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   109
	SPUDFSMVERBOSE_FNLOG("CPdpFsmFactory::GetContext()");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   110
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   111
	return iContexts[aPdpId];
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   112
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   113
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   114
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   115
const TName& CPdpFsmFactory::TsyName(void)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   116
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   117
	return iTsyName;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   118
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   119
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   120
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   121
TInt CPdpFsmFactory::NewFsmContext(TContextId aPdpId)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   122
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   123
	SPUDFSMVERBOSE_FNLOG("CPdpFsmFactory::NewFsmContext()");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   124
	ASSERT(ContextIdIsValid(aPdpId));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   125
	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   126
	TInt ret = KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   127
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   128
    if (!HaveFsmContext(aPdpId))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   129
        {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   130
	    // Only ever called by non-leaving functions. We're going to have to trap at some point in the calling hierarchy...
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   131
	    //
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   132
	    TRAP(ret,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   133
	         CPdpFsm* p = CPdpFsm::NewL(aPdpId, this, iEtelDriverInput);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   134
	         iContexts[aPdpId] = p;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   135
	         );
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   136
	    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   137
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   138
    return ret;	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   139
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   140
    
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   141
    
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   142
TInt CPdpFsmFactory::DeleteFsmContext(TContextId aPdpId)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   143
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   144
	SPUDFSMVERBOSE_FNLOG("CPdpFsmFactory::DeleteFsmContext()");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   145
	ASSERT(ContextIsValid(aPdpId));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   146
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   147
    delete iContexts[aPdpId];
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   148
    iContexts[aPdpId] = NULL;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   149
    
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   150
	return KErrNone;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   151
    }
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   152