diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btstack/l2cap/l2capMuxController.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btstack/l2cap/l2capMuxController.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,86 @@ +// 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: +// Holds a list of all Muxers and listening SAP signal handlers. +// +// + +#ifndef L2CAPMUXCONTROLLER_H +#define L2CAPMUXCONTROLLER_H + +#include +#include + +class CL2CAPMux; +class CL2CapSAPSignalHandler; +class CServProviderBase; +class TBTDevAddr; +class CL2CAPProtocol; + +NONSHARABLE_CLASS(CL2CAPMuxController) : public CBase + { +public: + CL2CAPMuxController(CL2CAPProtocol& aProtocol); + ~CL2CAPMuxController(); + + TInt BearerConnectComplete(const TBTDevAddr& aAddr, CServProviderBase* aSAP); + TInt AttachPassiveSignalHandler(CL2CapSAPSignalHandler& aSAPSignalHandler,const TBTDevAddr& aAddr); + void AttachListeningSignalHandler(CL2CapSAPSignalHandler& aSAPSignalHandler); + void AttachBoundSignalHandler(CL2CapSAPSignalHandler& aSAPSignalHandler); + TInt AttachActiveSignalHandler(CL2CapSAPSignalHandler& aSAPSignalHandler,const TBTDevAddr& aAddr); + CL2CapSAPSignalHandler* FindListeningSignalHandler(TL2CAPPort aPort); + CL2CapSAPSignalHandler* FindIdleSignalHandler(TL2CAPPort aPort); + inline CL2CAPProtocol& Protocol() const; + + void UpdateMuxerPriorities(); + TInt FindFreeUserPSM(TL2CAPPort& aPSM); + + inline TBool CanProtocolClose() const; + +private: + CL2CAPMux* FindMuxer(const TBTDevAddr& aAddr); + CL2CAPMux* CreateMuxerL(const TBTDevAddr& aAddr); + +protected: + +private: + enum + { + EBaseMuxerPriority = CActive::EPriorityStandard, + }; + + // Dbl link list of Muxers + TDblQue iMuxers; + + // Dbl link list of sap signal handlers that are only bound as yet + TDblQue iBoundSapSignalHandlers; + + // Dbl link list of listening sap signal handlers + TDblQue iListeningSapSignalHandlers; + + CL2CAPProtocol& iProtocol; + + }; + +inline CL2CAPProtocol& CL2CAPMuxController::Protocol() const + { + return iProtocol; + } + +inline TBool CL2CAPMuxController::CanProtocolClose() const + { + // Only close if all of the containers are empty. + return (iMuxers.IsEmpty() && iBoundSapSignalHandlers.IsEmpty() && iListeningSapSignalHandlers.IsEmpty()); + } + +#endif