diff -r 000000000000 -r 08ec8eefde2f loggingservices/eventlogger/LogServ/src/LOGDEL.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loggingservices/eventlogger/LogServ/src/LOGDEL.CPP Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,102 @@ +// Copyright (c) 2002-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: +// + +#include "LOGDEL.H" +#include "LOGQUERY.H" +#include "logservpanic.h" +#include "LogServDatabaseTransactionInterface.h" +#include "LogServResourceInterpreter.h" +#include "LogServCacheTypes.h" +#include "LogServDatabaseChangeInterface.h" +#include "LogServSqlStrings.h" + +CLogDeleteEvent::CLogDeleteEvent(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority) +: CLogActive(aPriority), iDatabase(aDatabase) + { + } + +CLogDeleteEvent::~CLogDeleteEvent() + { + Cancel(); + } + +CLogDeleteEvent* CLogDeleteEvent::NewL(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority) + { + return new (ELeave) CLogDeleteEvent(aDatabase, aPriority); + } + + +void CLogDeleteEvent::StartL(TLogId aId, TRequestStatus& aStatus, const RMessage2& aMessage) + { + __ASSERT_DEBUG(!IsActive(), Panic(ELogAlreadyActive6)); + + iMessage = const_cast(&aMessage); // how to avoid this cast? + iId = aId; + + Queue(aStatus); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + SetActive(); + } + +void CLogDeleteEvent::DoRunL() + { + RLogEventDbTable tbl; + tbl.OpenLC(iDatabase.DTIDatabase()); + User::LeaveIfError(tbl.SetIndex(KLogNameEventIdx1)); + //Find event + if(!tbl.SeekL(TDbSeekKey((TInt)iId))) + { + iMessage->Complete(KErrNotFound); + DoCancel(); + User::Leave(KErrNotFound); + } + tbl.GetL(); + //Platsec check + TLogTypeId logTypeId = tbl.ColUint8(RLogEventDbTable::iTypeColNo); + const TLogServCacheTypeEntry& entry = iDatabase.DTICacheTypes().FindById(logTypeId); + __ASSERT_DEBUG(entry.iEventTypeId != KLogNullTypeId, Panic(ELogNoEventTypeAtId)); + if(!iDatabase.DTIIsAllowed(EWriteOp, *iMessage, entry.iEventType->Uid())) + { + User::Leave(KErrPermissionDenied); + } + User::LeaveIfError(iDatabase.DTIBegin()); + //Process duplicates + ::LogResetDuplicatesL(iDatabase, iId); + //Delete the event + tbl.DeleteL(); + iDatabase.DTIChangeInterface().DCISubmitChangedEventContextL(ELogChangeTypeEventDeleted, iId); + // + CleanupStack::PopAndDestroy(&tbl); + } + + +void CLogDeleteEvent::DoCancel() + { + CLogActive::DoCancel(); + } + +void CLogDeleteEvent::DoComplete(TInt& aStatus) + { + // Attempt to commit the transaction + if (iDatabase.DTIInTransaction()) + { + if (aStatus == KErrNone) + aStatus = iDatabase.DTICommitAndEnd(); + + if (aStatus < KErrNone) + iDatabase.DTIRollBack(); + } + }