diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/src/cfclient/cfscriptservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/src/cfclient/cfscriptservice.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,339 @@ +/* +* Copyright (c) 2008-2008 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: CCFScriptService class implementation. + * +*/ + + +// SYSTEM INCLUDES +#include +#include + +// USER INCLUDES +#include "cfscriptservice.h" +#include "cftrace.h" +#include "cfcommon.h" +#include "CFClientSession.h" +#include "cfscriptmessagelistener.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// C++ constructor. +// --------------------------------------------------------------------------- +// +CCFScriptService::CCFScriptService( RCFClientSession& aSession, + MCFListener& aListener ): + CCFServiceBase( CCFServiceBase::ECFScriptService, aSession, aListener ) + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CCFScriptService::ConstructL( ) + { + FUNC_LOG; + + iMessageListener = CCFScriptMessageListener::NewL( iSession, iListener ); + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// --------------------------------------------------------------------------- +// +CCFScriptService* CCFScriptService::NewL( RCFClientSession& aSession, + MCFListener& aListener ) + { + FUNC_LOG; + + CCFScriptService* self = CCFScriptService::NewLC( aSession, aListener ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// Leaves pointer in the cleanup stack. +// --------------------------------------------------------------------------- +// +CCFScriptService* CCFScriptService::NewLC( RCFClientSession& aSession, + MCFListener& aListener ) + { + FUNC_LOG; + + CCFScriptService* self = new( ELeave ) CCFScriptService( + aSession, + aListener ); + CleanupStack::PushL( self ); + self->ConstructL( ); + return self; + } + +// --------------------------------------------------------------------------- +// C++ destructor. +// --------------------------------------------------------------------------- +// +CCFScriptService::~CCFScriptService( ) + { + FUNC_LOG; + + delete iMessageListener; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::RegisterScript +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::RegisterScript( const TDesC& aScriptFileName ) + { + FUNC_LOG; + + TInt scriptId = KErrNotFound; + TRAPD( err, scriptId = ShareFileAndSendSyncL( + aScriptFileName, ERegisterScriptByName ) ); + + if( err == KErrNone ) + { + if( !iMessageListener->IsActive() ) + { + // Activate listening for the first time + iMessageListener->RequestNotification(); + } + err = scriptId; + } + + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::RegisterScript +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::RegisterScript( const TDesC8& aScript, + const TDesC& aScriptFileName ) + { + FUNC_LOG; + + TInt err = KErrNone; + + // Check arguments + if( aScriptFileName.Length() > 0 && aScript.Length() > 0 ) + { + TIpcArgs args( &aScript, &aScriptFileName ); + err = iSession.SendSync( ERegisterScriptByNameAndDesc, args ); + } + else + { + err = KErrArgument; + } + + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::DeregisterScript +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::DeregisterScript( TInt aScriptId ) + { + FUNC_LOG; + + TIpcArgs args( aScriptId ); + TInt err = iSession.SendSync( EDeregisterScriptById, args ); + + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::SaveScript +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::SaveScript( const TDesC& aScriptFileName ) + { + FUNC_LOG; + + TInt scriptId = KErrNotFound; + TRAPD( err, scriptId = ShareFileAndSendSyncL( + aScriptFileName, ESaveScriptByName ) ); + + if( err == KErrNone ) + { + err = scriptId; + } + + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::SaveScript +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::SaveScript( const TDesC8& aScript, + const TDesC& aScriptFileName ) + { + FUNC_LOG; + + TInt err = KErrNone; + + // Check arguments + if( aScriptFileName.Length() > 0 && aScript.Length() > 0 ) + { + TIpcArgs args( &aScript, &aScriptFileName ); + err = iSession.SendSync( ESaveScriptByNameAndDesc, args ); + } + else + { + err = KErrArgument; + } + + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::DeleteScript +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::DeleteScript( + const TDesC& aScriptFileName ) + { + FUNC_LOG; + + TInt err = KErrNone; + + // Check arguments + if( aScriptFileName.Length() > 0 ) + { + TIpcArgs args( &aScriptFileName ); + err = iSession.SendSync( EDeleteScriptByName, args ); + } + else + { + err = KErrArgument; + } + + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::DeleteScripts +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::DeleteScripts() + { + FUNC_LOG; + + return iSession.SendSync( EDeleteScriptByUid ); + } + +//---------------------------------------------------------------------------- +// CCFScriptService::UpgradeRomScriptL +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::UpgradeRomScript( const TDesC& aScriptFileName ) + { + FUNC_LOG; + + TRAPD( err, ShareFileAndSendSyncL( aScriptFileName, EUpgradeRomScriptByName ) ); + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::UpgradeRomScriptDes +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::UpgradeRomScriptDes( const TDesC& aScriptFileName, + const TDesC8& aScript ) + { + FUNC_LOG; + + TInt err = KErrNone; + + // Check arguments + if( aScriptFileName.Length() > 0 && aScript.Length() > 0 ) + { + TIpcArgs args( &aScript, &aScriptFileName ); + err = iSession.SendSync( EUpgradeRomScriptByNameAndDesc, args ); + } + else + { + err = KErrArgument; + } + + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::RestoreRomScript +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::RestoreRomScript( const TDesC& aScriptFileName ) + { + FUNC_LOG; + + TInt err = KErrNone; + + // Check argument + if( aScriptFileName.Length() > 0 ) + { + TIpcArgs args( &aScriptFileName ); + err = iSession.SendSync( ERestoreRomScript, args ); + } + else + { + err = KErrArgument; + } + + return err; + } + +//---------------------------------------------------------------------------- +// CCFScriptService::ShareFileAndSendSyncL +//---------------------------------------------------------------------------- +// +TInt CCFScriptService::ShareFileAndSendSyncL( const TDesC& aScriptFileName, + TInt aOpCode ) + { + FUNC_LOG; + + RFs fs; + CleanupClosePushL( fs ); + User::LeaveIfError( fs.Connect() ); + + // make possible to share the file server session with the CF server + User::LeaveIfError( fs.ShareProtected() ); + + // open the file + RFile scriptFile; + CleanupClosePushL( scriptFile ); + User::LeaveIfError( scriptFile.Open( fs, aScriptFileName, EFileRead ) ); + + // deliver the file handle to the server + TIpcArgs args; + User::LeaveIfError( scriptFile.TransferToServer( args, 0, 1 ) ); + + // Register and install script to disk + TInt err = iSession.SendSync( aOpCode, args ); + User::LeaveIfError( err ); + + // Cleanup + CleanupStack::PopAndDestroy( &scriptFile ); + CleanupStack::PopAndDestroy( &fs ); + + return err; + } + +// End of file