diff -r 481242ead638 -r 48e827313edd pushmtm/MtmUiSrc/PushLoadServiceOp.cpp --- a/pushmtm/MtmUiSrc/PushLoadServiceOp.cpp Tue Feb 02 00:12:41 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,443 +0,0 @@ -/* -* 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 CPushLoadServiceOp. -* -*/ - - - -// INCLUDE FILES - -#include "PushLoadServiceOp.h" -#include "PushMtmUiDef.h" -#include "PushMtmUiPanic.h" -#include "PushMtmLog.h" -#include "PushMtmUtil.h" -#include "PushMtmSettings.h" -#include "PushAuthenticationUtilities.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// CONSTANTS - -_LIT( KDefaultScheme, "http://" ); - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CPushLoadServiceOp::NewL -// --------------------------------------------------------- -// -CPushLoadServiceOp* CPushLoadServiceOp::NewL( CMsvSession& aSession, - TMsvId aEntryId, - TRequestStatus& aObserverStatus ) - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::NewL") - - CPushLoadServiceOp* self = - new (ELeave) CPushLoadServiceOp( aSession, aEntryId, aObserverStatus ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::NewL") - return self; - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::~CPushLoadServiceOp -// --------------------------------------------------------- -// -CPushLoadServiceOp::~CPushLoadServiceOp() - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::~CPushLoadServiceOp") - - Cancel(); - delete iSchemeHandler; - FeatureManager::UnInitializeLib(); - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::~CPushLoadServiceOp") - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::StartL -// --------------------------------------------------------- -// -void CPushLoadServiceOp::StartL() - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::StartL") - - Cancel(); - - // Check expiration (SI specific). - if ( IsExpiredL( iTEntry ) ) - { - PUSHLOG_WRITE(" Msg is expired.") - // The entry is expired. - - // Display a confirmation dialog. - TParse* fileParser = new (ELeave) TParse; - CleanupStack::PushL( fileParser ); - fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL ); - AssureResourceL( fileParser->FullName() ); - CleanupStack::PopAndDestroy( fileParser ); // fileParser - fileParser = NULL; - - HBufC* value = iCoeEnv.AllocReadResourceLC( R_PUSHLS_EXPIRED_NOTE ); - CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue ); - note->ExecuteLD( *value ); - CleanupStack::PopAndDestroy( value ); // value - - // Delete the expired message. - CMsvEntry* cParent = iMsvSession.GetEntryL( iTEntry.Parent() ); - CleanupStack::PushL( cParent ); - cParent->DeleteL( iEntryId ); - CleanupStack::PopAndDestroy( cParent ); // cParent - - // Nothing to do. - iDone = ETrue; - } - - CPushMtmUiOperation::StartL(); - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::StartL") - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::CPushLoadServiceOp -// --------------------------------------------------------- -// -CPushLoadServiceOp::CPushLoadServiceOp( CMsvSession& aSession, - TMsvId aEntryId, - TRequestStatus& aObserverStatus ) -: CPushMtmUiOperation( aSession, aEntryId, aObserverStatus ), - iDone( EFalse ) - { - PUSHLOG_WRITE("CPushLoadServiceOp constructing") - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::ConstructL -// --------------------------------------------------------- -// -void CPushLoadServiceOp::ConstructL() - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::ConstructL") - - FeatureManager::InitializeLibL(); - - CPushMtmUiOperation::ConstructL(); - - // Initialize iTEntry. - TMsvId service; - User::LeaveIfError( iMsvSession.GetEntry( iEntryId, service, iTEntry ) ); - __ASSERT_ALWAYS( iTEntry.iMtm == KUidMtmWapPush, - UiPanic( EPushMtmUiPanBadMtm ) ); - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::ConstructL") - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::IsExpiredL -// --------------------------------------------------------- -// -TBool CPushLoadServiceOp::IsExpiredL( const TMsvEntry& aTEntry ) const - { - TBool ret( EFalse ); - - if ( aTEntry.iBioType == KUidWapPushMsgSI.iUid ) - { - CSIPushMsgEntry* si = CSIPushMsgEntry::NewL(); - CleanupStack::PushL( si ); - si->RetrieveL( iMsvSession, iEntryId ); - // Check expiration if expiration time was set. - if ( si->Expires() != Time::NullTTime() ) - { - TTime today; - today.UniversalTime(); - if ( si->Expires() < today ) - { - ret = ETrue; - } - } - CleanupStack::PopAndDestroy( si ); // si - } - - return ret; - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::RetrieveContextAndGetUrlLC -// --------------------------------------------------------- -// -CPushMsgEntryBase* CPushLoadServiceOp::RetrieveContextAndGetUrlLC - ( TPtrC& aUrl ) const - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::RetrieveContextAndGetUrlLC"); - - CPushMsgEntryBase* context = NULL; - const TInt32 bioType( iTEntry.iBioType ); - - if ( bioType == KUidWapPushMsgSI.iUid ) - { - context = CSIPushMsgEntry::NewL(); - } - else if ( bioType == KUidWapPushMsgSL.iUid && - FeatureManager::FeatureSupported( KFeatureIdPushSL ) ) - { - context = CSLPushMsgEntry::NewL(); - } - else - { - __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) ); - User::Leave( KErrNotSupported ); - } - - CleanupStack::PushL( context ); - context->RetrieveL( iMsvSession, iEntryId ); - - if ( bioType == KUidWapPushMsgSI.iUid ) - { - CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, context ); - aUrl.Set( si->Url() ); - } - else if ( bioType == KUidWapPushMsgSL.iUid ) - { - CSLPushMsgEntry* sl = STATIC_CAST( CSLPushMsgEntry*, context ); - aUrl.Set( sl->Url() ); - } - else - { - __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) ); - } - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::RetrieveContextAndGetUrlLC"); - return context; - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::AuthenticateL -// --------------------------------------------------------- -// -TBool CPushLoadServiceOp::AuthenticateL( const CPushMsgEntryBase& aPushMsg, - const CPushMtmSettings& aMtmSettings ) const - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::AuthenticateL"); - - TBool isAuthenticated = ETrue; // by default. - - if ( iTEntry.iBioType != KUidWapPushMsgSL.iUid ) - { - PUSHLOG_WRITE(" Not SL"); - isAuthenticated = ETrue; // No authentication needed. - } - else - { - // SL cache & execute-high message requires additional authentication. - CSLPushMsgEntry& sl = (CSLPushMsgEntry&)aPushMsg; - - if ( sl.Action() == CSLPushMsgEntry::ESLPushMsgExecuteCache ) - { - PUSHLOG_WRITE(" SL cache"); - isAuthenticated = TPushAuthenticationUtil:: - AuthenticateMsgL( aMtmSettings, aPushMsg ); - if ( !isAuthenticated ) - { - // Ask the user... - isAuthenticated = ExecuteUserQueryL( R_PUSHLS_SL_CACHE_NOT_AUTH ); - } - } - else if - ( - sl.Action() == CSLPushMsgEntry::ESLPushMsgExecuteHigh && - aMtmSettings.ServiceLoadingType() == CPushMtmSettings::EAutomatic - ) - { - PUSHLOG_WRITE(" SL high + auto"); - isAuthenticated = TPushAuthenticationUtil:: - AuthenticateMsgL( aMtmSettings, aPushMsg ); - if ( !isAuthenticated ) - { - // Ask the user... - isAuthenticated = ExecuteUserQueryL( R_PUSHLS_SL_NOT_AUTH ); - } - } - else - { - PUSHLOG_WRITE(" Other SL"); - isAuthenticated = ETrue; // No authentication needed. - } - } - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::AuthenticateL"); - return isAuthenticated; - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::ExecuteUserQueryL -// --------------------------------------------------------- -// -TBool CPushLoadServiceOp::ExecuteUserQueryL( TInt aResId ) const - { - CAknQueryDialog* queryDlg = CAknQueryDialog::NewL(); - TInt userResponse = queryDlg->ExecuteLD( aResId ); - TBool userWantsToDownload = ( userResponse == EAknSoftkeyYes ); - - return userWantsToDownload; - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::ValidateLC -// --------------------------------------------------------- -// -HBufC* CPushLoadServiceOp::ValidateLC( TDesC& aUrl ) const - { - TUriParser uriParser; - TInt err = uriParser.Parse( aUrl ); - User::LeaveIfError( err ); - HBufC* validated = NULL; - - if ( uriParser.IsPresent( EUriScheme ) ) - { - // Just copy the original URL. - validated = aUrl.AllocLC(); - } - else - { - // Add default scheme. - validated = HBufC::NewLC( aUrl.Length() + KDefaultScheme().Length() ); - validated->Des().Copy( KDefaultScheme ); - validated->Des().Append( aUrl ); - } - - return validated; - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::RunL -// --------------------------------------------------------- -// -void CPushLoadServiceOp::RunL() - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::RunL") - - if ( iDone ) - { - PUSHLOG_WRITE(" Done") - SignalObserver( KErrNone ); - } - else - { - TPtrC url; - CPushMsgEntryBase* context = RetrieveContextAndGetUrlLC( url ); - - CPushMtmSettings* mtmSettings = CPushMtmSettings::NewLC(); - TBool msgAuthenticated = AuthenticateL( *context, *mtmSettings ); - CleanupStack::PopAndDestroy( mtmSettings ); // mtmSettings - - if ( !msgAuthenticated ) - { - // Ready. - SignalObserver( KErrNone ); - } - else - { - // OK, authenticated. Can be downloaded. - - // Mark service read. - iMtmUtil->MarkServiceUnreadL( iEntryId, EFalse ); - - // Download the URL. - delete iSchemeHandler; - iSchemeHandler = NULL; - HBufC* validatedUrl = ValidateLC( url ); - iSchemeHandler = CSchemeHandler::NewL( *validatedUrl ); - - if( (url.Mid(0,7).Compare(_L("http://")) == 0) || (url.Mid(0,8).Compare(_L("https://")) == 0)) - { - TRAPD( err, iSchemeHandler->HandleUrlStandaloneL()); - CleanupStack::PopAndDestroy( validatedUrl ); // validatedUrl - SignalObserver( err ); - } - else - { - iSchemeHandler->Observer( this ); - TRAPD(err, iSchemeHandler->HandleUrlEmbeddedL()); - CleanupStack::PopAndDestroy( validatedUrl ); // validatedUrl - if( err != KErrNone) - SignalObserver( err ); - } - - } - - CleanupStack::PopAndDestroy( context ); // context, needed for 'url' - } - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::RunL") - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::DoCancel -// --------------------------------------------------------- -// -void CPushLoadServiceOp::DoCancel() - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::DoCancel") - SignalObserver( KErrCancel ); - PUSHLOG_LEAVEFN("CPushLoadServiceOp::DoCancel") - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::RunError -// --------------------------------------------------------- -// -TInt CPushLoadServiceOp::RunError( TInt aError ) - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::RunError") - PUSHLOG_WRITE_FORMAT(" CPushLoadServiceOp::RunError <%d>",aError) - - TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) ); - return CPushMtmUiOperation::RunError( aError ); - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::RunError") - } - -// --------------------------------------------------------- -// CPushLoadServiceOp::HandleServerAppExit -// --------------------------------------------------------- -// -void CPushLoadServiceOp::HandleServerAppExit(TInt LOG_ONLY(aReason)) - { - PUSHLOG_ENTERFN("CPushLoadServiceOp::HandleServerAppExit") - PUSHLOG_WRITE_FORMAT(" CPushLoadServiceOp::HandleServerAppExit <%d>",aReason) - - // Ready. - SignalObserver( KErrNone ); - - PUSHLOG_LEAVEFN("CPushLoadServiceOp::HandleServerAppExit") - } - -// End of file.