linklayerutils/packetlogger/inc/PacketLogger.h
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/linklayerutils/packetlogger/inc/PacketLogger.h	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,129 @@
+/**
+* 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:
+* Networking packet logging utility
+* 
+*
+*/
+
+
+
+/**
+ @file
+*/
+
+#ifndef __PACKETLOGGER_H__
+#define __PACKETLOGGER_H__
+
+//this file defines the __FLOG_ACTIVE flag
+#include <comms-infras/commsdebugutility.h>
+
+#if defined __FLOG_ACTIVE
+
+#include <e32base.h>
+#include <es_mbuf.h>
+class RFileLogger;
+
+/**
+ * Class containing methods for dumping ip
+ * packets of different formats.
+ * The output is written to the log file 
+ * produced by comms debug utility.
+ * The supported output formats are listed with the 
+ * TDumpType enum.
+ * This class cannot be derived from.
+ * This class should be active only if __FLOG_ACTIVE
+ * flag is defined. To ensure that use the macros
+ * defined below. A sample usage would be:
+ * @code
+ *   __PACKETLOG_DECLARATION_MEMBER
+ *   __PACKETLOG_NEWL(aTag, aFileName, aDumpType, aLinkType);
+ *   ...
+ *   __PACKETLOG_WRITE_PACKET(aPacket, aDirection);
+ *   ...
+ *   __PACKETLOG_DELETE;
+ * @endcode
+ * If the __FLOG_ACTIVE flag is not set, the macros map
+ * to nothing.
+ */
+class CPacketLogger : public CBase
+	{
+public:
+	/** Output dump formats supported by this class */
+	enum TDumpType
+		{
+		/** Produced dump will be in tcp dump format */
+		ETcpDump,
+		/** Produced dump will be in ppp dump format */
+		EPppDump
+		};
+
+public:
+	IMPORT_C static CPacketLogger* NewL(const TDesC8& aTag, const TDesC8& aFileName, const TDumpType aDumpType, const TInt aLinkType);
+	IMPORT_C ~CPacketLogger();
+	IMPORT_C void WritePacket(const RMBufChain& aPacket, const TUint8 aDirection);
+	IMPORT_C void WritePacket(const TDesC8& aPacket, const TUint8 aDirection);
+	IMPORT_C void WriteText(const TDesC8& aText);
+
+private:
+	void ConstructL(const TDesC8& aTag, const TDesC8& aFileName, const TDumpType aDumpType, const TInt aLinkType);
+	CPacketLogger();
+
+private:
+	void WriteTcpDumpHeader(const TInt aLinkType);
+	void TcpDumpPacket(const TDesC8& aPacket);
+	
+	void WritePppDumpHeader();
+	void PppDumpPacket(const TDesC8& aPacket, const TUint8 aDirection);
+
+private:
+	/** Specifies the output format for the dumps */
+	TDumpType iDumpType;
+	/** Marks the start time when the last packet was received for dumping */
+	TInt64 iTimeLastPacket;
+	/** The time between system ticks, in microseconds. */
+	TInt64 iTickPeriod;
+	/** Counter for the number of packets successfully dumped */
+	TUint32 iPacketCounter;
+	/** Internal buffer to optimize memory allocation for WritePacket(const RMBufChain& aPacket, const TUint8 aDirection)*/
+	HBufC8* iHBuf;
+	/** Used for directing output to comms debug utility */
+	__FLOG_DECLARATION_MEMBER;
+	};
+
+#define __PACKETLOG_DECLARATION_MEMBER	   CPacketLogger* __packetLogger__
+
+#define __PACKETLOG_NEWL(aTag, aFileName, aDumpType, aDumpFormat) __packetLogger__ = CPacketLogger::NewL(aTag, aFileName, aDumpType, aDumpFormat)
+
+#define __PACKETLOG_DELETE  delete __packetLogger__; __packetLogger__ = NULL
+
+#define __PACKETLOG_WRITE_PACKET(aPacket, aDirection) __packetLogger__->WritePacket(aPacket, aDirection)
+
+#define __PACKETLOG_LOG(aText) __packetLogger__->WriteText(aText)
+
+#else //__FLOG_ACTIVE
+
+#define __PACKETLOG_DECLARATION_MEMBER   TInt32 __noLogger__
+
+#define __PACKETLOG_NEWL(aTag, aFileName, aDumpType, aDumpFormat)
+
+#define __PACKETLOG_DELETE
+
+#define __PACKETLOG_WRITE_PACKET(aPacket, aDirection)
+
+#define __PACKETLOG_LOG(aText) __packetLogger__->WriteText(aText)
+
+#endif //__FLOG_ACTIVE
+
+#endif // __PACKETLOGGER_H__