diff -r 000000000000 -r 3553901f7fa8 telephonyprotocols/gprsumtsqosprt/inc/iface.h --- /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 +#include +#include + +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 iContexts; + + TUint32 iIapId; + TSglQueLink iNext; + TNifStatus iStatus; + + TSglQue 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 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 iNifs; + }; + +#endif