diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/inc/ss_flowrequest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/inc/ss_flowrequest.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,252 @@ +// Copyright (c) 1997-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: +// + +/** + @file + @internalTechnology + @released +*/ + +#if !defined(__SS_FLOWREQUEST_H__) +#define __SS_FLOWREQUEST_H__ + +#include +#include +#include +#include +#include +#include + +#include + + + +class CSockSession; +namespace ESock +{ + +// +//CFlowRequest +NONSHARABLE_CLASS(CFlowRequest) : public CBase, + public ACFMMNodeIdBase, + public ASubSessionPlatsecApiExt, + public ITFHIERARCHY_LINK_1(CFlowRequest, MeshMachine::AMMNodeBase, MPlatsecApiExt) + + { +public: + typedef ITFHIERARCHY_LINK_1(CFlowRequest, MeshMachine::AMMNodeBase, MPlatsecApiExt) TIfStaticFetcherNearestInHierarchy; + +public: + static CFlowRequest* NewL(TSubSessionUniqueId aSubSessionUniqueId); + + virtual ~CFlowRequest(); + void ReceivedL(const Messages::TRuntimeCtxId& aSender, const Messages::TNodeId& aRecipient, Messages::TSignatureBase& aMessage); + + void ReturnInterfacePtrL(MPlatsecApiExt*& aInterface); + +protected: + void Received(MeshMachine::TNodeContextBase& aContext); + +public: + CFlowRequest(TSubSessionUniqueId aSubSessionUniqueId); + RCFParameterFamilyBundleC iFlowParameters; + }; + +// +//CImplicitFlowRequest - specialised for implicit +NONSHARABLE_CLASS(CImplicitFlowRequest) : public CFlowRequest + { +public: + ~CImplicitFlowRequest(); + + static CImplicitFlowRequest* NewL(TSubSessionUniqueId aSubSessionUniqueId, const Messages::TNodeId& aTierManagerFC, TUid aTierId); + +public: + Messages::TNodeId iTierManagerFC; + Messages::TNodeId iCSR; + TUid iTierId; + +protected: + CImplicitFlowRequest(TSubSessionUniqueId aSubSessionUniqueId, const Messages::TNodeId& aTierManagerFC, TUid aTierId); + }; + +// +//TCFFlowRequestBase +struct TCFFlowRequestBase : public Messages::TSelfDispatcherAndErrorHandler + { +protected: + TCFFlowRequestBase(TSubSessionUniqueId aSubSessionUniqueId); + TCFFlowRequestBase(TSubSessionUniqueId aSubSessionUniqueId, TFlowParams& aFlowParams) : + iSubSessionUniqueId(aSubSessionUniqueId), + iFlowParams(aFlowParams) + {} + TCFFlowRequestBase(TFlowParams& aFlowParams) : + iFlowParams(aFlowParams) + {} + TCFFlowRequestBase() + { + } + +protected: + DATA_VTABLE + +protected: + TSubSessionUniqueId iSubSessionUniqueId; + TFlowParams iFlowParams; + }; + +// +//TCFImplicitFlowRequest +NONSHARABLE_STRUCT(TCFImplicitFlowRequest) : public TCFFlowRequestBase + { +public: + explicit TCFImplicitFlowRequest( + TSubSessionUniqueId aSubSessionUniqueId, + TFlowParams& aFlowParams) + : TCFFlowRequestBase(aSubSessionUniqueId, aFlowParams) + { + } + TCFImplicitFlowRequest(TFlowParams& aFlowParams) + : TCFFlowRequestBase(aFlowParams) + { + } +protected: + void StartL(const Messages::TNodeId& aSender, const Messages::ANode& aItf); + void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient); + TCFImplicitFlowRequest() + : TCFFlowRequestBase() + { + } +public: + DATA_VTABLE + DECLARE_MVIP_CTR(TCFImplicitFlowRequest) + }; + +// +//TCFConnFlowRequest +NONSHARABLE_STRUCT(TCFConnFlowRequest) : public TCFFlowRequestBase + { +public: + explicit TCFConnFlowRequest( + TSubSessionUniqueId aSubSessionUniqueId, + CSockSession& aSession, + TUint aHandle, + TFlowParams& aFlowParams + ) + : TCFFlowRequestBase(aSubSessionUniqueId, aFlowParams), + iSession(&aSession), + iHandle(aHandle) + { + } + + explicit TCFConnFlowRequest(TSubSessionUniqueId aSubSessionUniqueId, CSockSession& aSession, TUint aHandle) + : TCFFlowRequestBase(aSubSessionUniqueId), + iSession(&aSession), + iHandle(aHandle) + { + } + +protected: + void StartL(const Messages::TNodeId& aSender); + void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient); + TCFConnFlowRequest() + : TCFFlowRequestBase() + { + } + +public: + CSockSession* iSession; + TUint iHandle; +public: + DATA_VTABLE + DECLARE_MVIP_CTR(TCFConnFlowRequest) + }; + +// +//TCFSubConnFlowRequest +NONSHARABLE_STRUCT(TCFSubConnFlowRequest) : public TCFFlowRequestBase + { +public: + explicit TCFSubConnFlowRequest(TSubSessionUniqueId aSubSessionUniqueId, CSockSession& aSession, TUint aHandle, + TFlowParams& aFlowParams) + : TCFFlowRequestBase(aSubSessionUniqueId, aFlowParams), + iSession(&aSession), + iHandle(aHandle) + { + } + + explicit TCFSubConnFlowRequest(TSubSessionUniqueId aSubSessionUniqueId, CSockSession& aSession, TUint aHandle) + : TCFFlowRequestBase(aSubSessionUniqueId), + iSession(&aSession), + iHandle(aHandle) + { + } + +protected: + void StartL(const Messages::TNodeId& aSender); + void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient); + TCFSubConnFlowRequest() + : TCFFlowRequestBase() + { + } + +public: + CSockSession* iSession; + TUint iHandle; + +public: + DATA_VTABLE + DECLARE_MVIP_CTR(TCFSubConnFlowRequest) + }; + + +// aggregate class for ipc subsessions which request flows +NONSHARABLE_CLASS(AIPCFlowRequester) + { +public: + AIPCFlowRequester() : iIsFlowRequestPending(EFalse) {} + + void SetFlowRequestPending(TBool aPending) + { + iIsFlowRequestPending = aPending; + } + + TBool FlowRequestPending() + { + return iIsFlowRequestPending; + } + + void AdoptFlowRequestMessage(const RMessage2& aFlowRequestMessage) + { + iFlowRequestMessage.Adopt(static_cast(const_cast(aFlowRequestMessage))); + } + + void CompleteFlowRequestMessage(TInt err) + { + iFlowRequestMessage.Complete(err); + iFlowRequestMessage.ResetHandle(); + } + +protected: + Den::RSafeMessage iFlowRequestMessage; + TBool iIsFlowRequestPending; + }; + +} // namespace ESock + +#endif +// __SS_FLOWREQUEST_H__ + +