--- 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 <downloadmgrclient.h>
#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<TInt32> pckg( value );
+ if(KErrNone == SendReceive( EHttpDownMgrNumOfSubSessions,
+ TIpcArgs(&pckg ) )){
+ if(value < KNumOfSubSessions){
+ return ETrue;
+ }
+ }
+ return EFalse;
+}
+
+// ---------------------------------------------------------
// RHttpDownloadMgr::Disconnect
// ---------------------------------------------------------
//