diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Src/CVtLogger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Src/CVtLogger.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,371 @@ +/* +* Copyright (c) 2004 - 2005 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: Video telephony logger +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "cvtlogger.h" + + +// LOCAL CONSTANTS +_LIT( KVtEngLogConfig, "c:\\Logs\\VT\\VTLOGCONF.txt" ); +_LIT( KVtEngLogFolder, "c:\\Logs\\VT" ); +_LIT( KVtEngLogFolderLogger, "VT" ); +_LIT( KVtEngLogPrefix, "VT: " ); +_LIT( KVtEngLogExtension, ".txt" ); +_LIT( KVtLoggerEnterFunc, "<" ); +_LIT( KVtLoggerExitFunc, ">" ); + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtLogger::CVtLogger +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtLogger::CVtLogger() : CActive( CActive::EPriorityStandard - 1 ), + iLogLevel( ELogLogEverything ) + { + } + +// ----------------------------------------------------------------------------- +// CVtLogger::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtLogger::ConstructL( ) + { + User::LeaveIfError( iFs.Connect() ); + TFindFile find( iFs ); + TUint logLevel( 0 ); + TInt ret = iFs.Att(KVtEngLogFolder, logLevel ); + if ( ret == KErrNone ) + { + if ( find.FindByPath( KVtEngLogConfig, NULL ) == KErrNone ) + { + CActiveScheduler::Add( this ); + ReadCongigFile(); + } + if ( iLogLevel & ELogToFile ) + { + RThread thread; + iFileName.Copy( thread.Name() ); + iFileName.Append( KVtEngLogExtension ); + } + } + Dll::SetTls( this ); + } + +// ----------------------------------------------------------------------------- +// CVtLogger::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtLogger* CVtLogger::NewL( ) + { + CVtLogger* self = new( ELeave ) CVtLogger; + + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CVtLogger::~CVtLogger +// Destructor +// ----------------------------------------------------------------------------- +// +CVtLogger::~CVtLogger() + { + Cancel(); + iFs.Close(); + Dll::SetTls( NULL ); + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +void CVtLogger::Print( TDesC& aDes ) + { + if ( iLogLevel & ELogTime && !(iLogLevel & ELogToFile) ) + { + TTime time; + time.HomeTime(); + const TDateTime dt= time.DateTime(); + + iTempBuf.Zero(); + iTempBuf.AppendNum( dt.Minute() ); + iTempBuf.Append(':'); + iTempBuf.AppendNum( dt.Second() ); + iTempBuf.Append(':'); + iTempBuf.AppendNum( dt.MicroSecond() ); + iTempBuf.Append(' '); + + const TInt currentLength( iTempBuf.Length() ); + + iTempBuf.Append( aDes.Left( Min( iTempBuf.MaxLength() - currentLength, aDes.Length() ) ) ); + RDebug::Print( iTempBuf ); + } + else + { + if ( iLogLevel & ELogToFile ) + { + RFileLogger::Write( + KVtEngLogFolderLogger, + iFileName, + EFileLoggingModeAppend, + aDes ); + } + else + { + RDebug::Print( aDes ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt aLevel, + TPtrC aBuffer ) + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger && logger->CheckLevels( aLevel ) ) + { + logger->iBuffer.Copy( KVtEngLogPrefix ); + logger->iBuffer.Append( aBuffer); + logger->Print( logger->iBuffer ); + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt aLevel, + TPtrC aBuffer, + TInt aValue ) + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger && logger->CheckLevels( aLevel ) ) + { + logger->iBuffer.Zero(); + logger->iBuffer.AppendNum( aValue ); + logger->iBuffer.Format( aBuffer, aValue ); + logger->iBuffer.Insert( 0, KVtEngLogPrefix ); + logger->Print( logger->iBuffer ); + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt aLevel, + TPtrC aBuffer, + TInt aValue1, + TInt aValue2 ) + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger && logger->CheckLevels( aLevel ) ) + { + logger->iBuffer.Format( aBuffer, aValue1, aValue2 ); + logger->iBuffer.Insert( 0, KVtEngLogPrefix ); + logger->Print( logger->iBuffer ); + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt aLevel, + const TBool aEntry, + TPtrC aBuffer, + TInt aRetVal ) + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger && logger->CheckLevels( aLevel ) ) + { + logger->iBuffer.Copy( KVtEngLogPrefix ); + if ( aEntry ) + { + logger->iBuffer.Append( aBuffer ); + logger->iBuffer.Append( KVtLoggerEnterFunc ); + } + else + { + if ( aRetVal != KVtDebugReturnValNotApplicable ) + { + logger->iTempBuf.Format( aBuffer, aRetVal ); + logger->iBuffer.Append( logger->iTempBuf ); + } + else + { + logger->iBuffer.Append( aBuffer ); + } + logger->iBuffer.Append( KVtLoggerExitFunc ); + } + logger->Print( logger->iBuffer ); + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Logger +// Returns logger. +// ----------------------------------------------------------------------------- +// +CVtLogger* CVtLogger::Logger() + { + TAny* tls = Dll::Tls(); + if ( tls ) + { + return reinterpret_cast( tls ); + } + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Initialize +// Initialize logger. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Initialize() + { + CVtLogger* logger = NULL; + if ( Dll::Tls() == NULL ) + { + TRAPD( err, logger = CVtLogger::NewL() ); + if ( err == KErrNone ) + { + Dll::SetTls( logger ); + } + } + else + { + logger = CVtLogger::Logger(); + } + if ( logger ) + { + (logger->iAccessCount)++; + } + + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Uninitialize +// Uninitialize logger. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Uninitialize() + { + TAny* tls = Dll::Tls(); + if ( tls ) + { + CVtLogger* logger = CVtLogger::Logger(); + TInt count( --(logger->iAccessCount) ); + if ( !count ) + { + delete reinterpret_cast( tls ); + Dll::SetTls( NULL ); + } + } + + } + +void CVtLogger::ReadCongigFile() + { +#ifdef _DEBUG + RDebug::Print(_L(" VT: ReadConfigFile" ) ); +#endif + RFile config; + if ( config.Open( iFs, KVtEngLogConfig, EFileShareAny ) == KErrNone ) + { + TBuf8<16> buf; + if ( config.Read( buf ) == KErrNone ) + { + TLex8 lex( buf ); + TUint logLevel( 0 ); + if ( lex.Val( logLevel, EHex ) == KErrNone ) + { + iLogLevel = logLevel; + } + } + config.Close(); + } + iFs.NotifyChange( ENotifyEntry, iStatus, KVtEngLogConfig() ); + SetActive(); + } + +void CVtLogger::RunL() + { + if ( iStatus == KErrNone ) + { + ReadCongigFile(); + } + } + +void CVtLogger::DoCancel() + { + iFs.NotifyChangeCancel(); + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Flags +// Returns flags. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CVtLogger::Flags() + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger ) + { + return logger->iLogLevel; + } + return KErrGeneral; + } + +// ----------------------------------------------------------------------------- +// CVtLogger::CheckLevels +// Check debug level. +// ----------------------------------------------------------------------------- +// +TBool CVtLogger::CheckLevels( TInt aLevels ) const + { + if ( aLevels & iLogLevel ) + { + return ETrue; + } + return EFalse; + } +#pragma CTC ENDSKIP +// End of File