bluetooth/btstack/l2cap/l2capSignalHandler.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/l2cap/l2capSignalHandler.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,124 @@
+// Copyright (c) 2004-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:
+// This is the base class for handling L2CAP signalling.
+// 
+//
+
+#ifndef L2CAPSIGNALHANDLER_H
+#define L2CAPSIGNALHANDLER_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <bt_sock.h>
+
+#include "l2constants.h"
+#include "L2types.h"
+
+#include "L2CapPDU.h"
+
+class HConnectionResponse;
+class HConnectionRequest;
+class HEchoRequest;
+class HEchoResponse;
+class HConfigureRequest;
+class HConfigureResponse;
+class HDisconnectRequest;
+class HDisconnectResponse;
+class HInformationRequest;
+class HInformationResponse;
+class HCommandReject;
+class HInvalidCommand;
+
+class CL2CAPConnectionSAP;
+
+
+NONSHARABLE_CLASS(CL2CapSignalHandler) : public CBase
+	{
+public:
+	virtual ~CL2CapSignalHandler();
+	virtual HL2CapPDU* GetPDU();
+
+	virtual TBool HandleIncomingCFrame(HCFramePDU* aCFrame);
+
+	// Process incoming commands
+	virtual TBool HandleConnectionResponse(HConnectionResponse* aConnectionResponse);
+	virtual TBool HandleConnectionRequest(HConnectionRequest* aConnectionRequest);
+	virtual TBool HandleEchoRequest(HEchoRequest* aEchoRequest);
+	virtual TBool HandleEchoResponse(HEchoResponse* aEchoResponse);
+	virtual TBool HandleConfigureRequest(HConfigureRequest* aConfigRequest);
+	virtual TBool HandleConfigureResponse(HConfigureResponse* aConfigResponse);
+	virtual TBool HandleDisconnectRequest(HDisconnectRequest* aDisconnectRequest);	
+	virtual TBool HandleDisconnectResponse(HDisconnectResponse* aDisconnectResponse);	
+	virtual TBool HandleInformationRequest(HInformationRequest* aInformationRequest);
+	virtual TBool HandleInformationResponse(HInformationResponse* aInformationResponse);
+	virtual TBool HandleCommandReject(HCommandReject* aCommandReject);
+	virtual TBool HandleInvalidCommand(HInvalidCommand* aInvalidCommand);
+
+	virtual void Error(TInt aErrorCode, MSocketNotify::TOperationBitmasks aErrorAction) = 0;
+
+	virtual void CommandResponseFailure(HL2CapCommand* aCommand) = 0;
+
+	void SendInvalidCIDCommandReject(TUint8 aId, TL2CAPPort aSourceCID, TL2CAPPort aDestinationCID);
+
+	void AddToOutgoingQueue(HL2CapCommand* aCommand);
+	TBool IsDuplicateCommandRequest(HL2CapCommand* aCommand);
+	
+	void ChannelConfigured();
+
+	void HandleLinkError();
+	void DrainPendingCommands();
+	void FlushPendingCommands();
+	void FlushAwaitingResponseCommands();
+	void FlushAllQueues();
+
+	TUint8 CurrentRTXTimerDuration(TUint8 aBaseRTXTimerDuration) const;
+
+	inline CL2CAPMux& Mux() const;
+	
+	
+protected:
+	CL2CapSignalHandler(CL2CAPMux* aMuxer = 0);
+	
+	void DeleteCommands(TDblQue<HL2CapCommand>& aCommandsToDelete );
+	
+	HL2CapCommand* FindMatchingOutstandingRequest(TUint8 aExpectedCommandCode, TUint8 aId);
+	
+	virtual void PendingCommandsDrained() = 0;
+
+private:
+
+// Class Members.
+protected:
+	enum
+		{
+		EMatchAnyL2CAPRequest = 0,
+		};
+		
+	CL2CAPMux* iMuxer;
+
+	TBool iDrainPendingCommands;
+
+	TDblQue<HL2CapCommand> iPendingCommands;
+	TDblQue<HL2CapCommand> iCommandsAwaitingResponse;
+	TDblQue<HL2CapCommand> iSentResponses;
+	};
+
+
+inline CL2CAPMux& CL2CapSignalHandler::Mux() const
+	{
+	return (*iMuxer);
+	}
+		
+
+#endif