telephonyprotocols/pdplayer/inc/PDPSCPR.h
changeset 0 3553901f7fa8
child 9 962e6306d9d2
child 19 1f776524b15c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/pdplayer/inc/PDPSCPR.h	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,199 @@
+// 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 <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 "PDPFSM.h"
+#include "PDPParamMapper.h"
+#include <comms-infras/commsdebugutility.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;
+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