diff -r 7b872347d83b -r 6d0b9f605b61 voipplugins/ipapputils/voipeventlog/src/voipeventlogengine.cpp --- a/voipplugins/ipapputils/voipeventlog/src/voipeventlogengine.cpp Tue Feb 02 00:05:57 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,318 +0,0 @@ -/* -* Copyright (c) 2007-2007 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: -* -*/ - - -#include - -#include "voipeventlogengine.h" -#include "voipeventlogconstants.h" -#include "voiperrorentry.h" -#include "voipeventloglogger.h" // For logging - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -CVoipEventLogEngine::CVoipEventLogEngine() - { - } - - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::ConstructL() - { - VELLOGSTRING( "CVoipEventLogEngine::ConstructL() - IN" ); - iRepository = CRepository::NewL( KCRUidVoIPEventLog ); - - TInt err = iSemaphore.OpenGlobal( KVoIPEventLogSemaphore ); - if ( err != KErrNone ) - { - User::LeaveIfError( iSemaphore.CreateGlobal( KVoIPEventLogSemaphore, 1 ) ); - } - - - VELLOGSTRING( "CVoipEventLogEngine::ConstructL() - OUT" ); - } - - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -CVoipEventLogEngine* CVoipEventLogEngine::NewL() - { - CVoipEventLogEngine* self = CVoipEventLogEngine::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -CVoipEventLogEngine* CVoipEventLogEngine::NewLC() - { - CVoipEventLogEngine* self = new( ELeave ) CVoipEventLogEngine; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CVoipEventLogEngine::~CVoipEventLogEngine() - { - VELLOGSTRING( "CVoipEventLogEngine::~CVoipEventLogEngine() - IN" ); - - delete iRepository; - - iSemaphore.Close(); - - VELLOGSTRING( "CVoipEventLogEngine::~CVoipEventLogEngine() - OUT" ); - } - -// --------------------------------------------------------------------------- -// release semaphore, this function is used in custom cleanup -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::ReleaseSemaphore( TAny* aEngine ) - { - ASSERT ( aEngine ); - CVoipEventLogEngine* engine = static_cast( aEngine ); - engine->DoReleaseSemaphore(); - } - -// --------------------------------------------------------------------------- -// release semaphore -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::DoReleaseSemaphore() - { - iSemaphore.Signal(); - } - -// --------------------------------------------------------------------------- -// Begins transaction in repository. -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::BeginTransactionLC() - { - VELLOGSTRING( "CVoipEventLogEngine::BeginTransaction() - IN" ); - - iSemaphore.Wait(); - TCleanupItem cleanup( CVoipEventLogEngine::ReleaseSemaphore, this ); - CleanupStack::PushL( cleanup ); - - User::LeaveIfError( iRepository->StartTransaction( CRepository::EReadWriteTransaction ) ); - - iRepository->CleanupRollbackTransactionPushL(); // if leave happens, only roll back, no delete - - VELLOGSTRING( "CVoipEventLogEngine::BeginTransaction() - OUT" ); - - } - - -// --------------------------------------------------------------------------- -// Commits changes in repository. -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::CommitTransactionL() - { - VELLOGSTRING( - "CVoipEventLogEngine::CommitTransactionL() - IN" ); - - TUint32 temp; - User::LeaveIfError( iRepository->CommitTransaction( temp ) ); - - iSemaphore.Signal(); - - CleanupStack::Pop( 2 ); // semaphore and repository - - VELLOGSTRING( "CVoipEventLogEngine::CommitTransaction() - OUT" ); - - } - - -// --------------------------------------------------------------------------- -// Generate time stamp with current time -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::GenerateTimeStampL( TDes& aTimeStamp) const - { - TTime now; - now.HomeTime(); - now.FormatL( aTimeStamp, KVoIPTimeStampFormat ); - } - -// --------------------------------------------------------------------------- -// Get latest index number -// --------------------------------------------------------------------------- -// -TInt CVoipEventLogEngine::GetLatestIndexL() - { - TInt latestIndex( 0 ); - User::LeaveIfError( iRepository->Get( KVELLatestErrorIndexKey, latestIndex ) ); - - return latestIndex; - } - -// --------------------------------------------------------------------------- -// Get new index number -// --------------------------------------------------------------------------- -// -TInt CVoipEventLogEngine::GetNewIndexL() - { - TInt latestIndex = GetLatestIndexL(); - TInt maxCount = GetMaxErrorCountL(); - TInt newIndex = latestIndex + 1; - if( newIndex >= maxCount ) - { - newIndex = newIndex - maxCount; - } - - return newIndex; - } - -// --------------------------------------------------------------------------- -// Get maximum error count -// --------------------------------------------------------------------------- -// -TInt CVoipEventLogEngine::GetMaxErrorCountL() - { - TInt count( 0 ); - User::LeaveIfError( iRepository->Get( KVELMaxErrorCountKey, count ) ); - - return count; - } - -// --------------------------------------------------------------------------- -// Writes an error data to event log -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::WriteErrorL( const CVoipErrorEntry& aErrorEntry ) - { - if( aErrorEntry.ErrorText().Length() > NCentralRepositoryConstants::KMaxBinaryLength ) - { - User::Leave( KErrArgument ); - } - - TInt newIndex = GetNewIndexL(); - TBuf timeStamp; - GenerateTimeStampL( timeStamp ); - - // error code - TUint32 key = newIndex + KSPColumnErrorCode; - User::LeaveIfError( iRepository->Set( key, aErrorEntry.ErrorCode() ) ); - - // error text - key += KColumnIncrement; - User::LeaveIfError( iRepository->Set( key, aErrorEntry.ErrorText() ) ); - - // time stamp - key += KColumnIncrement; - User::LeaveIfError( iRepository->Set( key, timeStamp ) ); - - // save newIndex to latest index - User::LeaveIfError( iRepository->Set( KVELLatestErrorIndexKey, newIndex ) ); - - // save new count to cenrep - TInt count( 0 ); - - User::LeaveIfError( iRepository->Get( KVELErrorCountKey, count ) ); - if( count < GetMaxErrorCountL() ) - { - count++; - User::LeaveIfError( iRepository->Set( KVELErrorCountKey, count ) ); - } - } - -// --------------------------------------------------------------------------- -// Reads error count from the log -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::ErrorCountL( TInt& aCount ) - { - User::LeaveIfError( iRepository->Get( KVELErrorCountKey, aCount ) ); - } - -// --------------------------------------------------------------------------- -// Reset voip errors log history. -// --------------------------------------------------------------------------- -// -TInt CVoipEventLogEngine::ResetLogHistory() - { - TInt retValue = iRepository->Reset(); - return retValue; - } - -// --------------------------------------------------------------------------- -// Reads an error informaiton from the log -// --------------------------------------------------------------------------- -// -void CVoipEventLogEngine::ReadErrorL( TInt aIndex, CVoipErrorEntry& aErrorEntry ) - { - TInt count( 0 ); - ErrorCountL( count ); - - if( aIndex > count - 1 ) - { - User::Leave( KErrNotFound ); - } - - TInt latestIndex = GetLatestIndexL(); - TInt index = latestIndex - aIndex; - if( index < 0 ) - { - index += count; - } - - // error code - TUint32 key = index + KSPColumnErrorCode; - TInt errorCode; - User::LeaveIfError( iRepository->Get( key, errorCode ) ); - aErrorEntry.SetErrorCode( errorCode ); - - // error text - HBufC* errorText = HBufC::NewLC( NCentralRepositoryConstants::KMaxBinaryLength ); - TPtr ptrErrorText = errorText->Des(); - key += KColumnIncrement; - User::LeaveIfError( iRepository->Get( key, ptrErrorText ) ); - - // error timestamp - HBufC* timeStamp = HBufC::NewLC( KTimeStampStrLen ); - TPtr ptrTimeStamp = timeStamp->Des(); - key += KColumnIncrement; - User::LeaveIfError( iRepository->Get( key, ptrTimeStamp ) ); - - // set new data to aErrorEntry - User::LeaveIfError( aErrorEntry.SetErrorText( *errorText ) ); - User::LeaveIfError( aErrorEntry.SetTimeStamp( *timeStamp ) ); - - CleanupStack::PopAndDestroy( 2, errorText ); - - } -