diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btstack/rfcomm/rfcomm.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btstack/rfcomm/rfcomm.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,139 @@ +// Copyright (c) 1999-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 RFCOMM_H +#define RFCOMM_H + +#include + +#include +#include "secman.h" +#include "bt.h" +#include + +const TUint KRFCOMMStreamServiceInfo = + KSIReliable|KSIInOrder|KSIStreamBased|KSIGracefulClose|KSICanReconnect; + +class CBTProtocolFamily; +class CRfcommMuxer; +class CMuxChannelStateFactory; +class CRfcommStateFactory; +class CRfcommFlowStrategyFactory; +class CRfcommPortAllocator; +class CRfcommSAP; +class TBTSockAddr; +class CRfcommIncomingConnectionListener; + +/** + The RFCOMM Protocol class. + + This is the singleton object created by ESOCK to provide access to all + the RFCOMM services. +*/ + +NONSHARABLE_CLASS(CRfcommProtocol) : public CBluetoothProtocolBase + { +public: + // Create ourselves + static CRfcommProtocol* NewL(CBTSecMan& aSecMan, RBTControlPlane& aControlPlane, CBTCodServiceMan& aCodMan); + + // From CProtocolBase + // Factories + CServProviderBase* NewSAPL(TUint aSockType); + + void Close(); + void Open(); + void CloseNow(); + + // From ProtocolManager before all binding. + void InitL(TDesC &aTag); + // From Protocol Manager - after all binding + void StartL(); + // From Protocol Manager + void BindToL(CProtocolBase* protocol); + + // Query functions + void Identify(TServerProtocolDesc* aProtocolDesc)const; + static void ProtocolIdentity(TServerProtocolDesc* aDesc); + + // Rfcomm specific functions + CRfcommStateFactory* StateFactory() const; + CRfcommFlowStrategyFactory* FlowStrategyFactory() const; + + // Get our local address + const TBTDevAddr& LocalBTAddr() const; + + // Two flavours of GetMux to provide pointers to CRfcommMuxers on demand. + + // First function - called when attempting to create an outgoing connection + TInt GetMux(TBTSockAddr& aRemoteAddr, CRfcommMuxer*& aMuxer); + + // From BluetoothProtocolBase + virtual TInt BearerConnectComplete(const TBTDevAddr& aAddr, CServProviderBase* aSSP); + + void MuxDown(CRfcommMuxer& aMux); + + // Functions to manipulate and query the list of listening RFCOMM SAPs + void AddIdleSAP(CRfcommSAP& aSAP); + void RemoveIdleSAP(CRfcommSAP& aSAP); + CRfcommSAP* FindIdleSAP(const TBTSockAddr& aSockAddr); + TInt FindFreeServerChannel(); + + void DisallowCBFC(); + void AllowCBFC(); + TBool CBFCDisallowed(); + + void AddBoundSAP(CRfcommSAP& aSAP); + void RemoveBoundSAP(CRfcommSAP& aSAP); + CRfcommSAP* FindBoundSAP(const TBTSockAddr& aSockAddr); + TBool SAPIsBound(const CRfcommSAP& aSAP); + + CRfcommSAP* FindInboundConnectedSAP(const TBTSockAddr& aSockAddr); + + void SetL2CapConfig(TL2CapConfigPkg& aConfigPkg); + +private: + // Functions + CRfcommProtocol(CBTSecMan& aSecMan, RBTControlPlane& aControlPlane, CBTCodServiceMan& aCodMan); + void ConstructL(); + ~CRfcommProtocol(); + + CRfcommMuxer* FindMux(const TBTDevAddr& aAddr); + TBool CheckForClose(); + static TInt TryToClose(TAny* aProtocol); + void RemoveIdleTimerEntry(); + void QueIdleTimerEntry(); + + // Called when responding to an incoming connection request + TInt GetMux(const TBTDevAddr& aRemoteAddr, CServProviderBase* aL2CAPConSAP, CRfcommMuxer*& aMuxer); + virtual TInt StartProtocolListening(); + +private: + // Data members + CRfcommStateFactory* iStateFactory; + CRfcommFlowStrategyFactory* iFlowStrategyFactory; + CMuxChannelStateFactory* iMuxChannelStateFactory; + + TBool iClosePending; + TDblQue iMuxes; // All the muxes + TDblQue iListeningSAPs; // SAPS which are listening + TDblQue iBoundSAPs; // SAPS which are bound + TDeltaTimerEntry iIdleTimerEntry; + TBool iIdleEntryQueued; + TBool iCBFCDisallowed; //"Etrue" => a SetOpt has switched CBFC off + }; + + +#endif