diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btstack/l2cap/l2capSignalHandler.h --- /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 +#include +#include + +#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& aCommandsToDelete ); + + HL2CapCommand* FindMatchingOutstandingRequest(TUint8 aExpectedCommandCode, TUint8 aId); + + virtual void PendingCommandsDrained() = 0; + +private: + +// Class Members. +protected: + enum + { + EMatchAnyL2CAPRequest = 0, + }; + + CL2CAPMux* iMuxer; + + TBool iDrainPendingCommands; + + TDblQue iPendingCommands; + TDblQue iCommandsAwaitingResponse; + TDblQue iSentResponses; + }; + + +inline CL2CAPMux& CL2CapSignalHandler::Mux() const + { + return (*iMuxer); + } + + +#endif