--- a/mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp Tue Feb 02 01:11:40 2010 +0200
+++ b/mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp Fri Feb 19 23:40:44 2010 +0200
@@ -18,6 +18,7 @@
#include <mtp/mmtpobjectmgr.h>
#include <mtp/mmtpdataprovider.h>
#include <mtp/cmtpdataproviderplugin.h>
+#include <mtp/cmtpobjectmetadata.h>
#include "cmtpdataprovidercontroller.h"
#include "cmtpdataprovider.h"
@@ -26,6 +27,7 @@
#include "mtpdevicedpconst.h"
#include "mtpdevdppanic.h"
+
/**
Verification data for GetNumObjects request
*/
@@ -57,6 +59,7 @@
*/
CMTPGetNumObjects::~CMTPGetNumObjects()
{
+ iDevDpSingletons.Close();
iSingletons.Close();
}
/**
@@ -74,19 +77,51 @@
void CMTPGetNumObjects::ConstructL()
{
iSingletons.OpenL();
+ iDevDpSingletons.OpenL(iFramework);
}
TMTPResponseCode CMTPGetNumObjects::CheckRequestL()
{
TMTPResponseCode responseCode = CMTPRequestProcessor::CheckRequestL();
- if(responseCode == EMTPRespCodeOK)
+ if(responseCode != EMTPRespCodeOK)
+ {
+ return responseCode;
+ }
+
+ TUint32 formatCode = Request().Uint32(TMTPTypeRequest::ERequestParameter2);
+ if(formatCode != 0 && !IsSupportedFormatL(formatCode))
+ {
+ return EMTPRespCodeInvalidObjectFormatCode;
+ }
+
+ if(iSingletons.DpController().EnumerateState() != CMTPDataProviderController::EEnumeratedFulllyCompleted)
{
- TUint32 formatCode = Request().Uint32(TMTPTypeRequest::ERequestParameter2);
- if(formatCode != 0 && !IsSupportedFormatL(formatCode))
+ TUint storageID = Request().Uint32(TMTPTypeRequest::ERequestParameter1);
+ TUint handle = Request().Uint32(TMTPTypeRequest::ERequestParameter3);
+ if(iDevDpSingletons.PendingStorages().FindInOrder(storageID) != KErrNotFound)
+ {
+ responseCode = EMTPRespCodeDeviceBusy;
+ }
+ else if( (handle != KMTPHandleNone) && (handle != KMTPHandleAll) )
{
- responseCode = EMTPRespCodeInvalidObjectFormatCode;
+ CMTPObjectMetaData* meta = iRequestChecker->GetObjectInfo(handle);
+ __ASSERT_DEBUG(meta, Panic(EMTPDevDpObjectNull));
+
+ if( meta->Uint(CMTPObjectMetaData::EFormatCode) == EMTPFormatCodeAssociation )
+ {
+ responseCode = EMTPRespCodeDeviceBusy;
+ }
+ }
+ else if(EMTPFormatCodeUndefined == formatCode)
+ {
+ responseCode = EMTPRespCodeDeviceBusy;
}
}
+ else if(iDevDpSingletons.PendingStorages().Count() > 0)
+ {
+ iDevDpSingletons.PendingStorages().Close();
+ }
+
return responseCode;
}