diff -r 000000000000 -r dd21522fd290 browserutilities/schemehandler/SchemeDispatcher/src/BaseHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/schemehandler/SchemeDispatcher/src/BaseHandler.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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 Scheme handler interface implementation for file:// scheme +* +* +*/ + + +// INCLUDE FILES + +#include "BaseHandler.h" +#include "BrowserTelService.h" +#include "SchemeDispLogger.h" +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +// ================= CONSTANTS ======================= + + +// ================= MEMBER FUNCTIONS ======================= + + +// --------------------------------------------------------- +// CBaseHandler::CBaseHandler() +// --------------------------------------------------------- +// +CBaseHandler::CBaseHandler() : CSchemeHandler() + { + iSchemeDoc = NULL; + } + +// --------------------------------------------------------- +// CCtiHandler::~CCtiHandler() +// --------------------------------------------------------- +// +CBaseHandler::~CBaseHandler() + { + delete iParsedUrl; + } + + +// --------------------------------------------------------- +// CBaseHandler::ConstructL() +// --------------------------------------------------------- +// +void CBaseHandler::BaseConstructL( const TDesC& aUrl ) + { + CLOG_ENTERFN( "CBaseHandler::BaseConstructL()" ); + + iParsedUrl = EscapeUtils::EscapeDecodeL( aUrl ); + + CLOG_LEAVEFN( "CBaseHandler::BaseConstructL()" ); + } + +// --------------------------------------------------------- +// CBaseHandler::Observer() +// --------------------------------------------------------- +// +void CBaseHandler::Observer( MAknServerAppExitObserver* aSchemeDoc ) + { + iSchemeDoc = aSchemeDoc; + } + +// --------------------------------------------------------- +// CBaseHandler::RemoveSchemeFromUrlL() +// --------------------------------------------------------- +// +TPtrC CBaseHandler::RemoveSchemeFromUrlL( const TDesC& aScheme ) + { + /* Serach the beginning of the Url */ + TInt schPos; + schPos = iParsedUrl->Des().FindF( aScheme ); + if( schPos == KErrNotFound ) + { + User::Leave( KErrNotFound ); + } + + /* Get the Url without scheme */ + TPtrC path = iParsedUrl->Des().Right + ( iParsedUrl->Des().Length() - ( schPos + aScheme.Length()) ); + + if( 0 == path.Length() ) + { + User::Leave( KErrArgument ); + } + + return path; + } + +// --------------------------------------------------------- +// CBaseHandler::ErrorHandler +// --------------------------------------------------------- +// +void CBaseHandler::ErrorHandlerL( TInt aErrorCode ) + { + TInt errCode = aErrorCode; + switch( aErrorCode ) + { + /* There was no error */ + case KErrNone: + return; + /* to be shown note */ + case KErrInvocationError: + case KErrNoCallActive: + case KErrUserNoAnswer: + case KErrNoService: + case KErrUserBusy: + case KErrPBPhoneBookFull: + case KErrPBWriteError: + case KErrPBNumberTooLong: + case KErrPBNameTooLong: + case KErrUnspecified: + case KErrCancel: + { + errCode = KErrCancel; + } + break; + default: + break; + } + User::Leave( errCode ); + } + +// --------------------------------------------------------- +// CBaseHandler::ReadSdConfirmDtmValueL +// --------------------------------------------------------- +// +TBool CBaseHandler::ReadSdConfirmDtmfValueL() + { + CRepository* repository = CRepository::NewL( KCRUidBrowser ); + TInt retVal = 0; + repository->Get( KBrowserConfirmDTMFSending, retVal ); + delete repository; + return retVal; + } + +// --------------------------------------------------------- +// CBaseHandler::LaunchSchemeAppWithCommandLineL +// --------------------------------------------------------- +// +void CBaseHandler::LaunchSchemeAppWithCommandLineL() + { + // Try launching... + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + TThreadId dummyId; + + TApaAppInfo aInfo; + appArcSession.GetAppInfo( aInfo, KUidSchemeApp ); + + CApaCommandLine* cmdLine = CApaCommandLine::NewL(); + CleanupStack::PushL( cmdLine ); + cmdLine->SetDocumentNameL( *iParsedUrl ); + cmdLine->SetCommandL( EApaCommandCreate ); + cmdLine->SetExecutableNameL( aInfo.iFullName ); + + // Get the whole parameter list and put to the command line + if ( iParamList ) + { + TInt size = iParamList->Size(); + CBufFlat* store = CBufFlat::NewL( size ); + CleanupStack::PushL( store ); + RBufWriteStream outStream; + outStream.Open( *store ); + CleanupClosePushL( outStream ); + iParamList->ExternalizeL( outStream ); + cmdLine->SetTailEndL( store->Ptr( 0 ) ); + CleanupStack::PopAndDestroy( 2 ); // store, close outStream + } + + User::LeaveIfError( appArcSession.StartApp( *cmdLine,dummyId) ); + CLOG_WRITE( "Launched SchemeApp succesfully" ) + + CleanupStack::PopAndDestroy( 2 ); // close appArcSession, cmdLine + }