diff -r f742655b05bf -r d38647835c2e commsconfig/cscengine/src/cscengstartuphandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsconfig/cscengine/src/cscengstartuphandler.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,402 @@ +/* +* Copyright (c) 2007-2007 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: For CSC startup handling +* +*/ + + +#include + +#include "cscenglogger.h" +#include "cscengstartuphandler.h" + +_LIT( KTagURL, "URL=" ); +_LIT( KTagAppUid, "APPUID=" ); +_LIT( KTagAction, "ACTION=" ); +_LIT( KTagServiceId, "SERID=" ); +_LIT( KTagPluginUid, "PLUGINUID=" ); + + + +const TUint KTagUidPrefixLength = 2; +const TUint KUidLength = 8; + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCEngStartupHandler::CCSCEngStartupHandler() + { + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CCSCEngStartupHandler::ConstructL() + { + CSCENGDEBUG( "CCSCEngStartupHandler::ConstructL begin" ); + + iAction = EDefaultAction; + iServiceId = 0; + iPluginUid = KNullUid; + iAppUid = KNullUid; + + CSCENGDEBUG( "CCSCEngStartupHandler::ConstructL end" ); + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C CCSCEngStartupHandler* CCSCEngStartupHandler::NewL() + { + CCSCEngStartupHandler* self = new (ELeave) CCSCEngStartupHandler; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCEngStartupHandler::~CCSCEngStartupHandler() + { + CSCENGDEBUG( + "CCSCEngStartupHandler::~CCSCEngStartupHandler - begin" ); + + delete iURL; + + CSCENGDEBUG( + "CCSCEngStartupHandler::~CCSCEngStartupHandler - end" ); + } + + +// ----------------------------------------------------------------------------- +// For setting CSC application startup parameters +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CCSCEngStartupHandler::SetStartupParametersL( + const TDesC& aParameters ) + { + CSCENGDEBUG( "CCSCEngStartupHandler::SetStartupParameters - begin" ); + + TInt error( KErrNone ); + + SetAction( aParameters ); + + if ( EOpenSettingsUi == GetParamAction() ) + { + SetServiceId( aParameters ); + } + else + { + SetUid( aParameters, EPluginUid ); + SetUid( aParameters, EAppUid ); + SetUrlL( aParameters ); + } + + CSCENGDEBUG( "CCSCEngStartupHandler::SetStartupParameters - end" ); + + return error; + } + + +// ----------------------------------------------------------------------------- +// For getting parameter action +// ----------------------------------------------------------------------------- +// +EXPORT_C CCSCEngStartupHandler::TAction + CCSCEngStartupHandler::GetParamAction() const + { + CSCENGDEBUG( "CCSCEngStartupHandler::GetParamAction" ); + return iAction; + } + + +// ----------------------------------------------------------------------------- +// For getting parameter service id +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CCSCEngStartupHandler::GetParamServiceId() const + { + CSCENGDEBUG( "CCSCEngStartupHandler::GetParamServiceId" ); + return iServiceId; + } + + +// ----------------------------------------------------------------------------- +// For getting parameter plugin uid +// ----------------------------------------------------------------------------- +// +EXPORT_C const TUid CCSCEngStartupHandler::GetParamPluginUid() const + { + CSCENGDEBUG( "CCSCEngStartupHandler::GetParamPluginUid" ); + return iPluginUid; + } + + +// ----------------------------------------------------------------------------- +// For getting parameter application uid +// ----------------------------------------------------------------------------- +// +EXPORT_C const TUid CCSCEngStartupHandler::GetParamAppUid() const + { + CSCENGDEBUG( "CCSCEngStartupHandler::GetParamAppUid" ); + return iAppUid; + } + + +// ----------------------------------------------------------------------------- +// For Getting parameter URL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CCSCEngStartupHandler::GetParamUrl( TDes& aUrl ) const + { + CSCENGDEBUG( "CCSCEngStartupHandler::GetParamUrlL - begin" ); + + if ( !iURL ) + { + return KErrNotFound; + } + else + { + aUrl.Copy( iURL->Des() ); + } + + CSCENGDEBUG( "CCSCEngStartupHandler::GetParamUrlL - end" ); + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// For resetting uid values +// ----------------------------------------------------------------------------- +// +EXPORT_C void CCSCEngStartupHandler::ResetUid( TUidType aType ) + { + CSCENGDEBUG( "CCSCEngStartupHandler::ResetUid - begin" ); + + if ( EPluginUid == aType ) + { + iPluginUid = KNullUid; + } + else if ( EAppUid == aType ) + { + iAppUid = KNullUid; + } + + CSCENGDEBUG( "CCSCEngStartupHandler::ResetUid - end" ); + } + + +// ----------------------------------------------------------------------------- +// For resetting service id value +// ----------------------------------------------------------------------------- +// +EXPORT_C void CCSCEngStartupHandler::ResetServiceId() + { + iServiceId = 0; + } + +// ----------------------------------------------------------------------------- +// For resetting service id value +// ----------------------------------------------------------------------------- +// +EXPORT_C void CCSCEngStartupHandler::SetStartedFromHomescreen( + TBool aStartedFromHomescreen ) + { + iStartedFromHomescreen = aStartedFromHomescreen; + } + +// ----------------------------------------------------------------------------- +// For resetting service id value +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CCSCEngStartupHandler::StartedFromHomescreen() const + { + return iStartedFromHomescreen; + } + +// --------------------------------------------------------------------------- +// For parsing and setting parameter action +// --------------------------------------------------------------------------- +// +void CCSCEngStartupHandler::SetAction( const TDesC& aParameters ) + { + CSCENGDEBUG( "CCSCEngStartupHandler::SetAction - begin" ); + + TInt start( 0 ); + + // Parse Action parameter + start = aParameters.Find( KTagAction ); + + if ( KErrNotFound != start ) + { + start = start + KTagAction().Length(); + TPtrC pPtr = aParameters.Mid( start, 1 ); + + // Convert string to TUint + TUint value( 0 ); + TLex lex( pPtr ); + lex.Val( value, EDecimal ); + + // Set action + if ( EOpenSettingsUi < iAction ) + { + iAction = EDefaultAction; + } + else + { + iAction = static_cast ( value ); + } + } + + CSCENGDEBUG( "CCSCEngStartupHandler::SetAction - end" ); + } + + +// --------------------------------------------------------------------------- +// For parsing and setting service id parameter +// --------------------------------------------------------------------------- +// +void CCSCEngStartupHandler::SetServiceId( const TDesC& aParameters ) + { + CSCENGDEBUG( "CCSCEngStartupHandler::SetServiceId - begin" ); + + TInt start( 0 ); + TUint value( 0 ); + + // Parse plug-in uid parameter + start = aParameters.Find( KTagServiceId ); + + if ( KErrNotFound != start ) + { + // exclude 'SERID=' + start = start + KTagServiceId().Length(); + + TInt serviceIdLength = aParameters.Length() - start; + + CSCENGDEBUG2( "CCSCEngStartupHandler::SetServiceId: Length=%d", serviceIdLength ); + + + TPtrC pPtr = aParameters.Mid( start, serviceIdLength ); + + TLex lex( pPtr ); + lex.Val( value, EDecimal ); + + iServiceId = value; + } + + + CSCENGDEBUG( "CCSCEngStartupHandler::SetServiceId - end" ); + } + + +// --------------------------------------------------------------------------- +// For parsing and setting uid parameters +// --------------------------------------------------------------------------- +// +void CCSCEngStartupHandler::SetUid( + const TDesC& aParameters, TUidType aUidType ) + { + CSCENGDEBUG( "CCSCEngStartupHandler::SetPluginUid - begin" ); + + TInt start( 0 ); + TUint value( 0 ); + + if ( EPluginUid == aUidType ) + { + // Parse plug-in uid parameter + start = aParameters.Find( KTagPluginUid ); + + if ( KErrNotFound != start ) + { + // exclude 'PLUGINUID=' and '0x' + start = start + KTagPluginUid().Length() + KTagUidPrefixLength; + + TPtrC pPtr = aParameters.Mid( start, KUidLength ); + + TLex lex( pPtr ); + lex.Val( value, EHex ); + + iPluginUid.iUid = value; + } + } + else + { + // Parse application uid parameter + start = aParameters.Find( KTagAppUid ); + + if ( KErrNotFound != start ) + { + // exclude 'APPUID=' and '0x' + start = start + KTagAppUid().Length() + KTagUidPrefixLength; + + TPtrC pPtr = aParameters.Mid( start, KUidLength ); + + TLex lex( pPtr ); + lex.Val( value, EHex ); + + iAppUid.iUid = value; + } + } + + CSCENGDEBUG( "CCSCEngStartupHandler::SetPluginUid - end" ); + } + + +// --------------------------------------------------------------------------- +// For parsing and setting parameter URL +// --------------------------------------------------------------------------- +// +void CCSCEngStartupHandler::SetUrlL( const TDesC& aParameters ) + { + CSCENGDEBUG( "CCSCEngStartupHandler::SetUrl - begin" ); + + TInt start( 0 ); + + // Parse URL parameter + start = aParameters.Find( KTagURL ); + + if ( KErrNotFound != start ) + { + // exclude 'URL=' + start = start + KTagURL().Length(); + + TInt urlLength = aParameters.Length() - start; + + // If iURL exists, delete it first + if ( iURL ) + { + delete iURL; + iURL = NULL; + } + + // Set URL + if ( urlLength ) + { + iURL = HBufC::NewL( urlLength ); + iURL->Des().Copy( aParameters.Mid( start, urlLength ) ); + } + } + + CSCENGDEBUG( "CCSCEngStartupHandler::SetUrl - end" ); + } +