/** Find or create a request processor that can process the request @param aRequest The request to be processed @param aConnection The connection from which the request comes @return the index of the found/created request processor */ TInt CMTPDeviceDataProvider::LocateRequestProcessorL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) { OstTraceFunctionEntry0( CMTPDEVICEDATAPROVIDER_LOCATEREQUESTPROCESSORL_TMTPTYPEREQUEST_ENTRY ); TInt index = KErrNotFound; TInt count = iActiveProcessors.Count(); for(TInt i = 0; i < count; i++) { if(iActiveProcessors[i]->Match(aRequest, aConnection)) { index = i; break; } } if(index == KErrNotFound) { MMTPRequestProcessor* processor = MTPDeviceDpProcessor::CreateL(Framework(), aRequest, aConnection); __ASSERT_DEBUG(processor, Panic(EMTPDevDpNoMatchingProcessor)); CleanupReleasePushL(*processor); iActiveProcessors.AppendL(processor); TUint16 operationCode(aRequest.Uint16(TMTPTypeRequest::ERequestOperationCode)); if (operationCode >= EMTPOpCodeGetDevicePropDesc && operationCode <=EMTPOpCodeResetDevicePropValue) { TUint propCode = aRequest.Uint32(TMTPTypeRequest::ERequestParameter1); TInt foundplugin = FindExtnPlugin (propCode); if(foundplugin!= KErrNotFound) { iDevDpSingletons.DeviceDataStore().SetExtnDevicePropDp(iExtnPluginMapArray[foundplugin]->ExtPlugin()); } } CleanupStack::Pop(); index = count; } OstTraceFunctionExit0( CMTPDEVICEDATAPROVIDER_LOCATEREQUESTPROCESSORL_TMTPTYPEREQUEST_EXIT ); return index; }
const char* operation () const { return operationToString (operationCode ()); }