bluetooth/btstack/l2cap/l2capMuxController.h
changeset 0 29b1cd4cb562
--- /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 <e32base.h>
+#include <e32std.h>
+
+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<CL2CAPMux> iMuxers;
+
+	// Dbl link list of sap signal handlers that are only bound as yet
+	TDblQue<CL2CapSAPSignalHandler> iBoundSapSignalHandlers;
+	
+	// Dbl link list of listening sap signal handlers
+	TDblQue<CL2CapSAPSignalHandler> 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