diff -r 000000000000 -r 33413c0669b9 vpnengine/eventviewer/inc/eventviewer2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/eventviewer/inc/eventviewer2.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,284 @@ +/* +* Copyright (c) 2003-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: Log File Handler. +* +*/ + + +#ifndef __EVENTVIEWER2__ +#define __EVENTVIEWER2__ + +#include +#include +#include +#include +#include +#include + +//////////////////////////////////////////////////////// +// Literals +//////////////////////////////////////////////////////// +#include "eventmediatorapi.h" + +#define LOG_ELEM_TRAILER_LTH 12 +#define LOG_ELEM_HEADER_LTH 32 +#define KBYTES_TO_BYTES 1024 +//efine ELEM_HEADER_LTH 8 +#define FILE_BEGIN 0 +#define END_MARK_1 0xefbeadde +#define END_MARK_2 0xeeabedfe +#define LOG_FILE_ID 0x474F4C45 // ELOG + + +///////////////////////////////////////////////////////////////// +// Enumeration of log event categories. +//////////////////////////////////////////////////////////////// + +enum TLogCategory2 + { + ELogInfo, + ELogWarning, + ELogError, + ELogDebug + }; + + +///////////////////////////////////////////////////////// +// TEventProperties - data to be returned with the event +// text to the caller +///////////////////////////////////////////////////////// +struct TEventProperties + +{ + TUint32 iSourceComponent; // Uid of source component + TTime iTimeStamp; // 64 bit time stamp + TLogCategory2 iCategory; // Info, Warning, Error, Debug + TUint32 iMsgId; // MsgId in localization file + TUint32 iEventNumber; // Event number +}; + + +///////////////////////////////////////////////////////// +// Packed File Header +///////////////////////////////////////////////////////// +class TFileHeader +{ + public: // Methods + inline TInt32 GetFileId() const {return ((TInt32)(u.iData32[0]));}; + inline TInt32 GetPositionOfNextFree() const {return ((TInt32)(u.iData32[1]));}; + inline TInt32 GetPositionOfWrapping() const {return ((TInt32)(u.iData32[2]));}; + inline TInt32 GetCurrEventNumber() const {return ((TInt32)(u.iData32[3]));}; + + private: + union + { + TUint32 iData32[4]; + } u; +}; + + + +///////////////////////////////////////////////////////// +// Unpacked File Header +///////////////////////////////////////////////////////// + +class TUnpackedFileHeader + { + public: + TUint32 iFileId; // ELOG + TUint32 iPositionOfNextFree; + TUint32 iPositionOfWrapping; + TUint32 iCurrEventNumber; + }; + +///////////////////////////////////////////////////////// +// Packed Log Element +/////////////////////////////////////////////////////// +class TLogElem + { + public: // Methods + inline TInt32 GetEventLength() const {return ((TInt32)(u.iData32[0]));}; + inline TInt32 GetEventNumber() const {return ((TInt32)(u.iData32[1]));}; + inline TInt64 GetTimeStamp() const + { + return MAKE_TINT64(u.iData32[3], u.iData32[2]);; + }; + inline TInt32 GetSourceComponent() const {return ((TInt32)(u.iData32[4]));}; + inline TLogCategory2 GetCategory() const {return ((TLogCategory2)(u.iData32[5]));}; + inline TInt32 GetMsgId() const {return ((TInt32)(u.iData32[6]));}; + inline TInt32 GetDescrCount() const {return ((TInt32)(u.iData32[7]));}; + +private: + union + { + TUint32 iData32[8]; + } u; + }; + +///////////////////////////////////////////////////////// +// Unpacked Log Element +///////////////////////////////////////////////////////// + +class TUnpackedLogElem +{ + public: + TUint32 iEventLength; + TUint32 iEventNumber; + TInt64 iTimeStamp; + TUint32 iSourceComponent; + TLogCategory2 iCategory; + TUint32 iMsgId; + TUint32 iDescrCount; +}; + +///////////////////////////////////////////////////////// +// Packed Log Element trailer +///////////////////////////////////////////////////////// +class TLogElemTrailer +{ + public: // Methods + inline TInt32 GetEndMark1() const {return ((TInt32)(u.iData32[0]));}; + inline TInt32 GetEndMark2() const {return ((TInt32)(u.iData32[1]));}; + inline TInt32 GetEventLength() const {return ((TInt32)(u.iData32[2]));}; + + private: + union + { + TUint32 iData32[3]; + } u; +}; + +///////////////////////////////////////////////////////// +// Unpacked Element trailer +///////////////////////////////////////////////////////// + +class TUnpackedLogElemTrailer +{ + public: + TUint32 iEndMark1; + TUint32 iEndMark2; + TUint32 iEventLength; +}; + + +///////////////////////////////////////////////////////// +// EventViewer Class +///////////////////////////////////////////////////////// +class CEventViewer : public CBase +{ + + + // + // EventViewer API in EventViewer.cpp + // + public: + IMPORT_C static CEventViewer* NewL(); + IMPORT_C ~CEventViewer(); + void ConstructL(); + + IMPORT_C TInt GetMostRecentEvent (HBufC*& aEventText, + TEventProperties& aEventProperties); + + IMPORT_C TInt GetNextEvent (HBufC*& aEventText, + TEventProperties& aEventProperties); + + IMPORT_C TInt GetPreviousEvent (HBufC*& aEventText, + TEventProperties& aEventProperties); + + IMPORT_C TInt GetEventUsingEventNumber( + HBufC*& aEventText, + TUint32 aEventNumber, + TEventProperties& aEventProperties); + + IMPORT_C TInt GetOldestEvent (HBufC*& aEventText, + TEventProperties& aEventProperties); + + IMPORT_C TInt DeleteLogFile(); + + // + // EventViewer internal functions in EventViewer.cpp + // + private: + TInt GetRequestedEvent( HBufC*& aEventText, + TEventProperties& aEventProperties, + TUint32 aEventNumber, + TInt aMethodId); + + TInt GetRequestedEventL( HBufC*& aEventText, + TEventProperties& aEventProperties, + TUint32 aEventNumber, + TInt aMethodId); + + // + // EventViewer internal functions in LogFileHandler.cpp + // + private: + TInt OpenLogFile(); + void CloseLogFile(); + void TakeCopyOfFileHeader(TUnpackedFileHeader& asrc, + TUnpackedFileHeader& adest); + void OpenResourceFileL(); + + TInt ReadWholeLogFileToMemoryBuffer(); + TInt ReadLogFileHeader(); + TInt CopyPackedFileHeaderToUnpackedObject( TDesC8& aFileHeader); + TBool IsLogFileModified(); + TInt EventLookup(TUint32 aEventNumber); + TInt GetStartPositionOfLogElem(TUint32 aEndOfLogElemPosition, + TUint32* aLogElemPosition); + void CopyPackedLogElemToUnpackedObject(TUint32 iPositionOfCurrLogElem); + HBufC* SearchEventTextL( TUint32 aMsgId); + HBufC* ModifyEventText(HBufC* aEventTextSrc, + TUint32 aDescrCount, // Count of descriptor elements + TUint32 aDescrDataPosition); // Descriptors: lth data lth data.... + HBufC* FormatEvent(TInt aDescrCount, // Count of lth/data pairs + const TDesC8& aDescrList, // lth lth ... data data ... + const TDesC& aEventString); // string got from localisation file + TInt AnalyseConvSpec( + const TDesC& SourceBuf, // + TInt& aOffset, // offset of conversion spec element + TUint32& aConvType, // U or N (KConvTypex) + TUint32& aSeqNumber); // Seq number included to conv spec elem + HBufC* GetDescriptorData ( + TUint32 aDescrCount, // Count of lth/data pairs + const TDesC8& aDescrList, // lth lth ... data data ... + TUint32 aConvType, // KConvTypeN or KConvTypeU + TUint32 aDescrNumber); // Seq number of lth/data pair + TInt BufferAppend(HBufC*& aDestBuf, + const TDesC& aString); + + void DoDeleteLogFileL(); // In LogFileHandler.cpp + + private: + RFs iFS; + REventMediator iEventMediator; + TUnpackedFileHeader iCurrFileHeader; + TUnpackedFileHeader iPreviousFileHeader; + TUnpackedLogElem iUnpackedLogElem; + TUnpackedLogElemTrailer iLogElemTrailer; + TUint32 iRequestedEventNumber; + HBufC8* iLogFileBuf; + TInt iLogFileSize; + TInt iWrappingOccured; + TUint32 iPositionOfCurrLogElem; + RResourceFile iResourceFile; + HBufC* iResultBuf; // Formatted event is build to this buffer + + // + // Current API call parameters + // + HBufC** iEventText; + TEventProperties* iEventProperties; +}; +#endif \ No newline at end of file