diff -r 13d7c31c74e0 -r b183ec05bd8c fotaapplication/fmsclient/src/fmsclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fotaapplication/fmsclient/src/fmsclient.cpp Tue Aug 31 16:04:06 2010 +0300 @@ -0,0 +1,195 @@ +/* +* 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 "fmsclientserver.h" +#include "fmsclient.h" +#include "fmsclientdebug.h" + +#include "fotaserverPrivateCRKeys.h" +#include +// --------------------------------------------------------------------------- +// IsSecureClient() +// Checks who is trying to launch FMS +// --------------------------------------------------------------------------- +TBool IsSecureClient(TBool& aFotaStartUp) + { + FLOG(_L("IsSecureClient Started")); + RThread thread; + TUid fotaserver,fotastartup; + fotaserver.iUid = KFotaServerUid; + fotastartup.iUid = KStarterUid; + if ( thread.SecureId() == fotaserver.iUid ) + { + FLOG(_L("fmsclient fotaserver is using the service")); + return ETrue; + } + else if ( thread.SecureId() == fotastartup.iUid ) + { + FLOG(_L("fmsclient fotastartupplugin is using the service")); + aFotaStartUp = ETrue; + return ETrue; + } + else if (thread.SecureId() == 0x01D278B9 ) //test app + { + FLOG(_L("fmsclient test app is using the service")); + return ETrue; + } + FLOG(_L("fmsclient not launched")); + return EFalse; + } + +// --------------------------------------------------------------------------- +// StartServerL() +// Starts Fota Downlaod Interrupt Monitory server +// --------------------------------------------------------------------------- +TInt StartServerL() + { + FLOG(_L("StartServerLt Started")); + TInt res = KErrNone; + RProcess server; + res=server.Create(KFMSServerName,KNullDesC); + FLOG(_L("StartServerL-- create server error as %d"),res); + if (res!=KErrNone) + { + return res; + } + TRequestStatus stat; + server.Rendezvous(stat); + if (stat!=KRequestPending) + server.Kill(0); // abort startup + else + server.Resume(); // logon OK - start the server + User::WaitForRequest(stat); // wait for start or death + res=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int(); + FLOG(_L("StartServerL-- server.ExitType() returns %d"),res); + server.Close(); + return res; + } + +// --------------------------------------------------------------------------- +// RFMSClient::OpenL() +// --------------------------------------------------------------------------- +EXPORT_C TInt RFMSClient::OpenL() + { + FLOG(_L("RFMSClient::OpenL()- Begin")); + TInt res = KErrNone; + TBool FotaStartUp = EFalse; + if( IsSecureClient(FotaStartUp)) + { + FLOG(_L("RFMSClient::OpenL()- Secured client")); + res = CreateSession( KFMSServerName,TVersion(1,0,0),2 ); + if ( res != KErrNone ) + { + FLOG(_L("RFMSClient::OpenL()- session not created")); + res = StartServerL(); + User::LeaveIfError( res ); + res = CreateSession( KFMSServerName,TVersion(1,0,0),2 ); + } + User::LeaveIfError( res ); + FLOG(_L("RFMSClient::OpenL()- session created")); + CRepository* centrep2 = NULL; + TRAPD( err, centrep2 = CRepository::NewL( KCRUidFotaServer ) ) + TInt val = KErrNone; + if (err==KErrNone ) + { + centrep2->Get( KFotaUpdateState, val ); + delete centrep2; + } + + centrep2 = NULL; + + if( FotaStartUp && val == EFotaDownloadInterrupted ) + { + FLOG(_L("RFMSClient::OpenL()- fotastartup using FMS session")); + SendInterruptParamsL(); + } + } + else //not a secured client + { + FLOG(_L("fmsclient not launched--insecured client")); + res = KErrNotFound; + } + FLOG(_L("RFMSClient::OpenL()- End %d"),res); + return res; + } + +// --------------------------------------------------------------------------- +// RFMSClient::Close() +// --------------------------------------------------------------------------- +EXPORT_C void RFMSClient::Close() + { + FLOG(_L(" RFMSClient::Close")); + RSessionBase::Close(); //basecall + } + +// ---------------------------------------------------------------------------- +// RFMSClient::NotifyForResumeL() +// ---------------------------------------------------------------------------- +EXPORT_C void RFMSClient::NotifyForResumeL(const TFmsIpcCommands& aReason, + const TInt& aBearer, const TDriveNumber& aDrive, const TInt& aSize) + { + FLOG(_L(" RFMSClient::NotifyForResumeL--Begin")); + TInt Size(aSize),Drive((TInt)aDrive),Bearer(aBearer); + TInt err = SendReceive( (TInt)aReason, TIpcArgs(Bearer,Drive,Size)); + FLOG(_L(" RFMSClient::NotifyForResumeL--End error as %d"),err); + } + +// --------------------------------------------------------------------------- +// RFMSClient::SendInterruptParamsL() called only when fotastartup launched +// --------------------------------------------------------------------------- +void RFMSClient::SendInterruptParamsL() + { + FLOG(_L(" RFMSClient::SendInterruptParamsL--Begin")); + TInt err = Send( EFotaStartUpPlugin ); + FLOG(_L(" RFMSClient::SendInterruptParamsL--End as %d"),err); + } + +EXPORT_C void RFMSClient::NotifyForUpdateL(const TFmsIpcCommands& aReason, TUint aLevel) + { + FLOG(_L(" RFMSClient::NotifyForUpdateL--Begin, level = %d"), aLevel); + TInt err = SendReceive( (TInt) aReason, TIpcArgs (aLevel)); + FLOG(_L(" RFMSClient::NotifyForUpdateL--End as %d"),err); + User::LeaveIfError(err); + } +// --------------------------------------------------------------------------- +// RFMSClient::Cancel() +// --------------------------------------------------------------------------- +EXPORT_C void RFMSClient::Cancel() + { + FLOG(_L(" RFMSClient::Cancel--Begin")); + TInt err = SendReceive( ECancelOutstandingRequest ); + FLOG(_L(" RFMSClient::Cancel--End as %d"),err); + } + +// --------------------------------------------------------------------------- +// RFMSClient::ActivePhoneCallSync() +// --------------------------------------------------------------------------- +EXPORT_C TInt RFMSClient::IsPhoneCallActive(TInt& aCallActive) + { + FLOG(_L(" RFMSClient::IsPhoneCallActive--Begin")); + TPckgBuf result(aCallActive); + TInt err = SendReceive( EUpdPhoneCallActive,TIpcArgs(&result)); + aCallActive=result(); + FLOG(_L(" RFMSClient::IsPhoneCallActive--End as %d,%d"),err,aCallActive); + return err; + } + +//End of file