williamr@2: /** williamr@2: * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * Networking packet logging utility williamr@2: * williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @file williamr@2: */ williamr@2: williamr@2: #ifndef __PACKETLOGGER_H__ williamr@2: #define __PACKETLOGGER_H__ williamr@2: williamr@2: //this file defines the __FLOG_ACTIVE flag williamr@2: #include williamr@2: williamr@2: #if defined __FLOG_ACTIVE williamr@2: williamr@2: #include williamr@2: #include williamr@2: class RFileLogger; williamr@2: williamr@2: /** williamr@2: * Class containing methods for dumping ip williamr@2: * packets of different formats. williamr@2: * The output is written to the log file williamr@2: * produced by comms debug utility. williamr@2: * The supported output formats are listed with the williamr@2: * TDumpType enum. williamr@2: * This class cannot be derived from. williamr@2: * This class should be active only if __FLOG_ACTIVE williamr@2: * flag is defined. To ensure that use the macros williamr@2: * defined below. A sample usage would be: williamr@2: * @code williamr@2: * __PACKETLOG_DECLARATION_MEMBER williamr@2: * __PACKETLOG_NEWL(aTag, aFileName, aDumpType, aLinkType); williamr@2: * ... williamr@2: * __PACKETLOG_WRITE_PACKET(aPacket, aDirection); williamr@2: * ... williamr@2: * __PACKETLOG_DELETE; williamr@2: * @endcode williamr@2: * If the __FLOG_ACTIVE flag is not set, the macros map williamr@2: * to nothing. williamr@2: */ williamr@2: class CPacketLogger : public CBase williamr@2: { williamr@2: public: williamr@2: /** Output dump formats supported by this class */ williamr@2: enum TDumpType williamr@2: { williamr@2: /** Produced dump will be in tcp dump format */ williamr@2: ETcpDump, williamr@2: /** Produced dump will be in ppp dump format */ williamr@2: EPppDump williamr@2: }; williamr@2: williamr@2: public: williamr@2: IMPORT_C static CPacketLogger* NewL(const TDesC8& aTag, const TDesC8& aFileName, const TDumpType aDumpType, const TInt aLinkType); williamr@2: IMPORT_C ~CPacketLogger(); williamr@2: IMPORT_C void WritePacket(const RMBufChain& aPacket, const TUint8 aDirection); williamr@2: IMPORT_C void WritePacket(const TDesC8& aPacket, const TUint8 aDirection); williamr@2: IMPORT_C void WriteText(const TDesC8& aText); williamr@2: williamr@2: private: williamr@2: void ConstructL(const TDesC8& aTag, const TDesC8& aFileName, const TDumpType aDumpType, const TInt aLinkType); williamr@2: CPacketLogger(); williamr@2: williamr@2: private: williamr@2: void WriteTcpDumpHeader(const TInt aLinkType); williamr@2: void TcpDumpPacket(const TDesC8& aPacket); williamr@2: williamr@2: void WritePppDumpHeader(); williamr@2: void PppDumpPacket(const TDesC8& aPacket, const TUint8 aDirection); williamr@2: williamr@2: private: williamr@2: /** Specifies the output format for the dumps */ williamr@2: TDumpType iDumpType; williamr@2: /** Marks the start time when the last packet was received for dumping */ williamr@2: TInt64 iTimeLastPacket; williamr@2: /** The time between system ticks, in microseconds. */ williamr@2: TInt64 iTickPeriod; williamr@2: /** Counter for the number of packets successfully dumped */ williamr@2: TUint32 iPacketCounter; williamr@2: /** Internal buffer to optimize memory allocation for WritePacket(const RMBufChain& aPacket, const TUint8 aDirection)*/ williamr@2: HBufC8* iHBuf; williamr@2: /** Used for directing output to comms debug utility */ williamr@2: __FLOG_DECLARATION_MEMBER; williamr@2: }; williamr@2: williamr@2: #define __PACKETLOG_DECLARATION_MEMBER CPacketLogger* __packetLogger__ williamr@2: williamr@2: #define __PACKETLOG_NEWL(aTag, aFileName, aDumpType, aDumpFormat) __packetLogger__ = CPacketLogger::NewL(aTag, aFileName, aDumpType, aDumpFormat) williamr@2: williamr@2: #define __PACKETLOG_DELETE delete __packetLogger__; __packetLogger__ = NULL williamr@2: williamr@2: #define __PACKETLOG_WRITE_PACKET(aPacket, aDirection) __packetLogger__->WritePacket(aPacket, aDirection) williamr@2: williamr@2: #define __PACKETLOG_LOG(aText) __packetLogger__->WriteText(aText) williamr@2: williamr@2: #else //__FLOG_ACTIVE williamr@2: williamr@2: #define __PACKETLOG_DECLARATION_MEMBER TInt32 __noLogger__ williamr@2: williamr@2: #define __PACKETLOG_NEWL(aTag, aFileName, aDumpType, aDumpFormat) williamr@2: williamr@2: #define __PACKETLOG_DELETE williamr@2: williamr@2: #define __PACKETLOG_WRITE_PACKET(aPacket, aDirection) williamr@2: williamr@2: #define __PACKETLOG_LOG(aText) __packetLogger__->WriteText(aText) williamr@2: williamr@2: #endif //__FLOG_ACTIVE williamr@2: williamr@2: #endif // __PACKETLOGGER_H__