diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncdrightsobjectoperationimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/src/ncdrightsobjectoperationimpl.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,214 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#include "ncdrightsobjectoperationimpl.h" + +#include +#include + +#include "catalogsbasemessage.h" +#include "catalogshttpincludes.h" + +#include "catalogsutils.h" +#include "catalogscontext.h" +#include "ncdproviderdefines.h" +#include "ncddescriptordownloadsuboperation.h" +#include "ncdhttputils.h" +#include "ncdproviderutils.h" +#include "ncddeviceinteractionfactory.h" +#include "ncdinstallationservice.h" +#include "ncdgeneralmanager.h" + +#include "catalogsdebug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CNcdRightsObjectOperation* CNcdRightsObjectOperation::NewL( + CNcdGeneralManager& aGeneralManager, + const TDesC& aDownloadUri, + const TDesC& aMimeType, + const TNcdConnectionMethod& aMethod, + MNcdOperationRemoveHandler& aRemoveHandler, + MCatalogsHttpSession& aHttpSession, + MCatalogsSession& aSession ) + { + CNcdRightsObjectOperation* self = new( ELeave ) CNcdRightsObjectOperation( + aGeneralManager, aRemoveHandler, aHttpSession, aSession ); + CleanupClosePushL( *self ); + self->ConstructL( aMethod, aDownloadUri, aMimeType ); + CleanupStack::Pop(); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CNcdRightsObjectOperation::~CNcdRightsObjectOperation() + { + DLTRACEIN( ( "" ) ); + if ( iDownloadOp ) + { + iDownloadOp->Close(); + iDownloadOp = NULL; + } + delete iInstallationService; + delete iMimeType; + DLTRACEOUT(("")); + } + + +// --------------------------------------------------------------------------- +// Download config getter +// --------------------------------------------------------------------------- +// +MCatalogsHttpConfig& CNcdRightsObjectOperation::Config() + { + DASSERT( iDownloadOp ); + return iDownloadOp->Config(); + } + + +// --------------------------------------------------------------------------- +// Cancel +// --------------------------------------------------------------------------- +// +void CNcdRightsObjectOperation::Cancel() + { + DLTRACEIN(( "" )); + if ( iDownloadOp ) + { + iDownloadOp->Cancel(); + iDownloadOp->Close(); + iDownloadOp = NULL; + } + DLTRACEOUT(( "" )); + } + + +// --------------------------------------------------------------------------- +// RunOperation +// --------------------------------------------------------------------------- +// +TInt CNcdRightsObjectOperation::RunOperation() + { + DLTRACEIN(( "Pending message: %X", iPendingMessage )); + DASSERT( iDownloadOp ); + + if ( !iPendingMessage ) + { + DLTRACE(("No pending message")); + return KErrNotReady; + } + + // Start download. + DLINFO(("Starting download op")); + TInt err = iDownloadOp->Start(); + + DLTRACEOUT(("err: %d", err)); + return err; + } + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CNcdRightsObjectOperation::CNcdRightsObjectOperation( + CNcdGeneralManager& aGeneralManager, + MNcdOperationRemoveHandler& aRemoveHandler, + MCatalogsHttpSession& aHttpSession, + MCatalogsSession& aSession ) + : + CNcdBaseOperation( aGeneralManager, &aRemoveHandler, ERightsObjectOperation, aSession ), + iHttpSession( aHttpSession ) + { + } + + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CNcdRightsObjectOperation::ConstructL( + const TNcdConnectionMethod& aMethod, + const TDesC& aDownloadUri, + const TDesC& aMimeType ) + { + DLTRACEIN( ( "" ) ); + + // Call ConstructL for the base class + CNcdBaseOperation::ConstructL(); + + iMimeType = ConvertUnicodeToUtf8L( aMimeType ); + + iDownloadOp = CNcdDescriptorDownloadSubOperation::NewL( + iGeneralManager, iHttpSession, aDownloadUri, *this, iSession ); + + iGeneralManager.HttpUtils().ConvertConnectionMethod( + aMethod, iConnectionMethod ); + + iDownloadOp->Config().SetConnectionMethod( iConnectionMethod ); + + iInstallationService = + NcdDeviceInteractionFactory::CreateInstallationServiceL(); + + DLTRACEOUT(( "" )); + } + +void CNcdRightsObjectOperation::Progress( CNcdBaseOperation& /*aOperation*/ ) + { + DLTRACEIN(("")); + } + +void CNcdRightsObjectOperation::QueryReceived( + CNcdBaseOperation& /*aOperation*/, CNcdQuery* /*aQuery*/ ) + { + DLTRACEIN(("")); + } + +void CNcdRightsObjectOperation::OperationComplete( + CNcdBaseOperation* aOperation, TInt aError ) + { + DLTRACEIN(("aOperation=%08x, aError=%d", aOperation, aError)); + (void) aOperation; // suppresses compiler warning + + if( aError == KErrNone ) + { + // Install the DRM object. + DLINFO(("Installing rights object (%d bytes data, mime type %S)", + iDownloadOp->Body().Size(), iMimeType )); + + TRAP( aError, iInstallationService->AppendRightsL( + iDownloadOp->Body(), + TDataType( *iMimeType ) ) ); + } + + DLINFO(("Completing rights object dl&install operation with %d", aError)); + CompleteMessage( iPendingMessage, + aError != KErrNone ? + ENCDOperationMessageCompletionError : + ENCDOperationMessageCompletionComplete, + aError ); + } +