networkcontrol/qoslib/inc/qoslib_glob.h
changeset 0 af10295192d8
--- /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 <networking/qoslib_internal.h>
+#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<CChannel> iChannels;
+	TSglQue<CPolicy> iStaticPolicies;
+};
+
+//
+class QoSManGlobals
+	{
+public:
+	inline static CQoSMan* Get();
+	inline static void Set(CQoSMan* aGlobals);
+	};
+
+#include "qoslib_glob.inl"
+
+#endif