--- 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 <push/CSIPushMsgEntry.h>
-#include <push/CSLPushMsgEntry.h>
-#include <eikenv.h>
-#include <apmstd.h>
-#include <schemehandler.h>
-#include <AknNoteWrappers.h>
-#include <PushEntry.h>
-#include <PushMtmUi.rsg>
-#include <AknQueryDialog.h>
-#include <bldvariant.hrh>
-#include <FeatMgr.h>
-#include <Uri16.h>
-#include <data_caging_path_literals.hrh>
-#include <f32file.h>
-
-// 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.