syncmlfw/ds/netmon/src/CNetMon.cpp
changeset 0 b497e44ab2fc
child 23 4af31167ea77
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:  Monitors the network for availability and starts any pending
       
    15 *                data sync sessions.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 // USER INCLUDES
       
    21 #include "CNetMon.h"
       
    22 
       
    23 // CONSTANTS
       
    24 const TInt KValidInterrupt = -1;
       
    25 const TInt KIntReset = 0;
       
    26 //const TInt KStabilityTimeout = 5; // In seconds
       
    27 const TInt KGlobalTimeout = 30; // In minutes
       
    28 const TInt KNsmlDsAutoStartTimeoutKey = 3; // 0x0000003 defined in DS cenrep
       
    29 const TInt KMicroSecond = 1000000;
       
    30 const TInt KTimeUnit = 60;
       
    31 const TUid KRepositoryId              = { 0x2000CF7E };
       
    32 
       
    33 // ============================== MEMBER FUNCTIONS ============================
       
    34 
       
    35 // ----------------------------------------------------------------------------
       
    36 // CNetMon::NewL
       
    37 // Two Phase Construction
       
    38 // ----------------------------------------------------------------------------
       
    39 CNetMon* CNetMon::NewL()
       
    40 {
       
    41     DBG_FILE(_S8("CNetMon::NewL() begins"));
       
    42     
       
    43     CNetMon* self = new (ELeave) CNetMon;
       
    44     CleanupStack::PushL(self);
       
    45     self->ConstructL();
       
    46     CleanupStack::Pop(self);
       
    47     
       
    48     DBG_FILE(_S8("CNetMon::NewL() ends"));
       
    49          
       
    50     return self;
       
    51 }
       
    52 
       
    53 // ----------------------------------------------------------------------------
       
    54 // CNetMon::CNetMon
       
    55 // Constructor
       
    56 // ----------------------------------------------------------------------------
       
    57 CNetMon::CNetMon() : CActive(CActive::EPriorityHigh)
       
    58 {
       
    59     DBG_FILE(_S8("CNetMon::CNetMon() begins"));
       
    60         
       
    61 	CActiveScheduler::Add(this);
       
    62 	
       
    63     DBG_FILE(_S8("CNetMon::CNetMon() ends"));
       
    64 }
       
    65 
       
    66 // ----------------------------------------------------------------------------
       
    67 // CNetMon::ConstructL
       
    68 // Second phase constructor
       
    69 // ----------------------------------------------------------------------------
       
    70 void CNetMon::ConstructL()
       
    71 {     
       
    72     DBG_FILE(_S8("CNetMon::ConstructL() begins"));
       
    73    
       
    74 	iSyncSessionOpen = EFalse;
       
    75     iConMonBearerId = TConnMonBearerId(-1);
       
    76     iTimerCount = 0;
       
    77     
       
    78     iPrgPrevStatus = TStatus(-1);
       
    79 	iPrgCurStatus = TStatus(-1);
       
    80 	
       
    81     // Initial state
       
    82     iState = ERegister;
       
    83     IssueRequest();
       
    84     
       
    85     // Attach to sync status P&S keys    
       
    86 	TInt err = iProperty.Attach(KPSUidDataSynchronizationInternalKeys, 
       
    87 	                            KDataSyncStatus);
       
    88 
       
    89 	User::LeaveIfError(err);
       
    90 	
       
    91 	iGlobalTimer = CPeriodic::NewL (EPriorityNormal) ;
       
    92 	iGlobalTimeout = ReadTimeoutFromCenrepL();
       
    93 	TInt timeout = KGlobalTimeout * KTimeUnit * KMicroSecond;
       
    94 	iGlobalTimer->Start ( TTimeIntervalMicroSeconds32(timeout), 
       
    95 	                      TTimeIntervalMicroSeconds32(timeout), 
       
    96 	                      TCallBack(Timeout, this ) );		
       
    97 	
       
    98     DBG_FILE(_S8("CNetMon::ConstructL() ends"));	
       
    99 }
       
   100 
       
   101 // ----------------------------------------------------------------------------
       
   102 // CNetMon::~CNetMon
       
   103 // Destructor*
       
   104 // ----------------------------------------------------------------------------
       
   105 CNetMon::~CNetMon()
       
   106 {
       
   107 	 DBG_FILE(_S8("CNetMon::~CNetMon() begins"));
       
   108 	 
       
   109 	 DBG_FILE(_S8("CNetMon::~CNetMon() ends"));
       
   110 }
       
   111 
       
   112 // ----------------------------------------------------------------------------
       
   113 // CNetMon::RunL
       
   114 // ---------------------------------------------------------------------------
       
   115 void CNetMon::RunL()
       
   116 {
       
   117     switch ( iState ) 
       
   118     {
       
   119 		case ERegister:
       
   120 		    DBG_FILE(_S8("CNetMon::RunL() State = ERegister"));
       
   121 		    RegisterL();
       
   122 		    break;
       
   123 		
       
   124 		case EMonitor:
       
   125 		    DBG_FILE(_S8("CNetMon::RunL() State = EMonitor"));
       
   126 		    NetworkUp1();				 
       
   127 		    // Wait for network up event
       
   128 		    break;
       
   129 
       
   130         case ENetworkUp1:
       
   131             DBG_FILE(_S8("CNetMon::RunL() State = ENetworkUp1"));
       
   132             //InitTimerL();  
       
   133             NetworkUp2(this);          
       
   134             break;
       
   135 
       
   136 		case ENetworkUp2:
       
   137 			DBG_FILE(_S8("CNetMon::RunL() State = ENetworkUp2"));
       
   138 		    OtherSyncStatus();
       
   139 		    break;
       
   140 		    
       
   141     	case ESyncOk:
       
   142     		DBG_FILE(_S8("CNetMon::RunL() State = ESyncOk"));
       
   143     	    StartSyncL();
       
   144     	    break;
       
   145 		    
       
   146     	case EInitSync:
       
   147     		DBG_FILE(_S8("CNetMon::RunL() State = EInitSync"));
       
   148     	    // Wait for sync job to complete
       
   149     	    break;
       
   150 
       
   151 		case EComplete:
       
   152 			DBG_FILE(_S8("CNetMon::RunL() State = EComplete"));
       
   153 		    Complete();
       
   154 		    break;
       
   155 		    
       
   156 		default:
       
   157 		    break;
       
   158     }
       
   159 }
       
   160 
       
   161 // ----------------------------------------------------------------------------
       
   162 // CNetMon::RunError
       
   163 // ----------------------------------------------------------------------------
       
   164 TInt CNetMon::RunError ( TInt aError )
       
   165 {
       
   166     DBG_FILE_CODE(aError, _S8("CNetMon::RunError() The Error occurred is "));
       
   167     return aError;
       
   168 }
       
   169 
       
   170 // ----------------------------------------------------------------------------
       
   171 // CNetMon::DoCancel
       
   172 // ----------------------------------------------------------------------------
       
   173 void CNetMon::DoCancel()
       
   174 {
       
   175 	DBG_FILE(_S8("CNetMon::DoCancel() begins"));
       
   176 	
       
   177 	//CancelTimer();
       
   178 
       
   179     // Un-register for events
       
   180     iConnectionMonitor.CancelNotifications();
       
   181     iConnectionMonitor.Close();
       
   182 
       
   183     // Cleanup sync session
       
   184     CloseSyncSession();
       
   185 	
       
   186 	DBG_FILE(_S8("CNetMon::DoCancel() ends"));
       
   187 }
       
   188 
       
   189 // ----------------------------------------------------------------------------
       
   190 // CNetMon::RegisterL
       
   191 // ----------------------------------------------------------------------------
       
   192 void CNetMon::RegisterL()
       
   193 {
       
   194     DBG_FILE(_S8("CNetMon::RegisterL() begins"));
       
   195     
       
   196     // Register for events
       
   197     iConnectionMonitor.ConnectL();
       
   198     iConnectionMonitor.NotifyEventL(*this);      
       
   199         
       
   200     // Wait for events
       
   201     iState = EMonitor;
       
   202     IssueRequest();
       
   203     
       
   204     DBG_FILE(_S8("CNetMon::RegisterL() ends"));
       
   205 }
       
   206 
       
   207 // ----------------------------------------------------------------------------
       
   208 // CNetMon::PacketDataAvailable
       
   209 // ----------------------------------------------------------------------------
       
   210 TBool CNetMon::PacketDataAvailable()
       
   211 {
       
   212     DBG_FILE(_S8("CNetMon::PacketDataAvailable() begins"));
       
   213     
       
   214     TRequestStatus status;
       
   215     TBool val = EFalse;     
       
   216     if( iConMonBearerId != TConnMonBearerId(-1))
       
   217     {
       
   218     	 iConnectionMonitor.GetBoolAttribute(iConMonBearerId, 
       
   219 					                         0,
       
   220 					                         KPacketDataAvailability, 
       
   221 					                         val,
       
   222 					                         status );
       
   223     	User::WaitForRequest(status);			
       
   224     }
       
   225     else
       
   226     {
       
   227     	DBG_FILE(_S8("CNetMon::PacketDataAvailable() Invalid connection ID encountered"));
       
   228     	
       
   229 	    TRequestStatus gprsstatus;
       
   230 		
       
   231 		iConnectionMonitor.GetBoolAttribute(EBearerIdGPRS, 
       
   232 						                   0, 
       
   233 						                   KPacketDataAvailability, 
       
   234 						                   val, 
       
   235 						                   gprsstatus);
       
   236 
       
   237 		User::WaitForRequest(gprsstatus);
       
   238 
       
   239 		if(val == EFalse)
       
   240 		{
       
   241 			TRequestStatus wcdmastatus;
       
   242 			iConnectionMonitor.GetBoolAttribute(EBearerIdWCDMA, 
       
   243 							                   0, 
       
   244 							                   KPacketDataAvailability, 
       
   245 							                   val, 
       
   246 							                   wcdmastatus);
       
   247 
       
   248 			User::WaitForRequest(wcdmastatus);
       
   249 			
       
   250 			if(val != EFalse)
       
   251 			{
       
   252 				iConMonBearerId = EBearerIdWCDMA;
       
   253 			}
       
   254 				
       
   255 		}
       
   256 		else
       
   257 			iConMonBearerId = EBearerIdGPRS;
       
   258     }
       
   259 
       
   260 	DBG_FILE_CODE(iConMonBearerId, _S8("CNetMon::PacketDataAvailable() The Connection Id is"));   			
       
   261     
       
   262     DBG_FILE(_S8("CNetMon::PacketDataAvailable() ends"));
       
   263     
       
   264     return val;
       
   265 }
       
   266 
       
   267 // ----------------------------------------------------------------------------
       
   268 // CNetMon::NetworkUp1
       
   269 // ----------------------------------------------------------------------------
       
   270 void CNetMon::NetworkUp1()
       
   271 {
       
   272     DBG_FILE(_S8("CNetMon::NetworkUp1() begins"));
       
   273     
       
   274     // Check if network is already up
       
   275     // Compensates for this process startup time
       
   276         
       
   277     if ( PacketDataAvailable() )
       
   278     {
       
   279     	iState = ENetworkUp1;
       
   280     	IssueRequest();
       
   281     }
       
   282     
       
   283     DBG_FILE(_S8("CNetMon::NetworkUp1() ends"));
       
   284 }
       
   285 
       
   286 // ----------------------------------------------------------------------------
       
   287 // CNetMon::CancelTimer
       
   288 // ----------------------------------------------------------------------------
       
   289 /*void CNetMon::CancelTimer()
       
   290 {
       
   291     DBG_FILE(_S8("CNetMon::CancelTimer() begins"));
       
   292     
       
   293     if ( iStabilityTimer )
       
   294     {
       
   295 	    iStabilityTimer->Cancel();
       
   296 	    delete iStabilityTimer;
       
   297 	    iStabilityTimer = NULL;
       
   298     }
       
   299     
       
   300     DBG_FILE(_S8("CNetMon::CancelTimer() ends"));
       
   301 }*/
       
   302 
       
   303 // ----------------------------------------------------------------------------
       
   304 // CNetMon::CancelGlobalTimer
       
   305 // ----------------------------------------------------------------------------
       
   306 void CNetMon::CancelGlobalTimer()
       
   307 {
       
   308     DBG_FILE(_S8("CNetMon::CancelGlobalTimer() begins"));
       
   309     
       
   310     if ( iGlobalTimer )
       
   311     {
       
   312 	    iGlobalTimer->Cancel();
       
   313 	    delete iGlobalTimer;
       
   314 	    iGlobalTimer = NULL;
       
   315     }
       
   316     
       
   317     DBG_FILE(_S8("CNetMon::CancelGlobalTimer() ends"));
       
   318 }
       
   319 
       
   320 // ----------------------------------------------------------------------------
       
   321 // CNetMon::NetworkStable
       
   322 // ----------------------------------------------------------------------------
       
   323 void CNetMon::NetworkStable()
       
   324 {
       
   325     DBG_FILE(_S8("CNetMon::NetworkStable() begins"));
       
   326 
       
   327     // Un-register for events
       
   328     iConnectionMonitor.CancelNotifications();
       
   329 
       
   330  	iState = ENetworkUp2;
       
   331     IssueRequest();
       
   332     
       
   333     DBG_FILE(_S8("CNetMon::NetworkStable() ends"));
       
   334 }
       
   335 
       
   336 // ----------------------------------------------------------------------------
       
   337 // CNetMon::NetworkUp2
       
   338 // ----------------------------------------------------------------------------
       
   339 TInt CNetMon::NetworkUp2(TAny* aPtr)
       
   340 {
       
   341     DBG_FILE(_S8("CNetMon::NetworkUp2() begins"));
       
   342    
       
   343     CNetMon* ptr = (CNetMon*) aPtr;
       
   344     
       
   345     if ( ptr->PacketDataAvailable() )
       
   346     {
       
   347         ptr->NetworkStable();
       
   348     }
       
   349 
       
   350     //ptr->CancelTimer();       
       
   351     
       
   352     DBG_FILE(_S8("CNetMon::NetworkUp2() ends"));
       
   353         
       
   354     return KErrNone;
       
   355 }
       
   356 
       
   357 // ----------------------------------------------------------------------------
       
   358 // CNetMon::OtherSyncStatus
       
   359 // ----------------------------------------------------------------------------
       
   360 void CNetMon::OtherSyncStatus()
       
   361 {
       
   362     DBG_FILE(_S8("CNetMon::OtherSyncStatus() begins"));
       
   363 
       
   364 	TInt syncStatus = -1;
       
   365 	
       
   366 	TInt err = iProperty.Get( KPSUidDataSynchronizationInternalKeys, 
       
   367 	                          KDataSyncStatus, 
       
   368 	                          syncStatus );
       
   369 	                      
       
   370     if ( err != KErrNotFound )  
       
   371     {
       
   372         if ( syncStatus != EDataSyncNotRunning )
       
   373         {
       
   374             iProperty.Subscribe(iStatus);
       
   375             SetActive();
       
   376             
       
   377             DBG_FILE(_S8("CNetMon::OtherSyncStatus() Other sync is in progress. Waiting ..."));
       
   378             DBG_FILE(_S8("CNetMon::OtherSyncStatus() ends"));
       
   379             return;
       
   380         }
       
   381     }
       
   382     
       
   383     DBG_FILE(_S8("CNetMon::OtherSyncStatus() No other sync is in progress"));
       
   384     
       
   385     iState = ESyncOk;
       
   386     IssueRequest();
       
   387     
       
   388     DBG_FILE(_S8("CNetMon::OtherSyncStatus() ends"));
       
   389 }
       
   390 
       
   391 
       
   392 // ----------------------------------------------------------------------------
       
   393 // CNetMon::InitTimerL
       
   394 // ----------------------------------------------------------------------------
       
   395 /*void CNetMon::InitTimerL()
       
   396 {
       
   397     DBG_FILE(_S8("CNetMon::InitTimerL() begins"));
       
   398 
       
   399     CancelTimer();
       
   400     
       
   401 	// Start timer and associate NetworkUp2
       
   402 	TInt timeout =  KStabilityTimeout * KMicroSecond;        
       
   403 
       
   404 	iStabilityTimer = CPeriodic::NewL (EPriorityNormal) ;
       
   405 	iStabilityTimer->Start ( TTimeIntervalMicroSeconds32(timeout), 
       
   406 	                         TTimeIntervalMicroSeconds32(timeout), 
       
   407 	                         TCallBack(NetworkUp2, this ) );
       
   408 		                         
       
   409 	                        
       
   410     DBG_FILE(_S8("CNetMon::InitTimerL() ends"));	                         	                         
       
   411 }*/
       
   412 
       
   413 // ----------------------------------------------------------------------------
       
   414 // CNetMon::StartSyncL
       
   415 // ----------------------------------------------------------------------------
       
   416 void CNetMon::StartSyncL()
       
   417 {
       
   418     DBG_FILE(_S8("CNetMon::StartSyncL() begins"));
       
   419 
       
   420     TBool doSync = EFalse;
       
   421     
       
   422     // Open sync session
       
   423     OpenSyncSessionL();
       
   424     
       
   425     doSync = AutoStartPolicyOkL();
       
   426     
       
   427     if ( doSync )
       
   428     {
       
   429     	//Set the Interrupt flag in the CenRep
       
   430 		UpdateInterruptFlagL(KValidInterrupt);    	
       
   431 	    
       
   432     	// Trigger sync here	    
       
   433 	    // Register for sync events    
       
   434 	    iSyncSession.RequestEventL(*this);     // for MSyncMLEventObserver events      
       
   435 	    iSyncSession.RequestProgressL(*this);  // for MSyncMLProgressObserver events
       
   436 	    
       
   437 	    
       
   438 	    //Error fix for BPSS-7GYDJV
       
   439 	    CreateSyncJobL();
       
   440 	       
       
   441 	    iState = EInitSync;
       
   442 	    IssueRequest();
       
   443     }
       
   444     else 
       
   445     {
       
   446     	iState = EComplete;
       
   447 	    IssueRequest();
       
   448     }
       
   449     
       
   450     DBG_FILE(_S8("CNetMon::StartSyncL() ends"));
       
   451 }
       
   452 
       
   453 // ----------------------------------------------------------------------------
       
   454 // CNetMon::CreateSyncJobL
       
   455 // ----------------------------------------------------------------------------
       
   456 void CNetMon::CreateSyncJobL()
       
   457 {
       
   458 	DBG_FILE(_S8("CNetMon::CreateSyncJobL() begins"));
       
   459 	
       
   460 	CNsmlProfileUtil* profileutil = CNsmlProfileUtil::NewLC();			 	
       
   461 	RArray<TSmlTaskId> taskIdArray;
       
   462 	
       
   463 	//Get the TaskIds' from the Cenrep
       
   464 	profileutil->InternalizeTaskIdL(taskIdArray);
       
   465 	
       
   466 	// Create the job
       
   467     if(taskIdArray.Count() > 0)
       
   468     {
       
   469     	DBG_FILE(_S8("CNetMon::CreateSyncJobL() Sync Job Created with Task Id"));
       
   470     	iSyncJob.CreateL(iSyncSession, iLastUsedProfileId, taskIdArray );
       
   471     }    	
       
   472     else
       
   473     {
       
   474     	DBG_FILE(_S8("CNetMon::CreateSyncJobL() Sync Job Created"));
       
   475     	iSyncJob.CreateL(iSyncSession, iLastUsedProfileId);
       
   476     }
       
   477         
       
   478     taskIdArray.Close();
       
   479     CleanupStack::PopAndDestroy(profileutil);
       
   480     
       
   481     DBG_FILE(_S8("CNetMon::CreateSyncJobL() ends"));
       
   482 }
       
   483 
       
   484 // ----------------------------------------------------------------------------
       
   485 // CNetMon::OpenSyncSessionL
       
   486 // ----------------------------------------------------------------------------
       
   487 void CNetMon::OpenSyncSessionL()
       
   488 {
       
   489 	DBG_FILE(_S8("CNetMon: OpenSyncSessionL() Beigns"));
       
   490 	
       
   491 	if (!iSyncSessionOpen)
       
   492 	{
       
   493 	    TRAPD(err, iSyncSession.OpenL());
       
   494 	    
       
   495 	    if (err != KErrNone)
       
   496     	{
       
   497 	    	DBG_FILE(_S8("CNetMon: RSyncMLSession::OpenL failed "));
       
   498 	    	User::Leave(err);
       
   499     	}
       
   500 	}
       
   501 	iSyncSessionOpen = ETrue;
       
   502 	
       
   503 	DBG_FILE(_S8("CNetMon: OpenSyncSessionL() Ends"));
       
   504 }
       
   505 
       
   506 // ----------------------------------------------------------------------------
       
   507 // CNetMon::Complete
       
   508 // ----------------------------------------------------------------------------
       
   509 void CNetMon::Complete()
       
   510 {
       
   511     DBG_FILE(_S8("CNetMon::Complete() begins"));
       
   512     
       
   513 	Cancel();
       
   514 
       
   515     // Close the server
       
   516     CActiveScheduler::Stop();
       
   517     
       
   518     DBG_FILE(_S8("CNetMon::Complete() ends"));
       
   519 }
       
   520 
       
   521 // ----------------------------------------------------------------------------
       
   522 // CNetMon::CloseSyncSession
       
   523 // ----------------------------------------------------------------------------
       
   524 void CNetMon::CloseSyncSession()
       
   525 {
       
   526 	DBG_FILE(_S8("CNetMon::CloseSyncSession() begins"));
       
   527 	
       
   528 	if (iSyncSessionOpen)
       
   529 	{
       
   530 		iSyncSession.CancelEvent();
       
   531 		iSyncSession.Close();
       
   532 		iSyncSessionOpen = EFalse;
       
   533 	}
       
   534 	
       
   535 	DBG_FILE(_S8("CNetMon::CloseSyncSession() ends"));
       
   536 }
       
   537 
       
   538 
       
   539 // ----------------------------------------------------------------------------
       
   540 // CNetMon::EventL
       
   541 // ----------------------------------------------------------------------------
       
   542 void CNetMon::EventL ( const CConnMonEventBase& aEvent )
       
   543 {
       
   544 	DBG_FILE_CODE(aEvent.ConnectionId(), _S8(" CNetMon::EventL() The Connection ID is:"));
       
   545 	switch ( aEvent.EventType() )
       
   546     {    
       
   547     	case EConnMonPacketDataAvailable:
       
   548         {                                   
       
   549             if ( aEvent.ConnectionId() == EBearerIdGPRS ||
       
   550                  aEvent.ConnectionId() == EBearerIdWCDMA )
       
   551             {
       
   552                 DBG_FILE(_S8("CNetMon::EventL() Packet Data is available"));
       
   553                 iConMonBearerId =  TConnMonBearerId(aEvent.ConnectionId());
       
   554 				iState = ENetworkUp1;
       
   555 				IssueRequest();
       
   556             }
       
   557                         
       
   558             break;
       
   559         }  
       
   560     }
       
   561 }
       
   562 
       
   563 // ----------------------------------------------------------------------------
       
   564 // CNetMon::EventL
       
   565 // ----------------------------------------------------------------------------
       
   566 void CNetMon::IssueRequest()
       
   567 {
       
   568     TRequestStatus* status = &iStatus;
       
   569     User::RequestComplete(status, KErrNone);
       
   570     SetActive();
       
   571 }
       
   572 
       
   573 // ----------------------------------------------------------------------------
       
   574 // CNetMon::OnSyncMLSessionEvent
       
   575 // ----------------------------------------------------------------------------
       
   576 void CNetMon::OnSyncMLSessionEvent(TEvent aEvent, 
       
   577                                    TInt /*aIdentifier*/, 
       
   578                                    TInt /*aError*/, 
       
   579                                    TInt /*aAdditionalData*/)
       
   580 {    
       
   581 	
       
   582     switch ( aEvent )
       
   583     {
       
   584     	case EJobStart:
       
   585     	     DBG_FILE(_S8("CNetMon::OnSyncMLSessionEvent() Sync job started"));
       
   586     	     break;
       
   587     	
       
   588 		case EJobStartFailed:
       
   589 		case EJobRejected:
       
   590 		case ETransportTimeout:
       
   591 		case EServerSuspended:
       
   592 		case EServerTerminated:	 
       
   593 	  	case EJobStop:
       
   594 			 if ( TStatus(-1) != iPrgPrevStatus &&  iPrgPrevStatus < ESmlConnected)    		
       
   595 			 {
       
   596 				// Wait for events
       
   597 				TInt err(KErrNone);
       
   598 				DBG_FILE_CODE(iPrgPrevStatus,_S8("CNetMon::OnSyncMLSessionEvent() Again Waiting for Events"));
       
   599 				iSyncJob.Close();
       
   600 				TRAP(err, iConnectionMonitor.NotifyEventL(*this));
       
   601 				iState = EMonitor;
       
   602 			    IssueRequest();
       
   603 			 }
       
   604 			 else
       
   605 			 {
       
   606 			 	TInt err(KErrNone);
       
   607 			 	DBG_FILE_CODE(iPrgPrevStatus,_S8("CNetMon::OnSyncMLSessionEvent() Going to Complete state"));
       
   608 			 	//Reset the Interrupt Flag Set in the CenRep
       
   609 			 	TRAP(err,UpdateInterruptFlagL(KIntReset));
       
   610 			 	
       
   611 			 	DBG_FILE(_S8("CNetMon::OnSyncMLSessionEvent() Sync job stopped"));
       
   612 			 	
       
   613 			 	iState = EComplete;
       
   614 	     		IssueRequest();	
       
   615     	     }
       
   616 			 break;
       
   617     }
       
   618 }
       
   619 
       
   620 // ----------------------------------------------------------------------------
       
   621 // CNetMon::UpdateInterruptFlagL
       
   622 // ----------------------------------------------------------------------------
       
   623 void CNetMon::UpdateInterruptFlagL(TInt aValue)
       
   624 {
       
   625 	CNsmlProfileUtil* profileutil = CNsmlProfileUtil::NewLC();			 	
       
   626 	profileutil->WriteInterruptFlagL(aValue);
       
   627 	CleanupStack::PopAndDestroy(profileutil);
       
   628 }
       
   629 	
       
   630 
       
   631 // ----------------------------------------------------------------------------
       
   632 // CNetMon::AutoStartPolicyOkL
       
   633 // ----------------------------------------------------------------------------
       
   634 TBool CNetMon::AutoStartPolicyOkL()
       
   635 {
       
   636     DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() begins"));
       
   637  
       
   638     // Read the profile cached
       
   639     CNsmlProfileUtil* profileCached = CNsmlProfileUtil::NewL();
       
   640     CleanupStack::PushL(profileCached);
       
   641     profileCached->InternalizeFromCenrepL();    
       
   642     iLastUsedProfileId = profileCached->ProfileId();
       
   643 
       
   644     // (1) Check if the profile exists    
       
   645     RArray<TSmlProfileId> profileIdList;
       
   646     iSyncSession.ListProfilesL(profileIdList, ESmlDataSync);
       
   647         
       
   648     TInt index = profileIdList.Find(iLastUsedProfileId);
       
   649     if ( index == KErrNotFound )
       
   650     {
       
   651         DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() Profile is DELETED"));
       
   652         DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() ends"));   
       
   653         CleanupStack::PopAndDestroy(profileCached);         
       
   654     	return EFalse;
       
   655     }
       
   656     
       
   657     DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() Profile is available"));
       
   658     
       
   659     // (2) Check profile is not modified    
       
   660     CNsmlProfileUtil* profileCurrent = CNsmlProfileUtil::NewL();
       
   661     CleanupStack::PushL(profileCurrent);
       
   662     profileCurrent->InternalizeFromSettingsDBL(profileCached->ProfileId());
       
   663     
       
   664     TBool profileStatus = profileCached->IsSame(*profileCurrent);
       
   665     
       
   666     // Cleanup
       
   667     CleanupStack::PopAndDestroy(profileCurrent);
       
   668     CleanupStack::PopAndDestroy(profileCached);
       
   669     
       
   670     if ( ! profileStatus ) 
       
   671     {
       
   672         DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() Profile is MODIFIED"));
       
   673         DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() ends"));            
       
   674     	return EFalse;
       
   675     }
       
   676 
       
   677 	DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() Profile is SAME"));
       
   678 
       
   679     // (3) Check we are in roaming
       
   680     TRequestStatus status;
       
   681     TInt roamingStatus(0);
       
   682     if( iConMonBearerId != TConnMonBearerId(-1))
       
   683     {
       
   684 	    iConnectionMonitor.GetIntAttribute(iConMonBearerId, 
       
   685 	                                       0, 
       
   686 	                                       KNetworkRegistration, 
       
   687 	                                       roamingStatus, 
       
   688 	                                       status);
       
   689 
       
   690 	    User::WaitForRequest(status);
       
   691     }
       
   692     
       
   693     DBG_FILE_CODE(roamingStatus, _S8("CNetMon::AutoStartPolicyOkL(), The Roaming Status is:"));
       
   694     
       
   695     if ( roamingStatus == ENetworkRegistrationRoaming )
       
   696     {
       
   697         DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() Device NOT in home network"));
       
   698         DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() ends"));            
       
   699     	return EFalse;	
       
   700     }
       
   701     
       
   702     DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() Device in home network"));
       
   703     
       
   704     DBG_FILE(_S8("CNetMon::AutoStartPolicyOkL() ends"));
       
   705       	
       
   706 	return ETrue;
       
   707 }
       
   708 
       
   709 // ----------------------------------------------------------------------------
       
   710 // CNetMon::Timeout
       
   711 // ----------------------------------------------------------------------------
       
   712 TInt CNetMon::Timeout(TAny* aPtr)
       
   713 {
       
   714     DBG_FILE(_S8("CNetMon::Timeout() begins"));
       
   715    
       
   716     CNetMon* ptr = (CNetMon*) aPtr;
       
   717     
       
   718     DBG_FILE_CODE(ptr->iTimerCount, _S8("CNetMon::Timeout() The time out count is"));
       
   719     
       
   720     ptr->iTimerCount = ptr->iTimerCount + 1;
       
   721     
       
   722     if(ptr->iTimerCount == (ptr->iGlobalTimeout * 2))
       
   723     {
       
   724     	ptr->iTimerCount = 0;
       
   725         
       
   726 	    ptr->CancelGlobalTimer();
       
   727 	    ptr->Complete();    
       
   728     }
       
   729     
       
   730     DBG_FILE(_S8("CNetMon::Timeout() ends"));
       
   731         
       
   732     return KErrNone;
       
   733 }
       
   734 
       
   735 // ----------------------------------------------------------------------------
       
   736 // CNetMon::ReadTimeoutFromCenrepL
       
   737 // ----------------------------------------------------------------------------
       
   738 TInt CNetMon::ReadTimeoutFromCenrepL()
       
   739 {
       
   740     DBG_FILE(_S8("CNetMon::ReadTimeoutFromCenrepL() begins"));
       
   741    
       
   742     TInt timeoutInHours = 0;
       
   743   
       
   744     // Read the value from cenrep  
       
   745     CRepository* repository = CRepository::NewLC(KRepositoryId);
       
   746     TInt err = repository->Get(KNsmlDsAutoStartTimeoutKey, timeoutInHours);
       
   747     CleanupStack::PopAndDestroy(repository);
       
   748     User::LeaveIfError(err);    
       
   749     
       
   750     DBG_FILE_CODE(timeoutInHours, _S8("CNetMon::ReadTimeoutFromCenrepL() The value read from the cenrep is"));
       
   751     
       
   752     //TInt timeout = timeoutInHours * 60 * 60 * 1000000;
       
   753 
       
   754     DBG_FILE(_S8("CNetMon::ReadTimeoutFromCenrepL() ends"));
       
   755         
       
   756     return timeoutInHours; 
       
   757 }
       
   758 
       
   759 // -----------------------------------------------------------------------------
       
   760 // CNetMon::OnSyncMLSyncError (from MSyncMLProgressObserver)
       
   761 //
       
   762 // -----------------------------------------------------------------------------
       
   763 //
       
   764 void CNetMon::OnSyncMLSyncError(TErrorLevel aErrorLevel, TInt aError, TInt /*aTaskId*/, TInt /*aInfo1*/, TInt /*aInfo2*/)
       
   765 {
       
   766 	DBG_FILE( _S8("CNetMon::OnSyncMLSyncError START") );
       
   767 
       
   768 	DBG_FILE_CODE( aErrorLevel, _S8("CNetMon::OnSyncMLSyncError Error Level is") );
       
   769 	DBG_FILE_CODE( aError, _S8("CNetMon::OnSyncMLSyncError Error is") );
       
   770 
       
   771 	DBG_FILE( _S8("CNetMon::OnSyncMLSyncError END") );
       
   772 }
       
   773 
       
   774 
       
   775 // -----------------------------------------------------------------------------
       
   776 // CNetMon::OnSyncMLSyncProgress (from MSyncMLProgressObserver)
       
   777 //
       
   778 // -----------------------------------------------------------------------------
       
   779 //
       
   780 void CNetMon::OnSyncMLSyncProgress(TStatus aStatus, TInt aInfo1, TInt /*aInfo2*/)
       
   781 {
       
   782 	DBG_FILE( _S8("CNetMon::OnSyncMLSyncProgress START") );
       
   783 
       
   784 	DBG_FILE_CODE( aInfo1, _S8("CNetMon::OnSyncMLSyncProgress Info1 is") );
       
   785 	DBG_FILE_CODE( aStatus, _S8("CNetMon::OnSyncMLSyncProgress Status is") );
       
   786 
       
   787 	iPrgPrevStatus = iPrgCurStatus;
       
   788 
       
   789 	iPrgCurStatus = aStatus; 
       
   790 			
       
   791 	DBG_FILE( _S8("CNetMon::OnSyncMLSyncProgress END") );
       
   792 }
       
   793 
       
   794 
       
   795 // -----------------------------------------------------------------------------
       
   796 // CNetMon::OnSyncMLDataSyncModifications (from MSyncMLProgressObserver)
       
   797 //
       
   798 // -----------------------------------------------------------------------------
       
   799 //
       
   800 void CNetMon::OnSyncMLDataSyncModifications(TInt aTaskId, 
       
   801                       const TSyncMLDataSyncModifications& aClientModifications,
       
   802                       const TSyncMLDataSyncModifications& aServerModifications)
       
   803 {
       
   804 	//Do Nothing
       
   805 }
       
   806 
       
   807 
       
   808 
       
   809 // End of file
       
   810