--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/common/http/src/nsmlnetworkstatusengine.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,231 @@
+/*
+* 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: SyncML Network status observer
+* This is used in http to listen to gprs events
+*
+*/
+
+
+#include "nsmlhttp.h"
+#include <DevManInternalCRKeys.h>
+#include <centralrepository.h>
+#include "nsmlconstants.h"
+#ifndef __WINS__
+// This lowers the unnecessary compiler warning (armv5) to remark.
+// "Warning: #174-D: expression has no effect..." is caused by
+// DBG_ARGS8 macro in no-debug builds.
+#pragma diag_remark 174
+#endif
+// -----------------------------------------------------------------------------
+// StaticDoStopDMSession()
+// Global function to handle the timeout
+// -----------------------------------------------------------------------------
+//
+
+static TInt StaticDoStopDMSession(TAny *aPtr)
+ {
+
+ DBG_FILE(_S8("StaticDoStopDMSession start "));
+
+ CNsmlNetworkStatusEngine* srv = (CNsmlNetworkStatusEngine*) aPtr;
+ TRAPD( err, srv->StopDMSession() );
+ if(err)
+ {
+ DBG_FILE_CODE(err,_S8("StaticDoStopDMSession err after calling StopDMSession"));
+ }
+
+ DBG_FILE(_S8(" StaticDoStopDMSession ENDS "));
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CNsmlNetworkStatusEngine::CNsmlNetworkStatusEngine()
+// -----------------------------------------------------------------------------
+//
+
+CNsmlNetworkStatusEngine::CNsmlNetworkStatusEngine( CNSmlHTTP* aAgent )
+ : iAgent( aAgent ) {}
+
+// -----------------------------------------------------------------------------
+// CNsmlNetworkStatusEngine::ConstructL()
+// -----------------------------------------------------------------------------
+//
+
+void CNsmlNetworkStatusEngine::ConstructL( )
+{
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::ConstructL, BEGIN "));
+ iTimerOn = EFalse;
+ iConnectionMonitor.ConnectL();
+ iTimedExecuteStopSession = NULL;
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::ConstructL, END "));
+}
+
+// -----------------------------------------------------------------------------
+// CNsmlNetworkStatusEngine::~CNsmlNetworkStatusEngine()
+// -----------------------------------------------------------------------------
+//
+
+CNsmlNetworkStatusEngine::~CNsmlNetworkStatusEngine( )
+{
+ DBG_FILE(_S8("~CNsmlNetworkStatusEngine Destructor starts "));
+ StopNotify();
+ iConnectionMonitor.Close();
+ if ( iTimedExecuteStopSession )
+ {
+ iTimedExecuteStopSession->Cancel();
+ delete iTimedExecuteStopSession;
+ iTimedExecuteStopSession = NULL;
+ }
+ DBG_FILE(_S8("~CNsmlNetworkStatusEngine Destructor ENDs "));
+
+}
+
+// -----------------------------------------------------------------------------
+// CNsmlNetworkStatusEngine::NotifyL()
+// Registers with connection monitor for notification
+// -----------------------------------------------------------------------------
+//
+
+void CNsmlNetworkStatusEngine::NotifyL()
+{
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::NotifyL Begin "));
+ iConnectionMonitor.NotifyEventL( *this );
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::NotifyL, after registering "));
+ // Threholds
+ TInt err = iConnectionMonitor.SetUintAttribute( EBearerIdGPRS,
+ 0,
+ KSignalStrengthThreshold,
+ 1 );
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::NotifyL : END "));
+
+}
+
+// -----------------------------------------------------------------------------
+// CNsmlNetworkStatusEngine::StopNotify()
+// Cancels notification with connection monitor
+// -----------------------------------------------------------------------------
+//
+
+void CNsmlNetworkStatusEngine::StopNotify()
+{
+ iConnectionMonitor.CancelNotifications();
+}
+
+// -----------------------------------------------------------------------------
+// CNsmlNetworkStatusEngine::StopDMSession()
+// Stops DM session by calling http cancel
+// -----------------------------------------------------------------------------
+//
+void CNsmlNetworkStatusEngine::StopDMSession()
+ {
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::StopDMSession STARTS "));
+ iTimerOn = EFalse;
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::StopDMSession calling http->Cancel"));
+ iAgent->iTimeOut =ETrue; //added for showing timeout note
+ iAgent->Cancel();
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::StopDMSession ENDS "));
+ }
+
+
+// -----------------------------------------------------------------------------
+// CNsmlNetworkStatusEngine::EventL()
+// Method involed by connection monitor with current event.
+// This method handles the events
+// -----------------------------------------------------------------------------
+//
+
+void CNsmlNetworkStatusEngine::EventL( const CConnMonEventBase& aConnMonEvent )
+{
+
+ DBG_FILE(_S8("CNsmlNetworkStatusEngine::EventL, BEGIN"));
+ DBG_ARGS8(_S8("CNsmlNetworkStatusEngine::EventL event is == %d"), aConnMonEvent.EventType() );
+ switch ( aConnMonEvent.EventType() )
+ {
+ case EConnMonNetworkStatusChange:
+ {
+ const CConnMonNetworkStatusChange* eventNetworkStatus;
+ eventNetworkStatus = ( const CConnMonNetworkStatusChange* ) &aConnMonEvent;
+ iNetwStatus = eventNetworkStatus->NetworkStatus();
+ DBG_ARGS8(_S8("CNsmlNetworkStatusEngine::EventL EConnMonNetworkStatusChange: Network status event is == %d"), iNetwStatus );
+ switch( eventNetworkStatus->NetworkStatus() )
+ {
+ case EConnMonStatusActive:
+ DBG_FILE(_S8("Network status ACTIVE"));
+ if(iTimerOn)
+ {
+ iTimerOn = EFalse;
+ iSuspendDuration.HomeTime();
+ TTimeIntervalSeconds duration;
+ iSuspendDuration.SecondsFrom(iSuspendedTime,duration);
+ DBG_FILE_CODE(duration.Int(), _S8("CNsmlNetworkStatusEngine::EventL suspendDuration is "));
+ if ( iTimedExecuteStopSession )
+ {
+ iTimedExecuteStopSession->Cancel();
+ delete iTimedExecuteStopSession;
+ iTimedExecuteStopSession = NULL;
+ }
+ if(duration.Int() >= KDMMaxHttpAutoResumeDurationSec)
+ {
+ iAgent->CompleteRequest();
+ }
+ } // if itimerOn
+
+ break;
+ case EConnMonStatusSuspended:
+ DBG_FILE(_S8("HTTP Network status SUSPEND and Timer will be set ON "));
+ if(!iTimerOn)
+ {
+ CRepository *rep = NULL;
+ TRAPD( err1, rep = CRepository::NewL( KCRUidDeviceManagementInternalKeys ))
+ iDMSmlSessionTimeout = -1;
+ if(err1 == KErrNone)
+ {
+ TInt dmsessionTimeout = -1;
+ rep->Get( KDevManDMSessionTimeout, dmsessionTimeout );
+ delete rep;
+ DBG_FILE_CODE(dmsessionTimeout, _S8("CNsmlNetworkStatusEngine::EventL session timeout duration from cenrep is "));
+ if( dmsessionTimeout < KNSmlDMMinSessionTimeout || dmsessionTimeout > KNSmlDMMaxSessionTimeout )
+ {
+ dmsessionTimeout = -1;
+ iDMSmlSessionTimeout = -1;
+ }
+ else
+ {
+ iDMSmlSessionTimeout = dmsessionTimeout * 60* 1000000;
+ iTimerOn = ETrue;
+ iSuspendedTime.HomeTime();
+ iTimedExecuteStopSession = CPeriodic::NewL (EPriorityNormal) ;
+ iTimedExecuteStopSession->Start (
+ TTimeIntervalMicroSeconds32(iDMSmlSessionTimeout)
+ , TTimeIntervalMicroSeconds32(iDMSmlSessionTimeout)
+ , TCallBack(StaticDoStopDMSession,this) ) ;
+ }
+
+ } // if KErrnone
+
+
+ } //if !iTimerON
+ break;
+ default: //for eventNetworkStatus->NetworkStatus()
+ break;
+ }
+ break;
+ }
+
+ default: // for EConnMonNetworkStatusChange
+ break;
+ }
+}
+
+//End of File