--- a/stif/Logger/src/RDebugOutput.cpp Mon Jun 28 15:36:07 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,684 +0,0 @@
-/*
-* 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: This module contains implementation of CRDebugOutput
-* class member functions.
-*
-*/
-
-// INCLUDE FILES
-#include <e32std.h>
-#include "Output.h"
-#include "RDebugOutput.h"
-#include "LoggerOverFlow.h"
-
-// EXTERNAL DATA STRUCTURES
-// None
-
-// EXTERNAL FUNCTION PROTOTYPES
-// None
-
-// CONSTANTS
-// None
-
-// MACROS
-// None
-
-// LOCAL CONSTANTS AND MACROS
-// None
-
-// MODULE DATA STRUCTURES
-// None
-
-// LOCAL FUNCTION PROTOTYPES
-// None
-
-// FORWARD DECLARATIONS
-// None
-
-// ==================== LOCAL FUNCTIONS =======================================
-// None
-
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CRDebugOutput
-
- Method: CRDebugOutput
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: TLoggerType aLoggerType: in: File type
- TBool aWithTimeStamp: in: For timestamp
- TBool aWithLineBreak: in: For line break
- TBool aWithEventRanking: in: For events ranking to file
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CRDebugOutput::CRDebugOutput( CStifLogger::TLoggerType aLoggerType,
- TBool aWithTimeStamp,
- TBool aWithLineBreak,
- TBool aWithEventRanking ) :
- COutput()
- {
- // Indicates file type
- iLoggerType = aLoggerType;
-
- // Time stamp indicator
- iWithTimeStamp = aWithTimeStamp;
-
- // Line break indicator
- iWithLineBreak = aWithLineBreak;
-
- // Log event ranking indicator
- iWithEventRanking = aWithEventRanking;
-
- // Data buffer
- iDataHBuf = NULL;
- iDataHBuf1 = NULL;
- iDataHBuf2 = NULL;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CRDebugOutput
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CRDebugOutput::ConstructL( TInt aStaticBufferSize )
- {
- if( aStaticBufferSize != 0)
- {
- iDataHBuf1 = HBufC::NewL( aStaticBufferSize );
- iDataHBuf2 = HBufC::NewL( aStaticBufferSize );
- iStaticBufferSize = aStaticBufferSize;
- }
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CRDebugOutput
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: const TDesC& aTestPath: in: Log path
- const TDesC& aTestFile: in: Log filename
- TLoggerType aLoggerType: in: File type
- TBool aOverWrite: in: For file overwrite
- TBool aWithTimeStamp: in: For timestamp
- TBool aWithLineBreak: in: For line break
- TBool aWithEventRanking: in: For events ranking to file
- TBool aThreadIdToLogFile: in: Indicator to thread id adding to
- end of the log file
- TBool aCreateLogDir: in: Indicator to directory creation
-
- Return Values: CRDebugOutput*: pointer to CFileOutput object
-
- Errors/Exceptions: Leaves if ConstructL leaves
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CRDebugOutput* CRDebugOutput::NewL( const TDesC& /* aTestPath */,
- const TDesC& /* aTestFile */,
- CStifLogger::TLoggerType aLoggerType,
- TBool /* aOverWrite */,
- TBool aWithTimeStamp,
- TBool aWithLineBreak,
- TBool aWithEventRanking,
- TBool /* aThreadIdToLogFile */,
- TBool /* aCreateLogDir */,
- TInt aStaticBufferSize)
- {
- // Create CFileOutput object fileWriter
- CRDebugOutput* rdebugWriter = new (ELeave) CRDebugOutput(
- aLoggerType,
- aWithTimeStamp,
- aWithLineBreak,
- aWithEventRanking );
-
- CleanupStack::PushL( rdebugWriter );
- rdebugWriter->ConstructL( aStaticBufferSize );
- CleanupStack::Pop( rdebugWriter );
-
- return rdebugWriter;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CRDebugOutput
-
- Method: ~CRDebugOutput
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CRDebugOutput::~CRDebugOutput()
- {
- delete iDataHBuf1;
- delete iDataHBuf2;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CRDebugOutput
-
- Method: Write
-
- Description: Write log information or data to the file. 16 bit.
-
- Parameters: TBool aWithTimeStamp: in: Is time stamp flag used
- TBool aWithLineBreak: in: Is line break flag used
- TBool aWithEventRanking: in: Is event ranking flag used
- const TDesC& aData: in: Logged or saved data
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CRDebugOutput::Write( TBool aWithTimeStamp,
- TBool aWithLineBreak,
- TBool aWithEventRanking,
- const TDesC& aData )
- {
- TInt currentEndPos( 0 ); // Current position in aData parsing
- // to partitions
-
- // a logInfo size must be at least the minimumSpace size
- TInt minimumSpace = ( KMaxTimeStamp + KMaxHtmlLineBreak + KMaxLineBreak +
- KMaxEventRanking + KMaxSpace );
-
- TPtr logInfo(0, 0);
- HBufC* dataHBuf = NULL;
-
- if(iDataHBuf1 != NULL)
- {
- TInt messageLength = aData.Length() + minimumSpace;
- if( messageLength > iStaticBufferSize )
- {
- RDebug::Print(_L("Warning: buffer size too small, not able to log!"));
- return KErrOverflow;
- }
- // Using the HBufC created in ConstructL
- logInfo.Set( iDataHBuf1->Des() ); // Memory allocation for data
-
- }
- else
- {
- // Buffer size is minimum space plus aData(aData length may be 0 but
- // time stamp is used)
- if( ( aData.Length() + minimumSpace ) < ( KMaxLogData + minimumSpace ) )
- {
- dataHBuf = HBufC::New( aData.Length() + minimumSpace );
- }
- // Buffer size is over KMaxLogData
- else
- {
- dataHBuf = HBufC::New( aData.Length() );
- }
- if( dataHBuf == NULL )
- {
- return KErrNoMemory;
- }
- logInfo.Set( dataHBuf->Des() ); // Memory allocation for data
- }
-
- logInfo.Copy( aData ); // Copy data
-
- TPtr data( 0, 0 );
-
- // Add time stamp and/or event ranking if required
- EventAndTimeCombiner( logInfo, data, aWithTimeStamp,
- aWithLineBreak, aWithEventRanking );
-
- while( data.Length() > currentEndPos )
- {
- // In this loop round data length is/under 254
- if( ( data.Length() - currentEndPos ) <= KMaxRDebug )
- {
- // Current positions to rest of data position
- logInfo = data.Mid( currentEndPos, ( data.Length() - currentEndPos ) );
- // Prevent rdebug from parsing text string as formating string
- RDebug::Print( _L( "%S" ), &logInfo );
- }
- // In this loop round data length is over 254
- else
- {
- // Current positions to KMaxRDebug that includes space for ' ->'
- logInfo = data.Mid( currentEndPos, KMaxRDebug );
- // Prevent rdebug from parsing text string as formating string
- RDebug::Print( _L( "%S ->" ), &logInfo );
- }
- currentEndPos = currentEndPos + KMaxRDebug;
- }
-
- delete dataHBuf;
-
- if(iDataHBuf2 == NULL)
- {
- delete iDataHBuf;
- iDataHBuf = NULL;
- }
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CRDebugOutput
-
- Method: Write
-
- Description: Write log information or data to the file. 8 bit.
-
- Parameters: TBool aWithTimeStamp: in: Is time stamp flag used
- TBool aWithLineBreak: in: Is line break flag used
- TBool aWithEventRanking: in: Is event ranking flag used
- const TDesC8& aData: in: Logged or saved data
-
- Return Values: TInt
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CRDebugOutput::Write( TBool aWithTimeStamp,
- TBool aWithLineBreak,
- TBool aWithEventRanking,
- const TDesC8& aData )
- {
- TInt currentEndPos( 0 ); // Current position in aData parsing
- // to partitions
- TPtr logInfo(0, 0);
-
- // a logInfo size must be at least the minimumSpace size
- TInt minimumSpace = ( KMaxTimeStamp + KMaxHtmlLineBreak + KMaxLineBreak +
- KMaxEventRanking + KMaxSpace );
- HBufC* dataHBuf = NULL;
- if(iDataHBuf1 != NULL)
- {
- if( ( aData.Length() + minimumSpace ) > iStaticBufferSize )
- {
- RDebug::Print(_L("Warning: buffer size too small, not able to log!"));
- return KErrOverflow;
- }
- logInfo.Set( iDataHBuf1->Des() ); // Memory allocation for data
- }
- else
- {
- // 8 bit data to 16 bit because RDebug::Print don't support 8 bit printing
-
- // Buffer size is minimum space plus aData(aData length may be 0 but
- // time stamp is used)
- if( ( aData.Length() + minimumSpace ) < ( KMaxLogData + minimumSpace ) )
- {
- dataHBuf = HBufC::New( aData.Length() + minimumSpace );
- }
- // Buffer size is over KMaxLogData
- else
- {
- dataHBuf = HBufC::New( aData.Length() );
- }
- if( dataHBuf == NULL )
- {
- return KErrNoMemory;
- }
- logInfo.Set( dataHBuf->Des() ); // Memory allocation for data
- }
-
- logInfo.Copy( aData ); // Copy data
-
- TPtr data( 0, 0 );
-
- // Add time stamp and/or event ranking if required
- EventAndTimeCombiner( logInfo, data, aWithTimeStamp,
- aWithLineBreak, aWithEventRanking );
- while( data.Length() > currentEndPos )
- {
- // In this loop round data length is/under 254
- if( ( data.Length() - currentEndPos ) <= KMaxRDebug )
- {
- // Current positions to rest of data position
- logInfo = data.Mid( currentEndPos, ( data.Length() - currentEndPos ) );
- // Prevent rdebug from parsing text string as formating string
- RDebug::Print( _L( "%S" ), &logInfo );
- }
- // In this loop round data length is over 254
- else
- {
- // Current positions to KMaxRDebug that includes space for ' ->'
- logInfo = data.Mid( currentEndPos, KMaxRDebug );
- // Prevent rdebug from parsing text string as formating string
- RDebug::Print( _L( "%S ->" ), &logInfo );
- }
- currentEndPos = currentEndPos + KMaxRDebug;
- }
-
- delete dataHBuf;
-
- if(iDataHBuf2 == NULL)
- {
- delete iDataHBuf;
- iDataHBuf = NULL;
- }
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CRDebugOutput
-
- Method: EventAndTimeCombiner
-
- Description: Event ranking and time stamp combimer.
-
- Parameters: TLogInfo aLogInfo: inout: Overflowed data
- TPtr8& aData: inout: Combined data
- TBool aWithTimeStamp: in: Is time stamp flag used
- TBool aWithLineBreak: in: Is line break flag used
- TBool aWithEventRanking: in: Is event ranking flag used
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CRDebugOutput::EventAndTimeCombiner( TPtr& aLogInfo,
- TPtr& aData,
- TBool aWithTimeStamp,
- TBool aWithLineBreak,
- TBool aWithEventRanking )
- {
- TInt extraLength( 0 );
-
- // Extra space calculation
- if( iWithEventRanking && aWithEventRanking )
- {
- extraLength = extraLength + KMaxEventRanking + KMaxSpace;
- }
- if( ( iLoggerType == CStifLogger::EHtml ) && iWithLineBreak && aWithLineBreak )
- {
- extraLength = extraLength + KMaxHtmlLineBreak;
- }
- if( iWithLineBreak && aWithLineBreak )
- {
- extraLength = extraLength + KMaxLineBreak;
- }
- if( aWithTimeStamp && iWithTimeStamp )
- {
- extraLength = extraLength + KMaxTimeStamp;
- }
-
- // Calculated space
- TInt space = aLogInfo.Length();
-
- if(iDataHBuf2 != NULL)
- {
- aData.Set( iDataHBuf2->Des() ); // Memory allocation for data
- aData.Copy( _L("") ); // Initialize aData buffer
- }
- else
- {
- iDataHBuf = HBufC::New( space + extraLength );
- if( iDataHBuf == NULL )
- {
- return;
- }
- aData.Set( iDataHBuf->Des() ); // Memory allocation for data
- }
-
- // Event ranking
- if( iWithEventRanking && aWithEventRanking && !iWithTimeStamp )
- {
- EventRanking( aData ); // Event ranking to data
- aData.Append( aLogInfo ); // Unicode aData to normal text
- }
- // Time stamp
- else if( iWithTimeStamp && aWithTimeStamp )
- {
- // With event ranking
- if( iWithEventRanking && aWithEventRanking )
- {
- EventRanking( aData ); // Event ranking to data
- }
- AddTimeStampToData( aData ); // Add time stamp
- aData.Append( aLogInfo ); // Unicode aData to normal text
- }
- else
- {
- aData.Copy( aLogInfo ); // Unicode aData to normal text
- }
-
- // NOTE: If need some special line break do it with logging phase
-
- // If html logging and line break is used add the line break.
- if ( ( iLoggerType == CStifLogger::EHtml ) && iWithLineBreak && aWithLineBreak )
- {
- aData.Append( _L( "<BR>" ) );
- aData.Append( _L( "\n" ) ); // To make html file more readable
- // with text editor
- }
-
- // Other cases line break is normal '\n' if logging is used
- else if( iWithLineBreak && aWithLineBreak )
- {
- aData.Append( 0x0D ); // 13 or '\' in Symbian OS
- aData.Append( 0x0A ); // 10 or 'n' in Symbian OS
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CFileOutput
-
- Method: EventRanking
-
- Description: For event ranking logging.
-
- Parameters: TPtr8& aData: inout: Data with event ranking
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CRDebugOutput::EventRanking( TPtr& aData )
- {
- // Returns the machine's current tick count.
- TUint tick = User::TickCount();
- tick &= 0xffff;
- aData.AppendNum( tick );
- aData.Append( _L( " " ) );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CFileOutput
-
- Method: DateAndTime
-
- Description: For date and time logging.
-
- Parameters: TPtr8& aData: inout: Data with time stamps
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CRDebugOutput::AddTimeStampToData( TPtr& aData )
- {
- TStifLoggerTimeStamp8 timeStamp;
- GetDateAndTime( timeStamp );
- aData.Append( timeStamp );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CFileOutput
-
- Method: GetDateAndTime
-
- Description: For date and time logging.
-
- Parameters: TStifLoggerTimeStamp& aDataAndTime: inout: Generated date and time
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CRDebugOutput::GetDateAndTime( TStifLoggerTimeStamp8& aDataAndTime )
- {
- TInt num( 0 );
- TInt microseconds( 0 );
-
- // Append date
- TTime time;
- time.HomeTime();
- TDateTime dateTime( time.DateTime() );
-
- num = dateTime.Day() + 1;
- if( num < 10 )
- {
- aDataAndTime.Append( '0' );
- }
- // Append month
- aDataAndTime.AppendNum( num );
- num = dateTime.Month() + 1; // returns enum
- if( num < 10 )
- {
- aDataAndTime.Append( '0' );
- }
- aDataAndTime.AppendNum( num );
- aDataAndTime.AppendNum( dateTime.Year() );
-
- // Append time
- aDataAndTime.Append( ' ' );
- num = dateTime.Hour();
- if( num < 10 )
- {
- aDataAndTime.Append( '0' );
- }
- aDataAndTime.AppendNum( num );
- num = dateTime.Minute();
- if( num < 10 )
- {
- aDataAndTime.Append( '0' );
- }
- aDataAndTime.AppendNum( num );
-
- num = dateTime.Second();
- microseconds = dateTime.MicroSecond(); // Microseconds
-
- // Seconds
- if( num < 10 )
- {
- aDataAndTime.Append( '0' );
- }
- aDataAndTime.AppendNum( num );
-
- // Milliseconds
- aDataAndTime.Append( '.' );
- aDataAndTime.AppendNumFixedWidth( microseconds, EDecimal, 3 );
-
- // NOTE: If you add more spaces etc. remember increment KMaxTimeStamp size!
-
- if ( iLoggerType == CStifLogger::EHtml )
- {
- aDataAndTime.Append( _L("....") );
- }
- else
- {
- aDataAndTime.Append( _L(" ") );
- }
-
- }
-
-// ================= OTHER EXPORTED FUNCTIONS =================================
-// None
-
-// End of File