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 |