// --------------------------------------------------------- // CDownloadMgrSession::InitializeL // --------------------------------------------------------- // void CDownloadMgrSession::InitializeL() { CLOG_ENTERFN( "CDownloadMgrSession::DownloadMgrAttachCountL" ) iIsMaster = (TBool)CurrentMessage().Int2(); TUid uid; TPckg<TUid> uidPckg( uid ); Read( 0, uidPckg ); CreateClientAppInstanceL( uidPckg().iUid ); // Check how many download we have and return it to the client CLOG_WRITE_FORMAT( "CDownloadMgrSession::InitializeL iClientAppInstance %d", iClientAppInstance ); CArrayPtrFlat<CHttpDownload>* currentDownloads = iClientAppInstance->DownloadsL(); TPckg<TInt> countPckg( currentDownloads->Count() ); TPckg<TInt> sessionId( iSessionId ); Write( 1, CurrentMessage(), countPckg ); Write( 3, CurrentMessage(), sessionId ); CLOG_NAME_2( _L("Session_%x_%x"), uidPckg().iUid, iSessionId ); currentDownloads->Reset(); delete currentDownloads; }
// --------------------------------------------------------- // CDownloadMgrSession::DownloadMgrAttachL // --------------------------------------------------------- // void CDownloadMgrSession::DownloadMgrAttachL() { CLOG_ENTERFN( "CDownloadMgrSession::DownloadMgrAttachL" ) // The client would like to attach the dowmloads were created previously. // Here, we create a buffer with the unique handles of download subsessions // and copy it to the client's address space. CLOG_WRITE_FORMAT( "CDownloadMgrSession::DownloadMgrAttachL iClientAppInstance %d", iClientAppInstance ); CArrayPtrFlat<CHttpDownload>* currentDownloads = iClientAppInstance->DownloadsL(); CleanupStack::PushL( currentDownloads ); TPckgBuf<TInt> arrayPckg; HBufC8* buf = HBufC8::NewLC( currentDownloads->Count() * arrayPckg.Size() ); // Cerate subsessions one by one and write the unique handles to the client. // Later the handles is used by the client subsession to attach to the server. for( TInt i = 0; i < currentDownloads->Count(); i++ ) { CHttpDownload* httpDownload = (*currentDownloads)[i]; // make a new download object CDownloadSubSession* download = CDownloadSubSession::NewL( this, httpDownload ); CleanupStack::PushL( download ); // add object to object container to gererate unique id iObjectContainer->AddL( download ); // add object to object index; this returns a unique handle so we can get it again CLOG_WRITE_FORMAT( "CDownloadMgrSession::DownloadMgrAttachL, download %d", download ); arrayPckg() = iObjectIx->AddL( download ); CLOG_WRITE_FORMAT( "CDownloadMgrSession::DownloadMgrAttachL, iObjectIx->ActiveCount() %d", iObjectIx->ActiveCount() ); // Store handle to the subsession. It is used when the URL is checked. download->SetHandle( arrayPckg() ); CleanupStack::Pop( download ); //download buf->Des().Append( arrayPckg ); } TPtr8 ptr = buf->Des(); Write( 0, CurrentMessage(), ptr ); CleanupStack::PopAndDestroy( buf ); // buf currentDownloads->Reset(); CleanupStack::PopAndDestroy( currentDownloads ); // currentDownloads }