fotaapplication/fotaserver/fmserver/src/fmsserversession.cpp
branchRCL_3
changeset 25 b183ec05bd8c
parent 24 13d7c31c74e0
child 26 19bba8228ff0
--- a/fotaapplication/fotaserver/fmserver/src/fmsserversession.cpp	Thu Aug 19 10:44:50 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,496 +0,0 @@
-/*
-* Copyright (c) 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: Implementation of fotaserver component
-* 	This is part of fotaapplication.
-*
-*/
-
-#include <f32file.h>
-#include <cmconnectionmethoddef.h>
-#include <cmmanagerext.h>
-#include <cmpluginwlandef.h>
-#include <cmpluginpacketdatadef.h>
-#include <etel.h> //for telephone mode
-#include <etelmm.h> //for telephone mode
-#include <fotaConst.h> 
-#include "fmsserversession.h"
-#include "fmsclientserver.h"
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::CFMSSession
-// ----------------------------------------------------------------------------------------
-CFMSSession::CFMSSession()
-	{	
-	iStopServer  =  EFalse;
-	iWlanbearer  =  EFalse;
-	iWcdmaBearer =  EFalse;
-	}
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::~CFMSSession
-// ----------------------------------------------------------------------------------------
-CFMSSession::~CFMSSession()
-	{	
-	FLOG(_L("CFMSSession::~CFMSSession-- begin"));
-	if( iStopServer )
-		{
-		FLOG(_L("Stop fmserver CFMSSession::~CFMSSession"));	
-		Server().DropSession();
-		}
-	FLOG(_L("CFMSSession::~CFMSSession-- end"));
-	}
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::Server
-// ----------------------------------------------------------------------------------------
-CFMSServer& CFMSSession::Server()
-	{
-	return *static_cast<CFMSServer*>(const_cast<CServer2*>(CSession2::Server()));
-	}
-
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::CheckClientSecureIdL
-// ----------------------------------------------------------------------------------------
-TBool CFMSSession::CheckClientSecureIdL (
-		const RMessage2& aMessage)
-	{
-	TUid    fota            = TUid::Uid( KFotaServerUid );
-	TUid    starter         = TUid::Uid( KStarterUid );
-
-	// Fotaserver
-	if ( aMessage.SecureId() == fota.iUid ) 
-		{
-		FLOG(_L("[CFMSSession] CheckClientSecureIdL client is \
-		fotaserver!"));
-		return ETrue;
-		}
-
-	// Starter
-	if ( aMessage.SecureId() == starter.iUid )
-		{
-		return ETrue;
-		}
-
-	// test app
-	if ( aMessage.SecureId() == 0x01D278B9 )
-		{
-		return ETrue;
-		}
-
-	FLOG(_L("[CFMSSession] CheckClientSecureIdL client 0x%X is unknown \
-	(msg %d), bailing out"),aMessage.SecureId().iId, aMessage.Function());
-	iStopServer = ETrue;
-	User::Leave( KErrAccessDenied );    
-	return EFalse; // compiler warning otherwise
-	}
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::ServiceL
-// ----------------------------------------------------------------------------------------
-void CFMSSession::ServiceL(const RMessage2& aMessage)
-	{	
-	RThread clt; aMessage.ClientL(clt); TFullName cltnm = clt.FullName();
-	FLOG(_L( "CFMSSession::ServiceL      %d   serving for %S?" )
-			,aMessage.Function(), &cltnm );
-	if( CheckClientSecureIdL( aMessage ) )
-		{
-		//already one request pending
-		if( Server().RequestPending() && 
-				aMessage.Function() !=  ECancelOutstandingRequest )
-			{
-			aMessage.Complete(KErrCancel);
-			}
-		else //For no pending request case
-			{
-			TRAPD(err,DispatchMessageL(aMessage));
-			if(err != KErrNone ) 
-				{
-				iStopServer = ETrue;
-				}
-			aMessage.Complete(err);
-			}
-		}
-	else
-		{
-		aMessage.Complete(KErrAccessDenied);
-		}
-	}
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::ServiceError
-// ----------------------------------------------------------------------------------------
-void CFMSSession::ServiceError(const RMessage2& aMessage,TInt aError)
-	{		
-	CSession2::ServiceError(aMessage,aError);
-	}
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::DispatchMessageL
-// ----------------------------------------------------------------------------------------
-void CFMSSession::DispatchMessageL(const RMessage2& aMessage)
-	{	
-	FLOG(_L("CFMSSession::DispatchMessageL-begin"));
-
-	if( aMessage.Function() != EFotaStartUpPlugin && 
-			aMessage.Function() != ECancelOutstandingRequest && 
-			aMessage.Function() != EMonitorbattery &&
-			aMessage.Function() != EPhoneCallActive &&
-	        aMessage.Function() != EMonitorPhoneCallEnd )
-		{
-		 
-		 HandleBasedOnBearertypeL(aMessage);
-		
-			
-						
-		}
-	switch(aMessage.Function())
-	{
-	case EUserInterrupt:
-		{
-		if(Server().ChargerTobeMonitered())
-			{	
-			FLOG(_L("FMSSErver::EUserInterrupt"));			
-			Server().WriteToFile(EUserInterrupt,aMessage.Int0(),
-					(TDriveNumber)aMessage.Int1(),aMessage.Int2(),iWcdmaBearer);
-			Server().StartMonitoringL(EUserInterrupt);					    
-			}
-		else
-			{
-			WriteDummyFile();
-			iStopServer = ETrue;
-			}
-		}
-		break;
-	case ENetworkInterrupt:
-		{
-		if(Server().NetworkTobeMonitered())
-			{
-			FLOG(_L("FMSSErver::ENetworkInterrupt"));						
-			//If wlan = on & network interrupt, then stop the server and dont monitor
-			//mean other wlan n/w's present but this wlan gone off
-			if(iWlanbearer && Server().CheckWlanL())
-				{
-				WriteDummyFile();
-				Server().DeleteFile(EFalse);
-				iStopServer = ETrue;
-				break;
-				}			
-			Server().WriteToFile(ENetworkInterrupt,aMessage.Int0(),
-					(TDriveNumber)aMessage.Int1(),aMessage.Int2(),iWcdmaBearer);			
-			Server().AsyncSessionRequestL();
-			}
-		else
-			{
-			WriteDummyFile();
-			iStopServer = ETrue;
-			}
-		}
-		break;
-	case EMemoryInterrupt:
-		{			
-		if(Server().MemoryTobeMonitered())
-			{
-			FLOG(_L("FMSSErver::EMemoryInterrupt"));				
-			Server().MemoryToMonitorL(aMessage.Int2(),(TDriveNumber)aMessage.Int1()); 		
-			Server().WriteToFile(EMemoryInterrupt,aMessage.Int0(),
-					(TDriveNumber)aMessage.Int1(),aMessage.Int2(),iWcdmaBearer);
-			Server().StartMonitoringL(EMemoryInterrupt);		
-			}
-		else
-			{
-			WriteDummyFile();
-			iStopServer = ETrue;
-			}
-		}
-		break;
-	case EGeneralInterrupt:
-		{
-		if(Server().ChargerTobeMonitered())
-			{
-			FLOG(_L("FMSSErver::GeneralInterrupt"));	
-			Server().WriteToFile(EUserInterrupt,aMessage.Int0(),
-					(TDriveNumber)aMessage.Int1(),aMessage.Int2(),iWcdmaBearer);
-			Server().StartMonitoringL(EUserInterrupt);
-			}
-		else
-			{
-			WriteDummyFile();
-			iStopServer = ETrue;
-			}
-		}
-		break;
-	case EFotaStartUpPlugin:
-		{	
-		if(Server().MoniterAfterPhoneRestart())				
-			{
-			FLOG(_L("CFMSSession::EFotaStartUpPlugin"));	
-			TInt intrreason(-1),bearer(-1),size(0);
-			TInt drive(-1), wcdmabearer(-1);
-			//if loop for Hard reboot--no file or size is empty
-			if(Server().ReadFromFile(intrreason,bearer,drive,size,wcdmabearer) == EFalse )
-				{
-				FLOG(_L("CFMSSession::EFotaStartUpPlugin no file or size is empty"));
-				if(!Server().RequestPending())
-					{	
-					FLOG(_L("CFMSSession::EFotaStartUpPlugin-no request pending"));						  					  	
-					TRAPD(err,PhoneModeL());
-					if(err); // remove compiler warning
-					FLOG(_L("PhoneModeL() fotastartup returns err as %d"),err);
-					if(iWcdmaBearer)						 
-						Server().NetworkTypeL( (TInt)EBearerIdWCDMA );
-
-					else
-						Server().NetworkTypeL( (TInt)EBearerIdGPRS );	  					  					  
-					Server().LockSession();
-					Server().TriggerFotaL(); //checks n/w & trigger FOTA DL						
-					}
-				break;
-				}												
-			TUint32 BearerId = FindBearerIdL(bearer);
-			FLOG(_L("CFMSSession::EFotaStartUpPlugin wcdma bearer is %d"),wcdmabearer);
-			if( BearerId == KUidWlanBearerType )
-				{
-				FLOG(_L("CFMSSession::EFotaStartUpPlugin-wlan bearer"));	
-				Server().NetworkTypeL(EBearerIdWLAN);
-				if(intrreason == ENetworkInterrupt)
-					{
-					//stop the server , but dont delete file to support in second reboot
-					FLOG(_L("wlan bearer & n/w interrupt--stopping the server"));
-					Server().DeleteFile(EFalse);
-					iStopServer = ETrue;
-					break;
-					}
-				}
-			else if( BearerId == KUidPacketDataBearerType )
-				{
-				FLOG(_L("CFMSSession::EFotaStartUpPlugin-bearer is packet data"));	
-				if( wcdmabearer == 1 )
-					{
-					Server().NetworkTypeL(EBearerIdWCDMA);	
-					FLOG(_L("CFMSSession::EFotaStartUpPlugin-packet data and 3G"));
-					}
-				else
-					{
-					Server().NetworkTypeL(EBearerIdGPRS);
-					FLOG(_L("CFMSSession::EFotaStartUpPlugin-packet data and 2G"));
-					}
-				}
-			else
-				{
-				FLOG(_L("CFMSSession::EFotaStartUpPlugin-unknown bearer"));
-				Server().DeleteFile(EFalse);
-				iStopServer = ETrue;
-				break;
-				}
-			//when there is dummy file in the store
-			if( intrreason < EUserInterrupt || intrreason > EGeneralInterrupt )
-				{
-				FLOG(_L("CFMSSession::EFotaStartUpPlugin-Interrupt unknown"));	
-				Server().DeleteFile(EFalse); //used when variation support & reboot again
-				iStopServer = ETrue;
-				break;
-				}
-			if( intrreason == EUserInterrupt || intrreason == EGeneralInterrupt )
-				{
-				FLOG(_L("CFMSSession::EFotaStartUpPlugin-Check n/w & trigger fotaengine"));	
-				Server().CheckNetworkL(bearer,drive,size,wcdmabearer);//3 params used in monitoring if no n/w
-				break;
-				} 				
-			//for other interrupts it will monitor
-			Server().StartMonitoringL((TOmaDLInterruptReason)intrreason);
-			}
-		else
-			{
-			iStopServer = ETrue;
-			}
-		}
-		break;
-	case ECancelOutstandingRequest:
-		{					
-		FLOG(_L("CFMSSession::DispatchMessageL ECancelOutstandingRequest case:"));
-		iStopServer = ETrue; 
-		}
-		break;	
-
-	case EMonitorbattery:
-	   {
-	    FLOG(_L("CFMSSession::DispatchMessageL EMonitorbattery case:"));
-	 	Server().StartBatteryMonitoringL(EMonitorbattery, aMessage.Int0());
-	   }
-	 	break;
-	   
-	case EPhoneCallActive:
-	    {
-	    FLOG(_L("CFMSSession::DispatchMessageL EPhoneCallActiveSync case:"));
-	    Server().LockSession();
-	    TInt reason =EFalse;
-	    Server().CheckPhoneCallActiveL(reason);
-	    TPckgBuf<TInt> callactive(reason);
-	    aMessage.WriteL(0,callactive);
-	    Server().iSessionCount = 0;
-	    FLOG(_L("CFMSSession::DispatchMessageL EPhoneCallActiveSync case:%d"),reason);
-	    iStopServer = ETrue;
-	    }
-	    break;
-	    
-	case EMonitorPhoneCallEnd:
-	    {
-	    FLOG(_L("CFMSSession::DispatchMessageL EPhoneCallActiveAsync case:%d,%d"),aMessage.Int0(),aMessage.Int1());
-	    Server().LockSession();
-	    if(Server().MonitorPhoneCallEndL(aMessage.Int0(),aMessage.Int1()))
-	        {
-	        iStopServer = ETrue;
-	        Server().iSessionCount = 0;
-	        }
-	    else //let server monitor for active call end
-	        {
-	        iStopServer = EFalse;
-	        }
-	   }
-	 	break;
-	default:
-		{
-		FLOG(_L("CFMSSession::DispatchMessageL default case:and a leave happened"));
-		iStopServer = ETrue;
-		User::Leave(KErrArgument);			
-		}			
-	}
-	FLOG(_L("CFMSSession::DispatchMessageL:end"));
-	}
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::FindBearerId
-// ----------------------------------------------------------------------------------------
-TUint32 CFMSSession::FindBearerIdL(TInt aIapId)
-	{
-	FLOG(_L("CFMSSession::FindBearerId: % d"),aIapId);
-	TUint32 bearer = 0;
-	TInt err( KErrNone );
-	// Query CM Id
-	TInt cmId ( aIapId );			        
-	RCmManagerExt  CmManagerExt;
-	TRAP( err, CmManagerExt.OpenL() );
-	if( err == KErrNone )
-		{
-		RCmConnectionMethodExt cm;
-		TRAP( err, cm = CmManagerExt.ConnectionMethodL( cmId ) );			        	
-		if ( err == KErrNone )
-			{	        
-			CleanupClosePushL( cm );	  
-			bearer = cm.GetIntAttributeL( CMManager::ECmBearerType );	        			        
-			CleanupStack::PopAndDestroy();  // cm	        
-			}	    	        
-		CmManagerExt.Close();
-		}
-	return bearer;
-	}
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::WriteDummyFile
-// This method used when the variation wouldn't support and startup called
-// and also differentiates hard reeboot(with empty or no file)
-// ----------------------------------------------------------------------------------------
-void CFMSSession::WriteDummyFile()
-	{
-	FLOG(_L("CFMSSession::WriteDummyFile--begin"));
-	Server().WriteToFile(KErrNotFound,KErrNotFound,
-			(TDriveNumber)KErrNotFound,KErrNotFound,EFalse);
-	Server().DeleteFile(EFalse);
-	FLOG(_L("CFMSSession::WriteDummyFile--End"));
-	}
-
-// ----------------------------------------------------------------------------------------
-// CFMSSession::PhoneMode
-// This method used to know the current phone mode
-// If the phone is in dual mode it will check GPRS bearer only
-// ----------------------------------------------------------------------------------------
-void CFMSSession::PhoneModeL()
-	{
-	FLOG(_L("CFMSSession::PhoneModeL--begin"));	
-	// find out if we are in 2G or in 3G - it is needed for calculating bearer availability
-	__UHEAP_MARK; 
-	RTelServer telServer;
-	User::LeaveIfError( telServer.Connect());
-	FLOG(_L("CFMSSession::PhoneModeL--telServer Connected"));
-	RTelServer::TPhoneInfo teleinfo;
-	User::LeaveIfError( telServer.GetPhoneInfo( 0, teleinfo ) );
-	FLOG(_L("CFMSSession::PhoneModeL--telServer getting tel info"));
-	RMobilePhone phone;
-	User::LeaveIfError( phone.Open( telServer, teleinfo.iName ) );
-	FLOG(_L("CFMSSession::PhoneModeL--RMobilePhone opened"));
-	User::LeaveIfError(phone.Initialise());	
-	FLOG(_L("CFMSSession::PhoneModeL--phone.Initialise() success"));
-	RMobilePhone::TMobilePhoneNetworkMode mode;        	        	
-	TInt err = phone.GetCurrentMode( mode );
-	phone.Close();
-	telServer.Close();
-	__UHEAP_MARKEND;
-
-	if( KErrNone == err )
-		{
-		switch(mode)
-		{
-		case RMobilePhone::ENetworkModeGsm:
-		//case RMobilePhone::ENetworkModeUnknown:  // emulator default
-			{
-			FLOG(_L("CFMSSession::PhoneModeL-begin-GSM Mode"));	                		
-			iWcdmaBearer = EFalse;
-			Server().NetworkTypeL(EBearerIdGPRS);
-			break;		
-			}
-		case RMobilePhone::ENetworkModeWcdma:
-			{                		     		
-			FLOG(_L("CFMSSession::PhoneModeL-begin-3G Mode"));	
-			iWcdmaBearer = ETrue;
-			Server().SetWcdma();
-			Server().NetworkTypeL(EBearerIdWCDMA);
-			break;	
-			}	
-		default:        	
-		FLOG(_L("unknown"));
-		}        				
-		}
-	FLOG(_L("CFMSSession::PhoneModeL--end"));
-	}
-	
-//----------------------------------------------------------------------------------------
-// CFMSSession::HandleBasedOnBearertypeL
-// Handles based on bearer type
-//----------------------------------------------------------------------------------------	
-
-void  CFMSSession::HandleBasedOnBearertypeL(const RMessage2& aMessage)
-{
-    TUint32 bearer = FindBearerIdL(aMessage.Int0());
-		if( bearer == KUidPacketDataBearerType )
-			{
-			FLOG(_L("CFMSSession::DispatchMessageL bearer is packet data"));
-			TRAPD(err,PhoneModeL());
-			if(err); // remove compiler warning
-			FLOG(_L("PhoneModeL() returns err as %d"),err);
-			}
-		else if	(	bearer == KUidWlanBearerType )
-			{
-			FLOG(_L("CFMSSession::DispatchMessageL bearer is WLAN"));
-			iWlanbearer = ETrue;
-			Server().NetworkTypeL(EBearerIdWLAN);
-			}
-		else	
-			{
-			FLOG(_L("CFMSSession::DispatchMessageL bearer is not known and a leave happened "));
-			iStopServer = ETrue;
-			User::Leave(KErrArgument);
-			}
-}				
-//End of file