browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrClntSession.cpp
changeset 37 cb62a4f66ebe
parent 36 0ed94ceaa377
child 65 5bfc169077b2
child 93 79859ed3eea9
--- 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
 // ---------------------------------------------------------
 //