--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/TStateInactiveMonitoring.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,156 @@
+// Copyright (c) 2004-2009 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:
+// Name : TStateInactiveMonitoring.cpp
+// Part of : ConnectionMgr
+// Implementation
+// Version : SIP/4.0
+//
+
+
+
+#include "TStateInactiveMonitoring.h"
+#include "msipconnectioncontext.h"
+#include "SipLogs.h"
+
+
+
+const TUint KTimerThreeHours (10800000);//180 minutes.
+const TUint KTimerFiveMinutes( 300000 ); // 5minutes
+const TUint KBaseInterval( 600000 ); //10minutes
+const TUint KTimerSixtyMinutes(3600000); // 60 minutes
+
+
+
+// ----------------------------------------------------------------------------
+// TStateInactiveMonitoring::Enter
+// ----------------------------------------------------------------------------
+//
+void TStateInactiveMonitoring::Enter( TInt aError )
+ {
+ __SIP_LOG( "TStateInactiveMonitoring::Enter" )
+
+ iContext.ReleaseTransportResources( ETrue );
+
+ TRAPD( err, iContext.StartMonitoringL( aError ) );
+ if( err )
+ {
+ EnterState( MStateModel::EUnavailable, err );
+ return;
+ }
+
+ if(aError && (iContext.ConnectionType()==MSIPConnectionContext::ELanBearer))
+ {
+ __SIP_INT_LOG1( "TStateInactiveMonitoring::Enter, Retrying for WLAN Connection", aError)
+ StartRecovery(aError);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// TStateInactiveMonitoring::NetworkStateChanged
+// ----------------------------------------------------------------------------
+//
+void TStateInactiveMonitoring::NetworkStateChanged(
+ MSIPNetworkObserver::TNetworkState aState,
+ TInt aError )
+ {
+ __SIP_INT_LOG2( "TStateInactiveMonitoring::NetworkStateChanged", aState, aError )
+ if( aError )
+ {
+ if(iContext.ConnectionType()==MSIPConnectionContext::ELanBearer)
+ {
+ EnterState( MStateModel::EInactiveMonitoring, aError ); // For Any Error on WLAN, Enable Recovery Timers.
+ }
+ else
+ {
+ EnterState( MStateModel::EUnavailable, aError ); //For other bearers No recovery possible.
+ }
+ return;
+ }
+
+ if( aState == MSIPNetworkObserver::ENetworkActive )
+ {
+ EnterState( MStateModel::EInactiveConnecting );
+ }
+ if( aState == MSIPNetworkObserver::ENetworkConnected )
+ {
+ ResetTimer();
+ EnterState( MStateModel::EActiveResolving );
+ }
+ }
+
+void TStateInactiveMonitoring:: StartTimer( TInt aTimeout )
+{ __SIP_LOG( "TStateInactiveMonitoring::StartTimer" )
+ __SIP_INT_LOG1("TStateInactiveMonitoring::StartTimer: Value",aTimeout)
+ iTimer.Stop( iTimerId );
+
+ TRAPD( err, iTimerId = iTimer.StartL( this, aTimeout ) );
+ if( err )
+ {
+ EnterState( MStateModel::EUnavailable, err );
+ }
+
+}
+
+void TStateInactiveMonitoring:: TimerExpiredL( TTimerId /*aTimerId*/,
+ TAny* /*aTimerParam */)
+{
+ if(iLessFatal)
+ {
+ iRetryCount++;
+ iLessFatal=EFalse;
+ }
+
+ __SIP_LOG( "TStateInactiveMonitoring::TimerExpiredL" )
+ TInt err = iContext.OpenConnection();
+ if( err )
+ {
+ EnterState( MStateModel::EUnavailable, err );
+ }
+}
+
+void TStateInactiveMonitoring::Exit()
+ {
+ iTimer.Stop( iTimerId );
+ }
+
+void TStateInactiveMonitoring::StartRecovery(TInt aError)
+{
+if(iContext.ContinueMonitoring(aError))
+ {
+ if(iRetryCount<3)
+ {
+ iLessFatal = ETrue;
+ __SIP_INT_LOG2( "TStateInactiveMonitoring::Recovering For less Fatal", aError, iRetryCount )
+ StartTimer(KTimerFiveMinutes + (KBaseInterval *iRetryCount)); //Retry Timer in increasing interval for less Fatal Errors.
+ }
+ else
+ {
+ __SIP_LOG( "TStateInactiveMonitoring::Recovering For Less Fatal once every 60 mins...." )
+ StartTimer(KTimerSixtyMinutes);//Retry Timer for 60 minutes
+ }
+ }
+else
+ {
+ __SIP_LOG( "TStateInactiveMonitoring::Recovering for More Fatal" )
+ StartTimer(KTimerThreeHours); // Retry Timer for More Fatal Errors.
+ }
+}
+
+
+void TStateInactiveMonitoring::ResetTimer()
+{__SIP_LOG( "TStateInactiveMonitoring::ResetTimer" )
+iRetryCount=0;
+ iLessFatal = EFalse;
+ __SIP_INT_LOG2( "TStateInactiveMonitoring::Reset Value...", iRetryCount, iLessFatal )
+}