diff -r 000000000000 -r dd21522fd290 browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrSrvObject.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrSrvObject.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,962 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* This file contains the declaration of the Download Mgr Server. +* +*/ + + +// INCLUDE FILES +#include "DownloadMgrLogger.h" +#include "DownloadMgrServer.h" +#include "DownloadMgrDef.h" +#include "DownloadMgrDefAttrib.h" +#include +#include +#include +#include +#include +//#include + +// CONSTANTS + +// GLOBAL FUNCTIONS + +// --------------------------------------------------------- +// CDownloadSubSession::NewL +// --------------------------------------------------------- +// +CDownloadSubSession * CDownloadSubSession::NewL( CDownloadMgrSession* aSession, + CHttpDownload* aDownload ) + { + CLOG_ENTERFN_NULL( "CDownloadSubSession::NewL" ) + CDownloadSubSession* self = new (ELeave) CDownloadSubSession(); + CleanupStack::PushL( self ); + self->ConstructL( aSession, aDownload ); + CleanupStack::Pop( self ); // self + return self; + } + +// --------------------------------------------------------- +// CDownloadSubSession::CDownloadSubSession +// --------------------------------------------------------- +// +CDownloadSubSession::CDownloadSubSession() +:iEvent( EFalse ) + { + CLOG_CREATE; + } + + +// --------------------------------------------------------- +// CDownloadSubSession::ConstructL +// --------------------------------------------------------- +// +void CDownloadSubSession::ConstructL( CDownloadMgrSession *aSession, + CHttpDownload* aDownload ) + { + CLOG_ENTERFN( "CDownloadSubSession::ConstructL" ) + iSession = aSession; + iDownload = aDownload; + +#ifdef _DEBUG + TInt32 dlId; + + aDownload->GetIntAttributeL( EDlAttrId, dlId ); + CLOG_NAME_2( _L("Download_%d_%d"), aSession->SessionId(), dlId ); +#endif + } + +// --------------------------------------------------------- +// CDownloadSubSession::~CDownloadSubSession +// --------------------------------------------------------- +// +CDownloadSubSession::~CDownloadSubSession() + { + CLOG_WRITE( "CDownloadSubSession::~CDownloadSubSession()" ) + // Trigger the event queue + TUint dummy( 0 ); + if( iSession ) + { + iSession->Event( NULL, (THttpDownloadState)dummy, (THttpProgressState)dummy, (TInt32)dummy ); + } + if( iAttribs ) + { + iAttribs->ResetAndDestroy(); + delete iAttribs; + iAttribs = NULL; + } + CLOG_CLOSE; + } + +// --------------------------------------------------------- +// CDownloadSubSession::CloseCounter +// --------------------------------------------------------- +// +void CDownloadSubSession::CloseDownload() + { + CLOG_WRITE( "CDownloadSubSession::CloseDownload" ) + + iSession->ClientAppInstance()->ClientApp()->UnregisterDownload( iDownload ); + iDownload->DetachClientInstance(iSession->ClientAppInstance()); + iSession->DeleteDownload( Message().Int3() ); + } + + +/// --------------------------------------------------------- +// CDownloadSubSession::Message +// --------------------------------------------------------- +// + +const RMessage2& CDownloadSubSession::Message() const + { + CLOG_WRITE( "CDownloadSubSession::Message()" ); + CLOG_WRITE_FORMAT( "iSession = %x", iSession ); + return iSession->CurrentMessage(); + } + +// --------------------------------------------------------- +// CDownloadSubSession::DispatchDownloadMessageL +// --------------------------------------------------------- +// +void CDownloadSubSession::DispatchMessageL( const RMessage2& aMessage ) + { + CLOG_ENTERFN( "CDownloadSubSession::DispatchMessageL" ) + switch( aMessage.Function() ) + { + case EHttpDownloadStart: + { + StartL(); + return; + } + case EHttpDownloadEventSubscription: + { + InitDownloadEvent( aMessage ); + // Send event from the queue + TUint dummy( 0 ); + iSession->Event( NULL, (THttpDownloadState)dummy, (THttpProgressState)dummy, (TInt32)dummy ); + // This is an asyncron request will be completed later! + iSession->SetComplete( EFalse ); + return; + } + case EHttpDownloadEventCancel: + { + CancelDownloadEvent(); + return; + } + case EHttpDownloadPause: + { + PauseL(); + return; + } + case EHttpDownloadReset: + { + Reset(); + return; + } + case EHttpDownloadDelete: + { + Delete(); + return; + } + case EHttpDownloadMove: + { + MoveL(); + return; + } + case EHttpDownloadClose: + { + CloseDownload(); + return; + } + + case EHttpDownloadCloseCompleted: + { + CloseCompletedDownload(); + return; + } + + case EHttpDownloadGetIntAttribute: + { + GetIntAttributeL(); + return; + } + case EHttpDownloadGetBoolAttribute: + { + GetBoolAttributeL(); + return; + } + case EHttpDownloadGetStringAttribute: + { + GetStringAttributeL(); + return; + } + case EHttpDownloadGetString8Attribute: + { + GetString8AttributeL(); + return; + } + case EHttpDownloadSetIntAttribute: + { + SetIntAttributeL(); + return; + } + case EHttpDownloadSetBoolAttribute: + { + SetBoolAttributeL(); + return; + } + case EHttpDownloadSetStringAttribute: + { + SetStringAttributeL(); + return; + } + case EHttpDownloadSetString8Attribute: + { + SetString8AttributeL(); + return; + } + case EHttpDownloadBufferAttributes: + { + BufferAttributesL(); + return; + } + case EHttpDownloadGetRFile: + { + GetFileHandleAttributeL(); + return; + } + case EHttpDownloadSetRFile: + { + SetFileHandleAttributeL(); + return; + } + case EHttpDownloadDataAttribute: + { + SetDownloadDataAttributeL(); + return; + } + case EHttpDownloadTrackAttribute: + { + SetTrackDataAttributeL(); + return; + } + case EHttpDownloadSetOnError: + { + const TInt error = Message().Int0(); + const THttpDownloadMgrError dlerror + = (THttpDownloadMgrError)Message().Int1(); + OnError( error, dlerror ); + return; + } + + default: + { + iSession->PanicClient( EBadRequest ); + return; + } + } + } + + +/// --------------------------------------------------------- +// CDownloadSubSession::Start +// --------------------------------------------------------- +// +void CDownloadSubSession::StartL() + { + CLOG_ENTERFN( "CDownloadSubSession::StartL" ) + iDownload->StartL(); + } + +/// --------------------------------------------------------- +// CDownloadSubSession::Attributes +// --------------------------------------------------------- +// +void CDownloadSubSession::PauseL() + { + CLOG_ENTERFN( "CDownloadSubSession::PauseL" ) + iDownload->PauseL( ETrue ); + } + +/// --------------------------------------------------------- +// CDownloadSubSession::Reset +// --------------------------------------------------------- +// +void CDownloadSubSession::Reset() + { + CLOG_ENTERFN( "CDownloadSubSession::Reset" ) + iDownload->Reset(); + } + +/// --------------------------------------------------------- +// CDownloadSubSession::Delete +// --------------------------------------------------------- +// +void CDownloadSubSession::Delete() + { + CLOG_ENTERFN( "CDownloadSubSession::Delete()" ) + iSession->RemoveFromQueue( iDownload ); + iDownload->Delete( iSession->ClientAppInstance() ); + } + +/// --------------------------------------------------------- +// CDownloadSubSession::CloseCompletedDownload +// --------------------------------------------------------- +// +void CDownloadSubSession::CloseCompletedDownload() + { + CLOG_WRITE( "CDownloadSubSession::CloseCompletedDownload" ) + iDownload->DeleteInfoFile( iSession->ClientAppInstance() ); + iSession->RemoveFromQueue( iDownload ); + iSession->DeleteDownload( Message().Int3() ); + } + +/// --------------------------------------------------------- +// CDownloadSubSession::MoveL +// --------------------------------------------------------- +// +void CDownloadSubSession::MoveL() + { + CLOG_ENTERFN( "CDownloadSubSession::MoveL" ) + iDownload->MoveL(); + } + +/// --------------------------------------------------------- +// CDownloadSubSession::InitDownloadEvent +// --------------------------------------------------------- +// +void CDownloadSubSession::InitDownloadEvent( const RMessage2& aMessage ) + { + CLOG_ENTERFN( "CDownloadSubSession::InitDownloadEvent" ) + __ASSERT_DEBUG( iEvent == EFalse, iSession->PanicClient( EMultipleInitDownloadEvent ) ); + iMessage = aMessage; + iEvent = ETrue; + } + +/// --------------------------------------------------------- +// CDownloadSubSession::CancelDownloadEvent +// --------------------------------------------------------- +// +void CDownloadSubSession::CancelDownloadEvent() + { + CLOG_ENTERFN( "CDownloadSubSession::CancelDownloadEvent" ) + CLOG_WRITE_FORMAT( "CDownloadSubSession::CancelDownloadEvent iEvent = %d", iEvent ) + if( iEvent ) + { + iMessage.Complete( KErrCancel ); + iEvent = EFalse; + } + } + +// --------------------------------------------------------- +// CDownloadSubSession::Event +// --------------------------------------------------------- +// +TBool CDownloadSubSession::EventL( TInt32 aDownloadState, TInt32 aProgressState, TInt32 aMoIndex ) + { + TBool retVal( iEvent ); + CLOG_ENTERFN( "CDownloadSubSession::Event" ) + if( iEvent ) + { + CLOG_WRITE_FORMAT( " aDownloadState = %d", aDownloadState ) + CLOG_WRITE_FORMAT( " aProgressState = %d", aProgressState ) + CLOG_WRITE_FORMAT( " aMoIndex = %d", aMoIndex ) + + TPckgBuf pckgDownloadState( aDownloadState ); + TPckgBuf pckgProgressState( aProgressState ); + + TInt ret = iMessage.Write( 0, pckgDownloadState ); + if( ret != KErrNone ) + { + CLOG_WRITE_FORMAT( " iMessage.Write( 0, pckgDownloadState ) returned error code: %d", ret ) + iSession->PanicClient( EBadDescriptor ); + } + else + { + ret = iMessage.Write( 1, pckgProgressState ); + if( ret != KErrNone ) + { + CLOG_WRITE_FORMAT( " iMessage.Write( 1, pckgProgressState ) returned error code: %d", ret ) + iSession->PanicClient( EBadDescriptor ); + } + else + { + HBufC8* eventAttr = NULL; + + TInt32 userdata( 0 ); + iDownload->GetIntAttributeL( EDlAttrUserData, userdata ); + + TInt32 moDownloadedsize( 0 ); + iDownload->GetIntAttributeL( EDlAttrMultipleMODownloadedSize, moDownloadedsize ); + + TInt32 moLength( 0 ); + iDownload->GetIntAttributeL( EDlAttrMultipleMOLength, moLength ); + + TInt32 downloadedsize( 0 ); + iDownload->GetIntAttributeL( EDlAttrDownloadedSize, downloadedsize ); + + TInt32 length( 0 ); + iDownload->GetIntAttributeL( EDlAttrLength, length ); + + // Mask media object index with userdata. + // For example if aMoIndex = 0x00000004 and userdata = 0x00000005, + // then maskData = 0x00040005. + TInt32 maskedData = (aMoIndex << 16); + maskedData = (maskedData | (userdata & 0x0000FFFF)); + + TRAPD( err, eventAttr = TDMgrUtils::PackEventAttribL( maskedData, moDownloadedsize, downloadedsize, moLength, length ) ); + if( KErrNone == err ) + { + TPtr8 ptr = eventAttr->Des(); + ret = iMessage.Write( 2, ptr ); + if( ret != KErrNone ) + { + CLOG_WRITE_FORMAT( " iMessage.Write( 2, ptr ) returned error code: %d", ret ) + iSession->PanicClient( EBadDescriptor ); + } + } + delete eventAttr; + } + } + EventComplete( KErrNone ); + } + CLOG_WRITE_FORMAT( "Event sent: %d", retVal ) + return retVal; + } + +// --------------------------------------------------------- +// CDownloadSubSession::CreateAttribPackL +// --------------------------------------------------------- +// +HBufC8* CDownloadSubSession::CreateAttribPackL( TBool aBuffered ) + { + CLOG_ENTERFN( "CDownloadSubSession::CreateEventAttribPackLC" ) + iAttribs = + new (ELeave) CArrayPtrFlat< CDefaultAttrib >( 1 ); + + TInt32 value( 0 ); + iDownload->GetIntAttributeL( EDlAttrUserData, value ); + CDefaultAttrib* attrib = CDefaultAttrib::NewL( EDlAttrUserData, value ); + CleanupStack::PushL( attrib ); + iAttribs->AppendL( attrib ); + CleanupStack::Pop( attrib ); + + iDownload->GetIntAttributeL( EDlAttrMultipleMODownloadedSize, value ); + attrib = CDefaultAttrib::NewL( EDlAttrMultipleMODownloadedSize, value ); + CleanupStack::PushL( attrib ); + iAttribs->AppendL( attrib ); + CleanupStack::Pop( attrib ); + + iDownload->GetIntAttributeL( EDlAttrDownloadedSize, value ); + attrib = CDefaultAttrib::NewL( EDlAttrDownloadedSize, value ); + CleanupStack::PushL( attrib ); + iAttribs->AppendL( attrib ); + CleanupStack::Pop( attrib ); + + iDownload->GetIntAttributeL( EDlAttrMultipleMOLength, value ); + attrib = CDefaultAttrib::NewL( EDlAttrMultipleMOLength, value ); + CleanupStack::PushL( attrib ); + iAttribs->AppendL( attrib ); + CleanupStack::Pop( attrib ); + + iDownload->GetIntAttributeL( EDlAttrLength, value ); + attrib = CDefaultAttrib::NewL( EDlAttrLength, value ); + CleanupStack::PushL( attrib ); + iAttribs->AppendL( attrib ); + CleanupStack::Pop( attrib ); + + if( aBuffered ) + { + TBool deleteStr; + HBufC8* tempBuf = iDownload->GetString8AttributeL( + EDlAttrReqUrl, + deleteStr ); + if( deleteStr ) + { + CleanupStack::PushL( tempBuf ); + } + TInt length = tempBuf->Length(); + attrib = CDefaultAttrib::NewL( EDlAttrReqUrl, tempBuf->Des() ); + CleanupStack::PushL( attrib ); + iAttribs->AppendL( attrib ); + CleanupStack::Pop( attrib ); + if( deleteStr ) + { + CleanupStack::PopAndDestroy( tempBuf ); // tempBuf + } + + iDownload->GetIntAttributeL( EDlAttrId, value ); + attrib = CDefaultAttrib::NewL( EDlAttrId, value ); + CleanupStack::PushL( attrib ); + iAttribs->AppendL( attrib ); + CleanupStack::Pop( attrib ); + } + + HBufC8* buf = TDMgrUtils::PackedAttributesL( iAttribs ); + iAttribs->ResetAndDestroy(); + delete iAttribs; + iAttribs = NULL; + return buf; + } + +// --------------------------------------------------------- +// CDownloadSubSession::OnError +// --------------------------------------------------------- +// +void CDownloadSubSession::OnError( TInt aError, + THttpDownloadMgrError aDlError ) + { + CLOG_ENTERFN( "CDownloadSubSession::OnError" ) + + iDownload->OnError( aError, aDlError ); + } + +// --------------------------------------------------------- +// CDownloadSubSession::EventComplete +// --------------------------------------------------------- +// +void CDownloadSubSession::EventComplete( TInt aErrorStatus ) + { + CLOG_ENTERFN( "CDownloadSubSession::EventComplete" ) + if( iEvent ) + { + iMessage.Complete( aErrorStatus ); + iEvent = EFalse; + } + } + +// --------------------------------------------------------- +// CDownloadSubSession::GetIntAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::GetIntAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::GetIntAttributeL" ) + + const TInt attr = Message().Int0(); + TInt32 moIndex = Message().Int1(); + TInt32 value; + + if (moIndex == KNonMoIndex) + iDownload->GetIntAttributeL( (THttpDownloadAttrib)attr, value ); + else + iDownload->GetIntAttributeL( (THttpDownloadAttrib)attr, moIndex, value ); + + TPckg pckg( value ); + + Write( 2, pckg ); + } + +// --------------------------------------------------------- +// CDownloadSubSession::GetBoolAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::GetBoolAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::GetBoolAttributeL" ) + + const TInt attr = Message().Int0(); + TInt32 moIndex = Message().Int1(); + TBool value; + + if (moIndex == KNonMoIndex) + iDownload->GetBoolAttributeL( (THttpDownloadAttrib)attr, value ); + else + iDownload->GetBoolAttributeL( (THttpDownloadAttrib)attr, moIndex, value ); + + TPckg pckg( value ); + + Write( 2, pckg ); + } + +// --------------------------------------------------------- +// CDownloadSubSession::GetStringAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::GetStringAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::GetStringAttributeL" ) + const TInt attr = Message().Int0(); + TInt32 moIndex = Message().Int1(); + + TBool deleteStr; + HBufC* tempBuf = NULL; + if (moIndex == KNonMoIndex) + tempBuf = iDownload->GetStringAttributeL( (THttpDownloadAttrib)attr, deleteStr ); + else + tempBuf = iDownload->GetStringAttributeL( (THttpDownloadAttrib)attr, moIndex, deleteStr ); + + TPtr value( tempBuf->Des() ); + + Write( 2, value ); + + if( deleteStr ) + { + delete tempBuf; + } + } + +// --------------------------------------------------------- +// CDownloadSubSession::GetString8AttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::GetString8AttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::GetString8AttributeL" ) + const TInt attr = Message().Int0(); + TInt32 moIndex = Message().Int1(); + + TBool deleteStr; + HBufC8* tempBuf = NULL; + if (moIndex == KNonMoIndex) + tempBuf = iDownload->GetString8AttributeL( (THttpDownloadAttrib)attr, deleteStr ); + else + tempBuf = iDownload->GetString8AttributeL( (THttpDownloadAttrib)attr, moIndex, deleteStr ); + + TPtr8 value( tempBuf->Des() ); + + Write( 2, value ); + + if( deleteStr ) + { + delete tempBuf; + } + } + +// --------------------------------------------------------- +// CDownloadSubSession::GetFileHandleAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::GetFileHandleAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::GetFileHandleAttributeL" ) + + RFile* file = iDownload->GetFileHandleAttributeL(); + + // transfer to client: store the RFile handle into the package buffer in slot 0 + // and complete the message with the RFs handle + User::LeaveIfError( file->TransferToClient( Message(), 0) ); + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetIntAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::SetIntAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::SetIntAttributeL" ) + const TInt attr = Message().Int0(); + const TInt32 value = Message().Int1(); + iDownload->SetIntAttributeL( (THttpDownloadAttrib)attr, value ); + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetBoolAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::SetBoolAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::SetBoolAttributeL" ) + const TInt attr = Message().Int0(); + const TBool value = (TBool)Message().Int1(); + iDownload->SetBoolAttributeL( (THttpDownloadAttrib)attr, value ); + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetStringAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::SetStringAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::SetStringAttributeL" ) + const TInt attr = Message().Int0(); + const TInt moIndex = Message().Int1(); + + TInt desLen = Message().GetDesLength( 2 ); + + HBufC* writeBuf = HBufC::NewLC( desLen ); + TPtr initptr = writeBuf->Des(); + + Read( 2, initptr ); + + if(moIndex != KNonMoIndex) + { + iDownload->SetStringAttributeL( (THttpDownloadAttrib)attr, moIndex, initptr ); + } + else + { + iDownload->SetStringAttributeL( (THttpDownloadAttrib)attr, initptr ); + } + + CleanupStack::PopAndDestroy( writeBuf ); // writeBuf + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetString8AttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::SetString8AttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::SetString8AttributeL" ) + const TInt attr = Message().Int0(); + + TInt desLen = Message().GetDesLength( 1 ); + + HBufC8* writeBuf = HBufC8::NewLC( desLen ); + TPtr8 initptr = writeBuf->Des(); + + Read( 1, initptr ); + + iDownload->SetStringAttributeL( (THttpDownloadAttrib)attr, initptr ); + CleanupStack::PopAndDestroy( writeBuf ); // writeBuf; + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetFileHandleAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::SetFileHandleAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::SetFileHandleAttributeL" ) + + RFile* file = new (ELeave) RFile; + CleanupStack::PushL( file ); + + file->AdoptFromClient( Message(), 0, 1 ); + + // ownership is passed to the engine + iDownload->SetFileHandleAttributeL( file ); + + CleanupStack::Pop( file ); + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetDownloadDataAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::SetDownloadDataAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::SetDownloadDataAttributeL" ) + + TInt desLen = Message().GetDesLength( 0 ); + + HBufC8* writeBuf = HBufC8::NewLC( desLen ); + TPtr8 initPtr = writeBuf->Des(); + + Read( 0, initPtr); + + // ownership is passed to the engine + iDownload->SetDownloadDataAttributeL(writeBuf); + + CleanupStack::PopAndDestroy(writeBuf); + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetTrackDataAttributeL +// --------------------------------------------------------- +// +void CDownloadSubSession::SetTrackDataAttributeL() + { + CLOG_ENTERFN( "CDownloadSubSession::SetTrackDataAttributeL" ) + + const TInt index = Message().Int0(); + TInt desLen = Message().GetDesLength( 1 ); + + HBufC8* writeBuf = HBufC8::NewLC( desLen ); + TPtr8 initPtr = writeBuf->Des(); + + Read( 1, initPtr); + + // ownership is passed to the engine + iDownload->SetTrackDataAttributeL(index, writeBuf); + + CleanupStack::PopAndDestroy(writeBuf); + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetDefAttributesL +// --------------------------------------------------------- +// +void CDownloadSubSession::SetDefAttributesL() + { + CLOG_ENTERFN( "CDownloadSubSession::SetDefAttributesL" ) + + TInt desLen = Message().GetDesLength( 2 ); + + HBufC8* attribBuf = HBufC8::NewLC( desLen ); + TPtr8 attribs = attribBuf->Des(); + + Read( 2, attribs ); + + CDefaultAttrib* attrib = CDefaultAttrib::NewL(); + CleanupStack::PushL( attrib ); + TDMgrUtils util; + util.iPtr.Set( attribs ); + util.iCurrent = 0; + + while( util.NextAttribL( attrib, attribs ) ) + { + switch( attrib->iType ) + { + case CDefaultAttrib::EString8: + { + iDownload->SetStringAttributeL( attrib->iAttribute, + attrib->AsTPtrC8L() ); + } + break; + case CDefaultAttrib::EString16: + { + iDownload->SetStringAttributeL( attrib->iAttribute, + attrib->AsTPtrC16L() ); + } + break; + case CDefaultAttrib::EInt: + { + iDownload->SetIntAttributeL( attrib->iAttribute, + attrib->AsTInt32L() ); + } + break; + case CDefaultAttrib::EBool: + { + iDownload->SetBoolAttributeL( attrib->iAttribute, + attrib->AsTBoolL() ); + } + break; + default: + break; + } + } + + CleanupStack::PopAndDestroy( 2 ); // attribBuf, attrib; + } + +// --------------------------------------------------------- +// CDownloadSubSession::Write +// --------------------------------------------------------- +// +void CDownloadSubSession::Write( TInt aParam, TDesC8& aDes ) + { + CLOG_ENTERFN( "CDownloadSubSession::Write" ) + + TInt ret = Message().Write( aParam, aDes ); + + CLOG_WRITE_FORMAT( "CDownloadSubSession::Write ret = %d", ret ); + CLOG_WRITE_FORMAT( "CDownloadSubSession = %x", this ); + if( ret != KErrNone ) + { + iSession->PanicClient( EBadDescriptor ); + } + } + +// --------------------------------------------------------- +// CDownloadSubSession::Write +// --------------------------------------------------------- +// +void CDownloadSubSession::Write( TInt aParam, TDesC16& aDes ) + { + CLOG_ENTERFN( "CDownloadSubSession::Write" ) + + TInt ret = Message().Write( aParam, aDes ); + + if( ret != KErrNone ) + { + iSession->PanicClient( EBadDescriptor ); + } + } + +// --------------------------------------------------------- +// CDownloadSubSession::Read +// --------------------------------------------------------- +// +void CDownloadSubSession::Read( TInt aParam, TDes8& aDes ) + { + CLOG_ENTERFN( "CDownloadSubSession::Read" ) + + TInt ret = Message().Read( aParam, aDes ); + + if( ret != KErrNone ) + { + iSession->PanicClient( EBadDescriptor ); + } + } + +// --------------------------------------------------------- +// CDownloadSubSession::Read +// --------------------------------------------------------- +// +void CDownloadSubSession::Read( TInt aParam, TDes16& aDes ) + { + CLOG_ENTERFN( "CDownloadSubSession::Read" ) + + TInt ret = Message().Read( aParam, aDes ); + + if( ret != KErrNone ) + { + iSession->PanicClient( EBadDescriptor ); + } + } + +// --------------------------------------------------------- +// CDownloadSubSession::IsCurrentDownload +// --------------------------------------------------------- +// +TBool CDownloadSubSession::IsDownload( CHttpDownload* aDownload ) + { + CLOG_WRITE( "CDownloadSubSession::IsDownload" ); + __ASSERT_DEBUG( iDownload, iSession->PanicClient( EBadSubsessionHandle ) ); + return (iDownload == aDownload) ? ETrue : EFalse; + } + +// --------------------------------------------------------- +// CDownloadSubSession::Handle +// --------------------------------------------------------- +// +TUint CDownloadSubSession::Handle() + { + CLOG_WRITE( "CDownloadSubSession::Handle" ) + return iHandle; + } + +// --------------------------------------------------------- +// CDownloadSubSession::SetHandle +// --------------------------------------------------------- +// +void CDownloadSubSession::SetHandle( TUint aHandle ) + { + CLOG_ENTERFN( "CDownloadSubSession::SetHandle" ) + iHandle = aHandle; + } + +// --------------------------------------------------------- +// CDownloadSubSession::Download +// --------------------------------------------------------- +// +CHttpDownload* CDownloadSubSession::Download() + { + CLOG_WRITE( "CDownloadSubSession::Download" ) + return iDownload; + } + +// --------------------------------------------------------- +// CDownloadSubSession::BufferAttributesL +// --------------------------------------------------------- +// +void CDownloadSubSession::BufferAttributesL() + { + HBufC8* attr = CreateAttribPackL( ETrue ); + TPtr8 ptr = attr->Des(); + Write( 0, ptr ); + delete attr; + }