--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedconnectionhandler/cchserver/src/cchwakeupeventnotifier.cpp Mon Jan 18 20:12:36 2010 +0200
@@ -0,0 +1,324 @@
+/*
+* Copyright (c) 2006-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: CCCHWakeUpEventNotifier implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include <spnotifychange.h>
+#include <CoreApplicationUIsSDKCRKeys.h>
+
+#include "cchwakeupeventnotifier.h"
+#include "cchwakeupeventobserver.h"
+#include "cchlogger.h"
+#include "cchetelnetworkstatusnotifier.h"
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None
+
+// CONSTANTS
+const TInt KOfflineTimeout = 500000;
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+//None
+
+// FORWARD DECLARATIONS
+// None
+
+// ============================= LOCAL FUNCTIONS =============================
+
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// CCCHWakeUpEventNotifier::CCCHWakeUpEventNotifier
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CCchWakeUpEventNotifier::CCchWakeUpEventNotifier(
+ MCchWakeUpEventObserver& aWakeUpEventObserver ) :
+ CActive( CActive::EPriorityStandard ),
+ iWakeUpEventObserver( aWakeUpEventObserver )
+ {
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::CCchWakeUpEventNotifier" );
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::ConstructL()
+ {
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::ConstructL" );
+
+ iSPSNotifier = CSPNotifyChange::NewL( *this );
+ iCchEtelNetworkNotifier = CCchEtelNetworkStatusNotifier::NewL( *this );
+ iOfflineRepository = CRepository::NewL( KCRUidCoreApplicationUIs );
+ iOfflineTimer = CPeriodic::NewL( CPeriodic::EPriorityStandard );
+
+ StartL();
+ }
+
+// ---------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CCchWakeUpEventNotifier* CCchWakeUpEventNotifier::NewL(
+ MCchWakeUpEventObserver& aWakeUpEventObserver )
+ {
+ CCchWakeUpEventNotifier* self = CCchWakeUpEventNotifier::NewLC(
+ aWakeUpEventObserver );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::NewLC
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CCchWakeUpEventNotifier* CCchWakeUpEventNotifier::NewLC(
+ MCchWakeUpEventObserver& aWakeUpEventObserver )
+ {
+ CCchWakeUpEventNotifier* self = new (ELeave)CCchWakeUpEventNotifier(
+ aWakeUpEventObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// Destructor
+CCchWakeUpEventNotifier::~CCchWakeUpEventNotifier()
+ {
+ Cancel();
+ delete iOfflineTimer;
+ delete iSPSNotifier;
+ delete iCchEtelNetworkNotifier;
+ delete iOfflineRepository;
+ }
+
+// ---------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::MobileNetworkNoService
+// Handles mobile network events.
+// ---------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::MobileNetworkNoService()
+ {
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::MobileNetworkNoService IN" );
+
+ if ( iObservationOngoing )
+ {
+ iWakeUpEventObserver.WakeUp();
+ }
+
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::MobileNetworkNoService OUT" );
+ }
+
+// ---------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::HandleNotifyChange
+// Handles change events generated by spsettings.
+// ---------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::HandleNotifyChange( TServiceId /* aServiceId */ )
+ {
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::HandleNotifyChange IN" );
+
+ if ( iObservationOngoing )
+ {
+ iWakeUpEventObserver.WakeUp();
+ }
+
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::HandleNotifyChange OUT" );
+ }
+
+// ---------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::HandleError
+// Handles errors generated by spsettings.
+// ---------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::HandleError( TInt /*aError*/ )
+ {
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::HandleError IN OUT" );
+ }
+
+// ----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::Cancel()
+//
+// ----------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::DoCancel()
+ {
+ CCHLOGSTRING("CCchWakeUpEventNotifier::DoCancel()");
+ iOfflineRepository->NotifyCancel( KCoreAppUIsNetworkConnectionAllowed );
+ iSPSNotifier->NotifyChangeCancel();
+ CancelOfflineTimer();
+ }
+
+// ----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::RunL()
+//
+// ----------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::RunL()
+ {
+ CCHLOGSTRING("CCchWakeUpEventNotifier::RunL() IN");
+
+ iOfflineRepository->Get(
+ KCoreAppUIsNetworkConnectionAllowed, iNetworkConnectionAllowed );
+ if ( ECoreAppUIsNetworkConnectionNotAllowed == iNetworkConnectionAllowed )
+ {
+ // Start 0.5s timer, after timeout if cellular network is still down
+ // send wakeup event to our client. Why timer -> we can avoid situtation
+ // where cellular network is down for very short period.
+ if ( !iOfflineTimer->IsActive() )
+ {
+ CCHLOGSTRING("CCchWakeUpEventNotifier::RunL -> Start timer");
+ StartOfflineTimer( CCchWakeUpEventNotifier::OfflineTimeout );
+ }
+ }
+
+ StartL();
+
+ CCHLOGSTRING("CCchWakeUpEventNotifier::RunL() OUT");
+ }
+
+// ----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::RunError()
+//
+// ----------------------------------------------------------------------------
+//
+TInt CCchWakeUpEventNotifier::RunError( TInt /*aError*/ )
+ {
+ CCHLOGSTRING("CCchWakeUpEventNotifier::RunError IN OUT");
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::StartL()
+//
+// ----------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::StartL()
+ {
+ CCHLOGSTRING("CCchWakeUpEventNotifier::StartL IN");
+
+ iObservationOngoing = ETrue;
+ if ( !IsActive() )
+ {
+ RIdArray serviceIds;
+ iSPSNotifier->NotifyChangeL( serviceIds );
+
+ iOfflineRepository->NotifyRequest(
+ KCoreAppUIsNetworkConnectionAllowed, iStatus );
+ SetActive();
+ }
+
+ CCHLOGSTRING("CCchWakeUpEventNotifier::StartL OUT");
+ }
+
+// ----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::StopL()
+//
+// ----------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::Stop()
+ {
+ CCHLOGSTRING("CCchWakeUpEventNotifier::Stop IN");
+ iObservationOngoing = EFalse;
+ Cancel();
+ CCHLOGSTRING("CCchWakeUpEventNotifier::Stop OUT");
+ }
+
+// -----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::StartOfflineTimer
+//
+// -----------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::StartOfflineTimer( TInt (*aFunction)(TAny* aPtr) )
+ {
+ if( !iOfflineTimer->IsActive() )
+ {
+ iOfflineTimer->Start(
+ KOfflineTimeout , 0, TCallBack( aFunction, this ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::CancelOfflineTimer
+//
+// -----------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::CancelOfflineTimer()
+ {
+ if( iOfflineTimer->IsActive() )
+ {
+ iOfflineTimer->Cancel();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::OfflineTimeout
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCchWakeUpEventNotifier::OfflineTimeout( TAny* aSelf )
+ {
+ CCchWakeUpEventNotifier* self =
+ static_cast<CCchWakeUpEventNotifier*>( aSelf );
+ self->HandleOfflineTimeout();
+ return 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CCchWakeUpEventNotifier::HandleOfflineTimeout
+//
+// -----------------------------------------------------------------------------
+//
+void CCchWakeUpEventNotifier::HandleOfflineTimeout()
+ {
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::HandleOfflineTimeout IN" );
+
+ CancelOfflineTimer();
+ iOfflineRepository->Get(
+ KCoreAppUIsNetworkConnectionAllowed, iNetworkConnectionAllowed );
+
+ if ( ECoreAppUIsNetworkConnectionNotAllowed == iNetworkConnectionAllowed )
+ {
+ // Mode is still offline, send notify to our client
+ iWakeUpEventObserver.WakeUp();
+ }
+
+ CCHLOGSTRING( "CCchWakeUpEventNotifier::HandleOfflineTimeout OUT" );
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =======================
+
+// End of File
+