diff -r d0791faffa3f -r f8e15b44d440 mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp --- 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 #include #include +#include #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; }