diff -r 689a71addb96 -r a36219ae6585 fotaapplication/fotaserver/fmserver/src/fmsserver.cpp --- a/fotaapplication/fotaserver/fmserver/src/fmsserver.cpp Tue Jul 13 09:26:23 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,723 +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 -#include -#include -#include -#include -#include -#include -#include -#include -#include "fotaserverPrivateCRKeys.h" -#include "fmsserver.h" -#include "fmsinterruptaob.h" -#include "fmsclientserver.h" -#include "fmsserversession.h" - - -// ---------------------------------------------------------------------------------------- -// Server startup code -// ---------------------------------------------------------------------------------------- -static void RunServerL() - { - // naming the server thread after the server helps to debug panics - User::LeaveIfError(User::RenameThread(KFMSServerName)); - - // create and install the active scheduler - CActiveScheduler* s=new(ELeave) CActiveScheduler; - CleanupStack::PushL(s); - CActiveScheduler::Install(s); - - // create the server (leave it on the cleanup stack) - CFMSServer::NewLC(); - - // Initialisation complete, now signal the client - RProcess::Rendezvous(KErrNone); - - // Ready to run - CActiveScheduler::Start(); - - // Cleanup the server and scheduler - CleanupStack::PopAndDestroy(2); - } - - -// ---------------------------------------------------------------------------------------- -// static method LogNwRequestL() called to submit async n/w request -// ---------------------------------------------------------------------------------------- -static TInt LogNwRequestL(TAny* aPtr) - { - CFMSServer* ptr = (CFMSServer*) aPtr; - FLOG(_L("static LogNwRequestL:-Begin")); - TRAPD(err, ptr->StartMonitoringL(ENetworkInterrupt)); - FLOG(_L("LogNwRequestL started monitoring")); - ptr->StopAsyncRequest(); - FLOG(_L("static LogNwRequestL:-end")); - return err; - } - - -// ---------------------------------------------------------------------------------------- -// static method LogCallEndMonitorRequestL() called to submit async call end monitor request -// ---------------------------------------------------------------------------------------- -static TInt LogCallEndMonitorRequestL(TAny* aPtr) - { - CFMSServer* ptr = (CFMSServer*) aPtr; - FLOG(_L("static LogCallEndMonitorRequestL:-Begin")); - TRAPD(err, ptr->StartUpdateInterruptMonitoringL(EMonitorPhoneCallEnd)); - FLOG(_L("LogCallEndMonitorRequestL started monitoring")); - ptr->StopAsyncRequest(); - FLOG(_L("static LogCallEndMonitorRequestL:-end")); - return err; - } - -// ---------------------------------------------------------------------------------------- -// Server process entry-point -// ---------------------------------------------------------------------------------------- -TInt E32Main() - { - __UHEAP_MARK; - CTrapCleanup* cleanup=CTrapCleanup::New(); - TInt r=KErrNoMemory; - if (cleanup) - { - TRAP(r,RunServerL()); - delete cleanup; - } - __UHEAP_MARKEND; - return r; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::NewLC -// ---------------------------------------------------------------------------------------- -CServer2* CFMSServer::NewLC() -{ -CFMSServer* self=new(ELeave) CFMSServer; -CleanupStack::PushL(self); -self->ConstructL(); -return self; -} - -// ---------------------------------------------------------------------------------------- -// CFMSServer::ConstructL -// ---------------------------------------------------------------------------------------- -void CFMSServer::ConstructL() - { - FLOG(_L("CFMSServer::ConstructL- begin")); - StartL(KFMSServerName); - User::LeaveIfError( iFs.Connect() ); - TInt err; - err = iFs.CreatePrivatePath(EDriveC); - if ( err != KErrNone && err != KErrAlreadyExists ) - { User::Leave (err); } - User::LeaveIfError( iFs.SetSessionToPrivate( EDriveC ) ); - err = iFile.Create(iFs,KFotaInterruptFileName,EFileWrite); - if(err == KErrNone)//means file created now and opened - { - FLOG(_L("CFMSServer::ConstructL- file closed")); - iFile.Close(); - } - else if( err != KErrAlreadyExists ) - { - FLOG(_L("CFMSServer::ConstructL- leaving with err as %d"),err); - User::Leave(err); - } - FindVariation(); - iFMSInterruptAob.ConstructL(); - iFMSInterruptAob.iServer = this; - FLOG(_L("CFMSServer::ConstructL- end")); - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::CFMSServer() -// ---------------------------------------------------------------------------------------- -CFMSServer::CFMSServer() :CServer2(EPriorityStandard, EUnsharableSessions) /*CServer2(0)*/ - { - iSessionCount = 0; - //iNetworkMon = ETrue; //Incase of cenrep key has problem - iNetworkMon = EFalse; - iChargerMon = EFalse; - iPhoneRestartMon = EFalse; - iMemoryMon = EFalse; - iDeleteFile = ETrue; - iLogAsyncRequest = NULL; - iProfileId = EFalse; - iPkgId = EFalse; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::MemoryToMonitorL() -// ---------------------------------------------------------------------------------------- -void CFMSServer::MemoryToMonitorL(TInt aSize, TDriveNumber aDrive) - { - if( iSessionCount == 0 )// no pending request - { - iFMSInterruptAob.MemoryToMonitorL(aSize,aDrive); - } - } -// ---------------------------------------------------------------------------------------- -// CFMSServer::NetworkTypeL() -// ---------------------------------------------------------------------------------------- -void CFMSServer::NetworkTypeL(TInt aBearer) - { - if( iSessionCount == 0 )// no pending request - { - iFMSInterruptAob.NetworkTypeL(aBearer); - } - } - -//------------------------------------------------------------ -// Call from session class in fotastartup case -// CFMSServer::CheckNetworkL -//------------------------------------------------------------ -void CFMSServer::CheckNetworkL(TInt& aBearerId, TInt& aDrive, TInt& aSize, - TBool& aWcdma) - { - if(iNetworkMon)//n/w monitoring supports - { - FLOG(_L("CFMSServer::CheckNetworkL- n/w monitor supported")); - if(iFMSInterruptAob.CheckNetworkL()) //not n/w interrupt + WLAN or GPRS - { - FLOG(_L("CFMSServer::CheckNetworkL- n/w mon supported & launch fota")); - iFMSInterruptAob.LaunchFotaEngineL(); - DropSession(); // to close the session & server - return; - } - else //if network not up, monitor for that - { - //from session itself we set the bearer type - FLOG(_L("CFMSServer::CheckNetworkL- n/w not up beaerer 3G %d"),aWcdma); - WriteToFile(ENetworkInterrupt,aBearerId, - (TDriveNumber)aDrive, aSize, aWcdma ); - StartMonitoringL(ENetworkInterrupt); - } - } - else //user interrupt or general interrupt dont check n/w call fota - { - FLOG(_L("CFMSServer::CheckNetworkL- n/w monitor not supported & launch fota")); - iFMSInterruptAob.LaunchFotaEngineL(); - FLOG(_L("CFMSServer::CheckNetworkL- stop server")); - DropSession(); - } - } - -//------------------------------------------------------------ -// Call from session class in hard reboot only -// CFMSServer::TriggerFotaL -//------------------------------------------------------------ -void CFMSServer::TriggerFotaL() - { - FLOG(_L("CFMSServer::TriggerFotaL- begin")); - if(iNetworkMon)//n/w monitoring supports - { - FLOG(_L("CFMSServer::TriggerFotaL- n/w monitor supported")); - if(iFMSInterruptAob.CheckNetworkL()) - { - FLOG(_L("CFMSServer::TriggerFotaL- n/w mon supported & launch fota")); - iFMSInterruptAob.LaunchFotaEngineL(); - } - else if(iFMSInterruptAob.CheckGlobalRFStateL()) - { - FLOG(_L("CFMSServer::TriggerFotaL- n/w check started")); - iFMSInterruptAob.StartNetworkRegistryCheckL(); - return; //dont call drop session as it closes server - } - else - { - FLOG(_L("CFMSServer::TriggerFotaL- phone is offline")); - } - } - else //user interrupt or general interrupt dont check n/w call fota - { - FLOG(_L("CFMSServer::TriggerFotaL- n/w monitor not supported & launch fota")); - iFMSInterruptAob.LaunchFotaEngineL(); - FLOG(_L("CFMSServer::TriggerFotaL- stop server")); - } - DropSession(); // to close the session & server in any case - FLOG(_L("CFMSServer::TriggerFotaL- End")); - } - -//------------------------------------------------------------ -// Called only in n/w interrupt+ WLAN case from session class -// CFMSServer::CheckWlanL -//------------------------------------------------------------ -TBool CFMSServer::CheckWlanL() - { - return iFMSInterruptAob.CheckNetworkL(); - } - -//------------------------------------------------------------ -// CFMSServer::SetWcdma -//------------------------------------------------------------ -void CFMSServer::SetWcdma() - { - iFMSInterruptAob.SetWcdma(); - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::LockSession() -// ---------------------------------------------------------------------------------------- -void CFMSServer::LockSession() - { - iSessionCount++; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::WriteToFile() -// ---------------------------------------------------------------------------------------- -void CFMSServer::WriteToFile(TInt aReason, TInt aBearer,TDriveNumber aDrive, - TInt aSize, TBool aWcdmaBearer ) - { - if(iSessionCount == 0) - { - FLOG(_L("CFMSServer::WriteToFile- begin")); - TInt err=iFile.Open(iFs,KFotaInterruptFileName,EFileWrite); - if(err == KErrNone) - { - FLOG(_L("CFMSServer::WriteToFile--passed")); - TBuf8<30> data;//size 30 or 32--as args is 16 bytes - TBuf8<30> temp; - temp.Num(aReason); - data.Append(temp); - data.Append(','); - temp.Num(aBearer);// or use iFMSinterruptAob's iBearer - data.Append(temp); - data.Append(','); - temp.Num((TInt)aDrive); - data.Append(temp); - data.Append(','); - temp.Num(aSize); - data.Append(temp); - data.Append(','); - temp.Num(aWcdmaBearer); - data.Append(temp); - iFile.Write(data); - iFile.Close(); - } - else - FLOG(_L("CFMSServer::WriteToFile- Failed")); - } - else - FLOG(_L("CFMSServer::WriteToFile- not done as another request is there")); - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::ReadFromFile() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::ReadFromFile(TInt& aReason, TInt& aBearer, TInt& aDrive, TInt& aSize - , TInt& aWcdmaBearer ) - { - TInt err = iFile.Open(iFs,KFotaInterruptFileName,EFileRead); - FLOG(_L("CFMSServer::ReadFromFile() error as %d"),err); - if(err == KErrNone) - { - TInt size = KErrNone; - err = iFile.Size(size); - if(size == 0) //file empty - { - FLOG(_L("CFMSServer::ReadFromFile() file size is empty")); - iFile.Close(); - return EFalse; - } - TBuf8<30> data; - iFile.Read(data); - iFile.Close(); - TBuf8<30> data1; - if(data.Length()>0) - { - TInt len =0 ; - if((len=data.LocateF(',')) > 0) - { - TLex8 value( data.Left(len)); - value.Val(aReason); - FLOG(_L("CFMSServer::ReadFromFile() retrieving reason as %d"),aReason); - data1.Insert(0,data.Right(data.Length()-(len+1))); - data.Zero(); - // len=data1.LocateF(','); - if( data1.Length() > 0 && (len=data1.LocateF(',')) > 0) - { - value=data1.Left(len); - value.Val(aBearer); - FLOG(_L("CFMSServer::ReadFromFile() retrieving aBearer as %d"),aBearer); - data.Insert(0,data1.Right(data1.Length()-(len+1))); - data1.Zero(); - // len=data.LocateF(','); - if(data.Length() > 0 && ( len=data.LocateF(','))> 0) - { - value=data.Left(len); - value.Val(aDrive); - FLOG(_L("CFMSServer::ReadFromFile() retrieving aDrive as %d"),aDrive); - data1.Insert(0,data.Right(data.Length()-(len+1))); - data.Zero(); - if(data1.Length() > 0 && ( len=data1.LocateF(','))> 0 ) - { - value=data1.Left(len); - value.Val(aSize); - FLOG(_L("CFMSServer::ReadFromFile() retrieving aSize as %d"),aSize); - data.Insert(0,data1.Right(data1.Length()-len-1)); - data1.Zero(); - if(data.Length() > 0 ) - { - value=data; - value.Val(aWcdmaBearer); - FLOG(_L("CFMSServer::ReadFromFile() retrieving aWcdmaBearer as %d"),aWcdmaBearer); - } - } - } - } - } - } - } - else - { - return EFalse; - } - return ETrue; - } - -// ----------------------------------------------------------------------------- -// CFMSServer::DropSession() -// ----------------------------------------------------------------------------- - -void CFMSServer::DropSession() - { - // A session is being destroyed - iSessionCount = 0; - //Kill the server - CActiveScheduler::Stop(); - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::FindVariation() -// ---------------------------------------------------------------------------------------- -void CFMSServer::FindVariation() - { - FLOG(_L("CFMSServer::FindVariation()")); - CRepository* centrep = NULL; - TInt variation = 1; - TRAPD( err, centrep = CRepository::NewL( KCRUidFotaServer ) ); - if ( centrep ) - { - FLOG(_L("CFMSServer::FindVariation()::Inside cenrep if")); - TInt err = centrep->Get( KFotaMonitoryServiceEnabled, variation ); - if( err == KErrNone) - { - FLOG(_L("CFMSServer::FindVariation()::cenrep key found with %d"),variation); - } - delete centrep; - } - if ( err == KErrNone ) - { - TBuf<10> var; //32-bit has max of 10 chars in Decimal - var.Num(variation,EBinary); - TInt size = var.Length(), maxlen = 4; - if( size < maxlen) - { - TBuf<4> temp; - temp.AppendFill('0',maxlen-size); - temp.Append(var); - var.Zero(); - var.Append(temp); - } - var.AppendFill('0',6); - if( var[0] == '1' )//memory - { - FLOG(_L("CFMSServer::FindVariation():: memory monitor supported")); - iMemoryMon = ETrue; - } - if( var[1] == '1' ) //startup - { - FLOG(_L("CFMSServer::FindVariation()::Phone restart monitor supported")); - iPhoneRestartMon = ETrue; - } - if( var[2] == '1' )//user or charger - { - FLOG(_L("CFMSServer::FindVariation()::charger monitor supported")); - iChargerMon = ETrue; - } - if( var[3] == '1' )//newtwork - { - FLOG(_L("CFMSServer::FindVariation()::network monitor supported")); - iNetworkMon = ETrue; - } - } - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::ChargerTobeMonitered() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::ChargerTobeMonitered() - { - FLOG(_L("CFMSServer::ChargerTobeMonitered()::charger monitor check")); - return iChargerMon; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::NetworkTobeMonitered() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::NetworkTobeMonitered() - { - FLOG(_L("CFMSServer::NetworkTobeMonitered()::network monitor check")); - return iNetworkMon; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::MoniterAfterPhoneRestart() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::MoniterAfterPhoneRestart() - { - FLOG(_L("CFMSServer::MoniterAfterPhoneRestart()::phonerestart monitor check")); - return iPhoneRestartMon; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::MemoryTobeMonitered() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::MemoryTobeMonitered() - { - FLOG(_L("CFMSServer::MemoryTobeMonitered()::memory monitor check")); - return iMemoryMon; - } - -// ----------------------------------------------------------------------------- -// CFMSServer::StartMonitoring() -// ----------------------------------------------------------------------------- -void CFMSServer::StartMonitoringL(TOmaDLInterruptReason aType) - { - // A new session is being created - FLOG(_L("CFMSServer::StartMonitoringL>>")); - if( iSessionCount == 0 ) - { - ++iSessionCount; - iFMSInterruptAob.StartL(aType); - } - FLOG(_L("CFMSServer::StartMonitoringL<<")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::DeleteFile() -// ----------------------------------------------------------------------------- -void CFMSServer::DeleteFile(TBool aValue) - { - iDeleteFile = aValue; - } -// ---------------------------------------------------------------------------------------- -// CFMSServer::~CFMSServer() -// ---------------------------------------------------------------------------------------- -CFMSServer::~CFMSServer() -{ -FLOG(_L("CFMSServer::~CFMSServer())")); -//iFMSInterruptAob.Cancel(); -if(iDeleteFile) - { - TInt err = iFs.Delete(KFotaInterruptFileName); - FLOG(_L("CFMSServer::~CFMSServer() File Deleted with error as %d"),err); - } -if(iLogAsyncRequest) - { - FLOG(_L("CFMSServer::~CFMSServer():-iLogAsyncRequest cancel)")); - iLogAsyncRequest->Cancel(); - delete iLogAsyncRequest; - iLogAsyncRequest = NULL; - } -iFs.Close(); -} - -// ---------------------------------------------------------------------------------------- -// CFMSServer::NewSessionL() -// ---------------------------------------------------------------------------------------- -CSession2* CFMSServer::NewSessionL(const TVersion&,const RMessage2&) const -{ -return new (ELeave) CFMSSession(); -} - -// ---------------------------------------------------------------------------------------- -// CFMSServer::RequestPending() -// Any request pending -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::RequestPending() - { - if( iSessionCount > 0 ) - { - return ETrue; - } - return EFalse; - } - -// ---------------------------------------------------------------------------- -// CFMSServer::AsyncSessionRequestL() -// Asynchronous request logging -// ---------------------------------------------------------------------------- -void CFMSServer::AsyncSessionRequestL() - { - if(iLogAsyncRequest) - { - FLOG(_L("CFMSServer::AsyncSessionRequestL():-iLogAsyncRequest cancel)")); - iLogAsyncRequest->Cancel(); - delete iLogAsyncRequest; - iLogAsyncRequest = NULL; - } - iLogAsyncRequest = CPeriodic::NewL (EPriorityNormal) ; - FLOG(_L("CFMSServer::AsyncSessionRequestL():-iLogAsyncRequest created)")); - iLogAsyncRequest->Start( - TTimeIntervalMicroSeconds32(KRequestTriggerWaitTime*4) - , TTimeIntervalMicroSeconds32(KRequestTriggerWaitTime*4) - , TCallBack(LogNwRequestL,this) ) ; - FLOG(_L("CFMSServer::AsyncSessionRequestL():-Request logged)")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::AsyncSessionRequestL() -// Asynchronous request logging -// ----------------------------------------------------------------------------- -void CFMSServer::StopAsyncRequest() - { - FLOG(_L("CFMSServer::StopAsyncRequest():-Begin)")); - if(iLogAsyncRequest) - { - FLOG(_L("CFMSServer::StopAsyncRequest():-cancelling the request)")); - iLogAsyncRequest->Cancel(); - delete iLogAsyncRequest; - iLogAsyncRequest = NULL; - } - FLOG(_L("CFMSServer::StopAsyncRequest():-End)")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::StartBatteryMonitoringL() -// Monitors for the battery -// ----------------------------------------------------------------------------- -void CFMSServer::StartBatteryMonitoringL(TOmaUpdInterruptReason aType, TUint aLevel) - { - // A new session is being created - FLOG(_L("CFMSServer::StartMonitoringL, level = %d>>"), aLevel); - if( iSessionCount == 0 ) - { - ++iSessionCount; - iFMSInterruptAob.StartBatteryMonitoringL(aType, aLevel); - } - FLOG(_L("CFMSServer::StartMonitoringL<<")); - } -// ----------------------------------------------------------------------------- -// CFMSServer::StartUpdateInterruptMonitoringL() -// Monitors for the update interrupt type -// ----------------------------------------------------------------------------- -void CFMSServer::StartUpdateInterruptMonitoringL(TOmaUpdInterruptReason aType) - { - // A new session is being created - FLOG(_L("CFMSServer::StartUpdateInterruptMonitoringL>>")); - if(EMonitorPhoneCallEnd == aType) - { - iFMSInterruptAob.StartCallEndMonitoringL(aType); - } - else - { - FLOG(_L("reason unknown")); - } - FLOG(_L("CFMSServer::StartUpdateInterruptMonitoringL<<")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::CheckPhoneCallActiveL() -// checks any phone call is there or not at this moment -// ----------------------------------------------------------------------------- -void CFMSServer::CheckPhoneCallActiveL(TInt& aStatus) - { - FLOG(_L("CFMSServer::CheckPhoneCallActiveL>>")); - TInt callstatus(KErrNotFound); - RProperty::Get(KPSUidCtsyCallInformation, KCTsyCallState, callstatus); - //check ctsydomainpskeys.h for different combinations, below OR condition holds good - if(EPSCTsyCallStateUninitialized == callstatus || - EPSCTsyCallStateNone == callstatus ) // call not active - { - aStatus = EFalse; - } - else // call active - { - aStatus = ETrue; - } - FLOG(_L("CFMSServer::CheckPhoneCallActiveL status is %d<<"),aStatus); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::MonitorPhoneCallEndL() -// Monitors for active phone call end -// ----------------------------------------------------------------------------- -TBool CFMSServer::MonitorPhoneCallEndL(TInt aPkgId, TInt aProfileId) - { - TInt CallState = KErrNotFound; - iPkgId=aPkgId; - iProfileId = aProfileId; - FLOG(_L(" iPkgId:%d,iProfileId:%d<<"),iPkgId,iProfileId); - CheckPhoneCallActiveL(CallState); - if(CallState) - { - //go for call end montioring - LogAsyncCallMonitorL(); - return EFalse; - } - else //trigger fota to show install query - { - iFMSInterruptAob.LaunchFotaUpdate(iPkgId,iProfileId); - return ETrue; - } - } - -// ----------------------------------------------------------------------------- -// CFMSServer::LogAsyncCallMonitorL() -// Async request to monitor active phone call end -// ----------------------------------------------------------------------------- -void CFMSServer::LogAsyncCallMonitorL() - { - if(iLogAsyncRequest) - { - FLOG(_L("CFMSServer::LogAsyncCallMonitorL():- cancel)")); - iLogAsyncRequest->Cancel(); - delete iLogAsyncRequest; - iLogAsyncRequest = NULL; - } - iLogAsyncRequest = CPeriodic::NewL (EPriorityNormal) ; - FLOG(_L("CFMSServer::LogAsyncCallMonitorL(): created)")); - iLogAsyncRequest->Start( - TTimeIntervalMicroSeconds32(KRequestTriggerWaitTime*1) - , TTimeIntervalMicroSeconds32(KRequestTriggerWaitTime*4) - , TCallBack(LogCallEndMonitorRequestL,this) ) ; - FLOG(_L("CFMSServer::LogAsyncCallMonitorL():-Request logged)")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::PkgId()) -// returns the PkgId of the FOTA update -// ----------------------------------------------------------------------------- -TInt& CFMSServer::PkgId() - { - return iPkgId; - } - -// ----------------------------------------------------------------------------- -// CFMSServer::ProfileId() -// returns the ProfileId of the FOTA -// ----------------------------------------------------------------------------- -TInt& CFMSServer::ProfileId() - { - return iProfileId; - } -//End of file