diff -r 0ed94ceaa377 -r cb62a4f66ebe browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrClntSession.cpp --- a/browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrClntSession.cpp Thu Dec 17 09:20:16 2009 +0200 +++ b/browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrClntSession.cpp Thu Jan 07 13:31:38 2010 +0200 @@ -19,7 +19,7 @@ // INCLUDE FILES #include "DownloadMgrLogger.h" -#include "downloadmgrclient.h" +#include #include "DownloadMgrServer.h" #include "DownloadMgrStart.h" #include "DownloadMgrDef.h" @@ -36,6 +36,7 @@ const TInt KHttpDownloadMgrObserverArrayGranularity = 4; const TInt KHttpDownloadMgrDefalutAttribsGranularity = 4; const TInt KDefaultMsgSlots = 16; +const TInt KNumOfSubSessions = 16; _LIT8( KHttpScheme, "http" ); _LIT8( KHttpsScheme, "https" ); @@ -599,6 +600,11 @@ CLOG_ENTERFN( "RHttpDownloadMgr::CreateDownloadL" ) + //Leave if the number of parallel downloads exceeds 16. + if(!IsNewDownloadPossible()){ + User::LeaveIfError(KErrServerBusy); + } + RHttpDownload* download = new (ELeave) RHttpDownload ( this ); CleanupStack::PushL( download ); CleanupClosePushL( *download ); @@ -839,6 +845,22 @@ } // --------------------------------------------------------- +// RHttpDownloadMgr::IsNewDownloadPossible() +// --------------------------------------------------------- + TBool RHttpDownloadMgr::IsNewDownloadPossible() +{ + TInt32 value(0); + TPckg pckg( value ); + if(KErrNone == SendReceive( EHttpDownMgrNumOfSubSessions, + TIpcArgs(&pckg ) )){ + if(value < KNumOfSubSessions){ + return ETrue; + } + } + return EFalse; +} + +// --------------------------------------------------------- // RHttpDownloadMgr::Disconnect // --------------------------------------------------------- //