--- a/commondrm/drmutility/src/DrmUtilityDmgrWrapper.cpp Thu Aug 19 10:12:10 2010 +0300
+++ b/commondrm/drmutility/src/DrmUtilityDmgrWrapper.cpp Tue Aug 31 15:29:38 2010 +0300
@@ -1,68 +1,65 @@
/*
-* Copyright (c) 2007-2008 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: Dynamically loadable wrapper for Download manager
-*
-*/
-
+ * Copyright (c) 2007-2010 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: Dynamically loadable wrapper for Download manager
+ *
+ */
#include <centralrepository.h>
#include <cdblen.h>
#include <cmconnectionmethod.h>
#include <cmdestination.h>
#include <cmconnectionmethoddef.h>
#include <cmmanager.h>
-
-#ifdef __SERIES60_NATIVE_BROWSER
-#include <browseruisdkcrkeys.h>
-#endif
-
#ifdef RD_MULTIPLE_DRIVE
#include <driveinfo.h>
#endif
-
#include <StringLoader.h>
#include <data_caging_path_literals.hrh>
+#include <es_enum.h> // tconnectioninfo
+#include <es_enum_partner.h> // TConnectionInfoV2
+#include <es_sock.h> // rconnection rsocket
+#include <AknProgressDialog.h> // avkon classes
+#include <eikprogi.h>
+
#include <ConeResLoader.h>
#include <apparc.h>
#include <DrmUtilityDmgrWrapper.rsg>
-#include "RoapEng.h"
+#include <RoapEng.h>
+#include <RoapDef.h>
+#include <RoapObserver.h>
+
+// including files related to qt changes
+#include <qstring.h>
+#include <downloadmanager.h>
+#include <download.h>
+#include <dmcommon.h>
+#include <downloadevent.h>
+
#include "RoapSyncWrapper.h"
#include "RoapDef.h"
-
#include "DrmUtilityDmgrWrapper.h"
#include "DrmUtilityDmgrWrapperLogger.h"
+#include "drmutilityconnection.h"
+#include "buffercontainers.h" //CnameContainer etc.
+#include "cleanupresetanddestroy.h"
+#include "buffercontainers.h"
+#include "qdrmutilitydmgreventhandler.h"
-// DEBUG macros
-#ifdef _DEBUG
-#define DRMDEBUGLIT( a, b ) \
-_LIT( a , b )
-#define DRMDEBUG( a ) \
-RDebug::Print( a )
-#define DRMDEBUG2( a, b ) \
-RDebug::Print( a, b )
-#else
-#define DRMDEBUGLIT( a, b )
-#define DRMDEBUG( a )
-#define DRMDEBUG2( a, b )
-#endif
-
-// CONSTANTS
-#ifndef __SERIES60_NATIVE_BROWSER
-const TUid KCRUidBrowser = {0x10008D39};
-const TUint32 KBrowserDefaultAccessPoint = 0x0000000E;
-const TUint32 KBrowserAccessPointSelectionMode = 0x0000001E;
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "DrmUtilityDmgrWrapperTraces.h"
#endif
#ifndef RD_MULTIPLE_DRIVE
@@ -72,52 +69,129 @@
_LIT( KRomDriveFormatter, "%c:" );
_LIT( KKDrmUtilityTriggerFilePathFormatter, "%c:\\" );
#endif
+_LIT( KCDrmUtilityDmgrWrapperResFileName,"DrmUtilityDmgrWrapper.rsc" );
+const TInt KProgressInfoFinalValue(200);
+const TInt KProgressInfoIncrementSmall(5);
+const TInt KProgressInfoIncrementMedium(10);
+const TInt KProgressInfoIncrementLarge(30);
-_LIT( KCDrmUtilityDmgrWrapperResFileName,"DrmUtilityDmgrWrapper.rsc" );
-const TInt KProgressInfoFinalValue( 200 );
-const TInt KProgressInfoIncrementSmall( 5 );
-const TInt KProgressInfoIncrementMedium( 10 );
-const TInt KProgressInfoIncrementLarge( 30 );
+using namespace WRT;
// ======== LOCAL FUNCTIONS ========
// ---------------------------------------------------------------------------
-// DeleteHttpDowload
+// ClearIfNotRoapTemporaryError
// ---------------------------------------------------------------------------
//
-LOCAL_C void DeleteHttpDowload( TAny* aDownload )
+void ClearIfNotRoapTemporaryError(TInt aError, HBufC8*& aBuffer)
{
- reinterpret_cast< RHttpDownload* >( aDownload )->Delete();
+ // ROAP ERROR CODES
+ switch (aError)
+ {
+ case KErrRoapGeneral:
+ case KErrRoapServer:
+ case KErrRoapDomainFull:
+ case KErrRoapNotRegistered:
+ break;
+ default:
+ delete aBuffer;
+ aBuffer = NULL;
+ break;
+ }
}
+
// ---------------------------------------------------------------------------
-// IapIdOfDefaultSnapL
-// for trapping purposes only
+// Calls the appropriate member function of the object during object cleanup
// ---------------------------------------------------------------------------
//
-LOCAL_C TUint32 IapIdOfDefaultSnapL(
- RCmManager& aCmManager,
- const TUint32 aDefaultSnap )
+template<class _Ty, class _Tf> class mem_auto_ptr
+ {
+ public:
+ explicit mem_auto_ptr(_Ty _P = 0, _Tf _F = 0)
+ : _Owns(_P != 0), _Ptr(_P), _Fn(_F)
+ {}
+
+ mem_auto_ptr(const mem_auto_ptr<_Ty,_Tf>& _Y)
+ : _Owns(_Y._Owns), _Ptr(_Y.release()), _Fn(_Y.function())
+ {}
+
+ mem_auto_ptr<_Ty,_Tf>& operator=(const mem_auto_ptr<_Ty,_Tf>& _Y)
+ {
+ if (this != &_Y)
+ {
+ _Fn = _Y.function();
+ if (_Ptr != _Y.get())
+ {
+ if (_Owns)
+ delete _Ptr;
+ _Owns = _Y._Owns;
+ }
+ else if (_Y._Owns)
+ _Owns = true;
+ _Ptr = _Y.release();
+ }
+ return (*this);
+ }
+
+ ~mem_auto_ptr()
+ {
+ if (_Owns)
+ {
+ (_Ptr->*_Fn)();
+ }
+ }
+
+ _Ty& operator*() const
+ {
+ return (*get());
+ }
+
+ _Ty *operator->() const
+ {
+ return (get());
+ }
+
+ _Ty *get() const
+ {
+ return (_Ptr);
+ }
+
+ _Ty *release() const
+ {
+ ((mem_auto_ptr<_Ty,_Tf> *)this)->_Owns = false;
+ return (_Ptr);
+ }
+
+ _Tf *function() const
+ {
+ return (_Fn);
+ }
+ private:
+ bool _Owns;
+ _Ty _Ptr;
+ _Tf _Fn;
+ };
+
+
+// ---------------------------------------------------------------------------
+// UpdateBufferL
+// ---------------------------------------------------------------------------
+//
+template<typename bufType, typename descType>
+LOCAL_C void UpdateBufferL(bufType*& aTargetBuf, const descType& aSourceBuf)
{
- RCmDestination dest( aCmManager.DestinationL( aDefaultSnap ) );
- CleanupClosePushL( dest );
- TUint32 iapIdOfDest( 0 );
-
- if ( dest.ConnectionMethodCount() <= 0 )
+ if (aTargetBuf)
{
- User::Leave( KErrNotFound );
+ delete aTargetBuf;
+ aTargetBuf = NULL;
}
-
- RCmConnectionMethod cMeth( dest.ConnectionMethodL( 0 ) );
- CleanupClosePushL( cMeth );
-
- iapIdOfDest = cMeth.GetIntAttributeL( CMManager::ECmIapId );
- CleanupStack::PopAndDestroy( &cMeth );
- CleanupStack::PopAndDestroy( &dest );
- return iapIdOfDest;
+ if (aSourceBuf.Length())
+ {
+ aTargetBuf = aSourceBuf.AllocL();
+ }
}
-
// ======== MEMBER FUNCTIONS ========
// ---------------------------------------------------------------------------
@@ -125,8 +199,10 @@
// ---------------------------------------------------------------------------
//
CDrmUtilityDmgrWrapper::CDrmUtilityDmgrWrapper() :
- iUseCoeEnv( EFalse )
+ CActive(CActive::EPriorityStandard),
+ iUseCoeEnv(EFalse), iIapId(0), iState(EInit)
{
+ CActiveScheduler::Add(this);
}
// ---------------------------------------------------------------------------
@@ -137,14 +213,24 @@
{
CLOG_WRITE( "DMgrWrapper::ConstructL" );
const TInt KDrmUtilityDmgrWrapperUid = 0x102830FE;
- iDlMgr.ConnectL( TUid::Uid(KDrmUtilityDmgrWrapperUid), *this, EFalse );
+ iConnection = DRM::CDrmUtilityConnection::NewL(ETrue);
+
+ try
+ {
+ QString drmUtilityDmgrWrapperUid(QString::number(KDrmUtilityDmgrWrapperUid));
+ iDlMgr = q_check_ptr(new DownloadManager(drmUtilityDmgrWrapperUid));
+ }
+ catch(const std::exception& exception)
+ {
+ qt_symbian_exception2LeaveL(exception);
+ }
iProgressInfo = NULL;
iProgressNoteDialog = NULL;
iDialogDismissed = ETrue;
+ User::LeaveIfError(iFs.Connect());
+ User::LeaveIfError(iFs.ShareProtected());
}
-
-
// ---------------------------------------------------------------------------
// CDrmUtilityDmgrWrapper::NewL
// ---------------------------------------------------------------------------
@@ -152,12 +238,11 @@
CDrmUtilityDmgrWrapper* CDrmUtilityDmgrWrapper::NewL()
{
CLOG_WRITE( "DMgrWrapper::NewL" );
- CDrmUtilityDmgrWrapper* self( CDrmUtilityDmgrWrapper::NewLC() );
- CleanupStack::Pop( self );
+ CDrmUtilityDmgrWrapper* self(CDrmUtilityDmgrWrapper::NewLC());
+ CleanupStack::Pop(self);
return self;
}
-
// ---------------------------------------------------------------------------
// CDrmUtilityDmgrWrapper::NewLC
// ---------------------------------------------------------------------------
@@ -165,13 +250,12 @@
CDrmUtilityDmgrWrapper* CDrmUtilityDmgrWrapper::NewLC()
{
CLOG_WRITE( "DMgrWrapper::NewLC" );
- CDrmUtilityDmgrWrapper* self( new( ELeave ) CDrmUtilityDmgrWrapper() );
- CleanupStack::PushL( self );
+ CDrmUtilityDmgrWrapper* self(new (ELeave) CDrmUtilityDmgrWrapper());
+ CleanupStack::PushL(self);
self->ConstructL();
return self;
}
-
// ---------------------------------------------------------------------------
// CDrmUtilityDmgrWrapper::~CDrmUtilityDmgrWrapper
// ---------------------------------------------------------------------------
@@ -179,44 +263,31 @@
CDrmUtilityDmgrWrapper::~CDrmUtilityDmgrWrapper()
{
CLOG_WRITE( "DMgrWrapper destructor" );
- if ( iProgressNoteDialog )
- {
- // deletes the dialog
- TRAPD( err, iProgressNoteDialog->ProcessFinishedL() );
- if ( err )
- {
- delete iProgressNoteDialog;
- }
- iProgressNoteDialog = NULL;
- }
- delete iErrorUrl;
- delete iPostResponseUrl;
-
-#ifdef _DEBUG
-
- if ( iDlMgr.Handle() )
+ Cancel();
+ if (iProgressNoteDialog)
{
- iDlMgr.Close();
+ // deletes the dialog
+ TRAPD( err, iProgressNoteDialog->ProcessFinishedL() );
+ if (err)
+ {
+ delete iProgressNoteDialog;
+ }
+ iProgressNoteDialog = NULL;
}
-
-#else
+ delete iErrorUrl;
- iDlMgr.Close();
-
-#endif
- }
-
+ delete iPostResponseUrl;
+ delete iConnection;
-// ---------------------------------------------------------------------------
-// CDrmUtilityDmgrWrapper::DownloadAndHandleRoapTriggerL
-// ---------------------------------------------------------------------------
-//
-void CDrmUtilityDmgrWrapper::DownloadAndHandleRoapTriggerL( const HBufC8* aUrl )
- {
- CLOG_WRITE( "DMgrWrapper::DownloadAndHandleRoapTriggerL" );
- iUseCoeEnv = EFalse;
- DoDownloadAndHandleRoapTriggerL( aUrl );
- HandlePostResponseUrlL();
+ delete iTriggerUrl;
+ delete iTriggerBuf;
+ delete iFileName;
+ delete iRoapEng;
+ iDownload->cancel();
+ delete iDlMgr;
+ delete iDrmUtilityDmgrEventHandler;
+
+ iFs.Close();
}
@@ -224,447 +295,453 @@
// CDrmUtilityDmgrWrapper::DownloadAndHandleRoapTriggerL
// ---------------------------------------------------------------------------
//
+void CDrmUtilityDmgrWrapper::DownloadAndHandleRoapTriggerL(const HBufC8* aUrl)
+ {
+ CLOG_WRITE( "DMgrWrapper::DownloadAndHandleRoapTriggerL" );
+ iUseCoeEnv = EFalse;
+ if (iState != EInit || iWait.IsStarted())
+ {
+ User::Leave(KErrNotReady);
+ }
+
+ UpdateBufferL<HBufC8, TDesC8> (iTriggerUrl, *aUrl);
+ CompleteToState(EInit, KErrNone);
+ iWait.Start();
+ }
+
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::DownloadAndHandleRoapTriggerL
+// ---------------------------------------------------------------------------
+//
void CDrmUtilityDmgrWrapper::DownloadAndHandleRoapTriggerL(
- const HBufC8* aUrl, CCoeEnv& aCoeEnv )
+ const HBufC8* aUrl, CCoeEnv& aCoeEnv)
{
CLOG_WRITE( "DMgrWrapper::DownloadAndHandleRoapTriggerL" );
iCoeEnv = &aCoeEnv;
iUseCoeEnv = ETrue;
- DoDownloadAndHandleRoapTriggerL( aUrl );
- HandlePostResponseUrlL();
- }
-
-
-// ---------------------------------------------------------------------------
-// CDrmUtilityDmgrWrapper::HandlePostResponseUrlL
-// ---------------------------------------------------------------------------
-//
-void CDrmUtilityDmgrWrapper::HandlePostResponseUrlL()
- {
- if ( iPostResponseUrl )
+ if (iState != EInit || iWait.IsStarted())
{
- DoDownloadAndHandleRoapTriggerL( iPostResponseUrl );
- // prevent infinite post response fetches.
- delete iPostResponseUrl;
- iPostResponseUrl = NULL;
-
- // Ensure progress note gets deleted.
- // It remains open if prUrl initialted ROAP operation has PrUrl
- // (unsupported chained metering report)
- RemoveProgressNoteL();
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CDrmUtilityDmgrWrapper::DoDownloadAndHandleRoapTriggerL
-// ---------------------------------------------------------------------------
-//
-void CDrmUtilityDmgrWrapper::DoDownloadAndHandleRoapTriggerL(
- const HBufC8* aUrl )
- {
- RFs fs;
- RFile roapTrigger;
- HBufC8* triggerBuf( NULL );
- TBool result( EFalse );
- TFileName triggerFileName;
-
- CLOG_WRITE( "DMgrWrapper::DoDownloadAndHandleRoapTriggerL" );
- User::LeaveIfError( fs.Connect() );
- CleanupClosePushL( fs );
- User::LeaveIfError( fs.ShareProtected() );
-
-#ifndef RD_MULTIPLE_DRIVE
-
- User::LeaveIfError( roapTrigger.Temp(
- fs, KDrmUtilityTriggerFilePath, triggerFileName, EFileWrite ) );
-
-#else //RD_MULTIPLE_DRIVE
-
- TInt driveNumber( -1 );
- TChar driveLetter;
- DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRam, driveNumber );
- fs.DriveToChar( driveNumber, driveLetter );
-
- TFileName utilityTriggerFilePath;
-
- utilityTriggerFilePath.Format( KKDrmUtilityTriggerFilePathFormatter,
- (TUint)driveLetter );
-
- User::LeaveIfError( roapTrigger.Temp(
- fs, utilityTriggerFilePath, triggerFileName, EFileWrite ) );
-
-#endif
-
-
- TPtrC8 KNullPtr8( NULL, 0 );
- RHttpDownload* downloadPtr( iDlMgr.FindDownload( *aUrl, KNullPtr8 ) );
- if ( downloadPtr )
- {
- // Stale download found.
- // Remove it, and re-create a new download.
- downloadPtr->Delete();
- downloadPtr = NULL;
- }
-
- // create and start download
- RHttpDownload& download = iDlMgr.CreateDownloadL( *aUrl, result );
- // Put download for proper cleanup.
- TCleanupItem item( DeleteHttpDowload, &download );
- CleanupStack::PushL( item );
-
- CleanupClosePushL( roapTrigger );
-
- if ( !iPostResponseUrl )
- {
- // No post response retieval. Note must be created.
- ShowProgressNoteL();
+ User::Leave(KErrNotReady);
}
- if ( result )
- {
- const TInt KReadBufSize( 512 );
- TInt triggerFileSize( 0 );
-
- CLOG_WRITE(
- "DMgrWrapper::DoDownloadAndHandleRoapTriggerL: download created" );
- iDownloadSuccess = EFalse;
- iConnectionError = EFalse;
-
- SetDefaultAccessPointL();
-
- User::LeaveIfError( download.SetFileHandleAttribute( roapTrigger ) );
- User::LeaveIfError(
- download.SetBoolAttribute( EDlAttrNoContentTypeCheck, ETrue ) );
- User::LeaveIfError( download.Start() );
-
- // wait until download is finished
- iWait.Start();
-
- // Check success of download
- CLOG_WRITE(
- "DMgrWrapper::DoDownloadAndHandleRoapTriggerL: download finished" );
-
- CleanupStack::Pop( &roapTrigger );
- roapTrigger.Close();
- if ( !iDownloadSuccess )
- {
- RemoveProgressNoteL();
- if ( iConnectionError )
- {
- User::Leave( KErrCouldNotConnect );
- }
- else
- {
- User::Leave( KErrGeneral );
- }
- }
- User::LeaveIfError( roapTrigger.Open( fs,
- triggerFileName,
- EFileShareReadersOrWriters ) );
- CleanupClosePushL( roapTrigger );
-
- // Get filehandle of ROAP trigger
- // Read file to buffer
- User::LeaveIfError( roapTrigger.Size( triggerFileSize ) );
- triggerBuf = HBufC8::NewLC( triggerFileSize );
-
- RBuf8 readBuf;
- readBuf.CleanupClosePushL();
- readBuf.CreateL( KReadBufSize );
-
- User::LeaveIfError( roapTrigger.Read( readBuf, KReadBufSize ) );
- triggerBuf->Des().Copy( readBuf );
- while ( readBuf.Length() == KReadBufSize )
- {
- User::LeaveIfError( roapTrigger.Read( readBuf, KReadBufSize ) );
- triggerBuf->Des().Append( readBuf );
- }
-
- CleanupStack::PopAndDestroy( &readBuf );
-
- if ( iUseCoeEnv && iProgressInfo )
- {
- iProgressInfo->IncrementAndDraw( KProgressInfoIncrementMedium );
- }
-
- // And let ROAP handle it...
- CRoapSyncWrapper* roapWrapper( CRoapSyncWrapper::NewL() );
- CleanupStack::PushL( roapWrapper );
- TRAPD( err, roapWrapper->HandleTriggerL( *triggerBuf ) );
- if ( err )
- {
- TInt errorType( 0 );
- TRAPD( err2,
- iErrorUrl = roapWrapper->GetErrorUrlL( err, errorType ) );
- if ( err2 )
- {
- RemoveProgressNoteL();
- delete iErrorUrl;
- iErrorUrl = NULL;
- User::Leave( err2 );
- }
- else if ( errorType != KErrRoapTemporary )
- {
- RemoveProgressNoteL();
- delete iErrorUrl;
- iErrorUrl = NULL;
- User::Leave( err );
- }
- else
- {
- RemoveProgressNoteL();
- User::Leave( err );
- }
- }
- if ( iPostResponseUrl )
- {
- delete iPostResponseUrl;
- iPostResponseUrl = NULL;
- }
- iPostResponseUrl = roapWrapper->GetPostResponseUrlL();
- CleanupStack::PopAndDestroy( 2, triggerBuf );
-
- if ( iUseCoeEnv && iProgressInfo && !iPostResponseUrl )
- {
- // No PrUrl found. Progess is complete.
- iProgressInfo->SetAndDraw( KProgressInfoFinalValue );
- }
- }
-
- // Trick to keep note open long enough during prUrl retrieval
- if ( !iPostResponseUrl )
- {
- RemoveProgressNoteL();
- }
- else
- {
- if ( iUseCoeEnv && iProgressInfo )
- {
- iProgressInfo->IncrementAndDraw( KProgressInfoIncrementMedium );
- }
- }
-
- CleanupStack::PopAndDestroy( &roapTrigger );
- CleanupStack::PopAndDestroy( &download );
-
- fs.Delete( triggerFileName );
- CleanupStack::PopAndDestroy( &fs );
+ UpdateBufferL<HBufC8, TDesC8> (iTriggerUrl, *aUrl);
+ CompleteToState(EInit, KErrNone);
+ iWait.Start();
}
-
-// ---------------------------------------------------------------------------
-// CDrmUtilityDmgrWrapper::SetDefaultAccessPointL
-// ---------------------------------------------------------------------------
-//
-void CDrmUtilityDmgrWrapper::SetDefaultAccessPointL()
- {
- const TInt KDestinationSelectionMode( 2 );
- CRepository* repository( NULL );
- TInt ap( 0 );
- TInt alwaysAsk( 0 );
- TUint32 iapd32( 0 );
- TInt defaultSnap( 0 );
- TInt err( KErrNone );
-
- CLOG_WRITE( "DMgrWrapper::SetDefaultAccessPointL" );
- DRMDEBUGLIT( KDuiBrApFormat,
- "CDrmUtilityDmgrWrapper::SetDefaultAccessPointL %d" );
- DRMDEBUGLIT( KDuiBrApFormat2, " KBrowserDefaultAccessPoint = %d" );
- DRMDEBUGLIT( KDuiBrApFormat3, " KBrowserAccessPointSelectionMode = %d" );
- DRMDEBUGLIT( KDuiBrApFormat4, " KBrowserNGDefaultSnapId = %d" );
-
- repository = CRepository::NewL( KCRUidBrowser );
- CleanupStack::PushL( repository );
- repository->Get( KBrowserDefaultAccessPoint, ap );
- repository->Get( KBrowserAccessPointSelectionMode, alwaysAsk );
- repository->Get( KBrowserNGDefaultSnapId, defaultSnap );
- DRMDEBUG2( KDuiBrApFormat(), __LINE__ );
- DRMDEBUG2( KDuiBrApFormat2(), ap );
- DRMDEBUG2( KDuiBrApFormat3(), alwaysAsk );
- DRMDEBUG2( KDuiBrApFormat4(), defaultSnap );
-
- if ( ap <= KErrNotFound && defaultSnap <= KErrNotFound )
- {
- alwaysAsk = ETrue;
- }
- else
- {
- RCmManager cmManager;
- cmManager.OpenLC();
- if ( !alwaysAsk )
- {
- TRAP( err, iapd32 = cmManager.GetConnectionMethodInfoIntL(
- ap, CMManager::ECmIapId ) );
- }
- else if ( alwaysAsk == KDestinationSelectionMode )
- {
- TRAP( err, iapd32 =
- IapIdOfDefaultSnapL( cmManager, defaultSnap ) );
- }
- CleanupStack::PopAndDestroy( &cmManager );
- }
- if ( !err && ( !alwaysAsk || alwaysAsk == KDestinationSelectionMode ) )
- {
- err = iDlMgr.SetIntAttribute( EDlMgrIap, iapd32 );
- }
- CleanupStack::PopAndDestroy( repository );
- }
-
-
// ---------------------------------------------------------------------------
// CDrmUtilityDmgrWrapper::GetErrorUrlL
// ---------------------------------------------------------------------------
//
HBufC8* CDrmUtilityDmgrWrapper::GetErrorUrlL()
{
- if( iErrorUrl )
+ if (iErrorUrl)
{
return iErrorUrl->AllocL();
}
return NULL;
}
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::DoConnectL
+// ---------------------------------------------------------------------------
+//
+void CDrmUtilityDmgrWrapper::DoConnectL(TDownloadState aNextState)
+ {
+ iConnection->ConnectL(&iStatus);
+ if (iUseCoeEnv && iProgressInfo)
+ {
+ iProgressInfo->SetAndDraw(0);
+ }
+ iState = aNextState;
+ SetActive();
+ }
+/////
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::DoDownloadRoapTriggerL
+// ---------------------------------------------------------------------------
+//
+void CDrmUtilityDmgrWrapper::DoDownloadRoapTriggerL(TDownloadState aNextState)
+ {
+ // Fetch name of opend connection to be used as part of DMGR
+ // initialisation
+ TUint32 iapId(0);
+ if (iConnection->IsConnected(iapId))
+ {
+ const QVariant qIapId( static_cast<unsigned long long>(iapId) );
+ iDlMgr->setAttribute( WRT::ClientName, qIapId );
+ }
+ RFile roapTrigger;
+ CleanupClosePushL(roapTrigger);
+ DRM::CFileNameContainer* triggerFileName(NULL);
+
+ // If no Trigger URL then nothing to download. So finish transaction
+ if (!iTriggerUrl || iTriggerUrl->Length() <= 0)
+ {
+ if (iUseCoeEnv && iProgressInfo)
+ {
+ // No PrUrl found. Progess is complete.
+ iProgressInfo->SetAndDraw(KProgressInfoFinalValue);
+ }
+ CompleteToState(EComplete, KErrNone);
+ return;
+ }
+
+ TPtrC8 KNullPtr8(NULL, 0);
+ QString downloadUrl((QChar*)iTriggerUrl->Des().Ptr(),iTriggerUrl->Length());
+ //uncomment
+ Download* download = NULL;//iDlMgr->findDownload( downloadUrl );
+ if (download)
+ {
+ // Stale download found.
+ // Remove it, and re-create a new download.
+ download->cancel();
+ download = NULL;
+ if (iFileName)
+ {
+ iFs.Delete(*iFileName);
+ }
+ }
+ triggerFileName=DRM::CFileNameContainer::NewLC();
+
+#ifndef RD_MULTIPLE_DRIVE
+
+ User::LeaveIfError( roapTrigger.Temp(
+ iFs, KDrmUtilityTriggerFilePath, triggerFileName->iBuffer, EFileWrite ) );
+
+#else //RD_MULTIPLE_DRIVE
+ TInt driveNumber(-1);
+ TChar driveLetter;
+ DriveInfo::GetDefaultDrive(DriveInfo::EDefaultRam, driveNumber);
+ iFs.DriveToChar(driveNumber, driveLetter);
+
+ DRM::CFileNameContainer*
+ utilityTriggerFilePath(DRM::CFileNameContainer::NewLC());
+
+ utilityTriggerFilePath->iBuffer.Format(
+ KKDrmUtilityTriggerFilePathFormatter, (TUint) driveLetter);
+
+ User::LeaveIfError(roapTrigger.Temp(iFs, utilityTriggerFilePath->iBuffer,
+ triggerFileName->iBuffer, EFileWrite));
+ CleanupStack::PopAndDestroy( utilityTriggerFilePath );
+ utilityTriggerFilePath=NULL;
+
+#endif
+ UpdateBufferL<HBufC, TFileName> (iFileName, triggerFileName->iBuffer);
+ CleanupStack::PopAndDestroy( triggerFileName );
+ triggerFileName=NULL;
+ // create and start download
+ downloadUrl = ((QChar*)iTriggerUrl->Des().Ptr(),iTriggerUrl->Length());
+
+ iDownload = iDlMgr->createDownload(downloadUrl);
+ try
+ {
+ iDrmUtilityDmgrEventHandler = q_check_ptr(new QDrmUtilityDmgrEventHandler(*this, *iDownload));
+ }
+ catch(const std::exception& exception)
+ {
+ qt_symbian_exception2LeaveL(exception);
+ }
+
+ iDownloadSuccess = EFalse;
+ iConnectionError = EFalse;
+
+ try
+ {
+ RBuf fileName;
+ User::LeaveIfError(fileName.Create(KMaxFileName));
+ CleanupClosePushL(fileName);
+ roapTrigger.Name(fileName);
+ const QVariant& roapTriggerValue( QString((QChar*) fileName.Ptr(), fileName.Length()) );
+ CleanupStack::PopAndDestroy(&fileName);
+ iDownload->setAttribute(FileName,roapTriggerValue);
+ const QVariant& val(ETrue);
+ iDownload->setAttribute(ContentType, val);
+ iDownload->start();
+ }
+ catch(const std::exception& exception)
+ {
+ qt_symbian_exception2LeaveL(exception);
+ }
+ // wait until download is finished
+ iState = aNextState;
+ TRequestStatus* status(&iStatus);
+ *status = KRequestPending;
+ SetActive();
+
+ CleanupStack::PopAndDestroy(&roapTrigger);
+ }
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::DoSaveRoapTriggerL
+// ---------------------------------------------------------------------------
+//
+void CDrmUtilityDmgrWrapper::DoSaveRoapTriggerL(TDownloadState aNextState)
+ {
+ // Check success of download
+
+ // Fetch download created in DoDownloadRoapTriggerL
+ QString downloadUrl((QChar*)iTriggerUrl->Des().Ptr(),iTriggerUrl->Length());
+
+ typedef void (Download::*download_cancel_fnptr) ();
+ //uncomment
+ Download* dwnld = NULL;//iDlMgr->findDownload( downloadUrl );
+ mem_auto_ptr<Download*, download_cancel_fnptr> downloadPtr(dwnld,&WRT::Download::cancel);
+
+ // Delete trigger URL so that it is possible to check
+ // whether or not meteringResponse has PrUrl.
+ delete iTriggerUrl;
+ iTriggerUrl = NULL;
+ iStatus = KRequestPending;
+
+ RFile roapTrigger;
+
+ if (!iDownloadSuccess)
+ {
+ RemoveProgressNoteL();
+ if (iConnectionError)
+ {
+ User::Leave(KErrCouldNotConnect);
+ }
+ else
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+ User::LeaveIfError(roapTrigger.Open(iFs, *iFileName,
+ EFileShareReadersOrWriters));
+ CleanupClosePushL(roapTrigger);
+ // Get filehandle of ROAP trigger
+ const TInt KReadBufSize = 512;
+
+ RBuf8 readBuf;
+ readBuf.CleanupClosePushL();
+ readBuf.CreateL(KReadBufSize);
+
+ // Read file to buffer
+ TInt triggerFileSize(0);
+ User::LeaveIfError(roapTrigger.Size(triggerFileSize));
+ if (iTriggerBuf)
+ {
+ delete iTriggerBuf;
+ iTriggerBuf = NULL;
+ }
+ iTriggerBuf = HBufC8::NewL(triggerFileSize);
+ User::LeaveIfError(roapTrigger.Read(readBuf, KReadBufSize));
+ iTriggerBuf->Des().Copy(readBuf);
+ while (readBuf.Length() == KReadBufSize)
+ {
+ User::LeaveIfError(roapTrigger.Read(readBuf, KReadBufSize));
+ iTriggerBuf->Des().Append(readBuf);
+ }
+
+ // And let ROAP handle it...
+ CleanupStack::PopAndDestroy(&readBuf);
+ CleanupStack::PopAndDestroy(&roapTrigger);
+
+ iFs.Delete(*iFileName);
+ delete iFileName;
+ iFileName = NULL;
+ if (iUseCoeEnv && iProgressInfo)
+ {
+ iProgressInfo->IncrementAndDraw(KProgressInfoIncrementMedium);
+ }
+
+ CompleteToState(aNextState, KErrNone);
+ }
+
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::DoHandleRoapTriggerL
+// ---------------------------------------------------------------------------
+//
+void CDrmUtilityDmgrWrapper::DoHandleRoapTriggerL(TDownloadState aNextState)
+ {
+ Roap::TTriggerType triggerType;
+ Roap::TRiContextStatus contextStatus;
+ Roap::TDomainOperation domainOperation;
+
+ RPointerArray<HBufC8> contentIds;
+ CleanupResetAndDestroyPushL( contentIds );
+
+ iRoapEng = Roap::CRoapEng::NewL();
+
+ iRoapEng->SetTriggerL(*iTriggerBuf, NULL, triggerType, contextStatus,
+ domainOperation, contentIds);
+
+ CleanupStack::PopAndDestroy(&contentIds);
+
+ iRoapEng->AcceptL(this, &iStatus);
+ iState = aNextState;
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::CompleteToState
+// ---------------------------------------------------------------------------
+//
+void CDrmUtilityDmgrWrapper::CompleteToState(
+ CDrmUtilityDmgrWrapper::TDownloadState aNextState, TInt aError)
+ {
+ iState = aNextState;
+ TRequestStatus* ownStatus(&iStatus);
+ User::RequestComplete(ownStatus, aError);
+ SetActive();
+ }
+
+// MHttpDownloadMgrObserver methods
// ---------------------------------------------------------------------------
// From class MHttpDownloadMgrObserver
//
// CDrmUtilityDmgrWrapper::HandleDMgrEventL
// ---------------------------------------------------------------------------
//
-void CDrmUtilityDmgrWrapper::HandleDMgrEventL(
- RHttpDownload& aDownload,
- THttpDownloadEvent aEvent )
+void CDrmUtilityDmgrWrapper::HandleDownloadEventL( WRT::DownloadEvent* aEvent )
{
- _LIT8( KDrmUtilityMimeTypeROAPTrigger,
- "application/vnd.oma.drm.roap-trigger+xml" );
-
- CLOG_WRITE( "DMgrWrapper::HandleDMgrEventL" );
- CLOG_WRITE_FORMAT( "iDownLoadState = %d", aEvent.iDownloadState );
- CLOG_WRITE_FORMAT( "iProgressState = %d", aEvent.iProgressState );
-
- if ( aEvent.iProgressState == EHttpContentTypeReceived )
+ QString KDrmUtilityMimeTypeROAPTrigger("application/vnd.oma.drm.roap-trigger+xml");
+
+ try
+ {
+ if (aEvent->type() == DownloadEvent::HeadersReceived)
{
// check received mimetype
- RBuf8 contentType;
- contentType.CleanupClosePushL();
- contentType.CreateL( KMaxContentTypeLength );
- User::LeaveIfError(
- aDownload.GetStringAttribute( EDlAttrContentType, contentType ) );
- if ( !contentType.FindF( KDrmUtilityMimeTypeROAPTrigger ) )
+ QString contentType = iDownload->attribute(ContentType).toString();
+ if (!contentType.contains(KDrmUtilityMimeTypeROAPTrigger))
{
// ROAP trigger found, continue download
- User::LeaveIfError( aDownload.Start() );
+ iDownload->start();
}
else
{
// wrong MIME type, so stop download
iDownloadSuccess = EFalse;
- User::LeaveIfError( aDownload.Delete() );
- }
- CleanupStack::PopAndDestroy( &contentType );
- }
-
- if ( aEvent.iDownloadState == EHttpDlCreated )
- {
- CLOG_WRITE( "DMgrWrapper::HandleDMgrEventL: EHttpDlCreated" );
- if ( iUseCoeEnv )
- {
- iProgressInfo->IncrementAndDraw( KProgressInfoIncrementMedium );
+ iDownload->cancel();
}
}
- else if ( aEvent.iProgressState == EHttpProgDisconnected )
+ }
+ catch(const std::exception& exception)
+ {
+ qt_symbian_exception2LeaveL(exception);
+ }
+
+ if (aEvent->type() == DownloadEvent::Created)
{
- CLOG_WRITE( "DMgrWrapper::HandleDMgrEventL: EHttpProgDisconnected" );
+ CLOG_WRITE( "DMgrWrapper::ProcessDownloadEventL: Created" );
+ if (iUseCoeEnv && iProgressInfo)
+ {
+ iProgressInfo->IncrementAndDraw(KProgressInfoIncrementMedium);
+ }
+ }
+ else if (aEvent->type() == DownloadEvent::NetworkLoss)
+ {
+ CLOG_WRITE( "DMgrWrapper::ProcessDownloadEventL: NetworkLoss" );
+
// store failure
iDownloadSuccess = EFalse;
iConnectionError = ETrue;
// finished
- iWait.AsyncStop();
}
- else if ( aEvent.iDownloadState == EHttpDlInprogress )
+ else if (aEvent->type() == DownloadEvent::InProgress)
{
- CLOG_WRITE( "DMgrWrapper::HandleDMgrEventL: EHttpDlInprogress" );
- if ( iUseCoeEnv )
+ CLOG_WRITE( "DMgrWrapper::ProcessDownloadEventL: InProgress" );
+ if (iUseCoeEnv)
{
- iProgressInfo->IncrementAndDraw( KProgressInfoIncrementSmall );
+ iProgressInfo->IncrementAndDraw(KProgressInfoIncrementSmall);
}
}
- else if ( aEvent.iDownloadState == EHttpDlCompleted )
+ else if (aEvent->type() == DownloadEvent::Completed)
{
// store success
- CLOG_WRITE( "DMgrWrapper::HandleDMgrEventL: EHttpDlCompleted" );
+ CLOG_WRITE( "DMgrWrapper::ProcessDownloadEventL: Completed" );
iDownloadSuccess = ETrue;
- if ( iUseCoeEnv )
+ iConnectionError = EFalse;
+ if (iUseCoeEnv)
{
- iProgressInfo->IncrementAndDraw( KProgressInfoIncrementLarge );
+ iProgressInfo->IncrementAndDraw(KProgressInfoIncrementLarge);
}
// finished
- iWait.AsyncStop();
+ TRequestStatus* status(&iStatus);
+ User::RequestComplete(status, KErrNone);
}
- else if ( aEvent.iDownloadState == EHttpDlFailed )
+ else if (aEvent->type() == DownloadEvent::Failed)
{
- TInt32 err( KErrNone );
-
- CLOG_WRITE( "DMgrWrapper::HandleDMgrEventL: EHttpDlFailed" );
- // store failure
- iDownloadSuccess = EFalse;
- User::LeaveIfError( aDownload.GetIntAttribute( EDlAttrErrorId, err ) );
- CLOG_WRITE_FORMAT( "EDlAttrErrorId = %d", err );
-
- if ( err == EConnectionFailed ||
- err == ETransactionFailed)
- {
- CLOG_WRITE( "DMgrWrapper::HandleDMgrEventL: EConnectionFailed" );
- iConnectionError = ETrue;
- }
-
- // finished
- iWait.AsyncStop();
+ try
+ {
+ TInt32 err(KErrNone);
+
+ CLOG_WRITE( "DMgrWrapper::ProcessDownloadEventL: Failed" );
+ // store failure
+ iDownloadSuccess = EFalse;
+ err = (iDownload->attribute(LastError)).toInt();
+ CLOG_WRITE_FORMAT( "EDlAttrErrorId = %d", err );
+
+ if (err == ConnectionFailed || err == TransactionFailed)
+ {
+ CLOG_WRITE( "DMgrWrapper::ProcessDownloadEventL: ConnectionFailed" );
+ iConnectionError = ETrue;
+ }
+ iDownload->cancel(); // remove useless download
+ iDlMgr->pauseAll(); // disconnects Dmgr instantly.
+ // finished
+ TRequestStatus* status(&iStatus);
+ if ( iConnection->HasMoreConnectionAttempts() )
+ {
+ iState = EInit; // re-try with another conection
+ User::RequestComplete(status, KErrNone);
+ }
+ else
+ {
+ User::RequestComplete(status, KErrCancel);
+ }
+ }
+ catch(const std::exception& exception)
+ {
+ qt_symbian_exception2LeaveL(exception);
+ }
}
}
-
// ---------------------------------------------------------------------------
// CDrmUtilityDmgrWrapper::ShowProgressNoteL
// ---------------------------------------------------------------------------
//
void CDrmUtilityDmgrWrapper::ShowProgressNoteL()
{
- TFileName resFileName;
+ DRM::CFileNameContainer* resFileName(NULL);
CLOG_WRITE( "DMgrWrapper::ShowProgressNoteL" );
- if ( iUseCoeEnv )
+ if (iUseCoeEnv)
{
// Initialize the progress note dialog, it's values,
// and execute it
+ resFileName=DRM::CFileNameContainer::NewLC();
#ifndef RD_MULTIPLE_DRIVE
- resFileName.Copy( KDriveZ );
+ resFileName->iBuffer.Copy( KDriveZ );
#else //RD_MULTIPLE_DRIVE
-
- TInt driveNumber( -1 );
+ TInt driveNumber(-1);
TChar driveLetter;
- DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRom, driveNumber );
+ DriveInfo::GetDefaultDrive(DriveInfo::EDefaultRom, driveNumber);
- iCoeEnv->FsSession().DriveToChar( driveNumber, driveLetter );
+ iCoeEnv->FsSession().DriveToChar(driveNumber, driveLetter);
- resFileName.Format( KRomDriveFormatter, (TUint)driveLetter );
+ resFileName->iBuffer.Format(KRomDriveFormatter, (TUint) driveLetter);
#endif
- resFileName.Append( KDC_RESOURCE_FILES_DIR );
- resFileName.Append( KCDrmUtilityDmgrWrapperResFileName );
- RConeResourceLoader loader( *iCoeEnv );
- loader.OpenL( resFileName );
+ resFileName->iBuffer.Append(KDC_RESOURCE_FILES_DIR);
+ resFileName->iBuffer.Append(KCDrmUtilityDmgrWrapperResFileName);
+ RConeResourceLoader loader(*iCoeEnv);
+ loader.OpenL(resFileName->iBuffer);
+ CleanupStack::PopAndDestroy( resFileName );
+ resFileName=NULL;
iProgressNoteDialog = new (ELeave) CAknProgressDialog(
- reinterpret_cast< CEikDialog** >( &iProgressNoteDialog ) );
- iProgressNoteDialog->PrepareLC( R_SILENT_PROGRESS_NOTE );
- iProgressNoteDialog->SetCallback( this );
+ reinterpret_cast<CEikDialog**> (&iProgressNoteDialog));
+ iProgressNoteDialog->PrepareLC(R_SILENT_PROGRESS_NOTE);
+ iProgressNoteDialog->SetCallback(this);
iProgressInfo = iProgressNoteDialog->GetProgressInfoL();
- iProgressInfo->SetFinalValue( KProgressInfoFinalValue );
+ iProgressInfo->SetFinalValue(KProgressInfoFinalValue);
iDialogDismissed = EFalse;
iProgressNoteDialog->RunLD();
@@ -673,7 +750,6 @@
}
-
// ---------------------------------------------------------------------------
// CDrmUtilityDmgrWrapper::RemoveProgressNoteL
// ---------------------------------------------------------------------------
@@ -681,7 +757,7 @@
void CDrmUtilityDmgrWrapper::RemoveProgressNoteL()
{
- if ( iUseCoeEnv )
+ if (iUseCoeEnv)
{
if (iProgressNoteDialog && !iDialogDismissed)
{
@@ -689,22 +765,22 @@
TRAPD(err, iProgressNoteDialog->ProcessFinishedL());
if (err != KErrNone)
{
+ iProgressNoteDialog->SetCallback(NULL);
delete iProgressNoteDialog;
+ iDialogDismissed = ETrue;
}
iProgressNoteDialog = NULL;
}
}
-
}
-
// ---------------------------------------------------------------------------
// From class MAknProgressDialogCallback
//
// CDrmUtilityDmgrWrapper::DialogDismissedL
// ---------------------------------------------------------------------------
//
-void CDrmUtilityDmgrWrapper::DialogDismissedL( TInt /*aButtonId*/ )
+void CDrmUtilityDmgrWrapper::DialogDismissedL(TInt aButtonId )
{
iDialogDismissed = ETrue;
@@ -712,14 +788,194 @@
iProgressNoteDialog = NULL;
iProgressInfo = NULL;
- if( iWait.IsStarted() )
+ if (IsActive() && aButtonId == EAknSoftkeyCancel)
+ {
+ if ((iState == EGetMeteringTrigger || iState == EGetPrUrlTrigger))
+ {
+ Cancel();
+ }
+ else
+ {
+ TRequestStatus* status(&iStatus);
+ User::RequestComplete(status, KErrCancel);
+ }
+ }
+ //For avoiding active object deadlock
+ iDlMgr->removeAll();
+
+ }
+
+// RoapObserver methods
+
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::PostResponseUrlL
+// ---------------------------------------------------------------------------
+//
+void CDrmUtilityDmgrWrapper::PostResponseUrlL(const TDesC8& aPostResponseUrl)
+ {
+ UpdateBufferL<HBufC8, TDesC8> (iTriggerUrl, aPostResponseUrl);
+
+ if (iUseCoeEnv && iProgressInfo)
+ {
+ iProgressInfo->IncrementAndDraw(KProgressInfoIncrementMedium);
+ }
+ }
+
+// Trivial RoapObserver methods
+TBool CDrmUtilityDmgrWrapper::ConnectionConfL()
+ {
+ return ETrue;
+ }
+
+TBool CDrmUtilityDmgrWrapper::ContactRiConfL()
+ {
+ return ETrue;
+ }
+
+TBool CDrmUtilityDmgrWrapper::TransIdConfL()
+ {
+ return EFalse;
+ }
+
+void CDrmUtilityDmgrWrapper::RightsObjectDetailsL(const RPointerArray<
+ CDRMRights>& /*aRightsList*/)
+ {
+ // do nothing
+ }
+
+void CDrmUtilityDmgrWrapper::ContentDownloadInfoL(TPath& /*aTempFolder*/,
+ TFileName& /*aContentName*/, TInt& aMaxSize)
+ {
+ aMaxSize = -1;
+ }
+
+void CDrmUtilityDmgrWrapper::ContentDetailsL(const TDesC& /*aPath*/,
+ const TDesC8& /*aType*/, const TUid& /*aAppUid*/)
+ {
+ }
+
+void CDrmUtilityDmgrWrapper::RoapProgressInfoL(const TInt /*aProgressInfo*/)
+ {
+ // do nothing
+ }
+
+void CDrmUtilityDmgrWrapper::ErrorUrlL(const TDesC8& aErrorUrl)
+ {
+ UpdateBufferL<HBufC8, TDesC8> (iErrorUrl, aErrorUrl);
+ }
+
+// CActive methods
+
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CDrmUtilityDmgrWrapper::DoCancel()
+ {
+ delete iRoapEng;
+ iRoapEng = NULL;
+ iConnection->Close();
+ if (iWait.IsStarted())
+ {
+ iWait.AsyncStop();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::RunL
+// ---------------------------------------------------------------------------
+//
+void CDrmUtilityDmgrWrapper::RunL()
+ {
+ TInt error(iStatus.Int());
+
+ ClearIfNotRoapTemporaryError(error, iErrorUrl);
+ User::LeaveIfError(error);
+ switch (iState)
+ {
+ case EInit:
+ {
+ if (!iProgressNoteDialog)
+ {
+ ShowProgressNoteL();
+ }
+ DoConnectL(EGetMeteringTrigger);
+ }
+ break;
+ case EGetMeteringTrigger:
+ {
+ DoDownloadRoapTriggerL(ESaveMeteringTrigger);
+ }
+ break;
+ case ESaveMeteringTrigger:
+ {
+ DoSaveRoapTriggerL(EMeteringReportSubmit);
+ }
+ break;
+
+ case EMeteringReportSubmit:
+ {
+ DoHandleRoapTriggerL(EGetPrUrlTrigger);
+ }
+ break;
+ case EGetPrUrlTrigger:
+ {
+ delete iRoapEng;
+ iRoapEng = NULL;
+ DoDownloadRoapTriggerL(ESavePrUrlTrigger);
+ }
+ break;
+ case ESavePrUrlTrigger:
+ {
+ DoSaveRoapTriggerL(EPrRoapRequest);
+ }
+ break;
+ case EPrRoapRequest:
+ {
+ DoHandleRoapTriggerL(EComplete);
+ }
+ break;
+ case EComplete:
+ {
+ RemoveProgressNoteL();
+ delete iRoapEng;
+ iRoapEng = NULL;
+ iWait.AsyncStop();
+ }
+ break;
+
+ default:
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CDrmUtilityDmgrWrapper::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CDrmUtilityDmgrWrapper::RunError(TInt /* aError */)
+ {
+ delete iRoapEng;
+ iRoapEng = NULL;
+ iConnection->Close();
+ if (iWait.IsStarted())
{
iWait.AsyncStop();
}
+ if (iUseCoeEnv)
+ {
+ if (iProgressNoteDialog && !iDialogDismissed)
+ {
+ iProgressNoteDialog->SetCallback(NULL);
+ delete iProgressNoteDialog;
+ iDialogDismissed = ETrue;
+ }
+ iProgressNoteDialog = NULL;
+ }
+ return KErrNone;
}
-
// ======== GLOBAL FUNCTIONS ========
//------------------------------------------------------------------------------
@@ -730,7 +986,7 @@
{
CDrmUtilityDmgrWrapper* launcher = NULL;
TRAPD( err, launcher = CDrmUtilityDmgrWrapper::NewL() );
- if( err != KErrNone )
+ if (err != KErrNone)
{
return NULL;
}