mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp
branchRCL_3
changeset 8 bee149131e4b
parent 0 a2952bb97e68
child 9 05b0d2323768
equal deleted inserted replaced
4:d45095c2f4f3 8:bee149131e4b
    70     CRequestProcessor( aFramework,
    70     CRequestProcessor( aFramework,
    71         aConnection,
    71         aConnection,
    72         sizeof(KMTPSetObjectPropValuePolicy) / sizeof(TMTPRequestElementInfo),
    72         sizeof(KMTPSetObjectPropValuePolicy) / sizeof(TMTPRequestElementInfo),
    73         KMTPSetObjectPropValuePolicy ),
    73         KMTPSetObjectPropValuePolicy ),
    74     iObjectMgr( aFramework.ObjectMgr() ),
    74     iObjectMgr( aFramework.ObjectMgr() ),
    75     iDpConfig( aDpConfig )
    75     iDpConfig( aDpConfig ),
       
    76     iFs( aFramework.Fs() )
    76     {
    77     {
    77     SetPSStatus();
    78     SetPSStatus();
    78     PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) );
    79     PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) );
    79     }
    80     }
    80 
    81 
   105         case EMTPObjectPropCodeObjectFormat:
   106         case EMTPObjectPropCodeObjectFormat:
   106         case EMTPObjectPropCodeProtectionStatus:
   107         case EMTPObjectPropCodeProtectionStatus:
   107         case EMTPObjectPropCodeObjectSize:
   108         case EMTPObjectPropCodeObjectSize:
   108         case EMTPObjectPropCodeParentObject:
   109         case EMTPObjectPropCodeParentObject:
   109         case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
   110         case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
   110         case EMTPObjectPropCodeNonConsumable:
       
   111         case EMTPObjectPropCodeDateAdded:
   111         case EMTPObjectPropCodeDateAdded:
   112         case EMTPObjectPropCodeDateCreated:
   112         case EMTPObjectPropCodeDateCreated:
   113         case EMTPObjectPropCodeDateModified:
   113         case EMTPObjectPropCodeDateModified:
   114         //case EMTPObjectPropCodeVideoBitRate:  // move to specific dp
   114         //case EMTPObjectPropCodeVideoBitRate:  // move to specific dp
   115             returnCode = ETrue;
   115             returnCode = ETrue;
   116             break;
   116             break;
       
   117         case EMTPObjectPropCodeNonConsumable:
       
   118             // It's settable, return EFalse here.
       
   119             break;
   117 
   120 
   118         default:
   121         default:
   119             returnCode = IsSpecificPropCodeReadOnly(aPropCode);
   122             returnCode = IsSpecificPropCodeReadOnly(aPropCode);
   120             break;
   123             break;
   121         }
   124         }
   131 EXPORT_C TMTPResponseCode CSetObjectPropValue::CheckRequestL()
   134 EXPORT_C TMTPResponseCode CSetObjectPropValue::CheckRequestL()
   132     {
   135     {
   133     PRINT( _L( "MM MTP => CSetObjectPropValue::CheckRequestL" ) );
   136     PRINT( _L( "MM MTP => CSetObjectPropValue::CheckRequestL" ) );
   134 
   137 
   135     TMTPResponseCode result = CRequestProcessor::CheckRequestL();
   138     TMTPResponseCode result = CRequestProcessor::CheckRequestL();
       
   139     if ( result == EMTPRespCodeObjectWriteProtected )
       
   140         {
       
   141         // Return AccessDenied for P4S pass rate, instead of EMTPRespCodeObjectWriteProtected
       
   142         result = EMTPRespCodeAccessDenied;
       
   143         }
   136 
   144 
   137     // Check if property is supported
   145     // Check if property is supported
   138     if ( result == EMTPRespCodeOK )
   146     if ( result == EMTPRespCodeOK )
   139         {
   147         {
   140         iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
   148         iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
   141         PRINT1( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL iPropCode = 0x%x" ), iPropCode );
   149         PRINT1( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL iPropCode = 0x%x" ), iPropCode );
   142         result = EMTPRespCodeInvalidObjectPropCode;
       
   143 
   150 
   144         TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
   151         TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
   145         CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( objectHandle );
   152         CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( objectHandle );
   146 
   153         if ( objectInfo == NULL )
   147         if (!objectInfo)
   154             {
   148             {
   155             PRINT( _L("MM MTP <> CGetObjectPropValue::CheckRequestL, objectInfo is NULL" ) );
   149             PRINT(_L("MM MTP <> CGetObjectPropValue::CheckRequestL, objectInfo is NULL"));
       
   150             return EMTPRespCodeInvalidObjectHandle;
   156             return EMTPRespCodeInvalidObjectHandle;
   151             }
   157             }
   152 
   158 
   153         TFileName fileName = objectInfo->DesC(CMTPObjectMetaData::ESuid);
   159         TFileName fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid );
   154         TUint32 formatCode = objectInfo->Uint(CMTPObjectMetaData::EFormatCode);
   160         TUint32 formatCode = objectInfo->Uint( CMTPObjectMetaData::EFormatCode );
   155 
       
   156         PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ),
   161         PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ),
   157                 objectHandle,
   162             objectHandle,
   158                 &fileName,
   163             &fileName,
   159                 formatCode );
   164             formatCode );
   160         const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( formatCode );
   165         const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( formatCode );
   161         TInt count = properties->Count();
   166         TInt count = properties->Count();
       
   167 
       
   168         result = EMTPRespCodeInvalidObjectPropCode;
   162         for ( TInt i = 0; i < count; i++ )
   169         for ( TInt i = 0; i < count; i++ )
   163             {
   170             {
   164             // Object property code is supported, but can not be set which is read only.
   171             // Object property code is supported, but can not be set which is read only.
   165             if ( (*properties)[i] == iPropCode
   172             if ( ( *properties )[i] == iPropCode && IsPropCodeReadonly( iPropCode ) )
   166                 && IsPropCodeReadonly( iPropCode ) )
       
   167                 {
   173                 {
   168                 result = EMTPRespCodeAccessDenied;
   174                 result = EMTPRespCodeAccessDenied;
   169                 break;
   175                 break;
   170                 }
   176                 }
   171             // Object property code is supported and can be set.
   177             // Object property code is supported and can be set.
   172             else if ( iPropCode == (*properties)[i] )
   178             else if ( iPropCode == ( *properties )[i] )
   173                 {
   179                 {
   174                 result = EMTPRespCodeOK;
   180                 result = EMTPRespCodeOK;
   175                 break;
   181                 break;
   176                 }
   182                 }
   177             } // end of for
   183             } // end of for
   210         case EMTPObjectPropCodeParentObject:
   216         case EMTPObjectPropCodeParentObject:
   211         case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
   217         case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
   212         case EMTPObjectPropCodeDateAdded:       // 0xDC4E
   218         case EMTPObjectPropCodeDateAdded:       // 0xDC4E
   213         case EMTPObjectPropCodeDateCreated:     // Date Created(0xDC08)
   219         case EMTPObjectPropCodeDateCreated:     // Date Created(0xDC08)
   214         case EMTPObjectPropCodeDateModified:    // Modified Date(0xDC09)
   220         case EMTPObjectPropCodeDateModified:    // Modified Date(0xDC09)
       
   221         case EMTPObjectPropCodeVideoBitRate: // 0xDE9C
       
   222             {
       
   223             SendResponseL( EMTPRespCodeAccessDenied );
       
   224             }
       
   225             break;
       
   226 
   215         case EMTPObjectPropCodeNonConsumable:   // Non Consumable(0xDC4F)
   227         case EMTPObjectPropCodeNonConsumable:   // Non Consumable(0xDC4F)
   216         case EMTPObjectPropCodeVideoBitRate: // 0xDE9C
   228             ReceiveDataL( iMTPTypeUint8 );
   217             {
       
   218             SendResponseL( EMTPRespCodeAccessDenied );
       
   219             }
       
   220             break;
   229             break;
   221 
   230 
   222         // Get Data for String objects
   231         // Get Data for String objects
   223         case EMTPObjectPropCodeObjectFileName:  // 0xDC07
   232         case EMTPObjectPropCodeObjectFileName:  // 0xDC07
   224         case EMTPObjectPropCodeName: // 0xDC44
   233         case EMTPObjectPropCodeName: // 0xDC44
   250     __ASSERT_DEBUG( iObjectInfo, Panic( EMmMTPDpObjectNull ) );
   259     __ASSERT_DEBUG( iObjectInfo, Panic( EMmMTPDpObjectNull ) );
   251     TMTPResponseCode responseCode = EMTPRespCodeOK;
   260     TMTPResponseCode responseCode = EMTPRespCodeOK;
   252 
   261 
   253     switch ( iPropCode )
   262     switch ( iPropCode )
   254         {
   263         {
       
   264         case EMTPObjectPropCodeNonConsumable:
       
   265             iObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable, iMTPTypeUint8.Value() );
       
   266             iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
       
   267             break;
       
   268 
   255         case EMTPObjectPropCodeObjectFileName:
   269         case EMTPObjectPropCodeObjectFileName:
   256             {
   270             {
   257             TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
   271             TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
   258             TBuf<KMaxFileName> newSuid( iMTPTypeString->StringChars() );
   272             TBuf<KMaxFileName> newSuid( iMTPTypeString->StringChars() );
   259             PRINT2( _L( "MM MTP <> old name = %S, new name = %S" ), &suid, &newSuid );
   273             PRINT2( _L( "MM MTP <> old name = %S, new name = %S" ), &suid, &newSuid );
   271                 TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( suid, newSuid ) ); //Update MPX DB
   285                 TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( suid, newSuid ) ); //Update MPX DB
   272                 PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err );
   286                 PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err );
   273                 // it is ok if file is not found in DB, following S60 solution
   287                 // it is ok if file is not found in DB, following S60 solution
   274                 if ( KErrNotFound == err )
   288                 if ( KErrNotFound == err )
   275                     {
   289                     {
   276                     TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid ) );
   290                     TUint formatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatCode );
       
   291                     TUint subFormatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatSubCode );
       
   292                     TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid, formatCode, subFormatCode ) );
   277                     PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err );
   293                     PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err );
   278                     }
   294                     }
   279 
   295 
   280                 if ( KErrNone == err )
   296                 if ( KErrNone == err )
   281                     {
   297                     {
   341         {
   357         {
   342         resCode = EMTPRespCodeAccessDenied;
   358         resCode = EMTPRespCodeAccessDenied;
   343         }
   359         }
   344     else if ( err == KErrNotFound )
   360     else if ( err == KErrNotFound )
   345         {
   361         {
   346 //        TMTPFormatCode formatCode =
       
   347 //            MmMtpDpUtility::FormatFromFilename( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) );
       
   348         if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) )
   362         if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) )
   349             SendResponseL( EMTPRespCodeAccessDenied );
   363             SendResponseL( EMTPRespCodeAccessDenied );
   350         else
       
   351             SendDataL( aNewData );
       
   352         }
   364         }
   353     else
   365     else
   354         {
   366         {
   355         resCode = EMTPRespCodeGeneralError;
   367         resCode = EMTPRespCodeGeneralError;
   356         }
   368         }