williamr@4: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // williamr@4: williamr@4: #if !defined(__SS_CONNSELECT_H__) williamr@4: #define __SS_CONNSELECT_H__ williamr@4: williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: namespace ESock williamr@4: { williamr@4: williamr@4: class CSelectionRequest : public CBase, williamr@4: public Messages::ASimpleNodeIdBase, williamr@4: public MPlatsecApiExt, williamr@4: protected NetInterfaces::TInterfaceControl, williamr@4: public ITFHIERARCHY_1(CSelectionRequest,MPlatsecApiExt) williamr@4: williamr@4: /** williamr@4: Connection selection request. williamr@4: williamr@4: @internalTechnology williamr@4: */ williamr@4: { williamr@4: public: williamr@4: typedef ITFHIERARCHY_1(CSelectionRequest,MPlatsecApiExt) TIfStaticFetcherNearestInHierarchy; williamr@4: williamr@4: public: williamr@4: static CSelectionRequest* NewL(const Messages::TRuntimeCtxId& aRequestingClient, const Messages::TNodeId& aTierManagerId); williamr@4: virtual ~CSelectionRequest(); williamr@4: williamr@4: void Select(const TSelectionPrefs& aSelectionPreferences); williamr@4: void SelectConnPrefList(const RConnPrefList& aConnPrefList); williamr@4: void Provision(const Meta::SMetaData* aProvisionConfig); williamr@4: void Cancel(); //Cancels all active requests williamr@4: williamr@4: void JoinComplete(const Messages::TNodeId& aSender, TCFPeer::TJoinComplete& aCFMessage); williamr@4: void CommsBinderResponse(const TCFServiceProvider::TCommsBinderResponse& aMsg); williamr@4: void SelectComplete(const Messages::TNodeId& aSenderId, const Messages::TNodeId& aMcprId, const TProviderInfo& aMcprInfo); williamr@4: williamr@4: // from MPlatsecApiExt williamr@4: virtual TInt SecureId(TSecureId& aResult) const; williamr@4: virtual TInt VendorId(TVendorId& aResult) const; williamr@4: virtual TBool HasCapability(const TCapability aCapability) const; williamr@4: virtual TInt CheckPolicy(const TSecurityPolicy& aPolicy) const; williamr@4: williamr@4: void ReturnInterfacePtrL(MPlatsecApiExt*& aInterface); williamr@4: virtual NetInterfaces::TInterfaceControl* FetchNodeInterfaceControlL(TInt aInterfaceId); williamr@4: williamr@4: protected: williamr@4: explicit CSelectionRequest(const Messages::TRuntimeCtxId& aRequestingClient, const Messages::TNodeId& aTierManagerId); williamr@4: virtual void ReceivedL(const Messages::TRuntimeCtxId& aSender, const Messages::TNodeId& aRecipient, Messages::TSignatureBase& aMessage); williamr@4: williamr@4: private: williamr@4: TInt FindActiveRequest(const Messages::TRuntimeCtxId& aMcprId); williamr@4: void HandleProviderSelection(const Messages::TNodeId& aMcprId); williamr@4: void ProviderSelectionFinished(const Messages::TRuntimeCtxId& aMcprId); //Our selection request (SP or SNL) has been fully served -> SelectComplete(NULL). williamr@4: void SelectionFinished(); //The whole selection has finished. williamr@4: void PostError(const Messages::TNodeSignal::TMessageId& aMessageId, TInt aError); williamr@4: void InitialiseDestroy(); williamr@4: williamr@4: private: williamr@4: void SelectionError(const Messages::TRuntimeCtxId& aSenderId, TInt aError); //Selection error williamr@4: void CommsBinderRequestError(const Messages::TRuntimeCtxId& aSenderId, Messages::TEBase::TError& aCFMessage); //CommsBinderRequest returned error williamr@4: williamr@4: private: williamr@4: enum {EIdle = 0x00, ESelecting = 0x01, ECancelling = 0x02, ERequestingCommsBinder = 0x04}; //Selection Status williamr@4: TInt iOriginalError; williamr@4: TSelectionPrefs iSelectionPreferences; williamr@4: Messages::TNodeId iTierManagerId; williamr@4: Messages::TNodeId iTopMcprId; williamr@4: TProviderInfo iTopMcprInfo; williamr@4: Messages::RNodeInterface iRequestingNode; williamr@4: Messages::RRequestOriginator iRequest; williamr@4: RArray iActiveRequests; //List of all service providers (mcprs) currently processing our selection requests williamr@4: TUint iSelectionStatus : 4; williamr@4: TUint iDestroying : 1; williamr@4: TUint iJoined : 1; williamr@4: ASubSessionPlatsecApiExt* iPlatsecApiExt; williamr@4: const Meta::SMetaData* iProvision; williamr@4: RConnPrefList iConnPrefList; williamr@4: }; williamr@4: williamr@4: } //namespace ESock williamr@4: williamr@4: williamr@4: #endif //__SS_CONNSELECT_H__ williamr@4: