--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/gprsumtsqosprt/inc/iface.h Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,172 @@
+// Copyright (c) 2007-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:
+//
+
+#ifndef __GUQOSIFACE_H__
+#define __GUQOSIFACE_H__
+
+#include <comms-infras/nifif.h>
+#include <timeout.h>
+#include <networking/umtsnifcontrolif.h>
+
+class CPdpContext;
+class CRequestBase;
+class CFlowData;
+
+enum TNifStatus
+ {
+ EUnknown,
+ EReady,
+ EPending,
+ EClosed
+ };
+
+const TUint KMaxEvaluationPrecedences = 256;
+
+class CModuleGuqos;
+
+// represents a Nif instance containing PDP contexts (there is one Nif instance per primary Pdp context)
+class CNif : public CBase, public MNifEvent
+ {
+public:
+ static CNif* NewL(CNifIfBase& aInterface, CModuleGuqos& aModule);
+ ~CNif();
+
+ TInt NewPdpContext();
+ TInt PrimaryContextCreated(const TContextParameters& aParams);
+ void SecondaryContextCreated(const TContextParameters& aParams);
+ void DeletePdpContext(CPdpContext* aContext);
+
+ CPdpContext* FindContext(TInt aContextId);
+ CPdpContext* FindChannel(TInt aChannelId);
+
+ void AddRequest(CRequestBase& aRequest);
+
+ void CancelPendingRequest(CFlowData* aFlowData);
+ void CancelPendingRequest(CPdpContext* aContext);
+ TInt FindEvaluationPrecedence();
+ void RecomputeEvaluationPrecedences();
+
+ void CloseRequest(CRequestBase* aRequest);
+
+ TInt Event(CProtocolBase* aProtocol, TUint aName, TDes8& aOption, TAny* aSource=0);
+ TInt NetworkStatusEvent(const TNetworkParameters& aNetworkEvent);
+
+ inline CPdpContext* PrimaryPdpContext() const;
+ void IssueRequest();
+ inline void RemoveContext(CPdpContext& aContext);
+ inline CNifIfBase& Interface() const;
+ inline CModuleGuqos& Module() const;
+ inline void SetStatus(const TNifStatus& aStatus);
+ inline const TNifStatus& Status() const;
+ inline CPdpContext* DefaultPdpContext();
+ inline TUint32 IapId() const;
+
+ // Return a reference to initialized context parameters.
+ TContextParameters& ContextParameters();
+protected:
+ CNif(CNifIfBase& aInterface, CModuleGuqos& aModule);
+ void ConstructL();
+ TInt RegisterEventHandler();
+ TInt SetEvents(TBool aValue);
+ void SetDefaultQoS();
+
+private:
+ void SelectNewDefaultContext();
+ void AddContext(CPdpContext& aContext);
+ TInt CloseInterface();
+
+ CNifIfBase& iNif; // CNif always has a valid CNifIfBase
+ CModuleGuqos& iModule;
+
+ CPdpContext* iPrimary; // Primary PDP context (cannot be deleted while CNif exists)
+
+ TSglQue<CPdpContext> iContexts;
+
+ TUint32 iIapId;
+ TSglQueLink iNext;
+ TNifStatus iStatus;
+
+ TSglQue<CRequestBase> iPending;
+ CRequestBase* iCurrentRequest;
+ TUint32 iPendingSequence; // Temporary hack to detect iPending modifications
+
+ //?? This really should be a bitmap, and not waste even 8 bits where 1 would do...
+ TUint8 iEvaluationPrecedenceMap[KMaxEvaluationPrecedences];
+
+ // Every NIF Control call requires use of this LARGE object. Include
+ // it in here, so that it does not need to be constantly allocated
+ // from heap or stack! Unfortunately, despite it being a T-class, it
+ // actually contains C-class pointers and RArrays!!! A major goof
+ // in specification!!!
+ TContextParameters iParameters;
+
+ friend class CNifManager;
+public:
+ void RunPendingRequests();
+ RTimeout iTimeout;
+ };
+
+typedef TSglQueIter<CPdpContext> TContextIter;
+
+// Inline methods
+inline CPdpContext* CNif::PrimaryPdpContext() const
+ { return iPrimary; }
+
+inline void CNif::RemoveContext(CPdpContext& aContext)
+ { iContexts.Remove(aContext); }
+
+//lint -e{1763} would like return to be const (now 'indirectly modifies')
+inline CNifIfBase& CNif::Interface() const
+ { return iNif; }
+
+inline CModuleGuqos& CNif::Module() const
+ { return iModule; }
+
+inline void CNif::SetStatus(const TNifStatus& aStatus)
+ { iStatus = aStatus; }
+
+inline const TNifStatus& CNif::Status() const
+ { return iStatus; }
+
+
+inline CPdpContext* CNif::DefaultPdpContext()
+ { return iPrimary; }
+
+inline TUint32 CNif::IapId() const
+ { return iIapId; };
+
+
+class CNifManager : public CBase
+ {
+public:
+ static CNifManager* NewL();
+ ~CNifManager();
+
+ CNif* CreateNifL(CNifIfBase& aInterface, CModuleGuqos& aModule);
+ void DeleteNif(CNifIfBase* aInterface);
+ void DeleteNif(CNif* aInterface);
+ CNif* FindInterface(const CNifIfBase *aIface);
+ CPdpContext* FindChannel(TInt aChannelId);
+ void CancelPendingRequests(CFlowData* aFlowData);
+
+protected:
+ CNifManager();
+ void ConstructL();
+
+private:
+ TSglQue<CNif> iNifs;
+ };
+
+#endif