--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commsconfig/cscengine/src/cscengstartuphandler.cpp Mon Jan 18 20:12:36 2010 +0200
@@ -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 <e32base.h>
+
+#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<CCSCEngStartupHandler::TAction> ( 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" );
+ }
+