syncmlfw/common/http/src/nsmlnetworkstatusengine.cpp
changeset 0 b497e44ab2fc
equal deleted inserted replaced
-1:000000000000 0:b497e44ab2fc
       
     1 /*
       
     2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  SyncML Network status observer 
       
    15 *				 This is used in http to listen to gprs events 
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 #include "nsmlhttp.h"
       
    21 #include <DevManInternalCRKeys.h>
       
    22 #include <centralrepository.h>
       
    23 #include "nsmlconstants.h"
       
    24 #ifndef __WINS__
       
    25 // This lowers the unnecessary compiler warning (armv5) to remark.
       
    26 // "Warning:  #174-D: expression has no effect..." is caused by 
       
    27 // DBG_ARGS8 macro in no-debug builds.
       
    28 #pragma diag_remark 174
       
    29 #endif
       
    30 // -----------------------------------------------------------------------------
       
    31 // StaticDoStopDMSession()
       
    32 // Global function to handle the timeout 
       
    33 // -----------------------------------------------------------------------------
       
    34 //	
       
    35 
       
    36 static TInt StaticDoStopDMSession(TAny *aPtr)
       
    37     {
       
    38 
       
    39     DBG_FILE(_S8("StaticDoStopDMSession start "));
       
    40                
       
    41     CNsmlNetworkStatusEngine* srv = (CNsmlNetworkStatusEngine*) aPtr;
       
    42     TRAPD( err,  srv->StopDMSession() );
       
    43     if(err) 
       
    44         {
       
    45        	DBG_FILE_CODE(err,_S8("StaticDoStopDMSession err after calling StopDMSession"));
       
    46         }
       
    47 
       
    48     DBG_FILE(_S8(" StaticDoStopDMSession ENDS "));
       
    49     return err;
       
    50     }
       
    51     
       
    52 // -----------------------------------------------------------------------------
       
    53 // CNsmlNetworkStatusEngine::CNsmlNetworkStatusEngine()
       
    54 // -----------------------------------------------------------------------------
       
    55 //
       
    56 
       
    57 CNsmlNetworkStatusEngine::CNsmlNetworkStatusEngine( CNSmlHTTP* aAgent ) 
       
    58 	: iAgent( aAgent ) {}
       
    59 	
       
    60 // -----------------------------------------------------------------------------
       
    61 // CNsmlNetworkStatusEngine::ConstructL()
       
    62 // -----------------------------------------------------------------------------
       
    63 //
       
    64 	
       
    65 void CNsmlNetworkStatusEngine::ConstructL( )
       
    66 {
       
    67 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::ConstructL, BEGIN "));
       
    68 	iTimerOn = EFalse;
       
    69 	iConnectionMonitor.ConnectL();
       
    70 	iTimedExecuteStopSession = NULL;
       
    71 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::ConstructL, END "));	 
       
    72 }
       
    73 
       
    74 // -----------------------------------------------------------------------------
       
    75 // CNsmlNetworkStatusEngine::~CNsmlNetworkStatusEngine()
       
    76 // -----------------------------------------------------------------------------
       
    77 //
       
    78 	
       
    79 CNsmlNetworkStatusEngine::~CNsmlNetworkStatusEngine( )
       
    80 {
       
    81 	DBG_FILE(_S8("~CNsmlNetworkStatusEngine Destructor starts  "));
       
    82 	StopNotify();
       
    83 	iConnectionMonitor.Close();
       
    84 	if ( iTimedExecuteStopSession ) 
       
    85     {
       
    86      iTimedExecuteStopSession->Cancel();
       
    87      delete iTimedExecuteStopSession;
       
    88      iTimedExecuteStopSession = NULL;
       
    89      }
       
    90     DBG_FILE(_S8("~CNsmlNetworkStatusEngine Destructor ENDs  "));     
       
    91             
       
    92 }
       
    93 
       
    94 // -----------------------------------------------------------------------------
       
    95 // CNsmlNetworkStatusEngine::NotifyL()
       
    96 // Registers with connection monitor for notification
       
    97 // -----------------------------------------------------------------------------
       
    98 //
       
    99 
       
   100 void CNsmlNetworkStatusEngine::NotifyL()
       
   101 {
       
   102 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::NotifyL Begin  "));
       
   103 	iConnectionMonitor.NotifyEventL( *this );
       
   104 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::NotifyL, after registering  "));
       
   105    // Threholds
       
   106 	TInt    err = iConnectionMonitor.SetUintAttribute( EBearerIdGPRS, 
       
   107                                                0, 
       
   108                                                KSignalStrengthThreshold, 
       
   109                                                1 );    
       
   110 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::NotifyL : END "));
       
   111                                                                                           
       
   112 }
       
   113 
       
   114 // -----------------------------------------------------------------------------
       
   115 // CNsmlNetworkStatusEngine::StopNotify()
       
   116 // Cancels notification with connection monitor
       
   117 // -----------------------------------------------------------------------------
       
   118 //
       
   119 
       
   120 void CNsmlNetworkStatusEngine::StopNotify()
       
   121 {
       
   122 	iConnectionMonitor.CancelNotifications();
       
   123 }	
       
   124 
       
   125 // -----------------------------------------------------------------------------
       
   126 // CNsmlNetworkStatusEngine::StopDMSession()
       
   127 // Stops DM session by calling http cancel 
       
   128 // -----------------------------------------------------------------------------
       
   129 //	
       
   130 void CNsmlNetworkStatusEngine::StopDMSession()
       
   131 	{
       
   132 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::StopDMSession STARTS   "));
       
   133 	iTimerOn = EFalse;
       
   134 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::StopDMSession calling http->Cancel"));
       
   135 	iAgent->iTimeOut =ETrue; //added for showing timeout note
       
   136 	iAgent->Cancel();
       
   137 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::StopDMSession ENDS    "));
       
   138 	}
       
   139 	
       
   140 
       
   141 // -----------------------------------------------------------------------------
       
   142 // CNsmlNetworkStatusEngine::EventL()
       
   143 // Method involed by connection monitor with current event. 
       
   144 // This method handles the events
       
   145 // -----------------------------------------------------------------------------
       
   146 //
       
   147 
       
   148 void CNsmlNetworkStatusEngine::EventL( const CConnMonEventBase& aConnMonEvent )
       
   149 {
       
   150 
       
   151 	DBG_FILE(_S8("CNsmlNetworkStatusEngine::EventL, BEGIN"));
       
   152 	DBG_ARGS8(_S8("CNsmlNetworkStatusEngine::EventL event is ==  %d"), aConnMonEvent.EventType()  );
       
   153 	switch ( aConnMonEvent.EventType() )
       
   154 	{
       
   155 	case EConnMonNetworkStatusChange:
       
   156 	{
       
   157 	const CConnMonNetworkStatusChange* eventNetworkStatus;
       
   158     eventNetworkStatus = ( const CConnMonNetworkStatusChange* ) &aConnMonEvent;
       
   159     iNetwStatus   = eventNetworkStatus->NetworkStatus();
       
   160     DBG_ARGS8(_S8("CNsmlNetworkStatusEngine::EventL EConnMonNetworkStatusChange: Network status event is ==  %d"), iNetwStatus  );   	
       
   161     switch( eventNetworkStatus->NetworkStatus() )
       
   162 	{
       
   163 		case EConnMonStatusActive:
       
   164 		DBG_FILE(_S8("Network status ACTIVE"));
       
   165 	    if(iTimerOn)
       
   166 	    {
       
   167 			iTimerOn = EFalse;
       
   168 		    iSuspendDuration.HomeTime();
       
   169 		    TTimeIntervalSeconds duration;
       
   170 		    iSuspendDuration.SecondsFrom(iSuspendedTime,duration);
       
   171 		    DBG_FILE_CODE(duration.Int(), _S8("CNsmlNetworkStatusEngine::EventL suspendDuration is "));        	 
       
   172 			if ( iTimedExecuteStopSession ) 
       
   173 			{
       
   174 				iTimedExecuteStopSession->Cancel();
       
   175 				delete iTimedExecuteStopSession;
       
   176 				iTimedExecuteStopSession = NULL;
       
   177 			}
       
   178 		    if(duration.Int() >= KDMMaxHttpAutoResumeDurationSec)
       
   179 			{
       
   180 				iAgent->CompleteRequest();
       
   181 			}
       
   182 	    } // if itimerOn
       
   183 	           
       
   184         break;
       
   185         case EConnMonStatusSuspended:
       
   186         DBG_FILE(_S8("HTTP  Network status SUSPEND and Timer will be set ON "));
       
   187 	   	if(!iTimerOn)
       
   188 		{
       
   189 	    	CRepository *rep = NULL;
       
   190 			TRAPD( err1, rep = CRepository::NewL( KCRUidDeviceManagementInternalKeys ))
       
   191 			iDMSmlSessionTimeout = -1;
       
   192 			if(err1 == KErrNone)
       
   193 			{
       
   194 				TInt dmsessionTimeout = -1;
       
   195 				rep->Get( KDevManDMSessionTimeout, dmsessionTimeout );
       
   196 				delete rep;
       
   197 				DBG_FILE_CODE(dmsessionTimeout, _S8("CNsmlNetworkStatusEngine::EventL session timeout duration from cenrep is "));        	 
       
   198 				if( dmsessionTimeout < KNSmlDMMinSessionTimeout  || dmsessionTimeout > KNSmlDMMaxSessionTimeout )
       
   199 				{
       
   200 					dmsessionTimeout = -1;
       
   201 					iDMSmlSessionTimeout = -1;
       
   202 				}
       
   203 				else
       
   204 				{
       
   205 					iDMSmlSessionTimeout =  dmsessionTimeout * 60* 1000000;
       
   206 					iTimerOn = ETrue;
       
   207 	    			iSuspendedTime.HomeTime();
       
   208 	 		    	iTimedExecuteStopSession = CPeriodic::NewL (EPriorityNormal) ;
       
   209 					iTimedExecuteStopSession->Start (
       
   210 		    		TTimeIntervalMicroSeconds32(iDMSmlSessionTimeout)
       
   211 		    		, TTimeIntervalMicroSeconds32(iDMSmlSessionTimeout)
       
   212 		    		, TCallBack(StaticDoStopDMSession,this) ) ;
       
   213 				}
       
   214 			
       
   215 			} // if KErrnone
       
   216 			
       
   217 	    	
       
   218 	    } //if !iTimerON
       
   219 		break;   
       
   220 	    default: //for eventNetworkStatus->NetworkStatus()
       
   221 		break;
       
   222      }
       
   223     break;
       
   224     }
       
   225 
       
   226 	default: // for EConnMonNetworkStatusChange
       
   227 	    break;
       
   228 	}
       
   229 }
       
   230 
       
   231 //End of File