--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/satengine/satserver/Engine/src/CSatSRefreshSubSession.cpp Wed Jul 21 18:26:52 2010 +0300
@@ -0,0 +1,771 @@
+/*
+* Copyright (c) 2002-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: Handles the refresh sub-session IPC.
+*
+*/
+
+
+#include <e32base.h>
+#include "MSatUtils.h"
+#include "CSatSRefreshSubSession.h"
+#include "SatSOpcodes.h"
+#include "CSatSSession.h"
+#include "EnginePanic.h"
+#include "CSatSServer.h"
+#include "SatLog.h"
+
+const TInt KClientQueryDelay = 1000000; // 1 second.
+const TInt KClientNotifyDelay = 60000000; // 1 minute.
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::CSatSRefreshSubSession
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSatSRefreshSubSession::CSatSRefreshSubSession(
+ CSatSSession& aSession,
+ TSatEventMediator& aEventMediator ) :
+ CSatSSubSession( aSession ),
+ iEventMediator( aEventMediator ),
+ iClientQueryPending( EFalse ),
+ iClientNotifyPending( EFalse ),
+ iClientWaitingRefresh( EFalse )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::CSatSRefreshSubSession \
+ calling - exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::ConstructL()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::ConstructL calling" )
+
+ CSatSServer* server =
+ const_cast<CSatSServer*>(
+ static_cast<const CSatSServer*>( iSession.Server() ) );
+ server->AddL( this );
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::ConstructL exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSatSRefreshSubSession* CSatSRefreshSubSession::NewL(
+ CSatSSession& aSession,
+ TSatEventMediator& aEventMediator )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NewL calling" )
+
+ CSatSRefreshSubSession* self =
+ new( ELeave ) CSatSRefreshSubSession( aSession, aEventMediator );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NewL exiting" )
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::~CSatSRefreshSubSession()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CSatSRefreshSubSession::~CSatSRefreshSubSession()
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::~CSatSRefreshSubSession calling" )
+
+ CSatSServer* server =
+ const_cast<CSatSServer*>(
+ static_cast<const CSatSServer*>( iSession.Server() ) );
+ server->Remove( this );
+
+ // Remove Client Query timer.
+ if ( iQueryTimer )
+ {
+ iQueryTimer->Cancel();
+ delete iQueryTimer;
+ iQueryTimer = NULL;
+ }
+
+ // Remove Client Notify timer.
+ if ( iNotifyTimer )
+ {
+ iNotifyTimer->Cancel();
+ delete iNotifyTimer;
+ iNotifyTimer = NULL;
+ }
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::~CSatSRefreshSubSession exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::HandleCommandL
+// Handles the refresh sub-session requests.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::HandleCommandL( const RMessage2& aMessage )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::HandleCommandL calling" )
+
+ switch ( aMessage.Function() )
+ {
+ case ESatSRefreshAllowed:
+ {
+ LOG( NORMAL, "SATENGINE: Command: ESatSRefreshAllowed" )
+ // Client's response to refresh query.
+ RefreshAllowed( aMessage );
+ break;
+ }
+
+ case ESatSNotifyAllowRefresh:
+ {
+ LOG( NORMAL, "SATENGINE: Command: ESatSNotifyAllowRefresh" )
+ // Client is ready for refresh query.
+ NotifyRefreshAllowed( aMessage );
+ break;
+ }
+
+ case ESatSNotityAllowRefreshCancel:
+ {
+ LOG( NORMAL, "SATENGINE: Command: ESatSNotityAllowRefreshCancel" )
+ // Client cancels the refresh query.
+ CancelNotifyAllowRefresh( aMessage );
+ break;
+ }
+
+ case ESatSNotifyRefresh:
+ {
+ LOG( NORMAL, "SATENGINE: Command: ESatSNotifyRefresh" )
+ // Client is ready for refresh.
+ NotifyRefresh( aMessage );
+ break;
+ }
+
+ case ESatSCancelNotifyRefresh:
+ {
+ LOG( NORMAL, "SATENGINE: Command: ESatSCancelNotifyRefresh" )
+ // Client cancels the refresh.
+ CancelNotifyRefresh( aMessage );
+ break;
+ }
+
+ case ESatSRefreshEFRead:
+ {
+ LOG( NORMAL, "SATENGINE: Command: ESatSRefreshEFRead" )
+ // Client has completed refresh.
+ CompleteRefresh( aMessage );
+ break;
+ }
+
+ default:
+ {
+ LOG( NORMAL, "SATENGINE: Unexpected command: ggg" )
+ // A wrong message was sent.
+ iSession.PanicClient( aMessage, ESatSBadDescriptor );
+ }
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::HandleCommandL exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::RefreshAllowed
+// Sends the client's response of refresh query to SatServer.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::RefreshAllowed( const RMessage2& aMessage )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::RefreshAllowed calling" )
+
+ // Handle reply only when we are waiting for it.
+ // It is possible, that query has timed out and we got a late response.
+ if ( iClientQueryPending )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::RefreshAllowed \
+ iClientQueryPending true" )
+ iClientQueryPending = EFalse;
+
+ // Stop timer, client replied.
+ if ( iQueryTimer )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::RefreshAllowed \
+ iQueryTimer true" )
+ iQueryTimer->Cancel();
+ }
+
+ TBool allow( EFalse );
+ TPckg<TBool> allowPckg( allow );
+ TRAPD( err, aMessage.ReadL( 0, allowPckg ) );
+ LOG2( SIMPLE, "SATENGINE: CSatSRefreshSubSession::RefreshAllowed \
+ err: %i", err )
+ if ( KErrNone == err )
+ {
+ //lint -e{774} Allow updated through allowPckg in ReadL.
+ if ( allow )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ RefreshAllowed allow refresh" )
+ iEventMediator.Notify( MSatUtils::ERefreshAllowed );
+ iClientWaitingRefresh = ETrue;
+ }
+ else
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ RefreshAllowed don't allow refresh" )
+ iEventMediator.Notify( MSatUtils::ERefreshNotAllowed );
+ }
+ }
+ else
+ {
+ iSession.PanicClient( aMessage, ESatSBadDescriptor );
+ }
+ }
+
+ aMessage.Complete( KErrNone );
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::RefreshAllowed exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::NotifyRefresh
+// Stores the NotifyRefresh request information for later completion.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::NotifyRefresh( const RMessage2& aMessage )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyRefresh calling" )
+
+ if ( !iNotifyRefreshPending )
+ {
+ iNotifyRefreshPending = ETrue;
+ iNotifyRefreshMessage = aMessage;
+ }
+ else
+ {
+ LOG( SIMPLE, "SATENGINE: Request already received" )
+ aMessage.Complete( KErrInUse );
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyRefresh exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::CancelNotifyRefresh
+// Cancels the refresh notification
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::CancelNotifyRefresh( const RMessage2& aMessage )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::CancelNotifyRefresh calling" )
+
+ if ( iNotifyRefreshPending )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::CancelNotifyRefresh\
+ iNotifyRefreshPending true" )
+ iNotifyRefreshPending = EFalse;
+ iNotifyRefreshMessage.Complete( KErrCancel );
+ }
+
+ aMessage.Complete( KErrNone );
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::CancelNotifyRefresh exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::NotifyRefreshAllowed
+// Storest the refresh notification for later completion
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::NotifyRefreshAllowed( const RMessage2& aMessage )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::NotifyRefreshAllowed calling" )
+
+ if ( !iRefreshAllowPending )
+ {
+ iRefreshAllowPending = ETrue;
+ iRefreshAllowMessage = aMessage;
+ }
+ else
+ {
+ LOG( SIMPLE, "SATENGINE: Request already received" )
+ aMessage.Complete( KErrInUse );
+ }
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::NotifyRefreshAllowed exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::CancelNotifyAllowRefresh
+// Cancels the refresh notification.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::CancelNotifyAllowRefresh(
+ const RMessage2& aMessage )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::CancelNotifyAllowRefresh calling" )
+
+ if ( iRefreshAllowPending )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ CancelNotifyAllowRefresh iRefreshAllowPending true" )
+ iRefreshAllowPending = EFalse;
+ iRefreshAllowMessage.Complete( KErrCancel );
+ }
+
+ aMessage.Complete( KErrNone );
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::CancelNotifyAllowRefresh exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::CompleteRefresh
+// Sends the client's completion to SatServer.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::CompleteRefresh( const RMessage2& aMessage )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::CompleteRefresh calling" )
+
+ // Handle completion only when we are waiting for it.
+ // It is possible, that it has timed out and we got a late response.
+ if ( iClientNotifyPending )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::CompleteRefresh \
+ iClientNotifyPending true" )
+ iClientNotifyPending = EFalse;
+
+ // Stop timer, client replied.
+ if ( iNotifyTimer )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::CompleteRefresh \
+ iNotifyTimer true" )
+ iNotifyTimer->Cancel();
+ }
+
+ TBool additionEFRead( EFalse );
+ TPckg<TBool> additionEFReadPckg( additionEFRead );
+ TRAPD( err, aMessage.ReadL( 0, additionEFReadPckg ) );
+ if ( KErrNone == err )
+ {
+ //lint -e{774} additionEFRead updated through additionEFReadPckg.
+ if ( additionEFRead )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ CompleteRefresh additionEFRead true" )
+ iEventMediator.Notify( MSatUtils::ERefreshAdditionalEFRead );
+ }
+ else
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ CompleteRefresh additionEFRead false" )
+ iEventMediator.Notify( MSatUtils::ERefreshEFRead );
+ }
+ }
+ else
+ {
+ LOG( SIMPLE, "SATENGINE: Bad descriptor" )
+ iEventMediator.Notify( MSatUtils::ERefreshEFRead );
+ }
+ }
+
+ aMessage.Complete( KErrNone );
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::CompleteRefresh exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::QueryClient
+// Notifies the client that response for refresh query has to be made.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::QueryClient(
+ const RSat::TRefreshV2& aRefresh )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::QueryClient calling" )
+ TBool allowRefreshNow( ETrue );
+
+ if ( iRefreshAllowPending )
+ {
+ if ( VerifyObservedFiles( aRefresh ) )
+ {
+ // Write the refresh information to client.
+ TPckg<RSat::TRefreshFileList> fileListPckg( aRefresh.iFileList );
+ TPckg<RSat::TRefreshType> typePckg( aRefresh.iType );
+
+ TRAPD(
+ err,
+ iRefreshAllowMessage.WriteL( 0, fileListPckg );
+ iRefreshAllowMessage.WriteL( 1, typePckg ); )
+
+ if ( KErrNone == err )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::QueryClient \
+ KErrNone == err" )
+ iRefreshAllowPending = EFalse;
+ iRefreshAllowMessage.Complete( err );
+ iClientQueryPending = ETrue;
+ allowRefreshNow = EFalse;
+
+ // Start timer to prevent jam, when client will not reply.
+ if ( iQueryTimer )
+ {
+ LOG( SIMPLE, "CSatSRefreshSubSession::QueryClient \
+ iQueryTimer true" )
+ iQueryTimer->Cancel();
+ }
+ else
+ {
+ // Create Client Query timer when first time used.
+ TRAP(
+ err,
+ iQueryTimer =
+ CPeriodic::NewL( CActive::EPriorityStandard ); )
+ }
+
+ if ( ( KErrNone == err ) && iQueryTimer )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ QueryClient start iQueryTimer" )
+ TCallBack callback( TimerQueryCallback, this );
+ iQueryTimer->Start(
+ KClientQueryDelay,
+ KClientQueryDelay,
+ callback );
+ }
+ }
+ else
+ {
+ LOG2( SIMPLE, "SATENGINE: QueryClient error: %i", err )
+ }
+ }
+ }
+
+ if ( allowRefreshNow )
+ {
+ LOG( SIMPLE, "CSatSRefreshSubSession::QueryClient \
+ allowRefreshNow true" )
+ iEventMediator.Notify( MSatUtils::ERefreshAllowed );
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::QueryClient exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::NotifyClient
+// Notifies the client that refresh has happened.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::NotifyClient(
+ const RSat::TRefreshV2& aRefresh )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyClient calling" )
+ TBool completeRefreshNow( ETrue );
+
+ if ( iNotifyRefreshPending && iClientWaitingRefresh )
+ {
+ TPckg<RSat::TRefreshFileList> fileListPckg( aRefresh.iFileList );
+
+ #ifdef ENABLE_SAT_LOGGING
+ TInt fileCount ( aRefresh.iFileList.Length() );
+ LOG2( NORMAL, "SATENGINE: Refresh file count: %d", fileCount )
+ for ( TInt fileIndex = 0; fileIndex < fileCount; fileIndex++ )
+ {
+ LOG2( NORMAL, "SATENGINE: Refresh file : %x",
+ aRefresh.iFileList[ fileIndex ] )
+ }
+ #endif
+
+ TPckg<RSat::TRefreshType> typePckg( aRefresh.iType );
+
+ TRAPD(
+ err,
+ iNotifyRefreshMessage.WriteL( 0, fileListPckg );
+ iNotifyRefreshMessage.WriteL( 1, typePckg ); )
+
+ LOG2( SIMPLE, "SATENGINE: NotifyClient error: %i", err )
+ if ( KErrNone == err )
+ {
+ // ESimReset confirmation will not be waited.
+ if ( RSat::ESimReset != aRefresh.iType )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyClient\
+ RSat::ESimReset != aRefresh.iType" )
+ iClientNotifyPending = ETrue; // Waiting client
+ completeRefreshNow = EFalse; // Client must complete this
+
+ // Start timer to prevent jam, when client will not restart.
+ if ( iNotifyTimer )
+ {
+ LOG( SIMPLE, "CSatSRefreshSubSession::NotifyClient \
+ iNotifyTimer true" )
+ iNotifyTimer->Cancel();
+ }
+ else
+ {
+ // Create Client Notify timer when first time used.
+ TRAP(
+ err,
+ iNotifyTimer =
+ CPeriodic::NewL( CActive::EPriorityStandard ); )
+ }
+
+ if ( ( KErrNone == err ) && iNotifyTimer )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ NotifyClient start iNotifyTimer" )
+ TCallBack callback( TimerNotifyCallback, this );
+ iNotifyTimer->Start(
+ KClientNotifyDelay,
+ KClientNotifyDelay,
+ callback );
+ }
+ }
+ }
+
+ iNotifyRefreshPending = EFalse;
+ iClientWaitingRefresh = EFalse;
+ iNotifyRefreshMessage.Complete( err );
+ }
+
+ if ( completeRefreshNow )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyClient \
+ completeRefreshNow true" )
+ iEventMediator.Notify( MSatUtils::ERefreshEFRead );
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyClient exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::NotifyClientCancel
+// Notifies the client that refresh has been cancelled.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::NotifyClientCancel()
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::NotifyClientCancel calling" )
+
+ // Notify only clients having accepted Refresh and waiting it.
+ if ( iNotifyRefreshPending && iClientWaitingRefresh )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::NotifyClientCancel wait refresh" )
+ RSat::TRefreshFileList fileList;
+ fileList.Zero();
+ TPckg<RSat::TRefreshFileList> fileListPckg( fileList );
+ TPckg<RSat::TRefreshType> typePckg( RSat::ERefreshTypeNotSet );
+ iNotifyRefreshPending = EFalse;
+ iClientWaitingRefresh = EFalse;
+
+ TRAPD(
+ err,
+ iNotifyRefreshMessage.WriteL( 0, fileListPckg );
+ iNotifyRefreshMessage.WriteL( 1, typePckg ) );
+
+ LOG2( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyClientCancel error: %i", err )
+
+ iNotifyRefreshMessage.Complete( err );
+ }
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::NotifyClientCancel exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::VerifyObservedFiles
+// Checks whether current client is interested about this refresh.
+// -----------------------------------------------------------------------------
+//
+TBool CSatSRefreshSubSession::VerifyObservedFiles(
+ const RSat::TRefreshV2& aRefresh ) const
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::VerifyObservedFiles calling" )
+ TBool isObserved( ETrue );
+
+ // Only pure file refresh is checked.
+ if ( RSat::EFileChangeNotification == aRefresh.iType )
+ {
+ // Fetch observed files from clients message.
+ RSat::TRefreshFileList observedFiles;
+ observedFiles.Zero();
+ TPckg<RSat::TRefreshFileList> observedPckg( observedFiles );
+ TRAPD( err, iRefreshAllowMessage.ReadL( 0, observedPckg ) );
+ LOG2( SIMPLE, "SATENGINE: ReadL failed: %i", err )
+ if ( KErrNone == err )
+ {
+ TInt observeFileCount( observedFiles.Length() );
+ LOG2( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ VerifyObservedFiles observeFileCount: %i", observeFileCount )
+ if ( observeFileCount > 0 )
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::\
+ VerifyObservedFiles observeFileCount > 0" )
+ // Observed files found, check whether any of them has been
+ // updated.
+ isObserved = EFalse;
+ for ( TInt fileIndex = 0;
+ ( fileIndex < observeFileCount ) && !isObserved;
+ fileIndex++ )
+ {
+ if ( KErrNotFound !=
+ aRefresh.iFileList.Locate(
+ observedFiles[ fileIndex ] ) )
+ {
+ isObserved = ETrue;
+ LOG( SIMPLE, "SATENGINE: Observed file found" )
+ }
+ }
+ }
+ }
+ }
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::VerifyObservedFiles exiting" )
+ return isObserved;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::TimerQueryCallback
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSatSRefreshSubSession::TimerQueryCallback(
+ TAny* aRefreshSubSession )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::TimerQueryCallback calling" )
+
+ CSatSRefreshSubSession* handler =
+ static_cast<CSatSRefreshSubSession*>( aRefreshSubSession );
+
+ if ( handler )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::TimerQueryCallback handler true" )
+ handler->QueryTimeout();
+ }
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::TimerQueryCallback exiting" )
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::QueryTimeout
+// Timeout handler for the client's response of refresh query.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::QueryTimeout()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::QueryTimeout calling" )
+
+ if ( iQueryTimer )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::QueryTimeout iQueryTimer true" )
+ iQueryTimer->Cancel();
+ }
+
+ // Handle reply timeout only when we are waiting for it.
+ if ( iClientQueryPending )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::QueryTimeout \
+ iClientQueryPending true" )
+ iClientQueryPending = EFalse;
+ iEventMediator.Notify( MSatUtils::ERefreshAllowed );
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::QueryTimeout exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::TimerNotifyCallback
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSatSRefreshSubSession::TimerNotifyCallback(
+ TAny* aRefreshSubSession )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::TimerNotifyCallback calling" )
+
+ CSatSRefreshSubSession* handler =
+ static_cast<CSatSRefreshSubSession*>( aRefreshSubSession );
+
+ if ( handler )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::TimerNotifyCallback handler" )
+ handler->NotifyTimeout();
+ }
+
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::TimerNotifyCallback exiting" )
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSRefreshSubSession::NotifyTimeout
+// Timeout handler for the client's response of refresh query.
+// -----------------------------------------------------------------------------
+//
+void CSatSRefreshSubSession::NotifyTimeout()
+ {
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyTimeout calling" )
+
+ if ( iNotifyTimer )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::NotifyTimeout iNotifyTimer true" )
+ iNotifyTimer->Cancel();
+ }
+
+ // Handle reply timeout only when we are waiting for it.
+ if ( iClientNotifyPending )
+ {
+ LOG( SIMPLE,
+ "SATENGINE: CSatSRefreshSubSession::NotifyTimeout \
+ iClientNotifyPending" )
+ iClientNotifyPending = EFalse;
+ // On timeout we should assume no EFs read, as most typical for S60.
+ iEventMediator.Notify( MSatUtils::ERefreshEFRead );
+ }
+
+ LOG( SIMPLE, "SATENGINE: CSatSRefreshSubSession::NotifyTimeout exiting" )
+ }