// Copyright (c) 2005-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://#ifndef _BTSAP_H#define _BTSAP_H#include <es_prot.h>#include <bt_sock.h>#include <btdevice.h>#include "SecManNotifiers.h"class CBTSecMan;class CBTCodServiceMan;NONSHARABLE_CLASS(CBluetoothSAP) : public CServProviderBase, public MAccessRequestResponseHandler/** Acts as the base for Bluetooth SAPs; factoring aspects common to all. This should be extended in future...**/ {public: // return reference to the security of the service represented by this SAP const TBTServiceSecurity& Security() const; // return a pointer to a possible device override to the security settings // returns NULL if none const TBTServiceSecurityPerDevice* Override(const TBTDevAddr& aAddress) const; // begin the security state machine void StartAccessRequest(const CBluetoothSAP& aSAPWithSecuritySettings, TBool aSecurityModeFourOutgoing = EFalse); void CancelAccessRequest(); // callback from secman with either granted or denied access virtual void AccessRequestComplete(TInt aResult); virtual void IoctlComplete(TInt aErr, TUint aLevel, TUint aName, TDesC8* aBuf); inline CBTSecMan& SecMan() const; inline CBTCodServiceMan& CodMan() const; inline const TBTDevAddr& RemoteAddress() const; TInt SetCodServiceBits(TUint16 aNewCodServiceBits); void RegisterCodService(); void DeregisterCodService(); TInt SetOption(TUint aLevel,TUint aName,const TDesC8 &aOption); virtual TInt SAPSetOption(TUint aLevel,TUint aName,const TDesC8 &aOption) = 0; //From CServProviderBase TInt SecurityCheck(MProvdSecurityChecker *aSecurityChecker); ~CBluetoothSAP();protected: CBluetoothSAP(CBTSecMan& aSecMan, CBTCodServiceMan& aCodMan); void ConstructL(); TInt SetDeviceOverride(const TDesC8& aOption); TInt GetDeviceOverride(TDes8& aOption) const;private: static TInt AccessDeniedCallBack(TAny* aBtSap);protected: TBTServiceSecurity iSecurity; // the security the service (on this SAP) has requested RBTSecurityArray iDeviceOverrides; // the overrides TUint iIoctlLevel; TUint iIoctlName; TBTDevAddr iRemoteDev; TUint16 iCodServiceBits;// SAP's record Services they set (see TBTMajorServiceClass), // so they can be removed from the CoD when a SAP dies. // MSB is Register Flag //Mixin providing security checking, This is not an owned variable. MProvdSecurityChecker* iSecurityChecker;private: CBTSecMan& iSecMan; CBTCodServiceMan& iCodMan; CAsyncCallBack* iAccessDeniedCallBack; };inline const TBTDevAddr& CBluetoothSAP::RemoteAddress() const { return iRemoteDev; }inline CBTSecMan& CBluetoothSAP::SecMan() const { return iSecMan; }inline CBTCodServiceMan& CBluetoothSAP::CodMan() const { return iCodMan; }#endif //_BTSAP_H