homesync/contentmanager/cmserver/cmscheduler/src/cmscheduler.cpp
branchIOP_Improvements
changeset 40 08b5eae9f9ff
parent 39 6369bfd1b60d
child 41 b4d83ea1d6e2
--- a/homesync/contentmanager/cmserver/cmscheduler/src/cmscheduler.cpp	Mon Nov 01 13:44:24 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,646 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Content Manager server's scheduler component
-*
-*/
-
-
-// INCLUDE FILES
-#include <apgtask.h>
-
-#include "cmsettings.h"
-#include "cmcommonutils.h"
-#include "cmscheduler.h"
-#include "mediaservantuid.h"
-#include "cmcommsdbnotifier.h"
-#include "cmcenrepnotifier.h"
-#include "msdebug.h"
-
-// WLAN scanning interval [s]
-const TInt
-    KTimerInterval = 30 * 60 * 1000 * 1000; // 30 minutes in microseconds
-const TInt KTimerCount = 2; // KTimerCount*KTimerInterval = 1 hour
-const TUid KMediaServantUid = { KMediaServantUID3 }; // application uid
-const TInt KOfflineProfile = 5; // offline profile identifier
-
-// ========================== MEMBER FUNCTIONS ===============================
-
-// Two-phased constructor.
-EXPORT_C CCmScheduler* CCmScheduler::NewL(
-    MCmServiceObserver& aServer, MCmSettings& aSettings)
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::NewL"));
-    CCmScheduler* self = new ( ELeave )
-        CCmScheduler( aServer, aSettings );
-    self->ConstructL();
-    return self;
-    }
-
-// Destructor
-CCmScheduler::~CCmScheduler()
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::~CCmScheduler"));
-
-    Cancel();
-    delete iNotifier;
-    delete iRepositoryNotifier;
-    iConnMon.CancelNotifications();
-    iConnMon.Close();
-    iTimer.Close();
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::CCmScheduler
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// --------------------------------------------------------------------------
-//
-CCmScheduler::CCmScheduler(
-    MCmServiceObserver& aServer, MCmSettings& aSettings)
-    : CActive( EPriorityStandard ),
-    iServer( aServer ), iSettings( aSettings ),
-    iScheduledServiceRunning( EFalse ), iEnabled( ETrue ),
-    iState( ECmScStateOffline ), iTimerCount( 0 ),
-    iServiceToExecute( ECmServicePreProcessingStore ),
-    iExecuteHarvest( ETrue ), iSchedulerInitiated( EFalse )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::CCmScheduler()"));
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::ConstructL()
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::ConstructL()
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::ConstructL"));
-
-    // Ensure that iap is set. Otherwise scheduler cannot be used
-#ifdef __DEBUG
-    TInt iap( 0 );
-    User::LeaveIfError( iSettings.GetIapL( iap ) );
-    TRACE( Print( _L("[Cm Scheduler]\t IAP to use is  %d"), iap));
-#endif
-
-    User::LeaveIfError( iTimer.CreateLocal() );
-    CActiveScheduler::Add( this );
-    iEnabled = EFalse;
-
-    iRepositoryNotifier = CCmCenrepNotifier::NewL( *this );
-    User::LeaveIfError( iRepositoryNotifier->GetCurrentProfile(
-                        iCurrentProfile ) );
-
-    // create commsdb notifier
-    TRAPD( error, iNotifier = CCmCommsDbNotifier::NewL( *this ) );
-
-    if ( !error )
-        {
-        iWlanScanState = iNotifier->WlanScanStateL();
-        }
-    else
-        {
-        TRACE( Print( _L("[Cm Scheduler]\t CCmScheduler::ConstructL \
-        error = %d"), error));
-        }
-
-    // check that mc is not in offline mode
-    if ( iCurrentProfile != KOfflineProfile )
-        {
-        iState = ECmScStateOnline;
-        if ( error == KErrNone )
-            {
-            // We assume that scan is off.
-            // State is checked and if it is on wlan events can be used.
-            if ( iNotifier->HasScanStateChangedL() )
-                {
-                LOG(_L("[Cm Scheduler]\t CCmScheduler::ConstructL() \
-                    Scanning state changed on"));
-                // scanning is on
-                SetEnabledL( ETrue );
-                }
-
-            else
-                {
-                LOG(_L("[Cm Scheduler]\t CCmScheduler::ConstructL() \
-                    Scanning state is off - starting timer"));
-                // scanning is off - use timer
-                TryToStartRetryTimer();
-                }
-            }
-        else
-            {
-            LOG(_L("[Cm Scheduler]\t CCmScheduler::ConstructL() \
-                Notifier creation failed"));
-            // if notifier cannot be created we start the timer
-            TryToStartRetryTimer();
-            }
-        }
-    else
-        {
-        LOG(_L("[Cm Scheduler]\t CCmScheduler::ConstructL() \
-            profile = offline"));
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::EventL()
-// Called when an event arrives to connection monitor
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::EventL( const CConnMonEventBase& aConnMonEvent )
-    {
-    TRACE(Print(_L("[Cm Scheduler]\t CCmScheduler::EventL() \
-        eventtype = %d, connection id = %d"),
-        aConnMonEvent.EventType(), aConnMonEvent.ConnectionId()));
-
-    TTime currentTime;
-    currentTime.HomeTime();
-
-    TTimeIntervalHours interval;
-    currentTime.HoursFrom( iLastSyncTime, interval );
-
-    TRACE(Print(_L("[Cm Scheduler]\t CCmScheduler::EventL() \
-	    hours from last sync = %d"), interval.Int()));
-
-    if ( interval.Int() >= 1 && !ApplicationRunning() )
-        {
-        HandleConnectionEventL( aConnMonEvent );
-        }
-
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::HandleConnectionEventL()
-// Handles connection event
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::HandleConnectionEventL(
-                            const CConnMonEventBase& aConnMonEvent )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::HandleConnectionEventL() \
-	    HandleConnectionEventL"));
-
-    if ( aConnMonEvent.EventType() == EConnMonIapAvailabilityChange )
-        {
-        LOG(_L("[Cm Scheduler]\t CCmScheduler::HandleConnectionEventL() \
-            EConnMonIapAvailabilityChange"));
-
-        TCmSchedulerState newState = ECmScStateOffline;
-
-        if ( CheckIapAvailabilityL( aConnMonEvent ) )
-            {
-            newState = ECmScStateOnline;
-            }
-
-        if ( newState != iState )
-            {
-            iState = newState;
-
-            if ( newState && !iScheduledServiceRunning )
-                {
-                LOG(_L("[Cm Scheduler]\t State changed to online,\
-                    starting operation.."));
-                iSchedulerInitiated = ETrue;// do also harvest
-                TRACE( Print( _L("[Cm Scheduler]\t HandleConnectionEventL \
-                    iSchedulerInitiated = %d"), iSchedulerInitiated));
-                iExecuteHarvest = ETrue;
-                TRACE( Print( _L("[Cm Scheduler]\t HandleConnectionEventL \
-                    iExecuteHarvest = %d"), iExecuteHarvest));
-                TryToExecuteService( iServiceToExecute );
-                }
-            else
-                {
-                LOG(_L("[Cm Scheduler]\t State changed to offline,\
-                    canceling timer.."));
-                CancelTimer();
-                }
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::RunL()
-// Called when the timer elapses
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::RunL()
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::RunL()"));
-    TRACE( Print( _L("[Cm Scheduler]\t status %d"), iStatus.Int() ));
-    TRACE( Print( _L("[Cm Scheduler]\t state %d"), iState ));
-
-    if ( KErrNone == iStatus.Int() &&
-         iState == ECmScStateOnline &&
-         !iScheduledServiceRunning )
-        {
-        if ( ++iTimerCount >= KTimerCount && !ApplicationRunning() )
-            {
-            LOG(_L("[Cm Scheduler]\t Online timer passed, \
-                starting operation.."));
-            iSchedulerInitiated = ETrue;// do also harvest
-            TRACE( Print( _L("[Cm Scheduler]\t RunL \
-                iSchedulerInitiated = %d"), iSchedulerInitiated));
-            iExecuteHarvest = ETrue;
-            TRACE( Print( _L("[Cm Scheduler]\t RunL \
-                iExecuteHarvest = %d"), iExecuteHarvest));
-            TryToExecuteService( iServiceToExecute );
-            }
-        else
-            {
-            iTimer.After( iStatus,
-                TTimeIntervalMicroSeconds32( KTimerInterval ) );
-            SetActive();
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::TryToExecuteService()
-// Starts process if application is not running
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::TryToExecuteService( TCmService aService )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::TryToExecuteService()"));
-    TInt err = KErrNone;
-
-    TRAP( err, iServer.ExecuteServiceL( aService ));
-    iScheduledServiceRunning = !err;
-
-    if ( !err && aService == ECmServicePreProcessingStore )
-        {
-        iStorePreprocessed = EFalse;
-        }
-
-    TRACE( Print( _L("[Cm Scheduler]\t ExecuteServiceL err: %d"), err));
-
-    if ( err )
-        {
-        TryToStartRetryTimer();
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::TryToStartRetryTimer()
-// Starts timer if not already active
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::TryToStartRetryTimer()
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::TryToStartRetryTimer()"));
-
-    if ( !IsActive() )
-        {
-        LOG(_L("[Cm Scheduler]\t starting one hour resync timer.."));
-
-        CancelTimer();
-
-        iTimer.After(
-                iStatus, TTimeIntervalMicroSeconds32( KTimerInterval ));
-        SetActive();
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::CancelTimer()
-// Cancels timer
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::CancelTimer()
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::CancelTimer"));
-
-    iTimer.Cancel();
-    iTimerCount = 0;
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::SetEnabledL()
-// Enabled/disabled connection monitor events
-// --------------------------------------------------------------------------
-//
-EXPORT_C void CCmScheduler::SetEnabledL( TBool aEnable )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::SetEnabled()"));
-    if ( iEnabled != aEnable )
-        {
-        iEnabled = aEnable;
-        if ( iEnabled )
-            {
-            LOG(_L("[Cm Scheduler]\t enabling scheduler.."));
-            LOG(_L("[Cm Scheduler]\t starting to listen wlan events.."));
-            User::LeaveIfError( iConnMon.ConnectL() );
-            iConnMon.NotifyEventL( *this );
-
-            }
-         else // iConnMon is connected when entering here...
-            {
-            LOG(_L("[Cm Scheduler]\t disabling scheduler.."));
-
-            iConnMon.CancelNotifications();
-            iConnMon.Close();
-
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::SetServiceToExecute
-// Sets service to be executed
-// --------------------------------------------------------------------------
-//
-EXPORT_C void CCmScheduler::SetServiceToExecute( TCmService aService )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::SetServiceToExecute()"));
-    iServiceToExecute = aService;
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::ServiceExecuted
-// Called when service is ready
-// --------------------------------------------------------------------------
-//
-EXPORT_C void CCmScheduler::ServiceExecuted( TCmService aService, TInt aErr )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::ServiceExecuted()"));
-    TRACE( Print( _L("[Cm Scheduler]\t service %d err %d"),
-        aService, aErr));
-
-    if ( !iScheduledServiceRunning )
-        {
-        LOG(_L("[Cm Scheduler]\t No scheduled service running, returning"));
-        return;
-        }
-
-    iScheduledServiceRunning = EFalse;
-    TBool startRetryTimer( EFalse );
-    if ( aErr )
-        {
-        startRetryTimer = ETrue;
-        }
-    else
-        {
-        switch ( aService )
-            {
-            case ECmServicePreProcessingStore:
-                {
-                if ( iStorePreprocessed == EFalse )
-                    {
-                    iStorePreprocessed = ETrue;
-                    TryToExecuteService( ECmServiceStore );
-                    }
-                else
-                    {
-                    iLastSyncTime.HomeTime();
-                    startRetryTimer = ETrue;
-                    iSchedulerInitiated = EFalse;
-                    }
-                break;
-                }
-            case ECmServiceStore:
-                {
-                // execute fill
-                TryToExecuteService( ECmServiceFill );
-                break;
-                }
-
-            case ECmServiceFill:
-                {
-                if ( iExecuteHarvest )
-                    {
-                    TRACE( Print( _L("[Cm Scheduler]\t serviceexecuted \
-                        harvest %d schedulerinitiated %d"),
-                        iExecuteHarvest, iSchedulerInitiated));
-                    // execute harvest
-                    TryToExecuteService( ECmServiceHarvest );
-                    }
-                else
-                    {
-                    LOG(_L("[Cm Scheduler]\t CCmScheduler::ServiceExecuted \
-                        ExecuteHarvest = EFalse"));
-                    startRetryTimer = ETrue;
-                    iLastSyncTime.HomeTime();
-                    iSchedulerInitiated = EFalse;
-                    TRACE( Print( _L("[Cm Scheduler]\t ServiceExecuted \
-                         iSchedulerInitiated = %d"), iSchedulerInitiated));
-                    }
-                break;
-                }
-
-            case ECmServiceHarvest:
-            // fall through
-            case ECmServicePreProcessingFill:
-                {
-                iSchedulerInitiated = EFalse;
-                TRACE( Print( _L("[Cm Scheduler]\t ServiceExecuted \
-                    iSchedulerInitiated = %d"), iSchedulerInitiated));
-                startRetryTimer = ETrue;
-                iLastSyncTime.HomeTime();
-                break;
-                }
-
-            default:
-                {
-                LOG(_L("[Cm Scheduler]\t default"));
-                break;
-                }
-            }
-
-        }
-    if ( startRetryTimer )
-        {
-        TryToStartRetryTimer();
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::DoCancel
-// Called by framework when timer is cancelled
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::DoCancel()
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::DoCancel()"));
-
-    CancelTimer();
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::WlanScanStateChanged
-// starts/disables timer and connection monitor events depending on state
-// of wlan scanning interval
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::WlanScanStateChanged( TInt aState )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::WlanScanStateChanged()"));
-
-    iWlanScanState = aState;
-
-    if ( iCurrentProfile != KOfflineProfile )
-        {
-        if ( aState == KWlanScanNetworkNever )
-            {
-            TRAP_IGNORE( SetEnabledL( EFalse ) );
-            // state is set online so we can try start process
-            iState = ECmScStateOnline;
-            TryToStartRetryTimer();
-            }
-        else
-            {
-            // cancel timer
-            CancelTimer();
-
-            TRAP_IGNORE( SetEnabledL( ETrue ) );
-            }
-        }
-    }
-
-
-// --------------------------------------------------------------------------
-// CCmScheduler::ProfileChangedL
-// --------------------------------------------------------------------------
-//
-void CCmScheduler::ProfileChangedL( TInt aProfile )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::ProfileChangedL()"));
-
-    if ( aProfile == KOfflineProfile )
-        {
-        LOG(_L("[Cm Scheduler]\t CCmScheduler::ProfileChangedL() \
-            offline"));
-
-        iCurrentProfile = aProfile;
-
-        // disable wlan scanning
-        CmCommonUtils::SetWlanScanL( KWlanScanNetworkNever );
-
-        // stop receiving events
-        SetEnabledL( EFalse );
-        // cancel timer
-        CancelTimer();
-        }
-    else if ( iCurrentProfile == KOfflineProfile )
-        {
-        LOG(_L("[Cm Scheduler]\t CCmScheduler::ProfileChangedL() \
-            online"));
-
-        iCurrentProfile = aProfile;
-
-        // enable wlan scanning
-        CmCommonUtils::SetWlanScanL( KWlanScanNetworkInterval60 );
-
-        if ( iWlanScanState )
-            {
-            SetEnabledL( ETrue );
-            }
-        else
-            {
-            TryToStartRetryTimer();
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::SetScheduledServiceState
-// --------------------------------------------------------------------------
-//
-EXPORT_C void CCmScheduler::SetScheduledServiceState( TBool aState )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::SetScheduledServiceState()"));
-
-    iScheduledServiceRunning = aState;
-    // we don't want to make second round
-    iStorePreprocessed = ETrue;
-    // This function is called when application transfers responsibility
-    // to scheduler. In this case we don't want to do harvest.
-    if ( !iSchedulerInitiated )
-        {
-        LOG(_L("[Cm Scheduler]\t CCmScheduler::SetScheduledServiceState() \
-            iSchedulerInitiated = EFalse"));
-        iExecuteHarvest = EFalse;
-        TRACE( Print( _L("[Cm Scheduler]\t SetScheduledServiceState \
-            iExecuteHarvest = %d"), iExecuteHarvest));
-        }
-
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::RunError
-// --------------------------------------------------------------------------
-//
-TInt CCmScheduler::RunError( TInt aError )
-    {
-    TRACE( Print( _L("[Cm Scheduler]\t CCmScheduler::RunError \
-        error = %d"), aError));
-
-    return KErrNone;
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::ApplicationRunning
-// --------------------------------------------------------------------------
-//
-TBool CCmScheduler::ApplicationRunning()
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::ApplicationRunning()"));
-
-    TBool mediaServantRunning( EFalse );
-    RWsSession wsSession;
-    TInt err = wsSession.Connect();
-    if ( !err )
-        {
-        TApaTaskList taskList( wsSession );
-        mediaServantRunning = taskList.FindApp( KMediaServantUid ).Exists();
-        wsSession.Close();
-        }
-    return mediaServantRunning;
-    }
-
-// --------------------------------------------------------------------------
-// CCmScheduler::CheckIapAvailabilityL()
-// --------------------------------------------------------------------------
-//
-TBool CCmScheduler::CheckIapAvailabilityL(
-                            const CConnMonEventBase& aConnMonEvent )
-    {
-    LOG(_L("[Cm Scheduler]\t CCmScheduler::CheckIapAvailabilityL()"));
-
-    TBool iapFound( EFalse );
-    TInt accessPoint( -1 );
-    User::LeaveIfError( iSettings.GetIapL( accessPoint ) );
-    TRACE( Print( _L("[Cm Scheduler]\t \
-        IAP to use is  %d"), accessPoint));
-
-    CConnMonIapAvailabilityChange* eventIap =
-                    ( CConnMonIapAvailabilityChange* ) &aConnMonEvent;
-
-    TConnMonIapInfo iaps = eventIap->IapAvailability();
-
-    for ( TInt i = 0; i < iaps.iCount; i++ )
-        {
-        // Compare available IAPs to our IAP
-        TRACE( Print( _L("[Cm Scheduler]\t CONNMON iap: %d"),
-            iaps.iIap[i].iIapId));
-        if ( accessPoint == iaps.iIap[i].iIapId )
-            {
-            LOG(_L("[Cm Scheduler]\t FOUND CORRECT IAP!"));
-            iapFound = ETrue;
-            i = iaps.iCount;
-            }
-        }
-    return iapFound;
-    }
-
-// End of File