--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/avctp/avctppacket.h Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,185 @@
+// Copyright (c) 2005-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:
+// Provides the AVCTP Packet classes
+//
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef AVCTPPACKET_H
+#define AVCTPPACKET_H
+
+#include <es_mbuf.h>
+
+#include "avctpconstants.h"
+#include "avctppacketstatics.h"
+
+// Forward definitions
+class TAvctpHeaderInfo;
+class TAvctpNormalHeaderInfo;
+class TAvctpStartHeaderInfo;
+
+class RMBufChain;
+
+NONSHARABLE_CLASS(CAvctpPacket) : public CBase
+/**
+Static methods to help parse an AVCTP packet.
+
+ @internalComponent
+*/
+ {
+public:
+ static TInt ParseHeader(const RMBufChain& aData, TAvctpStartHeaderInfo& aHeaderInfo);
+ static TPtrC8 GetHeader(const RMBufChain& aChain);
+
+ static TInt ParseNormalHeader(const TDesC8& aData, TAvctpNormalHeaderInfo& aHeaderInfo);
+ static TInt ParseStartHeader(const TDesC8& aData, TAvctpStartHeaderInfo& aHeaderInfo);
+
+ static TInt CheckNormalHeaderInfo(const TAvctpNormalHeaderInfo& aHeaderInfo);
+ static TInt CheckStartHeaderInfo(const TAvctpStartHeaderInfo& aHeaderInfo);
+
+ };
+
+
+/**
+Contains the common information given in all AVCTP packet headers
+@internalComponent.
+
+This class by itself represents the headers of Continue and End
+packets.
+*/
+NONSHARABLE_CLASS(TAvctpHeaderInfo)
+ {
+public:
+ inline TAvctpHeaderInfo();
+ inline TAvctpHeaderInfo(SymbianAvctp::TTransactionLabel aTransactionLabel,
+ SymbianAvctp::TPacketType aPktType,
+ SymbianAvctp::TMessageType aMsgType);
+ inline SymbianAvctp::TPduHeaderLength HeaderLength() const;
+
+public:
+ SymbianAvctp::TTransactionLabel iTransactionLabel;
+ SymbianAvctp::TPacketType iPktType;
+ SymbianAvctp::TMessageType iMsgType;
+ };
+
+/**
+Contains the information given in a AVCTP normal packet header
+@internalComponent
+*/
+NONSHARABLE_CLASS(TAvctpNormalHeaderInfo) : public TAvctpHeaderInfo
+ {
+public:
+ inline TAvctpNormalHeaderInfo();
+ inline TAvctpNormalHeaderInfo(SymbianAvctp::TTransactionLabel aTransactionLabel,
+ SymbianAvctp::TPacketType aPktType,
+ SymbianAvctp::TMessageType aMsgType,
+ TBool aHasValidPid,
+ SymbianAvctp::TPid aPid);
+public:
+ TBool iHasValidPid;
+ SymbianAvctp::TPid iPid;
+ };
+
+/**
+Contains the information given in a AVCTP start packet header
+@internalComponent
+*/
+NONSHARABLE_CLASS(TAvctpStartHeaderInfo) : public TAvctpNormalHeaderInfo
+ {
+public:
+ inline TAvctpStartHeaderInfo();
+ inline TAvctpStartHeaderInfo(SymbianAvctp::TTransactionLabel aTransactionLabel,
+ SymbianAvctp::TPacketType aPktType,
+ SymbianAvctp::TMessageType aMsgType,
+ TBool aHasValidPid,
+ SymbianAvctp::TPid aPid,
+ TUint aFragmentsInSdu);
+public:
+ TUint iFragmentsInSdu;
+ };
+
+// Forward Declaration
+class HAvctpIncomingSdu;
+class TAvctpOutboundQ;
+
+/**
+The sap uses this class to take owner ship of data coming down from esock
+& que it.
+*/
+NONSHARABLE_CLASS(HAvctpOutgoingSdu)
+ {
+friend class TAvctpOutboundQ; // So it has access to iQueLink to do it's Q ordering & Dequeing
+friend class CAvctpProtocol; // So it can Q the Sdus
+
+public:
+ static HAvctpOutgoingSdu* NewL(const TAvctpNormalHeaderInfo& aHeaderInfo,
+ const TBTDevAddr& aAddr,
+ RMBufChain& aData);
+
+ static HAvctpOutgoingSdu* NewIpidResponseL(const HAvctpIncomingSdu& aIncomingSdu, TInt aChannel);
+
+ ~HAvctpOutgoingSdu();
+
+ inline const TBTDevAddr& BTAddr() const;
+ inline TAvctpNormalHeaderInfo& HeaderInfo(); //non-const so fragmenter can update header
+ inline RMBufChain& Data();
+ inline void AddToQueue(TAvctpOutboundQ* aOutboundQ);
+ inline TInt Channel() const;
+
+private:
+ inline HAvctpOutgoingSdu(const TAvctpNormalHeaderInfo& aHeaderInfo,
+ const TBTDevAddr& aAddr);
+ void ConstructL(RMBufChain& aData);
+
+private:
+ TDblQueLink iQueLink;
+ TAvctpNormalHeaderInfo iHeaderInfo;
+ TBTDevAddr iAddr;
+ RMBufChain iSduData;
+
+ TAvctpOutboundQ* iOutboundQ; // unowned
+ // iChannel is only used to carry the channel for the IPID responses.
+ // in all the other cases (i.e. for normal writing) the right fragmenter is picked up based on the current channel.
+ // But IPID responses are generated by the protocol, asynchronously, so we save the channel value here.
+ TUint iChannel;
+ };
+
+/**
+The sap uses this class to take owner ship of data coming up from below
+& que it.
+*/
+NONSHARABLE_CLASS(HAvctpIncomingSdu)
+ {
+friend class CAvctpSap; // So it can Q the Sdus
+
+public:
+ inline HAvctpIncomingSdu(const TBTDevAddr& aAddr,
+ RMBufChain& aSduData);
+
+ inline ~HAvctpIncomingSdu();
+ inline const TBTDevAddr& BTAddr() const;
+ inline const RMBufChain& Data() const;
+private:
+ TBTDevAddr iAddr;
+ RMBufChain iSduData; // takes ownership of inbound chain
+ TDblQueLink iQueLink;
+ };
+
+#include "avctppacket.inl"
+
+#endif // AVCTPPACKET_H