Merged fix for bug 3843 RCL_3
authorSebastian Brannstrom <sebastianb@symbian.org>
Tue, 19 Oct 2010 12:53:24 +0100
branchRCL_3
changeset 256 572d166c9421
parent 255 a13c58ace598
child 257 f5377b5817a0
Merged fix for bug 3843
engine/group/engine.mmp
engine/inc/HttpEventHandler.h
engine/src/HttpEventHandler.cpp
--- a/engine/group/engine.mmp	Tue Oct 19 12:45:21 2010 +0100
+++ b/engine/group/engine.mmp	Tue Oct 19 12:53:24 2010 +0100
@@ -77,6 +77,7 @@
 LIBRARY apparc.lib
 LIBRARY avkon.lib
 LIBRARY centralrepository.lib
+LIBRARY sysutil.lib 
 
 #ifdef ENABLE_MPX_INTEGRATION
 CAPABILITY NetworkServices UserEnvironment WriteUserData ReadDeviceData WriteDeviceData MultimediaDD
--- a/engine/inc/HttpEventHandler.h	Tue Oct 19 12:45:21 2010 +0100
+++ b/engine/inc/HttpEventHandler.h	Tue Oct 19 12:53:24 2010 +0100
@@ -71,6 +71,7 @@
 	TBool iSilent;
 	TBool iContinue;
 	TInt iLastStatusCode;
+	TInt iDriveNo;
 };
 
 #endif
--- a/engine/src/HttpEventHandler.cpp	Tue Oct 19 12:45:21 2010 +0100
+++ b/engine/src/HttpEventHandler.cpp	Tue Oct 19 12:53:24 2010 +0100
@@ -19,10 +19,13 @@
 // HttpEventHandler.cpp
 #include <e32debug.h>
 #include <httperr.h>
+#include <sysutil.h>
 #include "HttpEventHandler.h"
 #include "bautils.h"
 #include "Httpclient.h"
 
+const TInt64 KMinDiskSpace = 1024 * 1024; // at least 1 MB must remain
+
 void CHttpEventHandler::ConstructL()
 	{
 	//iVerbose = ETrue;	
@@ -148,6 +151,18 @@
 			// Some (more) body data has been received (in the HTTP response)
 			//DumpRespBody(aTransaction);
 			//DP1("Saving: %d", iSavingResponseBody);
+			
+			// check if we have enough disk space
+			if (iDriveNo != -1 && SysUtil::DiskSpaceBelowCriticalLevelL( &iFileServ, KMinDiskSpace, iDriveNo ))
+				{
+					TInt error = KErrDiskFull;
+					iFileOpen = EFalse;
+					iRespBodyFile.Close();
+					iCallbacks.FileError(error);
+					iHttpClient->ClientRequestCompleteL(error);
+					return;
+				}
+			
 			// Append to the output file if we're saving responses
 			if (iFileOpen)
 				{
@@ -239,6 +254,26 @@
 	DP1("CHttpEventHandler::SetSaveFileName, aContinue=%d", aContinue);
 	iFileName.Copy(fName);
 	iContinue = aContinue;
+	
+	switch(fName[0])
+		{
+		case 'C':
+			iDriveNo = EDriveC;
+			break;
+		case 'E':
+			iDriveNo = EDriveE;
+			break;
+		case 'F':
+			iDriveNo = EDriveF;
+			break;
+		case 'G':
+			iDriveNo = EDriveG;
+			break;
+		default:
+			iDriveNo = -1;
+			break;
+		}
+	DP1("iDriveNo set to %d", iDriveNo);
 	}
 
 void CHttpEventHandler::DumpRespHeadersL(RHTTPTransaction& aTrans)