bluetoothcommsprofiles/btpan/bnep/RBnepFrame.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothcommsprofiles/btpan/bnep/RBnepFrame.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,143 @@
+// 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:
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef __RBNEPFRAME_H
+#define __RBNEPFRAME_H 
+
+#include <e32def.h>
+#include <nifmbuf.h>
+#include "RBnepControl.h"
+#include "MLinkManager.h"
+
+class TBTDevAddr;
+class RMBufChain;
+
+/**
+* KBnep is a flag that gets set by the BNEP packet driver to indicate
+* to the PAN NAP IP hooks that the packet has come from a remote Bluetooth
+* PAN device.
+*/
+const TUint KBnep = 0x00000100;
+
+/**
+* KBnepForwardingAllowed is also set by the BNEP packet driver to
+* indicate to the PAN NAP IP hooks that the packet has come from a remote
+* Bluetooth PAN device that has been granted access to the public network.
+*/
+const TUint KBnepForwardingAllowed = 0x00000200;
+
+const TInt KGeneralEthernetHeaderLength 				= 13;
+const TInt KCompressedEthernetSourceOnlyHeaderLength 	= 7;
+const TInt KCompressedEthernetDestOnlyHeaderLength 		= 7;
+const TInt KCompressedEthernetHeaderLength 				= 1;
+
+const TInt KNetworkProtocolTypeFieldLength 				= 2;
+const TInt KIEEE802_1QTagFieldLength 					= 2;
+
+
+/**
+   A BNEP frame.
+   Built from one of an ethernet frame, a BNEP frame or a sequence of commands,
+   this object encapsulates the data held by a BNEP frame.
+*/
+NONSHARABLE_CLASS(RBnepFrame) 
+    {
+public:
+    enum TPacketContents
+        {
+        EDataFrame 			= 0x01,
+        EControl 			= 0x02,
+        EHas1Q 				= 0x04,
+        EExtensionHeaders	= 0x08,
+        };
+
+    enum TDestAddrType
+        {
+        ELocal,
+        EMulticast,
+        ENormal
+        };
+
+    RBnepFrame();
+    void BuildBnepFrameL(RMBufChain& aChain, 
+                         const TBTDevAddr& aLocalAddr, 
+                         const TBTDevAddr& aRemoteAddr,
+						 TBool aFilterEthernetPayload);
+
+    void BuildEthernetFrameL (RMBufPacket& aChain);
+    const TBTDevAddr& DestAddr () const;
+    TDestAddrType DestinationType () const;
+    TBool Includes (TPacketContents aContent) const;
+    void InsertControl (RBnepControl* aCommand);
+    TBnepPacketType ParseBnepFrameL (RMBufChain& aInboundChain, const TBTDevAddr& aLocalAddr, const TBTDevAddr& aRemoteAddr);
+    void ParseEthernetFrameL (RMBufChain& aFrame);
+    void Reset ();
+    const TBTDevAddr& SrcAddr () const;
+    TBool IsEmpty ();
+    void ExecuteControl (MLinkManager& aController);
+    TUint16 Protocol () const;
+	TInt PayloadLength() const;
+	void SetUplinkAccessAllowedForBnepLink(TBool aUplinkAccessAllowedForBnepLink);
+	
+private:
+    void BuildBnepControlFrameL (RMBufChain& aChain);
+    void BuildBnepDataFrameL(RMBufChain& aChain, const TBTDevAddr& aLocalAddr, const TBTDevAddr& aRemoteAddr, TBool aFilterEthernetPayload);
+    void SetContents (TPacketContents aContent);
+    void TrimBTAddrL (RMBufChain& aChain, TBTDevAddr& aAddr);
+    void TrimUint16L (RMBufChain& aChain, TUint16& aInt);
+    void ParseL (RMBufChain& aInboundChain, TBnepPacketType aType, TBool aExt);
+    TInt ParseExtensionL (RMBufChain& aInboundChain);
+    void ExtractControlL (RMBufChain& aInboundChain, TInt aLength);
+
+private: 
+    // Data Members for Has Relationships
+    TSglQue< RBnepControl  > iCommandQueue;
+    TBTDevAddr iDestAddr;
+    TBTDevAddr iSrcAddr;
+    TUint16 iProtocol;
+    TUint8 iPacketContents;
+	TBool iUplinkAccessAllowedForBnepLink;
+	
+	// This member holds the contents of the frame excluding the BT
+	// addresses and the protocol and any control headers.
+    RMBufChain iFramePayload;
+    };
+
+
+
+
+// Class RBnepFrame 
+
+inline void RBnepFrame::SetContents (TPacketContents aContent)
+    {
+    iPacketContents |= static_cast<TUint8>(aContent); 
+    }
+
+inline TBool RBnepFrame::IsEmpty ()
+    {
+    return iCommandQueue.IsEmpty();
+    }
+
+inline TUint16 RBnepFrame::Protocol () const
+    {
+    return iProtocol;
+    }
+
+#endif