// 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:
// PDP SubConnection Provider class definition.
//
//
/**
@file
@internalComponent
*/
#ifndef SYMBIAN_PDPSPR_H
#define SYMBIAN_PDPSPR_H
#include <etelqos.h>
#include <comms-infras/corescpr.h>
#include <comms-infras/corescprstates.h>
#include <networking/qos3gpp_subconparams.h>
#include <cs_subconparams.h>
#include <networking/pdpprovision.h>
#include <comms-infras/linkprovision.h>
#include <networking/ipaddrinfoparams.h>
#include <comms-infras/commsdebugutility.h>
#include "PDPFSM.h"
#include "PDPParamMapper.h"
namespace PDPSCprStates
{
class TSelfInit;
class TCreateSecondaryOrMbmsPDPCtx;
class TCreatePrimaryPDPCtx;
class TActivatePDPContext;
class TSetQoS;
class TSetTFT;
class TRaiseParamsChanged;
class TRaiseParamsRejectedL;
class TParamsEvent;
class TFillInImsExtParams;
class TFillInGrantedParams;
class TNoTagIfRejoinNeededOrDataClientReady;
class TAwaitingPDPContextDestroyed;
class TNoTagOrProviderStopped;
class TSendDataClientStarted;
class TSendDataClientStopped;
class TApplyNewDefault;
class TRetrieveSipAddr;
class TModifyActivePDPContext;
class TSetMbmsParameters;
}
namespace PDPSCprActivities
{
DECLARE_ACTIVITY_MAP(activityMap)
}
class CPDPDefaultSubConnectionProvider;
class CPDPSubConnectionProviderFactory;
class CPDPSubConnectionProvider : public CCoreSubConnectionProvider, public MPdpFsmEventHandler
/** Common subclass for default and non-default PDP subconnection providers.
@internalTechnology
@released Since 9.4 */
{
friend class CPDPSubConnectionProviderFactory;
friend class PDPSCprStates::TSelfInit;
friend class PDPSCprStates::TCreateSecondaryOrMbmsPDPCtx;
friend class PDPSCprStates::TCreatePrimaryPDPCtx;
friend class PDPSCprStates::TActivatePDPContext;
friend class PDPSCprStates::TSetQoS;
friend class PDPSCprStates::TSetTFT;
friend class PDPSCprStates::TRaiseParamsChanged;
friend class PDPSCprStates::TRaiseParamsRejectedL;
friend class PDPSCprStates::TParamsEvent;
friend class PDPSCprStates::TFillInGrantedParams;
friend class PDPSCprStates::TFillInImsExtParams;
friend class PDPSCprStates::TNoTagIfRejoinNeededOrDataClientReady;
friend class PDPSCprStates::TAwaitingPDPContextDestroyed;
friend class PDPSCprStates::TNoTagOrProviderStopped;
friend class PDPSCprStates::TSendDataClientStarted;
friend class PDPSCprStates::TSendDataClientStopped;
friend class PDPSCprStates::TApplyNewDefault;
friend class PDPSCprStates::TRetrieveSipAddr;
friend class PDPSCprStates::TSetMbmsParameters;
friend class PDPSCprStates::TModifyActivePDPContext;
public:
enum { EInvalidContextId = KMaxPdpContexts };
typedef CPDPSubConnectionProviderFactory FactoryType;
virtual ~CPDPSubConnectionProvider();
//-====================================
//MPdpFsmEventHandler methods
//-====================================
virtual void Event(TInt aEvent, TInt aParam);
//-====================================
//ACFNode overrides
//-====================================
void Received(MeshMachine::TNodeContextBase& aContext);
void ReceivedL(const Messages::TRuntimeCtxId& aSender, const Messages::TNodeId& aRecipient, Messages::TSignatureBase& aMessage);
virtual void LinkUp();
virtual void LinkDown(TInt aCause);
CSubConQosR99ParamSet* GrantedQoS();
TInt QoSRank();
TBool ContentionRequested() const
{
return iContentionRequested;
}
void SetContentionRequested(TBool aContentionRequested)
{
iContentionRequested = aContentionRequested;
}
protected:
//-====================================
//Construction methods bundle - accessible thru the factory only
//-====================================
CPDPSubConnectionProvider(ESock::CSubConnectionProviderFactoryBase& aFactory);
CPDPSubConnectionProvider(ESock::CSubConnectionProviderFactoryBase& aFactory,
const MeshMachine::TNodeActivityMap& aActivityMap);
static CPDPSubConnectionProvider* NewL(CPDPSubConnectionProviderFactory& aFactory);
void ConstructL();
private:
TTFTInfo GetTftInfoL(CSubConIPAddressInfoParamSet* aParamSet);
TTFTOperationCode GetOperationCodeL(CSubConIPAddressInfoParamSet* aParamSet);
TUint FindPacketFilterIdL(CSubConIPAddressInfoParamSet::TSubConIPAddressInfo aParamInfo);
TUint FindIdOfMatchingParamSetL(CSubConIPAddressInfoParamSet::TSubConIPAddressInfo aParamInfo);
void NewPacketFilterAddedL(CSubConIPAddressInfoParamSet::TSubConIPAddressInfo aParamInfo, TUint aId);
void PacketFilterRemovedL(TUint aId);
public:
//-====================================
//PDP Ctx manipulation
//-====================================
TContextId iPDPFsmContextId;
SpudMan::TPdpContextType iContextType; //maintain type of subconnection provider
CPdpFsmInterface* iPdpFsmInterface;
CPDPDefaultSubConnectionProvider* iDefaultSCPR;
TInt iActivityAwaitingResponse;
MPDPParamMapper::TQosParameterRelease iParamsRelease;
//quite a big structure so kept here to avoid stack overflow.
RPacketContext::TDataChannelV2 iTempDataChannelV2;
TInt iProvisionFailure;
protected:
__FLOG_DECLARATION_MEMBER;
TInt iLinkUps;
private:
// keeps record of assigned Id's for packetFilter
RArray<TUint> iPacketFilterId;
TUint8 iPacketFilterMaskId;
TBool iIsModeGsm;
TBool iContentionRequested;
};
class THighestQoSQuery : public Factories::MFactoryQuery
/** Query scanning for the CPDPSubConnectionProvider with the highest QoS as per
3GPP TS 23.107 Annex C.
Usage note: Use against CPDPSubConnectionProviderFactory::Find, which will
always return NULL (the query needs to traverse all the providers). Examine
THighestQoSQuery::HighestQoSProvider() after calling Find to get the highest
QoS provider.
@internalTechnology
@released Since 9.5 */
{
public:
THighestQoSQuery(Messages::TNodeId aCtrlProvider)
:iCtrlProvider(aCtrlProvider),
iHighestQoSProvider(NULL)
{}
CPDPSubConnectionProvider* HighestQoSProvider()
{
return iHighestQoSProvider;
}
protected:
virtual TMatchResult Match(Factories::TFactoryObjectInfo& aObjectInfo);
private:
Messages::TNodeId iCtrlProvider;
CPDPSubConnectionProvider* iHighestQoSProvider;
};
#endif //SYMBIAN_PDPSPR_H