diff -r 000000000000 -r af10295192d8 networkcontrol/qoslib/inc/qoslib_glob.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkcontrol/qoslib/inc/qoslib_glob.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,259 @@ +// Copyright (c) 2003-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: +// qoslib_glob.h - Qoslib global (TLS) data +// Qoslib global (TLS) data +// + + + +/** + @internalComponent +*/ +#ifndef __QOSLIB_GLOB_H__ +#define __QOSLIB_GLOB_H__ + +#include "qoslib.h" +#include "pfqosparser.h" +#include "pfqos_stream.h" +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + +// +const TInt KQoSSignaledOK = 0x0001; // Signaling ok +const TInt KQoSSignaledFailed = 0x0002; // Signaling failed +const TInt KQoSProvisionedOK = 0x0004; // Provisioning ok +const TInt KQoSProvisionedFailed = 0x0008; // Provisioning failed +const TInt KQoSOK = 0x0010; // A scheduler module should return this when ok +const TInt KQoSFailed = 0x0020; // A scheduler module should return this when request fails +const TInt KQoSRequestPending = 0x0040; // Request is pending and the result will be given using + // Event-method (see below) + +const TInt KQoSDefaultBufSize = 8000; + +// Forward declaration +class CQoSMan; +// +class CQoSRequestBase : public CBase +{ + friend class CQoSMan; +public: + ~CQoSRequestBase(); + + virtual void ProcessEvent(TPfqosMessage& aMsg)=0; + virtual void NotifyError(TInt aReason)=0; + virtual TBool MatchReply(const TPfqosMessage& aMsg, TUint8 aMsgType)=0; + virtual void ProcessReply(TPfqosMessage& aMsg)=0; + TInt NotifyEvent(MQoSObserver& aObserver, TUint aMask); + TInt CancelNotifyEvent(MQoSObserver& aObserver); + +protected: + void ParseExtensions(TPfqosMessage& aMsg, CQoSParameters& aPolicy); + TInt GetExtensionType(const TDesC8& aData, TInt& aType); + +protected: + TSglQueLink iNext; + TUint iEventMask; + MQoSObserver* iObserver; + CQoSParameters iPolicy; + CQoSMan* iManager; +}; + +class TSelectorItem : public TQoSSelector +{ +public: + TSglQueLink iNext; +}; + +enum EQoSChannelStatus +{ + EInit, + EChannelCreated, + EChannelReady +}; + + +class CChannel : public CQoSRequestBase +{ +public: + enum TPendingStatus + { + ENone, + EPendingOpen, + EPendingOpenExisting, + EPendingOpenExistingSetQoS, + EPendingSetPolicy, + EPendingJoin, + EPendingLeave, + EPendingDelete + }; + + static CChannel* NewL(CQoSMan* aManager, RSocket& aSocket, CQoSParameters* aSpec); + ~CChannel(); + void ProcessEvent(TPfqosMessage& aMsg); + void ProcessReply(TPfqosMessage& aMsg); + TBool Match(TInt aChannelId); + TBool MatchReply(const TPfqosMessage& aMsg, TUint8 aMsgType); + TInt OpenExisting(); + TInt SetQoS(CQoSParameters& aPolicy); + TInt Join(RSocket& aSocket); + TInt Leave(RSocket& aSocket); + TInt GetCapabilities(TUint& aCapabilities); + void NotifyError(TInt aReason); + + inline CQoSParameters& GetPolicy(); + inline TUint Capabilities() const; + inline EQoSChannelStatus Status() const; + inline TInt ChannelId() const; + TInt Close(); + +private: + CChannel(CQoSMan* aManager); +// CChannel(CQoSMan* aManager, CQoSParameters* aSpec); + void ConstructL(RSocket& aSocket, CQoSParameters* aSpec); +// void ConstructL(RSocket& aSocket); + void CreateSelector(TQoSSelector& aSelector, const TPfqosMessage& aMsg); + +private: + EQoSChannelStatus iStatus; + TInt iChannelId; + TQoSSelector iRequestSelector; + TQoSSelector iPendingRequestSelector; + TPendingStatus iPending; + TUint iCapabilities; +}; + +class CPolicy : public CQoSRequestBase +{ +public: + enum TPendingStatus + { + ENone, + EPendingAdd, + EPendingUpdate, + EPendingDelete, + EPendingGet, + EPendingLoadFile, + EPendingUnloadFile + }; + + static CPolicy* NewL(CQoSMan* aManager, const TQoSSelector& aSelector); + ~CPolicy(); + void SetQoSL(CQoSParameters& aPolicy); + void GetQoSL(); + void DeleteL(); + void LoadFileL(const TDesC& aName); + void UnloadFileL(const TDesC& aName); + TBool Match(const TQoSSelector& aSelector); + void ProcessReply(TPfqosMessage& aMsg); + TBool MatchReply(const TPfqosMessage& aMsg, TUint8 aMsgType); + void ProcessEvent(TPfqosMessage& aMsg); + void NotifyError(TInt aReason); + void Close(); + +protected: + CPolicy(CQoSMan* aManager, const TQoSSelector& aSelector); + +private: + TPendingStatus iPending; + TBool iPolicyCreated; + TQoSSelector iSelector; + TUint iCapabilities; +}; + +// +class CRequest : public CBase +{ +public: + static CRequest* NewL(CQoSRequestBase* aOwner, TUint aBufSize); + ~CRequest(); + +protected: + CRequest(CQoSRequestBase* aOwner); + void ConstructL(TUint aBufSize); + +public: + CPfqosStream* iMsg; + CQoSRequestBase* iOwner; + TSglQueLink iLink; +}; + +class CSender; +class CQoSMan : public CActive +{ +public: + static CQoSMan* NewL(TInt aPriority=0); + ~CQoSMan(); + + // qos channel methods + CChannel* OpenQoSChannelL(RSocket& aSocket); + void RemoveQoSChannel(CChannel* aChannel); + void SetQoSL(CChannel& aChannel); + void CreateL(CChannel& aChannel, const TQoSSelector& aSelector); + void OpenExistingL(CChannel& aChannel, const TQoSSelector& aSelector); + void JoinL(CChannel& aChannel, const TQoSSelector& aSelector); + void LeaveL(CChannel& aChannel, const TQoSSelector& aSelector); + + // qos policy methods + CPolicy* OpenQoSPolicyL(const TQoSSelector& aSelector); + void RemoveQoSPolicy(CPolicy* aChannel); + CPolicy* FindPolicy(const TQoSSelector& aSelector); + + void ClearPendingRequest(CQoSRequestBase* aRequest); + void Send(CRequest* aRequest); + inline RSocket& Socket(); + inline const TCheckedUid& Uid() const; + inline void Open(); + void Close(); + +protected: + CQoSMan(TInt aPriority=0); + void ConstructL(); + +private: + void Notify(TPfqosMessage& aMsg); + void Flush(); + CChannel* Match(TPfqosMessage& aMsg); + CChannel* MatchChannelReply(TPfqosMessage& aMsg, TUint8 aMsgType); + CPolicy* MatchPolicyReply(TPfqosMessage& aMsg, TUint8 aMsgType); + void ExecEvent(TPfqosMessage& aMsg); + void ExecReply(TPfqosMessage& aMsg); + void RunL(); + void DoCancel(); + +private: + TInt iRefCount; + TBool iNotifyPending; + TBool iShutdown; + TPtr8 iRecBuf; + HBufC8* iBuf; + RSocketServ iSocketServer; + RSocket iSocket; + CSender* iSender; + TCheckedUid iUid; + TSglQue iChannels; + TSglQue iStaticPolicies; +}; + +// +class QoSManGlobals + { +public: + inline static CQoSMan* Get(); + inline static void Set(CQoSMan* aGlobals); + }; + +#include "qoslib_glob.inl" + +#endif