diff -r 000000000000 -r a03f92240627 memspy/Engine/Include/Sink/MemSpyEngineOutputSinkFile.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/memspy/Engine/Include/Sink/MemSpyEngineOutputSinkFile.h Tue Feb 02 01:57:15 2010 +0200 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 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: +* +*/ + +#ifndef MEMSPYENGINEOUTPUTSINKFILE_H +#define MEMSPYENGINEOUTPUTSINKFILE_H + +// System includes +#include +#include + +// User includes +#include + +// Classes referenced +class CMemSpyEngine; +class CMemSpyEngineFileHolder; + +NONSHARABLE_CLASS( CMemSpyEngineOutputSinkFile ) : public CMemSpyEngineOutputSink + { +public: + static CMemSpyEngineOutputSinkFile* NewL( CMemSpyEngine& aEngine ); + ~CMemSpyEngineOutputSinkFile(); + +public: + CMemSpyEngineOutputSinkFile( CMemSpyEngine& aEngine ); + void ConstructL(); + +private: // From CMemSpyEngineOutputSink + void ProcessSuspendedL( TProcessId aId ); + void ProcessResumed( TProcessId aId ); + TMemSpySinkType Type() const; + void DataStreamBeginL( const TDesC& aContext, const TDesC& aFolder, const TDesC& aExtension ); + void DataStreamBeginL( const TDesC& aContext, const TDesC& aFolder, const TDesC& aExtension, TBool aOverwrite ); + void DataStreamBeginL( const TDesC& aContext, const TDesC& aFolder, const TDesC& aExtension, TBool aOverwrite, TBool aUseTimeStamp ); + void DataStreamEndL(); + void DoOutputLineL( const TDesC& aLine ); + void DoOutputRawL( const TDesC8& aData ); + TBool IsPrefixAllowed( const TDesC& aPrefix ); + +private: // Internal + void IdentifyFileServerProcessIdL(); + void ConstructDefaultLogFileL(); + void DisableAllBuffersAfterFileServerResumedL(); + CMemSpyEngineFileHolder& HeadLog() const; + +private: + RFs iFsSession; + RPointerArray< CMemSpyEngineFileHolder > iLogs; + RPointerArray< CMemSpyEngineFileHolder > iLogsPendingDestruction; + + TUint iFileServerProcessId; + TBool iFileServerSuspended; + +private: + friend class CMemSpyEngineFileHolder; + }; + + + + +NONSHARABLE_CLASS( CMemSpyEngineFileHolder ) : public CBase + { +public: + static CMemSpyEngineFileHolder* NewLC( CMemSpyEngineOutputSinkFile& aParent ); + static CMemSpyEngineFileHolder* NewL( CMemSpyEngineOutputSinkFile& aParent, CMemSpyEngineSinkMetaData* aMetaData ); + static CMemSpyEngineFileHolder* NewLogToRAML( CMemSpyEngineOutputSinkFile& aParent, CMemSpyEngineSinkMetaData* aMetaData ); + ~CMemSpyEngineFileHolder(); + +private: + CMemSpyEngineFileHolder( CMemSpyEngineOutputSinkFile& aParent, CMemSpyEngineSinkMetaData* aMetaData = NULL ); + void ConstructL(); + void CommonConstructL(); + +public: // API + void WriteLineL( const TDesC& aData ); + void WriteRawL( const TDesC8& aData ); + void EnableBufferL(); + void DisableBufferL(); + const TDesC& FileName() const; + // + inline TBool UsingBuffer() const { return iEntireFileBuffer != NULL; } + inline TBool IsMainLog() const { return iIsMainLog; } + +private: // Internal + void OpenFileL(); + void AddToWorkingBufferL( const TDesC8& aText ); + void FlushWorkingBufferL(); + void PrepareFileL( const TDriveNumber* aForceDrive = NULL ); + HBufC* CleanContextInfoLC( const TDesC& aContext ); + HBufC* GenerateFileNameLC( const TDriveNumber* aForceDrive = NULL ); + RFs& FsSession(); + +private: // Data members + CMemSpyEngineOutputSinkFile& iParent; + CMemSpyEngineSinkMetaData* iMetaData; + RFile iFile; + HBufC* iFileName; + HBufC8* iLineBuffer; + TBool iIsMainLog; + CBufFlat* iEntireFileBuffer; + CBufFlat* iWorkingBuffer; + }; + + + +#endif \ No newline at end of file