omadrm/drmplugins/drmfilter/src/HTTPFilterDRMDataSupplier.cpp
branchRCL_3
changeset 17 e16d72588c28
parent 0 95b198f216e5
child 18 8a03a285ab14
equal deleted inserted replaced
9:89a1f2bd800d 17:e16d72588c28
    77 // -----------------------------------------------------------------------------
    77 // -----------------------------------------------------------------------------
    78 //
    78 //
    79 CHTTPFilterDRMDataSupplier::CHTTPFilterDRMDataSupplier( TInt aTransId,
    79 CHTTPFilterDRMDataSupplier::CHTTPFilterDRMDataSupplier( TInt aTransId,
    80     MHTTPDataSupplier* iDataBody, CHTTPFilterDRM* aOwner ) :
    80     MHTTPDataSupplier* iDataBody, CHTTPFilterDRM* aOwner ) :
    81     iTransId( aTransId ), iBufPtr( 0, 0 ), iPHData( iDataBody ), iSendReady(
    81     iTransId( aTransId ), iBufPtr( 0, 0 ), iPHData( iDataBody ), iSendReady(
    82         EFalse ), iOwner( aOwner )
    82         EFalse ), iLastPart( EFalse ), iOwner( aOwner )
    83     {
    83     {
    84     iDRMMessageParser = 0;
    84     iDRMMessageParser = 0;
    85     iPrevPos = 0;
    85     iPrevPos = 0;
    86     iMemBuf = 0;
    86     iMemBuf = 0;
    87     iDataPartSize = KWholeDataPart;
    87     iDataPartSize = KWholeDataPart;
   348 // -----------------------------------------------------------------------------
   348 // -----------------------------------------------------------------------------
   349 //
   349 //
   350 TBool CHTTPFilterDRMDataSupplier::GetNextDataPart( TPtrC8& aDataPart )
   350 TBool CHTTPFilterDRMDataSupplier::GetNextDataPart( TPtrC8& aDataPart )
   351     {
   351     {
   352 
   352 
       
   353     // First call after releasedata
   353     if ( iDataPartSize == KWholeDataPart )
   354     if ( iDataPartSize == KWholeDataPart )
   354         {
   355         {
   355         aDataPart.Set( iMemBuf->iBuf->GetPtr() );
   356         aDataPart.Set( iMemBuf->iBuf->GetPtr() );
   356         iDataPartSize = aDataPart.Length();
   357         iDataPartSize = aDataPart.Length();
   357         }
   358         if( iSendReady )
   358     else
   359             {
       
   360             iLastPart = ETrue;
       
   361             }
       
   362         }
       
   363     else // Consecutive calls so that we always return the same part
       
   364          // and same amount of data
   359         {
   365         {
   360         aDataPart.Set( iMemBuf->iBuf->GetPtr().Left( iDataPartSize ) );
   366         aDataPart.Set( iMemBuf->iBuf->GetPtr().Left( iDataPartSize ) );
   361         }
   367         }
   362 
   368 
   363     return ( iDataPartSize == KWholeDataPart ) ? iSendReady : EFalse;
   369     // this check did not work, as in this phase the iDataPartSize is never 
       
   370     // KWholeDataPart
       
   371     //return ( iDataPartSize == KWholeDataPart ) ? iSendReady : EFalse;
       
   372     
       
   373     // Always return info if this is the last part, this is only true
       
   374     // if iSendReady has been true when ReleaseData() has been called
       
   375     return iLastPart;
   364     }
   376     }
   365 
   377 
   366 // -----------------------------------------------------------------------------
   378 // -----------------------------------------------------------------------------
   367 // CHTTPFilterDRMDataSupplier::ReleaseData
   379 // CHTTPFilterDRMDataSupplier::ReleaseData
   368 // virtual methods from MHTTPDataSupplier
   380 // virtual methods from MHTTPDataSupplier
   369 // -----------------------------------------------------------------------------
   381 // -----------------------------------------------------------------------------
   370 //
   382 //
   371 void CHTTPFilterDRMDataSupplier::ReleaseData()
   383 void CHTTPFilterDRMDataSupplier::ReleaseData()
   372     {
   384     {
   373     if ( iDataPartSize == KWholeDataPart )
   385     if ( iDataPartSize == KWholeDataPart || 
       
   386          ( iLastPart && iSendReady ) )
   374         {
   387         {
   375         TRAP_IGNORE( Sink()->SeekL( MStreamBuf::EWrite, TStreamPos(0) ) );
   388         TRAP_IGNORE( Sink()->SeekL( MStreamBuf::EWrite, TStreamPos(0) ) );
   376         if ( iSendReady )
   389         if ( iSendReady )
   377             {
   390             {
   378             iOwner->DeleteDataSupplier( iTransId );
   391             iOwner->DeleteDataSupplier( iTransId );
   386         // Warning: assuming sink is big enough for write of whole b.
   399         // Warning: assuming sink is big enough for write of whole b.
   387         TRAP_IGNORE( Sink()->WriteL( b->Ptr(), b->Length() ) );
   400         TRAP_IGNORE( Sink()->WriteL( b->Ptr(), b->Length() ) );
   388         CleanupStack::PopAndDestroy( b );
   401         CleanupStack::PopAndDestroy( b );
   389         // Update data part size to available data.
   402         // Update data part size to available data.
   390         iDataPartSize = KWholeDataPart;
   403         iDataPartSize = KWholeDataPart;
       
   404 
       
   405         // if we are ready processing, make sure the client knows this
       
   406         // is the last part
       
   407         if( iSendReady )
       
   408             {
       
   409             iLastPart = ETrue;
       
   410             }
   391         }
   411         }
   392     }
   412     }
   393 
   413 
   394 // -----------------------------------------------------------------------------
   414 // -----------------------------------------------------------------------------
   395 // CHTTPFilterDRMDataSupplier::OverallDataSize
   415 // CHTTPFilterDRMDataSupplier::OverallDataSize