sl@0: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include "logcntdef.h" sl@0: #include "LOGGET.H" sl@0: #include "LOGQUERY.H" sl@0: #include "logservpanic.h" sl@0: #include "LogServCacheStrings.h" sl@0: #include "LogServCacheTypes.h" sl@0: #include "LogServResourceInterpreter.h" sl@0: #include "LogServDatabaseTransactionInterface.h" sl@0: #include "LogServSqlStrings.h" sl@0: sl@0: CLogGetEvent::CLogGetEvent(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority) : sl@0: CLogActive(aPriority), sl@0: iDatabase(aDatabase) sl@0: { sl@0: } sl@0: sl@0: CLogGetEvent::~CLogGetEvent() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: CLogGetEvent* CLogGetEvent::NewL(MLogServDatabaseTransactionInterface& aDatabase, TInt aPriority) sl@0: { sl@0: return new (ELeave) CLogGetEvent(aDatabase, aPriority); sl@0: } sl@0: sl@0: void CLogGetEvent::StartL(CLogEvent& aEvent, TRequestStatus& aStatus, const RMessage2& aMessage) sl@0: { sl@0: LOGTEXT2("CLogGetEvent::StartL() - Id: %d", aEvent.Id()); sl@0: if(aEvent.Id() == KLogNullId) sl@0: { sl@0: ::PanicClientL(aMessage, ELogNotValid); sl@0: } sl@0: sl@0: RLogEventDbTable tbl; sl@0: tbl.OpenLC(iDatabase.DTIDatabase()); sl@0: User::LeaveIfError(tbl.SetIndex(KLogNameEventIdx1)); sl@0: sl@0: if(!tbl.SeekL(TDbSeekKey((TInt)aEvent.Id()))) sl@0: { sl@0: User::Leave(KErrNotFound); sl@0: } sl@0: sl@0: tbl.GetL(); sl@0: sl@0: TLogTypeId logTypeId = tbl.ColInt16(RLogEventDbTable::iTypeColNo); sl@0: const TLogServCacheTypeEntry& entry = iDatabase.DTICacheTypes().FindById(logTypeId); sl@0: if(!iDatabase.DTIIsAllowed(EReadOp, aMessage, entry.iEventType->Uid())) sl@0: { sl@0: User::Leave(KErrPermissionDenied); sl@0: } sl@0: aEvent.SetEventType(entry.iEventType->Uid()); sl@0: aEvent.SetDescription(entry.iEventType->Description()); sl@0: sl@0: TLogStringId directionId = tbl.IsColNull(RLogEventDbTable::iDirectionColNo) ? KLogNullStringId : tbl.ColInt16(RLogEventDbTable::iDirectionColNo); sl@0: aEvent.SetDirection(iDatabase.DTICacheStrings().FindString(directionId)); sl@0: sl@0: TLogStringId statusId = tbl.IsColNull(RLogEventDbTable::iStatusColNo) ? KLogNullStringId : tbl.ColInt16(RLogEventDbTable::iStatusColNo); sl@0: aEvent.SetStatus(iDatabase.DTICacheStrings().FindString(statusId)); sl@0: sl@0: aEvent.SetRemoteParty(tbl.ColDes(RLogEventDbTable::iRemotePartyColNo)); sl@0: aEvent.SetTime(tbl.ColTime(RLogEventDbTable::iTimeColNo)); sl@0: aEvent.SetDurationType(tbl.IsColNull(RLogEventDbTable::iDurationTypeColNo) ? KLogNullDurationType : tbl.ColInt8(RLogEventDbTable::iDurationTypeColNo)); sl@0: aEvent.SetDuration(tbl.ColUint32(RLogEventDbTable::iDurationColNo)); sl@0: aEvent.SetSubject(tbl.ColDes(RLogEventDbTable::iSubjectColNo)); sl@0: aEvent.SetNumber(tbl.ColDes(RLogEventDbTable::iNumberColNo)); sl@0: aEvent.SetContact(tbl.IsColNull(RLogEventDbTable::iContactColNo) ? KLogNullContactId : tbl.ColInt32(RLogEventDbTable::iContactColNo)); sl@0: aEvent.SetLink(tbl.ColUint32(RLogEventDbTable::iLinkColNo)); sl@0: if(tbl.IsColNull(RLogEventDbTable::iDataColNo)) sl@0: { sl@0: aEvent.SetDataL(KNullDesC8); sl@0: } sl@0: else sl@0: { sl@0: RDbColReadStream stream; sl@0: stream.OpenLC(tbl, RLogEventDbTable::iDataColNo); sl@0: aEvent.SetDataL(stream, tbl.ColLength(RLogEventDbTable::iDataColNo)); sl@0: CleanupStack::PopAndDestroy(&stream); sl@0: } sl@0: sl@0: aEvent.ClearFlags(KLogFlagsMask); sl@0: for(TInt i=0;i