diff -r 000000000000 -r af10295192d8 networkcontrol/qosfwconfig/qos/inc/flowhook.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkcontrol/qosfwconfig/qos/inc/flowhook.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,116 @@ +// 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: +// + + + +/** + @internalComponent +*/ +#ifndef __FLOWHOOK_H__ +#define __FLOWHOOK_H__ + +#include +#include +#include // ..at least for MFlowHook + +// Forward declarations +class CPolicySelector; +class CInterface; +class RModule; +class CQoSConn; + +class TQoSPolicy + { +public: + TQoSPolicy() : iPolicy(NULL), iDefault(NULL), iOverride(NULL), iModules(NULL) {} + +public: + const CPolicySelector* iPolicy; + const CPolicySelector* iDefault; + const CPolicySelector* iOverride; + // Should also be const, but some other declarations prevent this for the time being... + CModuleSelector* iModules; + }; + +class CQoSSessionBase; +class CProtocolQoS; +class CInternalQoSChannel; + + +class CFlowHook : public CBase, public MFlowHook + { +public: + CFlowHook(CProtocolQoS &aProtocol, CFlowContext &aContext); + void Open(); + TInt ReadyL(TPacketHead &); + TInt ApplyL(RMBufSendPacket &, RMBufSendInfo &); + void Close(); + void ReleasePolicy(const CPolicySelector* aSel); + void UpdateQoS(); + void SetQoS(const TQoSParameters& aSpec); + + void ClearPendingRequest(TInt aError); + TInt StartPendingRequest(CQoSSessionBase* iSession); + + void CloseQoS(); + void RestartQoS(); // CloseQoS + trigger immeadiate ReadyL + + inline void SetUid(const TUidType& aUid); + inline const TCheckedUid& Uid() const; + inline TQoSPolicy& Policies(); + inline CInterface* Interface(); + inline CFlowContext& Context(); + inline CProtocolQoS& Protocol(); + inline const TQoSParameters& QoSParameters() const; + + inline RPointerArray& ModuleList() { return iModuleList;} + void Block(); + void UnBlock(); + inline void SetQoSChannel(CQoSConn* aChannel); + inline CQoSConn* Channel(); + inline TBool ChannelJoined(); + inline void SetChannelJoined(TBool aJoined); + + void FillFlowInfo(TPfqosMessage& aMsg, pfqos_address& aSrc, pfqos_address& aDst, pfqos_selector& aSel, TInetAddr &aMask); +private: + virtual ~CFlowHook(); // reference counted object, only Close() can issue the delete. + + void LoadModulesL(); + void OpenModulesL(); + TInt Negotiate(); + void AdjustForHeaderMode(TQoSParameters& aQoS); + + CProtocolQoS& iProtocol; // immutable after construction + CFlowContext& iContext; // immutable after construction + + TCheckedUid iUid; //?? Why TCheckedUid instead of plain TUidType? + TQoSParameters iQoS; + CInterface* iInterface; + TQoSPolicy iQoSPolicies; + TInt iRefCount; + TInt iFlowStatus; + CQoSSessionBase* iSession; + TUint iChannelJoined:1; // = 1, when flow has joined the channel (only if iChannel) + TUint iHasControlModule:1; // = 1, if flow has control module at iModuleList[0] + TUint iQoSChanged:1; // = 1, if flow specific QoS needs negotiation + CQoSConn* iChannel; + RPointerArray iModuleList; +public: // Only for CProtocolQoS really... + TDblQueLink iHookLink; + }; + +#include "flowhook.inl" + +#endif