wmdrm/camese/wmdrmdla/src/wmdrmdlahandlerimpl.cpp
changeset 0 95b198f216e5
equal deleted inserted replaced
-1:000000000000 0:95b198f216e5
       
     1 /*
       
     2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation class for WMDRM DLA Handler
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <ecom/ecom.h>
       
    20 #include "wmdrmdlahandlerimpl.h"
       
    21 #include "wmdrmdlahttplicacqpluginfw.h"
       
    22 #include "wmdrmdlahttpmeteringpluginfw.h"
       
    23 #include "wmdrmdlarequest.h"
       
    24 
       
    25 #define _LOGGING_FILE L"wmdrmdla.txt"
       
    26 #include "logfn.h"
       
    27 
       
    28 // ======== LOCAL FUNCTIONS ========
       
    29 
       
    30 // ======== MEMBER FUNCTIONS ========
       
    31 
       
    32 // ---------------------------------------------------------------------------
       
    33 // CWmDrmDlaHandlerImpl::ConstructL
       
    34 // ---------------------------------------------------------------------------
       
    35 //
       
    36 void CWmDrmDlaHandlerImpl::ConstructL()
       
    37     {
       
    38     LOGFN( "CWmDrmDlaHandlerImpl::ConstructL" );
       
    39     iLicenseAcquisitionFw = CWmDrmDlaHttpLicAcqPluginFw::NewL();
       
    40     iMeteringFw = CWmDrmDlaHttpMeteringPluginFw::NewL();
       
    41     iWait = new (ELeave) CActiveSchedulerWait;
       
    42     }
       
    43 
       
    44 // ---------------------------------------------------------------------------
       
    45 // CWmDrmDlaHandlerImpl::CWmDrmDlaHandlerImpl
       
    46 // ---------------------------------------------------------------------------
       
    47 //
       
    48 CWmDrmDlaHandlerImpl::CWmDrmDlaHandlerImpl() 
       
    49     : CActive( EPriorityStandard ), iState( CWmDrmDlaHandlerImpl::EIdle )
       
    50     {
       
    51     LOGFN( "CWmDrmDlaHandlerImpl::CWmDrmDlaHandlerImpl" );
       
    52     CActiveScheduler::Add( this );
       
    53     }
       
    54 
       
    55 // ---------------------------------------------------------------------------
       
    56 // CWmDrmDlaHandlerImpl::NewL
       
    57 // ---------------------------------------------------------------------------
       
    58 //
       
    59 CWmDrmDlaHandlerImpl* CWmDrmDlaHandlerImpl::NewL()
       
    60     {
       
    61     LOGFN( "CWmDrmDlaHandlerImpl::NewL" );
       
    62     CWmDrmDlaHandlerImpl* self = CWmDrmDlaHandlerImpl::NewLC();
       
    63     CleanupStack::Pop( self );
       
    64     return self;
       
    65     }
       
    66 
       
    67 
       
    68 // ---------------------------------------------------------------------------
       
    69 // CWmDrmDlaHandlerImpl::NewLC
       
    70 // ---------------------------------------------------------------------------
       
    71 //
       
    72 CWmDrmDlaHandlerImpl* CWmDrmDlaHandlerImpl::NewLC()
       
    73     {
       
    74     LOGFN( "CWmDrmDlaHandlerImpl::NewLC" );
       
    75     CWmDrmDlaHandlerImpl* self = new( ELeave ) CWmDrmDlaHandlerImpl;
       
    76     CleanupStack::PushL( self );
       
    77     self->ConstructL();
       
    78     return self;
       
    79     }
       
    80 
       
    81 
       
    82 // ---------------------------------------------------------------------------
       
    83 // CWmDrmDlaHandlerImpl::~CWmDrmDlaHandlerImpl
       
    84 // ---------------------------------------------------------------------------
       
    85 //
       
    86 CWmDrmDlaHandlerImpl::~CWmDrmDlaHandlerImpl()
       
    87     {
       
    88     LOGFN( "CWmDrmDlaHandlerImpl::~CWmDrmDlaHandlerImpl" );
       
    89     CancelLicenseAcquisition();
       
    90     CancelMetering();
       
    91     iRequests.ResetAndDestroy();
       
    92     iRequests.Close();
       
    93     delete iCurrentRequest;
       
    94     delete iSyncRequest;
       
    95     delete iLicenseAcquisitionFw;
       
    96     delete iMeteringFw;
       
    97     delete iWait;
       
    98     REComSession::FinalClose();
       
    99     }
       
   100 
       
   101 // ---------------------------------------------------------------------------
       
   102 // CWmDrmDlaHandlerImpl::SilentL
       
   103 // ---------------------------------------------------------------------------
       
   104 //
       
   105 TBool CWmDrmDlaHandlerImpl::SilentL( 
       
   106     const RFile& aFile )
       
   107     {
       
   108     LOGFN( "CWmDrmDlaHandlerImpl::SilentL" );
       
   109     TBool silent( iLicenseAcquisitionFw->SilentL( aFile ) );
       
   110     LOG2( "silent: %d", silent );
       
   111     return silent;
       
   112     }
       
   113 
       
   114 // ---------------------------------------------------------------------------
       
   115 // CWmDrmDlaHandlerImpl::AcquireLicenseL
       
   116 // ---------------------------------------------------------------------------
       
   117 ///
       
   118 void CWmDrmDlaHandlerImpl::AcquireLicenseL( 
       
   119     const RFile& aFile, 
       
   120     HBufC*& aContentUrl, 
       
   121     HBufC*& aHtmlData )
       
   122     {
       
   123     LOGFN( "CWmDrmDlaHandlerImpl::AcquireLicenseL" );
       
   124     if ( iWait->IsStarted() )
       
   125         {
       
   126         User::Leave( KErrInUse );
       
   127         }
       
   128     
       
   129     CWmDrmDlaRequest* request( CWmDrmDlaRequest::NewL( aFile, 
       
   130                                                        aContentUrl, 
       
   131                                                        aHtmlData, 
       
   132                                                        ETrue, 
       
   133                                                        iStatus ) );
       
   134     if ( iState == CWmDrmDlaHandlerImpl::EIdle  )
       
   135         {
       
   136         iCurrentRequest = request;
       
   137         iState = CWmDrmDlaHandlerImpl::EAcquiringLicense;
       
   138         CompleteSelf();
       
   139         }
       
   140     else
       
   141         {
       
   142         iSyncRequest = request;
       
   143         }
       
   144     iWait->Start();
       
   145     LOG2( "iSyncReturnValue: %d", iSyncReturnValue );
       
   146     User::LeaveIfError( iSyncReturnValue );
       
   147     }
       
   148 
       
   149 // ---------------------------------------------------------------------------
       
   150 // CWmDrmDlaHandlerImpl::AcquireLicense
       
   151 // ---------------------------------------------------------------------------
       
   152 //
       
   153 void CWmDrmDlaHandlerImpl::AcquireLicense( 
       
   154     const RFile& aFile, 
       
   155     HBufC*& aContentUrl, 
       
   156     HBufC*& aHtmlData, 
       
   157     TRequestStatus& aStatus )
       
   158     {
       
   159     TInt err( KErrNone );
       
   160     
       
   161     LOGFNR( "CWmDrmDlaHandlerImpl::AcquireLicense", err );
       
   162     
       
   163     CWmDrmDlaRequest* request( NULL );
       
   164     TRequestStatus *status = &aStatus;
       
   165     aStatus = KRequestPending;
       
   166     
       
   167     TRAP( err, request = CWmDrmDlaRequest::NewL( aFile, 
       
   168                                                  aContentUrl, 
       
   169                                                  aHtmlData, 
       
   170                                                  EFalse, 
       
   171                                                  aStatus ) );
       
   172     if ( err )
       
   173         {
       
   174         User::RequestComplete( status, err );
       
   175         }
       
   176     else if ( iState == CWmDrmDlaHandlerImpl::EIdle  )
       
   177         {
       
   178         iCurrentRequest = request;
       
   179         iState = CWmDrmDlaHandlerImpl::EAcquiringLicense;
       
   180         CompleteSelf();
       
   181         }
       
   182     else
       
   183         {
       
   184         err = iRequests.Append( request );
       
   185         if ( err )
       
   186             {
       
   187             delete request;
       
   188             User::RequestComplete( status, err );
       
   189             }
       
   190         }
       
   191     }
       
   192 
       
   193 // ---------------------------------------------------------------------------
       
   194 // CWmDrmDlaHandlerImpl::AcquireLicenseFromDrmHeaderL
       
   195 // ---------------------------------------------------------------------------
       
   196 //
       
   197 void CWmDrmDlaHandlerImpl::AcquireLicenseFromDrmHeaderL( 
       
   198     const TDesC8& aDrmHeader,
       
   199     HBufC* aErrorUrl,
       
   200     HBufC*& aContentUrl, 
       
   201     HBufC*& aHtmlData )
       
   202     {
       
   203     LOGFN( "CWmDrmDlaHandlerImpl::AcquireLicenseFromDrmHeaderL" );
       
   204     if ( iWait->IsStarted() )
       
   205         {
       
   206         User::Leave( KErrInUse );
       
   207         }
       
   208     
       
   209     CWmDrmDlaRequest* request( CWmDrmDlaRequest::NewL( aDrmHeader,
       
   210                                                        aErrorUrl,
       
   211                                                        aContentUrl, 
       
   212                                                        aHtmlData, 
       
   213                                                        ETrue, 
       
   214                                                        iStatus ) );
       
   215     if ( iState == CWmDrmDlaHandlerImpl::EIdle  )
       
   216         {
       
   217         iCurrentRequest = request;
       
   218         iState = CWmDrmDlaHandlerImpl::EAcquiringLicenseFromDrmHeader;
       
   219         CompleteSelf();
       
   220         }
       
   221     else
       
   222         {
       
   223         iSyncRequest = request;
       
   224         }
       
   225     iWait->Start();
       
   226     LOG2( "iSyncReturnValue: %d", iSyncReturnValue );
       
   227     User::LeaveIfError( iSyncReturnValue );
       
   228     }
       
   229 
       
   230 // ---------------------------------------------------------------------------
       
   231 // CWmDrmDlaHandlerImpl::AcquireLicenseFromDrmHeader
       
   232 // ---------------------------------------------------------------------------
       
   233 //
       
   234 void CWmDrmDlaHandlerImpl::AcquireLicenseFromDrmHeader( 
       
   235     const TDesC8& aDrmHeader, 
       
   236     HBufC* aErrorUrl,
       
   237     HBufC*& aContentUrl, 
       
   238     HBufC*& aHtmlData, 
       
   239     TRequestStatus& aStatus )
       
   240     {
       
   241     TInt err( KErrNone );
       
   242     
       
   243     LOGFNR( "CWmDrmDlaHandlerImpl::AcquireLicenseFromDrmHeader", err );
       
   244     
       
   245     CWmDrmDlaRequest* request( NULL );
       
   246     TRequestStatus *status = &aStatus;
       
   247     aStatus = KRequestPending;
       
   248     
       
   249     TRAP( err, request = CWmDrmDlaRequest::NewL( aDrmHeader,
       
   250                                                  aErrorUrl,
       
   251                                                  aContentUrl, 
       
   252                                                  aHtmlData, 
       
   253                                                  EFalse, 
       
   254                                                  aStatus ) );
       
   255     if ( err )
       
   256         {
       
   257         User::RequestComplete( status, err );
       
   258         }
       
   259     else if ( iState == CWmDrmDlaHandlerImpl::EIdle  )
       
   260         {
       
   261         iCurrentRequest = request;
       
   262         iState = CWmDrmDlaHandlerImpl::EAcquiringLicenseFromDrmHeader;
       
   263         CompleteSelf();
       
   264         }
       
   265     else
       
   266         {
       
   267         err = iRequests.Append( request );
       
   268         if ( err )
       
   269             {
       
   270             delete request;
       
   271             User::RequestComplete( status, err );
       
   272             }
       
   273         }
       
   274     }
       
   275 
       
   276 // ---------------------------------------------------------------------------
       
   277 // CWmDrmDlaHandlerImpl::CancelLicenseAcquisition
       
   278 // ---------------------------------------------------------------------------
       
   279 //
       
   280 void CWmDrmDlaHandlerImpl::CancelLicenseAcquisition()
       
   281     {
       
   282     LOGFN( "CWmDrmDlaHandlerImpl::CancelLicenseAcquisition" );
       
   283     
       
   284     //First check, if we are currently handling license acquisition request.
       
   285     //If we are, then cancel handling and cancel request 
       
   286     if ( iState == CWmDrmDlaHandlerImpl::ECompleted && 
       
   287          iCurrentRequest->iType 
       
   288              != CWmDrmDlaRequest::EProcessMeteringCertificate )
       
   289         {
       
   290         iLicenseAcquisitionFw->CancelLicenseAcquisition();
       
   291         Cancel();
       
   292         CompleteClientRequest( KErrCancel );
       
   293         CompleteSyncRequest( KErrCancel );
       
   294         }
       
   295     else if ( iState == CWmDrmDlaHandlerImpl::EAcquiringLicense || 
       
   296               iState == CWmDrmDlaHandlerImpl::EAcquiringLicenseFromDrmHeader )
       
   297         {
       
   298         Cancel();
       
   299         CompleteClientRequest( KErrCancel );
       
   300         CompleteSyncRequest( KErrCancel );
       
   301         }
       
   302     // Next go through the request queue,
       
   303     // remove all license acquisition requests and cancel them.
       
   304     TInt removed( 0 );
       
   305     for ( TInt i( 0 ); i - removed < iRequests.Count(); ++i )
       
   306         {
       
   307         if ( iRequests[ i - removed ]->iType 
       
   308                 != CWmDrmDlaRequest::EProcessMeteringCertificate )
       
   309             {
       
   310             iCurrentRequest = iRequests[ i - removed ];
       
   311             iRequests.Remove( i - removed );
       
   312             ++removed;
       
   313             CompleteClientRequest( KErrCancel );
       
   314             }
       
   315         }
       
   316     if ( !iCurrentRequest )
       
   317         {
       
   318         NextRequest();
       
   319         }
       
   320     }
       
   321 
       
   322 // ---------------------------------------------------------------------------
       
   323 // CWmDrmDlaHandlerImpl::ProcessMeteringCertificateL
       
   324 // ---------------------------------------------------------------------------
       
   325 //
       
   326 void CWmDrmDlaHandlerImpl::ProcessMeteringCertificateL( 
       
   327     const TDesC8& aCertificate )
       
   328     {
       
   329     LOGFN( "CWmDrmDlaHandlerImpl::ProcessMeteringCertificateL" );
       
   330     if ( iWait->IsStarted() )
       
   331         {
       
   332         User::Leave( KErrInUse );
       
   333         }
       
   334     
       
   335     CWmDrmDlaRequest* request( CWmDrmDlaRequest::NewL( aCertificate, 
       
   336                                                        ETrue, 
       
   337                                                        iStatus ) );
       
   338     if ( iState == CWmDrmDlaHandlerImpl::EIdle  )
       
   339         {
       
   340         iCurrentRequest = request;
       
   341         iState = CWmDrmDlaHandlerImpl::EProcessingMeteringCertificate;
       
   342         CompleteSelf();
       
   343         }
       
   344     else
       
   345         {
       
   346         iSyncRequest = request;
       
   347         }
       
   348     iWait->Start();
       
   349     LOG2( "iSyncReturnValue: %d", iSyncReturnValue );
       
   350     User::LeaveIfError( iSyncReturnValue );
       
   351     }
       
   352 
       
   353 // ---------------------------------------------------------------------------
       
   354 // CWmDrmDlaHandlerImpl::ProcessMeteringCertificate
       
   355 // ---------------------------------------------------------------------------
       
   356 //
       
   357 void CWmDrmDlaHandlerImpl::ProcessMeteringCertificate( 
       
   358     const TDesC8& aCertificate,
       
   359     TRequestStatus& aStatus )
       
   360     {
       
   361     TInt err( KErrNone );
       
   362     
       
   363     LOGFNR( "CWmDrmDlaHandlerImpl::ProcessMeteringCertificate", err );
       
   364     
       
   365     CWmDrmDlaRequest* request( NULL );
       
   366     TRequestStatus *status = &aStatus;
       
   367     aStatus = KRequestPending;
       
   368     
       
   369     TRAP( err, request = CWmDrmDlaRequest::NewL( aCertificate, 
       
   370                                                  EFalse, 
       
   371                                                  aStatus ) );
       
   372     if ( err )
       
   373         {
       
   374         User::RequestComplete( status, err );
       
   375         }
       
   376     else if ( iState == CWmDrmDlaHandlerImpl::EIdle  )
       
   377         {
       
   378         iCurrentRequest = request;
       
   379         iState = CWmDrmDlaHandlerImpl::EProcessingMeteringCertificate;
       
   380         CompleteSelf();
       
   381         }
       
   382     else
       
   383         {
       
   384         err = iRequests.Append( request );
       
   385         if ( err )
       
   386             {
       
   387             delete request;
       
   388             User::RequestComplete( status, err );
       
   389             }
       
   390         }
       
   391     }
       
   392 
       
   393 // ---------------------------------------------------------------------------
       
   394 // CWmDrmDlaHandlerImpl::CancelMetering
       
   395 // ---------------------------------------------------------------------------
       
   396 //
       
   397 void CWmDrmDlaHandlerImpl::CancelMetering()
       
   398     {
       
   399     LOGFN( "CWmDrmDlaHandlerImpl::CancelMetering" );
       
   400     
       
   401     //First check, if we are currently handling process metering request.
       
   402     //If we are, then cancel handling and cancel request 
       
   403     if ( iState == CWmDrmDlaHandlerImpl::ECompleted &&
       
   404          iCurrentRequest->iType 
       
   405              == CWmDrmDlaRequest::EProcessMeteringCertificate )
       
   406         {
       
   407         iMeteringFw->CancelMetering();
       
   408         Cancel();
       
   409         CompleteClientRequest( KErrCancel );
       
   410         CompleteSyncRequest( KErrCancel );
       
   411         }
       
   412     else if ( iState == CWmDrmDlaHandlerImpl::EProcessingMeteringCertificate )
       
   413         {
       
   414         Cancel();
       
   415         CompleteClientRequest( KErrCancel );
       
   416         CompleteSyncRequest( KErrCancel );
       
   417         }
       
   418     // Next go through the request queue,
       
   419     // remove all process metering requests and cancel them.
       
   420     TInt removed( 0 );
       
   421     for ( TInt i( 0 ); i - removed < iRequests.Count(); ++i )
       
   422         {
       
   423         if ( iRequests[ i - removed ]->iType 
       
   424                 == CWmDrmDlaRequest::EProcessMeteringCertificate )
       
   425             {
       
   426             iCurrentRequest = iRequests[ i - removed ];
       
   427             iRequests.Remove( i - removed );
       
   428             ++removed;
       
   429             CompleteClientRequest( KErrCancel );
       
   430             }
       
   431         }
       
   432     if ( !iCurrentRequest )
       
   433         {
       
   434         NextRequest();
       
   435         }
       
   436     }
       
   437 
       
   438 // ---------------------------------------------------------------------------
       
   439 // CWmDrmDlaHandlerImpl::SetIapId
       
   440 // ---------------------------------------------------------------------------
       
   441 //
       
   442 void CWmDrmDlaHandlerImpl::SetIapId( TInt aIapId )
       
   443     {
       
   444     LOGFN( "CWmDrmDlaHandlerImpl::SetIapId" );
       
   445     LOG2( "aIapId: %d", aIapId );
       
   446     iLicenseAcquisitionFw->SetIapId( aIapId );
       
   447     iMeteringFw->SetIapId( aIapId );
       
   448     }
       
   449 
       
   450 // ---------------------------------------------------------------------------
       
   451 // CWmDrmDlaHandlerImpl::DoCancel
       
   452 // ---------------------------------------------------------------------------
       
   453 //
       
   454 void CWmDrmDlaHandlerImpl::DoCancel()
       
   455     {
       
   456     LOGFN( "CWmDrmDlaHandlerImpl::DoCancel" );
       
   457     //Don't need to do anything, canceling is implemented in
       
   458     //CancelLicenseAcquisiton() and in CancelMetering() -functions
       
   459     }
       
   460 
       
   461 // ---------------------------------------------------------------------------
       
   462 // CWmDrmDlaHandlerImpl::RunL
       
   463 // ---------------------------------------------------------------------------
       
   464 //
       
   465 void CWmDrmDlaHandlerImpl::RunL()
       
   466     {
       
   467     LOGFN( "CWmDrmDlaHandlerImpl::RunL" );
       
   468     LOG2( "iState: %d", iState );
       
   469     LOG2( "iStatus.Int(): %d", iStatus.Int() );
       
   470     //If some error happened, then set state to completed, in which
       
   471     //the failed client request will be completed with the error code
       
   472     if ( iStatus.Int() )
       
   473         {
       
   474         iState = ECompleted;
       
   475         }
       
   476         
       
   477     switch ( iState )
       
   478 	    {
       
   479 	    case CWmDrmDlaHandlerImpl::ECompleted:
       
   480 	        Completed( iStatus.Int() );
       
   481 	        break;
       
   482     	
       
   483     	case CWmDrmDlaHandlerImpl::EAcquiringLicenseFromDrmHeader:
       
   484     	    AcquiringLicenseFromDrmHeader();
       
   485     	    break;
       
   486     	
       
   487     	case CWmDrmDlaHandlerImpl::EAcquiringLicense:
       
   488     	    AcquiringLicense();
       
   489     	    break;
       
   490     	
       
   491     	case CWmDrmDlaHandlerImpl::EProcessingMeteringCertificate:
       
   492     	    ProcessingMeteringCertificate();
       
   493     	    break;
       
   494     	
       
   495     	default:
       
   496             ASSERT( EFalse );
       
   497     	    break;
       
   498     	}
       
   499     }
       
   500 
       
   501 // ---------------------------------------------------------------------------
       
   502 // CWmDrmDlaHandlerImpl::RunError
       
   503 // ---------------------------------------------------------------------------
       
   504 //
       
   505 TInt CWmDrmDlaHandlerImpl::RunError( TInt aError )
       
   506     {
       
   507     LOGFN( "CWmDrmDlaHandlerImpl::RunError" );
       
   508     //Shouldn't ever happen, but better to be sure
       
   509     Completed( aError );
       
   510     return KErrNone;
       
   511     }
       
   512 
       
   513 // ----------------------------------------------------------------------------
       
   514 // CWmDrmDlaHandlerImpl::CompleteSelf
       
   515 // ----------------------------------------------------------------------------
       
   516 //
       
   517 void CWmDrmDlaHandlerImpl::CompleteSelf()
       
   518     {
       
   519     LOGFN( "CWmDrmDlaHandlerImpl::CompleteSelf" );
       
   520     if ( !IsActive() )
       
   521         {
       
   522         TRequestStatus* status = &iStatus;
       
   523         User::RequestComplete( status, KErrNone );
       
   524         SetActive();
       
   525         }
       
   526     }
       
   527 
       
   528 // ----------------------------------------------------------------------------
       
   529 // CWmDrmDlaHandlerImpl::CompleteClientRequest
       
   530 // ----------------------------------------------------------------------------
       
   531 //
       
   532 void CWmDrmDlaHandlerImpl::CompleteClientRequest( TInt aError )
       
   533     {
       
   534     LOGFN( "CWmDrmDlaHandlerImpl::CompleteClientRequest" );
       
   535     LOG2( "aError: %d", aError );
       
   536     if ( iCurrentRequest && !iCurrentRequest->iSync )
       
   537         {
       
   538         User::RequestComplete( iCurrentRequest->iStatus, aError );
       
   539         delete iCurrentRequest;
       
   540         iCurrentRequest = NULL;
       
   541         }
       
   542     }
       
   543 
       
   544 // ----------------------------------------------------------------------------
       
   545 // CWmDrmDlaHandlerImpl::CompleteSyncRequest
       
   546 // ----------------------------------------------------------------------------
       
   547 //
       
   548 void CWmDrmDlaHandlerImpl::CompleteSyncRequest( TInt aError )
       
   549     {
       
   550     LOGFN( "CWmDrmDlaHandlerImpl::CompleteSyncRequest" );
       
   551     LOG2( "aError: %d", aError );
       
   552     if ( iCurrentRequest && iCurrentRequest->iSync )
       
   553         {
       
   554         iSyncReturnValue = aError;
       
   555         delete iCurrentRequest;
       
   556         iCurrentRequest = NULL;
       
   557         if ( iWait->IsStarted() )
       
   558             {
       
   559             iWait->AsyncStop();
       
   560             }
       
   561         }
       
   562     }
       
   563 
       
   564 // ----------------------------------------------------------------------------
       
   565 // CWmDrmDlaHandlerImpl::NextRequest
       
   566 // ----------------------------------------------------------------------------
       
   567 //
       
   568 void CWmDrmDlaHandlerImpl::NextRequest()
       
   569     {
       
   570     LOGFN( "CWmDrmDlaHandlerImpl::NextRequest" );
       
   571     //If there are queued request, take next one to handling.
       
   572     //Otherwise set state to idle
       
   573     if ( iRequests.Count() > 0 || iSyncRequest )
       
   574         {
       
   575         //synchronous request has higher priority than asynchronous one
       
   576         if ( iSyncRequest )
       
   577             {
       
   578             iCurrentRequest = iSyncRequest;
       
   579             iSyncRequest = NULL;
       
   580             }
       
   581         else
       
   582             {
       
   583             iCurrentRequest = iRequests[0];
       
   584             iRequests.Remove( 0 );
       
   585             }
       
   586         
       
   587         //Switch state to match the current request type
       
   588         switch ( iCurrentRequest->iType )
       
   589             {
       
   590             case CWmDrmDlaRequest::EAcquireLicenseFromDrmHeader:
       
   591                 iState = CWmDrmDlaHandlerImpl::EAcquiringLicenseFromDrmHeader;
       
   592                 break;
       
   593     
       
   594             case CWmDrmDlaRequest::EAcquireLicenseFromFileHandle:
       
   595                 iState = CWmDrmDlaHandlerImpl::EAcquiringLicense;
       
   596                 break;
       
   597                 
       
   598             case CWmDrmDlaRequest::EProcessMeteringCertificate:
       
   599                 iState = CWmDrmDlaHandlerImpl::EProcessingMeteringCertificate;
       
   600                 break;
       
   601                     
       
   602             default:
       
   603                 ASSERT( EFalse );
       
   604                 break;
       
   605             }
       
   606         CompleteSelf();
       
   607         }
       
   608     else
       
   609         {
       
   610         iState = CWmDrmDlaHandlerImpl::EIdle; 
       
   611         }
       
   612     }
       
   613 
       
   614 // ----------------------------------------------------------------------------
       
   615 // CWmDrmDlaHandlerImpl::Completed
       
   616 // ----------------------------------------------------------------------------
       
   617 //
       
   618 void CWmDrmDlaHandlerImpl::Completed( TInt aError )
       
   619     {
       
   620     LOGFN( "CWmDrmDlaHandlerImpl::Completed" );
       
   621     if ( iCurrentRequest->iSync )
       
   622         {
       
   623         CompleteSyncRequest( aError );
       
   624         }
       
   625     else
       
   626         {
       
   627         CompleteClientRequest( aError );
       
   628         }
       
   629     
       
   630     NextRequest();
       
   631     }
       
   632 
       
   633 // ----------------------------------------------------------------------------
       
   634 // CWmDrmDlaHandlerImpl::AcquiringLicenseFromDrmHeader
       
   635 // ----------------------------------------------------------------------------
       
   636 //
       
   637 void CWmDrmDlaHandlerImpl::AcquiringLicenseFromDrmHeader()
       
   638     {
       
   639     LOGFN( "CWmDrmDlaHandlerImpl::AcquiringLicenseFromDrmHeader" );
       
   640     iLicenseAcquisitionFw->
       
   641         AcquireLicenseFromDrmHeader( *iCurrentRequest->iDrmHeader,
       
   642                                      iCurrentRequest->iErrorUrl,
       
   643                                      *iCurrentRequest->iContentUrl,
       
   644                                      *iCurrentRequest->iHtmlData,
       
   645                                      iStatus );
       
   646     SetActive();
       
   647     iState = CWmDrmDlaHandlerImpl::ECompleted; 
       
   648     }
       
   649 
       
   650 // ----------------------------------------------------------------------------
       
   651 // CWmDrmDlaHandlerImpl::AcquiringLicense
       
   652 // ----------------------------------------------------------------------------
       
   653 //
       
   654 void CWmDrmDlaHandlerImpl::AcquiringLicense()
       
   655     {
       
   656     LOGFN( "CWmDrmDlaHandlerImpl::AcquiringLicense" );
       
   657     iLicenseAcquisitionFw->AcquireLicense( *iCurrentRequest->iFileHandle,
       
   658                                            *iCurrentRequest->iContentUrl,
       
   659                                            *iCurrentRequest->iHtmlData,
       
   660                                            iStatus );
       
   661     SetActive();
       
   662     iState = CWmDrmDlaHandlerImpl::ECompleted;
       
   663     }
       
   664 
       
   665 // ----------------------------------------------------------------------------
       
   666 // CWmDrmDlaHandlerImpl::ProcessingMeteringCertificate
       
   667 // ----------------------------------------------------------------------------
       
   668 //
       
   669 void CWmDrmDlaHandlerImpl::ProcessingMeteringCertificate()
       
   670     {
       
   671     LOGFN( "CWmDrmDlaHandlerImpl::ProcessingMeteringCertificate" );
       
   672     iMeteringFw->ProcessMeteringCertificate( *iCurrentRequest->iCertificate,
       
   673                                              iStatus );
       
   674     SetActive();
       
   675     iState = CWmDrmDlaHandlerImpl::ECompleted;
       
   676     }
       
   677