Merge in fix for Bug 1961 RCL_3 PDK_3.0.h
authorWilliam Roberts <williamr@symbian.org>
Fri, 26 Feb 2010 18:11:38 +0000
branchRCL_3
changeset 10 835a21e50645
parent 9 bee149131e4b (diff)
parent 8 5daa7cafd16d (current diff)
child 13 da1f3efa404b
child 18 37df1c05d427
Merge in fix for Bug 1961
mmappfw_plat/group/bld.inf
--- a/inc/mmappfwbldvariant.hrh	Fri Feb 19 16:32:39 2010 +0000
+++ b/inc/mmappfwbldvariant.hrh	Fri Feb 26 18:11:38 2010 +0000
@@ -20,7 +20,7 @@
 #ifndef MMAPPFWBLDVARIANT_HRH
 #define MMAPPFWBLDVARIANT_HRH
 
-#define IAD_INCLUDE_BACKSTEPPING
+#undef  IAD_INCLUDE_BACKSTEPPING
 #define IAD_INCLUDE_AUDIOFETCHER
 
 #endif  // MMAPPFWBLDVARIANT_HRH
--- a/mmappcomponents/asxparser/group/asxparser.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/asxparser/group/asxparser.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,7 +15,7 @@
  *
 */
 
-// Version : %version: 9.1.2 %
+// Version : %version: 9.1.3 %
 
 
 #include <platform_paths.hrh>
@@ -42,7 +42,6 @@
 LIBRARY     xmlenginedom.lib
 LIBRARY     xmlparser.lib
 LIBRARY     xmldom.lib
-LIBRARY     flogger.lib
 LIBRARY     charconv.lib
 
 NOSTRICTDEF
--- a/mmappcomponents/asxparser/inc/AsxParser_debug.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/asxparser/inc/AsxParser_debug.h	Fri Feb 26 18:11:38 2010 +0000
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,8 +15,7 @@
 *
 */
 
-// Version : %version: 4.1.1 %
-
+// Version : %version: 4.1.2 %
 
 
 #ifndef __MP_DEBUG_H__
@@ -24,40 +23,20 @@
 
 #include <e32svr.h>
 #include <e32def.h>
-#include <flogger.h>
-
-//
-//  Forward declaration
-//
-class AsxParserDebug;
-
-// #ifdef __MARM__
-//     #define _ASX_PARSER_FILE_LOGGING_
-// #endif
-
-#ifdef _ASX_PARSER_FILE_LOGGING_
-    #define ASX_DEBUG AsxParserDebug::FileLog
-#else
-    #ifdef _DEBUG
-        #define ASX_DEBUG RDebug::Print
-    #else
-         #define ASX_DEBUG AsxParserDebug::NullLog
-    #endif
-#endif 
 
 class AsxParserDebug
 {
     public:
-        inline static void NullLog(TRefByValue<const TDesC16> /*aFmt*/,...)
+        inline static void NullLog( TRefByValue<const TDesC16> /*aFmt*/, ... )
         {
-        }	
-
-        inline static void FileLog(TRefByValue<const TDesC16> aFmt,...)
-        {
-            VA_LIST list;
-            VA_START(list,aFmt);
-            RFileLogger::WriteFormat(_L("AsxParser"), _L("ap.log"),EFileLoggingModeAppend,aFmt,list);
         }
 };
 
+#ifdef _DEBUG
+    #define ASX_DEBUG   RDebug::Print
+#else
+    #define ASX_DEBUG   AsxParserDebug::NullLog
+#endif
+
+
 #endif // __MP_DEBUG_H__
--- a/mmappcomponents/asxparser/test/test.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/asxparser/test/test.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -12,12 +12,10 @@
 * Contributors:
 *
 * Description:  Simple v2/v3 ASX-fileparser
- *
+*
 */
 
-// Version : %version: e003sa33#6 %
-
-
+// Version : %version: 7 %
 
 #include <e32base.h>
 #include <e32cons.h>
@@ -25,7 +23,6 @@
 
 #include <e32svr.h>
 #include <e32def.h>
-#include <flogger.h>
 
 #include <utf.h>
 
--- a/mmappcomponents/asxparser/test/test.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/asxparser/test/test.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,8 +15,7 @@
  *
 */
 
-// Version : %version: 9 %
-
+// Version : %version: 10 %
 
 
 #include <platform_paths.hrh>
@@ -41,5 +40,4 @@
 
 LIBRARY     bafl.lib
 LIBRARY     efsrv.lib
-LIBRARY     flogger.lib
 LIBRARY     charconv.lib
--- a/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -468,13 +468,7 @@
         {
         return;
         }
-    
-    TInt resultCount = iFileHandler->ResultCount();
-    
-    if(resultCount > 0){
-        CEikButtonGroupContainer& dialogCba = ButtonGroupContainer(); 
-        dialogCba.MakeCommandVisible(EAknSoftkeySelect, ETrue);
-    }
+
     iListBox->HandleItemAdditionL();
     iListBox->SetCurrentItemIndex( 0 );    
     DrawNow();    
@@ -563,7 +557,7 @@
     
     switch ( aEventType )
         {
-        case EEventItemDoubleClicked: // fallthrough
+        case EEventItemSingleClicked:   // fallthrough
         case EEventEnterKeyPressed:
             {
             TBool closeDialog = HandleListSelectionL();
--- a/mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -28,6 +28,9 @@
 CAPABILITY              CAP_GENERAL_DLL
 VENDORID                VID_DEFAULT
 
+MACRO __RAMDISK_PERF_ENABLE
+#define __RAMDISK_PERF_ENABLE
+
 SOURCEPATH              ../src
 SOURCE                  mpxharvesterfilehandler.cpp
 SOURCE                  mpxharvesterfilehandlerimp.cpp
--- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterdb.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterdb.h	Fri Feb 26 18:11:38 2010 +0000
@@ -25,6 +25,17 @@
 // FORWARD DECLARATIONS
 class CMPXHarvesterDatabaseTable;
 
+// ENUMS
+#ifdef __RAMDISK_PERF_ENABLE
+// enum for database state
+enum TDbState
+    {
+    EDbClose,
+    EDbOpen,
+    EDbInTransaction
+    };
+#endif // __RAMDISK_PERF_ENABLE
+
 /**
  *  Database class for the Harvester Component
  *
@@ -51,6 +62,8 @@
 
     /**
     * Open the database
+    * @return State of the opened database: KErrNone or KErrCorrupt
+    * Leaves if cannot open the database
     */
     TInt OpenL();
 
@@ -141,6 +154,27 @@
     */
     void Rollback();
     
+#ifdef __RAMDISK_PERF_ENABLE
+    /**
+     * Set RAM drive info
+     */
+    void SetRamDriveInfo(TDriveNumber aDrive, TBool aUseRamDrive);
+    
+    /**
+     * Get UseRamDrive
+     */
+    TBool IsUseRamDrive();
+    
+    /**
+     * Get the state of the database.
+     */
+    TDbState GetDbState();
+    
+    /**
+     * Set the state of the database.
+     */
+    void SetDbStateL( TDbState aState );
+#endif // __RAMDISK_PERF_ENABLE
     
 private: // private functions
 
@@ -151,7 +185,8 @@
 
     /**
     * Opens a database
-    * @return error for the operation
+    * @return State of the opened database: KErrNone or KErrCorrupt
+    * Leaves if cannot open the database
     */
     TInt OpenDBL();
 
@@ -163,6 +198,12 @@
     void FindAndReplaceSingleQuote(const TDesC& aSrc,
                                    TDes& aTrg);
 
+    /**
+     * Generate the database name.
+     * @return the database file name.
+     */
+    TFileName GenerateDbName();
+    
 private:
 
     /**
@@ -182,6 +223,10 @@
     CFileStore*       iStore;
     RDbStoreDatabase* iDatabase;  // Local single client db
     TBool             iDBOpen;    // Is the db open and ready
+#ifdef __RAMDISK_PERF_ENABLE
+    TDriveNumber      iRamDrive;
+    TBool             iUseRamDrive;
+#endif // __RAMDISK_PERF_ENABLE
     };
 
 #endif // CMPXHARVESTERDB_H
--- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h	Fri Feb 26 18:11:38 2010 +0000
@@ -122,7 +122,112 @@
      * Checks if the spefified drive is a remove drive
      */      
     TBool IsRemoteDrive(TDriveNumber aDrive);
-      
+
+#ifdef __RAMDISK_PERF_ENABLE
+    /**
+    * Copy all databases from RAM disk back to normal drive, E, F,...
+    * 
+    * @return none
+    * Leaves if DB is not usable after the operation
+    */
+    void CopyDBsFromRamL(); 
+
+    /**
+    * Copy all databases to RAM disk from normal drive, E, F,...
+    * 
+    * @return none
+    * Leaves if DB is not usable after the operation
+    */
+    void CopyDBsToRamL(TBool aMtpMode = EFalse);
+
+    /**
+     * Update all databases from RAM drive
+     */
+    //void UpdateDBsFromRamL( TInt aCount );
+
+    /**
+     * If Ram disk is low, copy dbs from ram.
+     */
+    void EnsureRamSpaceL();
+#endif //__RAMDISK_PERF_ENABLE
+
+private: // new functions
+    
+#ifdef __RAMDISK_PERF_ENABLE
+    /**
+    * Find available RAMDISK
+    */
+    TInt GetRAMDiskPath();
+
+    /**
+    * Check if disk is available to copy.
+    *
+    * @return ETrue if there is enough space, EFalse otherwise
+    */
+    TBool IsRamDiskSpaceAvailable();
+    
+    /**
+     * Copy database to ram drive
+     */
+    void DoCopyDBToRamL(TDriveUnit aDriveUnit);
+    
+    /**
+    * Copy database from RAM disk
+    */
+    void DoCopyDBFromRamL(TDriveUnit aDriveUnit); 
+
+    /**
+    * To block a disk space so that it can gurantee for a write back from RAM disk
+    *
+    * @return KErrNone if the dummy file is created successfully
+    */
+    TInt BlockDiskSpaceL( TDriveUnit aDrive, TInt aOrigDbSize );
+
+    /**
+    * To calculate necessary file size of the dummy file
+    *
+    * @return TInt64 estimated file size
+    */
+    TInt64 CalculateInitalDummyDBSizeL( TVolumeInfo aVol, TInt aOrigDbSize );
+
+    /**
+    * Remove dummy file
+    *
+    * @return TInt index to the database handler
+    */
+    void RemoveDummyFile( TInt aIndex );
+    
+    /**
+     * Update the database from ram drive.
+     */
+    //void DoUpdateDBFromRamL( TDriveUnit aDriveUnit );
+    
+    /**
+     * Generate the harvester db path and name.
+     */
+    TFileName GenerateHarvesterDbName( TDriveUnit aDriveUnit, TBool aForRamDrive = EFalse );
+    
+    /**
+     * Generate the dummy db path and name.
+     */
+    TFileName GenerateDummyDbName( TDriveUnit aDriveUnit );
+
+    /**
+     * Check if Ram disk is low.
+     */
+    TBool IsRamDiskLow();
+    
+    /**
+     * Sum up the total size in bytes of the databases.
+     * 
+     * @param aSize - On return, the total size of the databases.
+     * @param aRamDrive - if True, will sum up dbs on Ram Drive, if False, will sum up dbs on other drives.
+     * @return TInt System error.
+     */
+    TInt GetTotalDatabasesSize(TInt& aSize, TBool aRamDrive);
+
+#endif  // __RAMDISK_PERF_ENABLE
+
 private:
 
     /**
@@ -140,6 +245,17 @@
     RPointerArray<CMPXHarvesterDB>   iDatabases;
 
     RFs&                             iFs;   // Not Owned
+
+#ifdef __RAMDISK_PERF_ENABLE
+    // Defined for RAM disk performance
+    TBool                   iRAMDiskPerfEnabled;  // flag to indicate RAM disk feature is enabled from cenrep.
+    TUint64                 iMaximumAllowedRAMDiskSpaceToCopy; // max size in megabytes allowed for RAM copying.
+    TFileName               iRAMFolder;
+    TDriveNumber            iRAMDrive;
+    //TInt                    iUpdateCount;
+    TBool                   iMtpMode;
+    //TInt                    iMtpAddCount;
+#endif //__RAMDISK_PERF_ENABLE
     };
 
 
--- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h	Fri Feb 26 18:11:38 2010 +0000
@@ -432,6 +432,7 @@
     TUid                             iPodcastCollectionId;
 
     TBool                            iDisablePodcasting;
+    TInt                             iCurUSBEvent;
     
     // DRM
     CDRMNotifier*                    iDrmNotifier;
--- a/mmappcomponents/harvester/filehandler/src/mpxdiskspacewatcher.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/src/mpxdiskspacewatcher.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -147,8 +147,12 @@
 void CMPXDiskSpaceWatcher::RunL()
     {
     // Callback to observer about which drive is low on disk space
-    //
-    iObs.HandleLowDiskEvent( iDriveToMonitor );
+    //Check whether the current disk is low on disk space in Mass Storage mode.
+    //    
+    if (IsLowOnDisk())
+        {
+        iObs.HandleLowDiskEvent( iDriveToMonitor );
+        }
     }
 
 // END OF FILE
--- a/mmappcomponents/harvester/filehandler/src/mpxfoldermonitor.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/src/mpxfoldermonitor.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -128,7 +128,7 @@
                 User::LeaveIfError(
                     iFs.DriveToChar( aDrive, driveChar ) );
                 MPX_DEBUG2("CMPXFolderMonitor::Start: Drive %c: not supported!",
-                    driveChar );
+                    (TUint)driveChar );
                 User::Leave( KErrNotSupported );
                 }
             break;
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdb.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdb.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -31,8 +31,12 @@
 // ---------------------------------------------------------------------------
 //
 CMPXHarvesterDB::CMPXHarvesterDB( TDriveNumber aDrive, RFs& aFs  ) :
-                                                             iDrive( aDrive),
-                                                             iFs( aFs )
+                                  iDrive( aDrive),
+                                  iFs( aFs )
+#ifdef __RAMDISK_PERF_ENABLE
+                                  ,iRamDrive(aDrive),
+                                  iUseRamDrive(EFalse)
+#endif // __RAMDISK_PERF_ENABLE
     {
     }
 
@@ -75,7 +79,7 @@
 //
 TInt CMPXHarvesterDB::OpenL()
     {
-    MPX_DEBUG1("CMPXHarvesterDB::OpenL <---");
+    MPX_FUNC("CMPXHarvesterDB::OpenL");
 
     // There is no need to re-open if it was already open
     if( iDBOpen )
@@ -84,18 +88,11 @@
         }
 
     TInt rtn( KErrNone );
-    TDriveUnit drive( iDrive );
-    TFileName fileName;
-    fileName.Append( drive.Name() );
-    fileName.Append( KHarvesterDBPath );
-
-    // Make sure Path exists
-    if (!BaflUtils::PathExists(iFs, fileName))
-        {
-        iFs.MkDirAll(fileName);
-        }
-
-    fileName.Append( KHarvesterDBName );
+    TFileName fileName = GenerateDbName();
+    TParsePtr fileParser( fileName );
+    TFileName filePath = fileParser.DriveAndPath();
+    // Make sure Path exists; allow to leave if can't create the path
+    BaflUtils::EnsurePathExistsL(iFs, filePath);
 
     // Try to open the stream
     TRAPD( err,
@@ -107,20 +104,9 @@
     if( err )
         {
         MPX_DEBUG2("CMPXHarvesterDB::OpenL -- New database %i", err);
-
-        TRAPD( openErr,
-            iStore = CPermanentFileStore::ReplaceL(iFs, fileName ,EFileRead|EFileWrite);
-        	iStore->SetTypeL(iStore->Layout());
-            CreateDBL();
-            iDBOpen = ETrue;
-            );
-
-        if( KErrNone != openErr )
-            {
-            iDBOpen = EFalse;
-            User::Leave( openErr );
-            }
-
+        iStore = CPermanentFileStore::ReplaceL(iFs, fileName ,EFileRead|EFileWrite);
+        iStore->SetTypeL(iStore->Layout());
+        CreateDBL();
         // If the open stream error was not found, that is fine
         // because it is a new db, other errors means the stream
         // is corrupted
@@ -131,9 +117,8 @@
         {
         MPX_DEBUG1("CMPXHarvesterDB::OpenL -- Opening database" );
         rtn = OpenDBL();
-        iDBOpen = ETrue;
         }
-
+    iDBOpen = ETrue;
 
     // Check volume Id
     //
@@ -160,7 +145,6 @@
         rtn = OpenL();
         }
 
-    MPX_DEBUG1("CMPXHarvesterDB::OpenL --->");
     return rtn;
     }
 
@@ -196,15 +180,26 @@
     MPX_DEBUG1("CMPXHarvesterDB::CreateDBL <---");
 
     // remove old databases before creating/replacing new database
-
-    TFileName dbFileName;
-    TDriveUnit drive( iDrive );
-    dbFileName.Append( drive.Name() );
-    dbFileName.Append( KHarvesterDBPath );
-    dbFileName.Append( KHarvesterDBPattern );
+    TFileName fileName = GenerateDbName();
+    TParsePtr fileParser( fileName );
+    TFileName filePath = fileParser.DriveAndPath();
+#ifdef __RAMDISK_PERF_ENABLE
+    if ( iUseRamDrive )
+        {
+        TDriveUnit drive( iDrive );
+        filePath.Append(drive.Name()[0]);
+        filePath.Append(KHarvesterDBPattern);
+        }
+    else
+        {
+#endif // __RAMDISK_PERF_ENABLE
+        filePath.Append( KHarvesterDBPattern );
+#ifdef __RAMDISK_PERF_ENABLE
+        }
+#endif // __RAMDISK_PERF_ENABLE
     
     CFileMan* fileManager = CFileMan::NewL(iFs);
-    TInt ret = fileManager->Delete(dbFileName);	
+    TInt ret = fileManager->Delete(filePath); 
     delete fileManager;
     fileManager = NULL;
 
@@ -474,12 +469,7 @@
 //
 TInt CMPXHarvesterDB::DeleteDatabase()
     {
-    TDriveUnit drive( iDrive );
-    TFileName fileName;
-    fileName.Append( drive.Name() );
-    fileName.Append( KHarvesterDBPath );
-    fileName.Append( KHarvesterDBName );
-
+    TFileName fileName = GenerateDbName();
     return iFs.Delete( fileName );
     }
 
@@ -607,4 +597,127 @@
     iDatabase->Rollback();
     }
 
+#ifdef __RAMDISK_PERF_ENABLE
+// ---------------------------------------------------------------------------
+// Set RAM drive info
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDB::SetRamDriveInfo(TDriveNumber aDrive, TBool aUseRamDrive)
+    {
+    MPX_FUNC("CMPXHarvesterDB::SetRamDriveInfo");
+    iRamDrive = aDrive;
+    iUseRamDrive = aUseRamDrive;
+    }
+
+// ---------------------------------------------------------------------------
+// Get UseRamDrive
+// ---------------------------------------------------------------------------
+//
+TBool CMPXHarvesterDB::IsUseRamDrive()
+    {
+    MPX_FUNC("CMPXHarvesterDB::IsUseRamDrive");
+    return iUseRamDrive;
+    }
+
+// ---------------------------------------------------------------------------
+// Get the state of the database.
+// ---------------------------------------------------------------------------
+//
+TDbState CMPXHarvesterDB::GetDbState()
+    {
+    MPX_FUNC("CMPXHarvesterDB::GetDbState");
+    TDbState state = EDbClose;
+    if ( InTransaction() )
+        {
+        state = EDbInTransaction;
+        }
+    else if ( iDBOpen )
+        {
+        state = EDbOpen;
+        }
+    
+    MPX_DEBUG2("CMPXHarvesterDB::GetDbState state = %d", state );
+    return state;
+    }
+
+// ---------------------------------------------------------------------------
+// Set the state of the database.
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDB::SetDbStateL( TDbState aState )
+    {
+    MPX_FUNC("CMPXHarvesterDB::SetDbState");
+    MPX_DEBUG2("CMPXHarvesterDB::SetDbState state = %d", aState );
+    
+    switch( aState )
+        {
+        case EDbClose:
+            {
+            if ( InTransaction() )
+                {
+                CommitL();
+                }
+            Close();
+            break;
+            }
+        case EDbOpen:
+            {
+            if ( InTransaction() )
+                {
+                CommitL();
+                }
+            OpenL();
+            break;
+            }
+        case EDbInTransaction:
+            {
+            if ( !InTransaction() )
+                {
+                OpenL();
+                BeginL();
+                }
+            break;
+            }
+        default:
+            {
+            // should never get here
+            User::Leave(KErrNotSupported);
+            }
+        }
+    }
+
+#endif // __RAMDISK_PERF_ENABLE
+
+// ---------------------------------------------------------------------------
+// Generate the database name
+// ---------------------------------------------------------------------------
+//
+TFileName CMPXHarvesterDB::GenerateDbName()
+    {
+    MPX_FUNC("CMPXHarvesterDB::GenerateDbName");
+    TFileName fileName;
+#ifdef __RAMDISK_PERF_ENABLE
+    if ( iUseRamDrive )
+        {
+        TDriveUnit ramDrive( iRamDrive );
+        fileName.Append( ramDrive.Name() );
+        fileName.Append( KHarvesterDBPath );
+        TDriveUnit drive( iDrive );
+        fileName.Append(drive.Name()[0]);
+        fileName.Append(KHarvesterDBName);
+        }
+    else
+        {
+#endif // __RAMDISK_PERF_ENABLE
+        TDriveUnit drive( iDrive );
+        fileName.Append( drive.Name() );
+        fileName.Append( KHarvesterDBPath );
+        fileName.Append( KHarvesterDBName );
+#ifdef __RAMDISK_PERF_ENABLE
+        }
+#endif // __RAMDISK_PERF_ENABLE
+    MPX_DEBUG2("CMPXHarvesterDB::GenerateDbName file name = %S", &fileName );
+    return fileName;
+    }
+
 // End of file
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -21,17 +21,43 @@
 #include <pathinfo.h>
 #include <driveinfo.h>
 #endif //RD_MULTIPLE_DRIVE
+
+#ifdef __RAMDISK_PERF_ENABLE
+#include <centralrepository.h>
+#include <BAUTILS.H>  
+#include <mpxharvestercrkeys.h>
+#include "mpxdbcommon.h"
+#endif //__RAMDISK_PERF_ENABLE
+
 #include <mpxlog.h>
 #include "mpxharvesterdbmanager.h"
 #include "mpxharvesterdb.h"
 #include "mpxharvesterdbtable.h"
 
+// CONSTANTS
+#ifdef __RAMDISK_PERF_ENABLE
+_LIT( KHarvesterDummyDBName, "harvesterDummy.dat" );
+const TInt64 KMPMegaByte = 1048576;
+const TInt64 KMPEstimatedSongInBytes = KMPMegaByte * 2; 
+const TInt KMPEstimatedSizePerDBEntry = KMaxFileName; // worst scenario, can be lower if needed
+//const TInt KUpdateDBCount = 200;
+const TInt KMPMinimumRAMSizeToRun = 6 * KMPMegaByte;
+#endif //__RAMDISK_PERF_ENABLE
+
+
 // ---------------------------------------------------------------------------
 // C++ Constructor
 // ---------------------------------------------------------------------------
 //
-CMPXHarvesterDatabaseManager::CMPXHarvesterDatabaseManager( RFs& aFs )
-                                                                  : iFs( aFs )
+CMPXHarvesterDatabaseManager::CMPXHarvesterDatabaseManager( RFs& aFs ):
+        iFs( aFs )
+#ifdef __RAMDISK_PERF_ENABLE
+        ,iRAMDiskPerfEnabled(EFalse),
+        iMaximumAllowedRAMDiskSpaceToCopy(0),
+        //iUpdateCount(0),
+        iMtpMode(EFalse)
+        //iMtpAddCount(0)
+#endif //__RAMDISK_PERF_ENABLE
     {
 
     }
@@ -43,7 +69,38 @@
 //
 void CMPXHarvesterDatabaseManager::ConstructL()
     {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::ConstructL");
     User::LeaveIfError( iDBSession.Connect() );
+
+#ifdef __RAMDISK_PERF_ENABLE
+    TInt temp;
+    CRepository* repository = CRepository::NewLC( KCRUIDMpxHarvesterFeatures );
+    MPX_DEBUG1("CMPXHarvesterDatabaseManager::ConstructL got repository");        
+    User::LeaveIfError( repository->Get( KMpxHarvesterEnableRamDisk, temp ));
+    iRAMDiskPerfEnabled = temp;
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL KMpxHarvesterEnableRamDisk %d", iRAMDiskPerfEnabled);        
+    
+    User::LeaveIfError( repository->Get( KMpxHarvesterMaxAllowedRamDiskSpace, temp) );
+    iMaximumAllowedRAMDiskSpaceToCopy = temp * KMPMegaByte;
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL KMpxHarvesterMaxAllowedRamDiskSpace %Lu", iMaximumAllowedRAMDiskSpaceToCopy);        
+    CleanupStack::PopAndDestroy(repository);
+            
+    if ( iRAMDiskPerfEnabled )
+        {
+        MPX_DEBUG1("CMPXHarvesterDatabaseManager::ConstructL RAMDisk performance is enabled.");
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL RAMDisk iMaximumAllowedRAMDiskSpaceToCopy=%Lu", iMaximumAllowedRAMDiskSpaceToCopy);
+        if ( GetRAMDiskPath() != KErrNone )
+            {
+            // Error finding ram drive, disable ram disk
+            iRAMDiskPerfEnabled = EFalse;
+            }
+        }
+    else
+        {
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL RAMDisk performance is NOT enabled iRAMDiskPerfEnabled=%d", iRAMDiskPerfEnabled);
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL RAMDisk iMaximumAllowedRAMDiskSpaceToCopy=%Lu", iMaximumAllowedRAMDiskSpaceToCopy);
+        }
+#endif //__RAMDISK_PERF_ENABLE
     }
 
 
@@ -68,6 +125,13 @@
 //
 CMPXHarvesterDatabaseManager::~CMPXHarvesterDatabaseManager()
     {
+#ifdef __RAMDISK_PERF_ENABLE
+    TInt count(iDatabases.Count());
+    for (TInt i = 0; i < count; ++i)
+        {
+        RemoveDummyFile(i);
+        }
+#endif // __RAMDISK_PERF_ENABLE
     iDatabases.ResetAndDestroy();
     iDatabases.Close();
     iDBSession.Close();
@@ -189,17 +253,17 @@
     //
     if (!IsRemoteDrive(aDrive))
         {
-    TInt count( iDatabases.Count() );
-    for( TInt i=0; i<count; ++i )
-        {
-        CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i];
-        if( db->GetDbDrive() == aDrive )
+        TInt count( iDatabases.Count() );
+        for( TInt i=0; i<count; ++i )
             {
-            db->OpenL();
-            break;
+            CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i];
+            if( db->GetDbDrive() == aDrive )
+                {
+                db->OpenL();
+                break;
+                }
             }
         }
-        }
     MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL --->");
     }
 
@@ -415,5 +479,621 @@
     MPX_DEBUG1("CMPXHarvesterDatabaseManager::Rollback -->");
     }
 
+#ifdef __RAMDISK_PERF_ENABLE
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::CopyDBsToRamL
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::CopyDBsToRamL( TBool aMtpMode )
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::CopyDBsToRamL");
+    iMtpMode = aMtpMode;
+    //iMtpAddCount = 0;
+    //iUpdateCount = 0;
+    
+    if( iRAMDiskPerfEnabled )
+        {
+        // Check for low ram disk space.
+        if ( !IsRamDiskSpaceAvailable() || IsRamDiskLow() )
+            {
+            return;
+            }
+        
+        // Check if we are over the allowed ram space.
+        TInt dbSize=0;
+        TInt err = GetTotalDatabasesSize(dbSize, EFalse);
+        if ( err || (dbSize > iMaximumAllowedRAMDiskSpaceToCopy) )
+            {
+            MPX_DEBUG2("CMPXDbManager::CopyDBsToRamL Over the allowed Ram disk limit %Lu", iMaximumAllowedRAMDiskSpaceToCopy );
+            return;
+            }
+    
+        TInt count(iDatabases.Count());
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsToRamL() iDatabaseHandles.Count()=%d", count);
+        for (TInt i = 0; i < count; ++i)
+            {
+            TDriveUnit drive( iDatabases[i]->GetDbDrive() );
+            // Don't copy db on C drive.
+            if ( (TInt)drive == EDriveC )
+                {
+                MPX_DEBUG1("CMPXHarvesterDatabaseManager::CopyDBsToRamL() Drive C: skipped.");
+                continue;
+                }
+            
+            // Check if database is in RAM drive.
+            if ( iDatabases[i]->IsUseRamDrive())
+                {
+                MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsToRamL Drive %d is already in Ram Drive.", (TInt)drive);
+                continue;
+                }
+            
+            // Get the db state in order to restore it later.
+            TDbState dbState = iDatabases[i]->GetDbState();
+            iDatabases[i]->SetDbStateL( EDbClose );
+            TRAPD(err, DoCopyDBToRamL( drive ));
+            if ( err != KErrNone )
+                {
+                MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsToRamL error=%d", err);
+                // delete dummy file
+                RemoveDummyFile(i);
+                
+                // delete db in ram drive
+                TFileName ramDb = GenerateHarvesterDbName( drive, ETrue );
+                TInt delErr = BaflUtils::DeleteFile(iFs, ramDb);
+                MPX_DEBUG3("CMPXHarvesterDatabaseManager::CopyDBsToRamL db on ram drive deleted file=%S, err=%d", &ramDb, delErr);
+                
+                iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse);
+                }
+            // Restore the db state.
+            iDatabases[i]->SetDbStateL( dbState );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::DoCopyDBToRamL
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::DoCopyDBToRamL(TDriveUnit aDriveUnit)
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::DoCopyDBToRamL");
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBToRamL Database from drive %d", (TInt)aDriveUnit );
+    TFileName dst;
+    TFileName src;
+    dst.Zero();
+    dst.Append(iRAMFolder);
+    BaflUtils::EnsurePathExistsL( iFs, dst );
+    src = GenerateHarvesterDbName( aDriveUnit );
+    MPX_DEBUG2("RAMDisk src path=%S", &src);
+    dst = GenerateHarvesterDbName( aDriveUnit, ETrue );
+    MPX_DEBUG2("RAMDisk dst path=%S", &dst);
+    TEntry entry;
+    iFs.Entry( src, entry );
+    User::LeaveIfError( BlockDiskSpaceL( aDriveUnit, entry.iSize ));
+    User::LeaveIfError( BaflUtils::CopyFile(iFs, src, dst ) );
+    MPX_DEBUG1("CMPXHarvesterDatabaseManager::DoCopyDBToRamL Copy to Ram Drive Successful.");
+    GetDatabaseL( (TDriveNumber) (TInt)aDriveUnit ).SetRamDriveInfo(iRAMDrive, ETrue);
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::CopyDBsFromRamL
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::CopyDBsFromRamL()
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::CopyDBsFromRamL");
+    // Stop monitoring ram drive for low disk space.
+    iMtpMode = EFalse;
+    //iMtpAddCount = 0;
+    //iUpdateCount = 0;
+
+    if( iRAMDiskPerfEnabled )
+       {
+        TInt count(iDatabases.Count());
+        for (TInt i = 0; i < count; ++i)
+            {
+            TInt err = KErrNone;
+            TDriveUnit drive( iDatabases[i]->GetDbDrive() );
+            // Check if database is in RAM drive.
+            if ( !iDatabases[i]->IsUseRamDrive())
+                {
+                MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL Drive %d is NOT in Ram Drive.", (TInt)drive);
+                continue;
+                }
+
+            // Set the UseRamDrive bool to False.
+            iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse );
+            // Get the db state in order to restore it later.
+            TDbState dbState = iDatabases[i]->GetDbState();
+            iDatabases[i]->SetDbStateL(EDbClose);
+            TRAP( err, DoCopyDBFromRamL(drive) );
+            if ( err )
+                {
+                MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err);                
+                //anyting wrong, delete the temp file.
+                RemoveDummyFile(i);
+                }
+
+            // Restore the db state.
+            iDatabases[i]->SetDbStateL( dbState );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::DoCopyDBFromRamL
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::DoCopyDBFromRamL(TDriveUnit aDriveUnit)
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL");
+    TFileName dst;
+    TFileName src;
+    TInt err = KErrNone;
+    
+    dst = GenerateHarvesterDbName( aDriveUnit );
+    src = GenerateHarvesterDbName( aDriveUnit, ETrue );
+    MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst );
+
+    // Rename the temp file into real Db name
+    TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); 
+
+    //Copy Db from RAM to replace dummy file
+    err = BaflUtils::CopyFile(iFs, src, dummyDbFileName);
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL database copied from ram drive err=%d.", err);
+    
+    // delete db in ram drive.
+    TInt delErr = BaflUtils::DeleteFile(iFs, src);
+    MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr);
+
+    // Make sure we del db from ram drive before leaving.
+    User::LeaveIfError( err );
+    
+    // Delete existing DB on drive
+    delErr = BaflUtils::DeleteFile(iFs, dst);
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL destination file deleted err=%d", delErr);
+
+    // rename dummy file to real db name
+    User::LeaveIfError( BaflUtils::RenameFile(iFs, dummyDbFileName, dst) );
+    MPX_DEBUG1("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL dummy file renamed.");
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::GetRAMDiskPath
+// ---------------------------------------------------------------------------
+//
+TInt CMPXHarvesterDatabaseManager::GetRAMDiskPath()
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::GetRAMDiskPath");
+    TDriveList driveList;
+    TBool ramDriveFound = EFalse;
+    iRAMFolder.Zero();
+    
+    TInt error = iFs.DriveList( driveList );
+    if ( error == KErrNone )
+        {
+        for ( TInt i = 0; i < driveList.Length(); i++ )
+            {
+            if ( driveList[i] != 0 )
+                {
+                TDriveInfo info;
+                TInt err = iFs.Drive( info, i ); 
+                if ( !err && info.iType == EMediaRam )
+                    {
+                    TDriveUnit driveUnit( i );
+                    iRAMDrive = (TDriveNumber)i;
+                    iRAMFolder.Append(driveUnit.Name());
+                    iRAMFolder.Append(KHarvesterDBPath);
+                    ramDriveFound = ETrue;
+                    MPX_DEBUG2("RAMDisk path=%S", &iRAMFolder);
+                    break;
+                    }
+                }
+            }
+        
+        // Check if ram drive is found.
+        if ( !ramDriveFound )
+            {
+            error = KErrNotFound;
+            }
+        }
+    MPX_DEBUG2("CMPXDbManager::GetRAMDiskPath Get DriveList error=%d", error);
+    return error;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable()
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable");
+    TVolumeInfo vol;
+    TInt err = iFs.Volume( vol, iRAMDrive );
+    if ( err != KErrNone )
+        {
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable Disk Not available to use. Error = %d", err);
+        return EFalse;
+        }
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable Free in bytes =%Lu", vol.iFree);
+    if ( vol.iFree > KMPMinimumRAMSizeToRun )
+        {
+        MPX_DEBUG1("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable Ok to copy");
+        return ETrue;
+        }
+        
+    MPX_DEBUG1("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable NOT Ok to copy");
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::BlockDiskSpaceL
+// ---------------------------------------------------------------------------
+//
+TInt CMPXHarvesterDatabaseManager::BlockDiskSpaceL( TDriveUnit aDrive, TInt aOrigDbSize )
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::BlockDiskSpaceL");
+    
+    // if current DB size can not fit in RAM, abort now
+    TVolumeInfo vol;
+    TInt err = KErrNone;
+    err = iFs.Volume( vol, iRAMDrive );
+    if ( err )
+        {
+        return err;
+        }
+    
+    if ( vol.iFree < aOrigDbSize + KMPMinimumRAMSizeToRun )
+        {
+        MPX_DEBUG1("CMPXHarvesterDatabaseManager::BlockDiskSpaceL Not enough space on ram drive." );
+        return KErrDiskFull;
+        }
+
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::BlockDiskSpaceL %d", (TInt)aDrive );
+    err = iFs.Volume( vol, (TInt)aDrive );
+    if ( err )
+        {
+        return err;
+        }
+    
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::BlockDiskSpaceL Disk total free space in bytes =%Lu", vol.iFree);
+    TInt64 blockingSize( CalculateInitalDummyDBSizeL( vol, aOrigDbSize ));
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::BlockDiskSpaceL Disk blocking size =%Lu", blockingSize);
+    // Pad blockingSize by 1Mb so we don't use all the free disk space.
+    if ( vol.iFree > (blockingSize + 1*KMPMegaByte) )
+        {
+        TFileName dummyDbFileName = GenerateDummyDbName( aDrive ); 
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::BlockDiskSpaceL  Dummy db file name=%S", &dummyDbFileName);
+        
+        RFile dummyDb;
+        err = dummyDb.Replace( iFs, dummyDbFileName, EFileWrite );
+        if (err != KErrNone) 
+            {
+            MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Can't open dummy file %d", err);
+            return err;
+            }
+        
+        err = dummyDb.SetSize( blockingSize );
+        // Close the dummy RFile
+        dummyDb.Close();
+        if ( err )
+            {
+            MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Can't resize dummy file %d", err);
+            return err;
+            }
+        }
+    else
+        {
+        MPX_DEBUG1("CMPXHarvesterDatabaseManager::BlockDiskSpaceL - Not enough disk space for dummy file.");
+        err = KErrDiskFull;
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL
+// ---------------------------------------------------------------------------
+//
+TInt64 CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL( TVolumeInfo aVol, TInt aOrigDbSize )
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL");
+    TInt64 size;
+    
+    if ( iMtpMode )
+        {
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize aVol.iFree=%Lu", aVol.iFree );
+        TInt64 totalNumOfSongsCanFit = aVol.iFree / KMPEstimatedSongInBytes;
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize (MTP) totalNumOfSongsCanFit=%Lu", totalNumOfSongsCanFit );
+        TInt64 estimatedSize = totalNumOfSongsCanFit * (TInt64) KMPEstimatedSizePerDBEntry + aOrigDbSize;
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize (MTP) estimated DB size from calculation=%Lu", estimatedSize );
+        if ( estimatedSize > iMaximumAllowedRAMDiskSpaceToCopy )
+            {
+            size = iMaximumAllowedRAMDiskSpaceToCopy;
+            }
+        else
+            {
+            size = estimatedSize;
+            }
+        }
+    else
+        {
+        TInt64 totalNumOfSongsCanFit = aVol.iSize / KMPEstimatedSongInBytes;
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize totalNumOfSongsCanFit=%Lu", totalNumOfSongsCanFit );
+        TInt64 estimatedSize = totalNumOfSongsCanFit * (TInt64) KMPEstimatedSizePerDBEntry + aOrigDbSize;
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize estimated DB size from calculation=%Lu", estimatedSize );
+        if ( estimatedSize > iMaximumAllowedRAMDiskSpaceToCopy )
+            {
+            size = iMaximumAllowedRAMDiskSpaceToCopy;
+            }
+        else
+            {
+            size = estimatedSize;
+            }
+        }
+
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize Dummy DB size=%Lu", size );
+    return size;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::RemoveDummyFile
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::RemoveDummyFile( TInt aIndex )
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::RemoveDummyFile");
+    
+    TDriveUnit driveUnit(iDatabases[aIndex]->GetDbDrive());
+    TFileName file = GenerateDummyDbName(driveUnit);
+    
+    if ( (file.Length() > 0) &&
+         (BaflUtils::FileExists(iFs, file)) )
+        {
+        BaflUtils::DeleteFile(iFs, file);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::UpdateDBsFromRamL
+// ---------------------------------------------------------------------------
+//
+/*void CMPXHarvesterDatabaseManager::UpdateDBsFromRamL( TInt aCount )
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::UpdateDBsFromRamL");
+    TBool updateDb = EFalse;
+    
+    // In MTP mode, aCount is invalid, songs are added one at a time.
+    if ( iMtpMode )
+        {
+        iMtpAddCount++;
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::UpdateDBsFromRamL iMtpAddCount=%d", iMtpAddCount);
+        if ( (iMtpAddCount - iUpdateCount) > KUpdateDBCount )
+            {
+            updateDb = ETrue;
+            iUpdateCount = iMtpAddCount;
+            }
+        }
+    else
+        {
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::UpdateDBsFromRamL aCount=%d", aCount);
+        if ( (aCount - iUpdateCount) > KUpdateDBCount )
+            {
+            updateDb = ETrue;
+            iUpdateCount = aCount;
+            }
+        }
+    
+    if ( updateDb )
+        {
+        CommitL();
+        TInt count(iDatabases.Count());
+        for (TInt i = 0; i < count; ++i)
+            {
+            TDriveUnit drive( iDatabases[i]->GetDbDrive() );
+            // Check if database is not in RAM drive.
+            if ( !iDatabases[i]->IsUseRamDrive() )
+                {
+                MPX_DEBUG2("CMPXHarvesterDatabaseManager::UpdateDBsFromRamL Drive %d is not in Ram Drive.", (TInt)drive);
+                continue;
+                }
+
+            iDatabases[i]->Close();
+            // update the database from ram drive.
+            TRAP_IGNORE( DoUpdateDBFromRamL( drive ) );
+            // 
+            iDatabases[i]->OpenL();
+            }
+        BeginL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL(TDriveUnit aDriveUnit)
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL");
+    
+    TFileName dst;
+    TFileName src;
+    
+    dst = GenerateHarvesterDbName( aDriveUnit );
+    src = GenerateHarvesterDbName( aDriveUnit, ETrue );
+    MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL from %S to %S", &src, &dst );
+
+    //Copy Db from RAM to real db file
+    TInt err = BaflUtils::CopyFile(iFs, src, dst);
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL database copied from ram drive err=%d.", err);
+    }*/
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::GenerateHarvesterDbName
+// ---------------------------------------------------------------------------
+//
+TFileName CMPXHarvesterDatabaseManager::GenerateHarvesterDbName( TDriveUnit aDriveUnit, TBool aForRamDrive )
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::GenerateHarvesterDbName");
+    TFileName name;
+    name.Zero();
+    
+    if ( aForRamDrive )
+        {
+        name.Append(iRAMFolder);
+        name.Append(aDriveUnit.Name()[0]);
+        name.Append(KHarvesterDBName);
+        }
+    else
+        {
+        name.Append(aDriveUnit.Name());
+        name.Append(KHarvesterDBPath);
+        name.Append(KHarvesterDBName);
+        }
+    
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::GenerateHarvesterDbName name = %S", &name );
+    return name;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::GenerateDummyDbName
+// ---------------------------------------------------------------------------
+//
+TFileName CMPXHarvesterDatabaseManager::GenerateDummyDbName( TDriveUnit aDriveUnit )
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::GenerateDummyDbName");
+    TFileName name;
+    name.Zero();
+    name.Append(aDriveUnit.Name());
+    name.Append(KHarvesterDBPath);
+    name.Append(KHarvesterDummyDBName);
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::GenerateDummyDbName name = %S", &name );
+    return name;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::EnsureRamSpaceL
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::EnsureRamSpaceL()
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::EnsureRamSpaceL()");
+    
+    // Ram disk disabled, no need to continue.
+    if( !iRAMDiskPerfEnabled )
+        {
+        MPX_DEBUG1("CMPXHarvesterDatabaseManager::EnsureRamSpaceL RAM Disk Disabled.");
+        return;
+        }
+
+    // Check if any DBs are in RAM drive.
+    TInt count(iDatabases.Count());
+    TBool ramDriveInUse = EFalse;
+    for (TInt i = 0; i < count; ++i)
+        {
+        // Check if database is in RAM drive.
+        if ( iDatabases[i]->IsUseRamDrive() )
+            {
+            ramDriveInUse = ETrue;
+            break;
+            }
+        }
+    
+    // DBs not in ram drive, no need to continue.
+    if ( !ramDriveInUse )
+        {
+        MPX_DEBUG1("CMPXHarvesterDatabaseManager::EnsureRamSpaceL No DBs in RAM drive.");
+        return;
+        }
+        
+    // Check if low on Ram disk.
+    if ( IsRamDiskLow() )
+        {
+        // RAM not enough, copy back to normal drive and continue to harvest.
+        MPX_DEBUG1("CMPXHarvesterDatabaseManager::EnsureRamSpaceL RAM diskspace is full, copy dbs back.");
+        CopyDBsFromRamL();
+        }
+    else
+        {
+        TInt size=0;
+        TInt err = GetTotalDatabasesSize(size, ETrue);
+        if ( err || (size > iMaximumAllowedRAMDiskSpaceToCopy) )
+            {
+            // Databases using too much RAM space, copy back to normal drive and continue to harvest.
+            if ( err )
+                {
+                MPX_DEBUG2("CMPXHarvesterDatabaseManager::EnsureRamSpaceL Get DBs Size Err = %d, copy dbs back.", err);
+                }
+            else
+                {
+                MPX_DEBUG2("CMPXHarvesterDatabaseManager::EnsureRamSpaceL DBs using too much RAM space size = %d, copy dbs back.", size);
+                }
+            CopyDBsFromRamL();
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::IsRamDiskLow
+// ---------------------------------------------------------------------------
+//
+TBool CMPXHarvesterDatabaseManager::IsRamDiskLow()
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::IsRamDiskLow()");
+    TBool low = EFalse;
+    TVolumeInfo vol;
+    TInt errRAM = iFs.Volume( vol, iRAMDrive );
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::IsRamDiskLow Get vol err: %d", errRAM);
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::IsRamDiskLow Free RAM Disk Space: %Lu", vol.iFree);
+    if ( errRAM == KErrNone && vol.iFree < KMPMinimumRAMSizeToRun )
+        {
+        low = ETrue;
+        }
+    return low;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::GetTotalDatabasesSize
+// ---------------------------------------------------------------------------
+//
+TInt CMPXHarvesterDatabaseManager::GetTotalDatabasesSize(TInt& aSize, TBool aRamDrive)
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize");
+    TInt err = KErrNone;
+    TInt size=0;
+    TInt count(iDatabases.Count());
+    for ( TInt i = 0; i < count ; ++i )
+        {
+        TDriveUnit drive( iDatabases[i]->GetDbDrive() );
+        // Ignore C drive
+        if ( (TInt)drive == EDriveC )
+            {
+            continue;
+            }
+        // Generate database name.
+        TFileName dbFilename = GenerateHarvesterDbName(drive, aRamDrive);
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize - Database name = %S", &dbFilename);
+        TEntry entry;
+        err = iFs.Entry( dbFilename, entry );
+        if (err == KErrNotFound || err == KErrNotReady)
+            {
+            MPX_DEBUG3("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize - Ignored %S, err = %d", &dbFilename, err);
+            err = KErrNone;
+            continue;
+            }
+        if ( err != KErrNone )
+            {
+            break;
+            }
+        MPX_DEBUG3("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize - Size of Db %S = %d", &dbFilename, entry.iSize);
+        // sum up size
+        size += entry.iSize;
+        }
+    aSize = size;
+    MPX_DEBUG3("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize - Total Size of Dbs = %d, err = %d", size, err);
+    return err;
+    }
+
+#endif // __RAMDISK_PERF_ENABLE
+
 // END OF FILE
 
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Handles all file related activities
-*  Version     : %version: da1mmcf#72.1.14.2.4.1.4.1.2 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: e003sa33#72.1.14.2.4.1.4.1.2.1.3 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -224,6 +224,7 @@
     // Create DRM Notifier and register for AddRemove event
     iDrmNotifier = CDRMNotifier::NewL();
     iDrmNotifier->RegisterEventObserverL( *this, KEventAddRemove );
+    iCurUSBEvent = KErrNotFound;
     }
 
 // ---------------------------------------------------------------------------
@@ -428,7 +429,7 @@
 void CMPXHarvesterFileHandlerImp::HandleSystemEventL( TSystemEvent aEvent,
                                                       TInt aData )
     {
-    MPX_DEBUG2("CMPXHarvesterFileHandlerImp::HandleSystemEventL %i", aEvent);
+    MPX_DEBUG3("CMPXHarvesterFileHandlerImp::HandleSystemEventL %i, drive %d", aEvent, aData);
     // How to handle each event
     //
     // 1: Format and eject, we stop scanning and close only the mmc db
@@ -465,7 +466,7 @@
             User::LeaveIfError(
                 iFs.DriveToChar( driveNum, driveChar ) );
             MPX_DEBUG5 ("CMPXHarvesterFileHandlerImp::HandleSystemEventL - drive %c: is %S, %S and %S",
-                driveChar,
+                (TUint)driveChar,
                 (driveStatus&DriveInfo::EDrivePresent)?&drivePresent:&driveNotPresent,
                 (driveStatus&DriveInfo::EDriveInUse)?&driveInUse:&driveAvailable,
                 (driveStatus&DriveInfo::EDriveFormatted)?&driveFormatted:&driveNotFormatted);
@@ -487,6 +488,7 @@
             iIdle->Cancel();
             CancelScan();
 #ifdef RD_MULTIPLE_DRIVE
+            TBool dbClosed( EFalse );
             for( TInt driveNum = EDriveA; driveNum <= EDriveZ; driveNum++ )
                 {
                 if (driveList[driveNum] && (!iDBManager->IsRemoteDrive(static_cast<TDriveNumber>(driveNum))))
@@ -500,10 +502,27 @@
                         iDBManager->CloseDatabase( (TDriveNumber) driveNum );
                         // Save the drive
                         iRemovedDrive = driveNum;
+                        dbClosed = ETrue;
                         break;
                         }
                     }
                 }
+            
+            if( !dbClosed )
+                {
+                // GetUserVisibleDrives / RFs::DriveList does not return drive at all
+                // if it is dismounted using file server methods. This occurs at least
+                // when removing card using power menu eject. 
+                // If the drive reported as removed is not ready, close db on that drive.
+                TUint driveStatus(0);
+                TInt err( DriveInfo::GetDriveStatus( iFs, aData, driveStatus ) );
+                MPX_DEBUG4("Drive %d status 0x%x, err %d", aData, driveStatus, err);
+                if( err == KErrNotReady )
+                    {
+                    iDBManager->CloseDatabase( (TDriveNumber) aData );
+                    iRemovedDrive = aData;
+                    }
+                }
 #else
             iDBManager->CloseDatabase( (TDriveNumber) aData );
 #endif // RD_MULTIPLE_DRIVE
@@ -529,6 +548,10 @@
             }
         case EUSBMassStorageStartEvent:
             {
+            if (iCurUSBEvent == EUSBMassStorageStartEvent)
+            	{
+            	break;
+            	}            
             iIdle->Cancel();
             CancelScan();
 #ifdef RD_MULTIPLE_DRIVE
@@ -546,6 +569,7 @@
 #else
             iDBManager->CloseDatabase( (TDriveNumber) aData );
 #endif // RD_MULTIPLE_DRIVE
+            iCurUSBEvent = EUSBMassStorageStartEvent;
             break;
             }
         case EUSBMassStorageEndEvent:
@@ -565,25 +589,47 @@
 #else
             iDBManager->OpenDatabaseL( (TDriveNumber) aData );
 #endif // RD_MULTIPLE_DRIVE
+            iCurUSBEvent = EUSBMassStorageEndEvent;
             break;
             }
         case EUSBMTPNotActiveEvent: // deliberate fall through
             {
+            if (iCurUSBEvent == EUSBMTPNotActiveEvent)
+            	{
+            	break;
+            	}
             if ( iRefreshing )
                 {
                 // Notify clients that refresh is cancelled.
                 iCollectionUtil->Collection().NotifyL( EMcMsgRefreshEnd, KErrLocked );
                 }
+            CancelScan();
+            iCurUSBEvent = EUSBMTPNotActiveEvent;
+            break;
             }
         case EUSBMTPStartEvent:
             {
             CancelScan();
+            iCurUSBEvent = EUSBMTPStartEvent;
             // nothing to do, db is needed for MTP
+#ifdef __RAMDISK_PERF_ENABLE
+            // if statement needed because of fall through above.
+            if ( aEvent == EUSBMTPStartEvent )
+                {
+                // copy dbs to ram drive
+                iDBManager->CopyDBsToRamL(ETrue);
+                }
+#endif //__RAMDISK_PERF_ENABLE
             break;
             }
         case EUSBMTPEndEvent:
             {
+            iCurUSBEvent = EUSBMTPEndEvent;
             // nothing to do, db is updated by MTP
+#ifdef __RAMDISK_PERF_ENABLE
+            // copy dbs from ram drive
+            iDBManager->CopyDBsFromRamL();
+#endif //__RAMDISK_PERF_ENABLE
             break;
             }
         case EPowerKeyEjectEvent:
@@ -705,6 +751,10 @@
                 }
             }
         // Add to database
+#ifdef __RAMDISK_PERF_ENABLE
+        // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded max space.
+        iDBManager->EnsureRamSpaceL();
+#endif // __RAMDISK_PERF_ENABLE
         CMPXHarvesterDB& db = iDBManager->GetDatabaseL( ::ExtractDrive( path ) );
         CMPXHarvesterDatabaseTable* table = db.OpenFileL( path );
         CleanupStack::PushL( table );
@@ -721,6 +771,10 @@
 
         // Return the collection that it should belong to.
         r = col.iUid;
+#ifdef __RAMDISK_PERF_ENABLE
+        // This feature will be turned on in the second phase.
+        //TRAP_IGNORE( iDBManager->UpdateDBsFromRamL(0) );
+#endif // __RAMDISK_PERF_ENABLE
         }
     else
         {
@@ -742,6 +796,10 @@
     TInt r(0);
 
     // Open the db
+#ifdef __RAMDISK_PERF_ENABLE
+    // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded max space.
+    iDBManager->EnsureRamSpaceL();
+#endif // __RAMDISK_PERF_ENABLE
     CMPXHarvesterDB& db = iDBManager->GetDatabaseL( ::ExtractDrive(aPath) );
 	MPX_PERF_START( MPX_PERF_HARV_DB_DELETE_SUB1 );
     CMPXHarvesterDatabaseTable* table = db.OpenFileL( aPath );
@@ -1024,6 +1082,11 @@
                 }
             case ECleanupBrokenLink:
                 {
+#ifdef __RAMDISK_PERF_ENABLE
+                // copy dbs to ram drive
+                iDBManager->CopyDBsToRamL();
+#endif //__RAMDISK_PERF_ENABLE
+    
                 MPX_DEBUG1("Start Metadata Scan");
                 iMetadataScanner->Start();
                 break;
@@ -1224,6 +1287,10 @@
 
     // Delete previous table and open the next one
     Reset();
+#ifdef __RAMDISK_PERF_ENABLE
+    // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded max space.
+    iDBManager->EnsureRamSpaceL();
+#endif // __RAMDISK_PERF_ENABLE
     MPX_TRAPD( err, iCurDB = &iDBManager->GetDatabaseL( aDrive ) );
     if ( err != KErrNone )
         {
@@ -1374,6 +1441,10 @@
 
             iAddedCount++;
             }
+#ifdef __RAMDISK_PERF_ENABLE
+        // This feature will be turned on in the second phase.
+        //TRAP_IGNORE( iDBManager->UpdateDBsFromRamL(iAddedCount) );
+#endif // __RAMDISK_PERF_ENABLE
         }
     else if ( addErr == KErrDiskFull )
         {
@@ -1556,6 +1627,10 @@
             User::Leave( KErrDiskFull );
             }
         }
+#ifdef __RAMDISK_PERF_ENABLE
+        // This feature will be turned on in the second phase.
+        //TRAP_IGNORE( iDBManager->UpdateDBsFromRamL(iAddedCount) );
+#endif // __RAMDISK_PERF_ENABLE
 
     MPX_DEBUG1("CMPXHarvesterFileHandlerImp::AddPlaylistToCollectionL --->");
     }
@@ -1922,6 +1997,10 @@
     {
     Reset();
     TDriveNumber num = ::ExtractDrive( aPath );
+#ifdef __RAMDISK_PERF_ENABLE
+    // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded max space.
+    iDBManager->EnsureRamSpaceL();
+#endif // __RAMDISK_PERF_ENABLE
     iCurDB = &iDBManager->GetDatabaseL( num );
     iCurTable = iCurDB->OpenFileL( aPath );
     }
@@ -1950,6 +2029,11 @@
         iDBManager->Rollback();
         }
 
+#ifdef __RAMDISK_PERF_ENABLE
+    // copy dbs from ram drive
+    iDBManager->CopyDBsFromRamL();
+#endif //__RAMDISK_PERF_ENABLE
+
     if( aErr == KErrNone || aErr == KErrCancel )
         {
         aErr = iAddedCount;
--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -337,14 +337,21 @@
         TMetaDataFieldId fieldType;
 
         HBufC* value = NULL;
-        TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
-        CleanupStack::PushL(value);
-        if ( KErrNone != err )
-        {
-            CleanupStack::PopAndDestroy(value);
-            continue;
-        }
-
+        metaCont.FieldIdAt( i, fieldType );  // get the field type
+        
+        // get the value, except for album art
+        if ( fieldType != EMetaDataJpeg )
+           {
+           TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
+           CleanupStack::PushL( value );
+           if ( KErrNone != err )
+               {
+               MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);           
+               CleanupStack::PopAndDestroy( value );
+               continue;
+               }     
+           }
+        
         switch( fieldType )
             {
             case EMetaDataSongTitle:
@@ -445,10 +452,17 @@
                 {
 #ifdef RD_MPX_TNM_INTEGRATION
                 MPX_PERF_START(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
-                HBufC8* value8 = MPXUser::Alloc8L(metaCont.At( i, fieldType ));
+                TPtrC8 ptr8 = metaCont.Field8( EMetaDataJpeg );
+                HBufC8* value8; 
+                TRAPD( err, value8 = ptr8.AllocL() );
+                if ( KErrNone != err )
+                    {
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error jpeg = %i", err);           
+                    User::Leave( err );  
+                    }                 
                 CleanupStack::PushL( value8 );
                 AddMediaAlbumArtL( aMedia, aFile, *value8 );
-                CleanupStack::Pop(value8);
+                CleanupStack::Pop( value8 );
                 MPX_PERF_END(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
 #else //RD_MPX_TNM_INTEGRATION
                 aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName,
@@ -478,7 +492,10 @@
                 break;
                 }
             }
-        CleanupStack::PopAndDestroy(value);
+        if (fieldType != EMetaDataJpeg)
+            {
+            CleanupStack::PopAndDestroy( value );       
+            }
         }
 
     MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL --->" );
@@ -761,16 +778,23 @@
     // get metadata container.
     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
 
-    TPtrC data = metaCont.Field( EMetaDataJpeg );
+    TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg );
     
-    if ( data.Length() )
+    if ( data8.Length() )
         {
         MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
+
 #ifdef RD_MPX_TNM_INTEGRATION
-        HBufC8* value8 = MPXUser::Alloc8L( data );       
+        HBufC8* value8; 
+        TRAPD( err, value8 = data8.AllocL() );
+        if ( KErrNone != err )
+            {
+            MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);           
+            User::Leave( err );  
+            }              
         CleanupStack::PushL( value8 );
         AddMediaAlbumArtL( aMedia, aFile, *value8 );
-        CleanupStack::Pop(value8);
+        CleanupStack::Pop( value8 );
 #else // RD_MPX_TNM_INTEGRATION
         aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
 #endif // RD_MPX_TNM_INTEGRATION          
--- a/mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,15 +15,15 @@
 *
 */
 
-// Version : %version: 4.1.2 %
-
+// Version : %version: 4.1.3 %
 
 
 #include <platform_paths.hrh>
+
 TARGET          mpsettengine.dll
 TARGETTYPE      dll
 UID             0x1000006C 0x101F853D
-VENDORID		VID_DEFAULT
+VENDORID        VID_DEFAULT
 
 SOURCEPATH      ../src
 SOURCE          MPSettingsModel.cpp
@@ -34,16 +34,15 @@
 
 LIBRARY         euser.lib
 LIBRARY         ecom.lib
-LIBRARY         flogger.lib
 
 #if defined(ARMCC)
-deffile ../eabi/ 
+deffile ../eabi/
 #elif defined(WINSCW)
-deffile ../bwinscw/ 
+deffile ../bwinscw/
 #elif defined(WINS)
-deffile ../bwins/ 
+deffile ../bwins/
 #else
-deffile ../bmarm/ 
+deffile ../bmarm/
 #endif
 
 //end of file
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h	Fri Feb 26 18:11:38 2010 +0000
@@ -83,6 +83,7 @@
     
 private:
     CMmMtpDpMetadataAccessWrapper* iWrapper;
+
     };
 
 #endif // CMMMTPDPACCESSSINGLETON_H
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h	Fri Feb 26 18:11:38 2010 +0000
@@ -38,7 +38,7 @@
 class CMmMtpDpMetadataAccessWrapper : public CBase
     {
 public:
-    static CMmMtpDpMetadataAccessWrapper* NewL( RFs& aRfs, 
+    static CMmMtpDpMetadataAccessWrapper* NewL( RFs& aRfs,
         MMTPDataProviderFramework& aFramework );
 
     /**
@@ -48,43 +48,48 @@
 
 public:
     /**
-    * Get all playlists from MPX database in the assigned store
-    * @param aStoreRoot, specify in which drive playlists are stored
-    * @param aPlaylists, return result array
+    * Get all abstract medias from MPX database in the assigned store
+    * @param aStoreRoot, specify in which drive abstract medias are stored
+    * @param aAbstractMedias, return result array
+    * @param aCategory, indicate the category of abstract medias
     */
-    IMPORT_C void GetAllPlaylistL( const TDesC& aStoreRoot,
-        CMPXMediaArray** aPlaylists );
+    IMPORT_C void GetAllAbstractMediaL( const TDesC& aStoreRoot,
+        CMPXMediaArray** aAbstractMedias,
+        TMPXGeneralCategory aCategory );
 
     /**
-    * Get all references of specified playlist
-    * @param aPlaylist, specify of which reference should be get
+    * Get all references of specified abstract medias
+    * @param aAbstractMedia, specify of which reference should be get
     * @param aReferences, return result array which stored handles of all references
     */
-    IMPORT_C void GetAllReferenceL( CMPXMedia* aPlaylist,
+    IMPORT_C void GetAllReferenceL( CMPXMedia* aAbstractMedia,
         CDesCArray& aReferences );
 
     /**
-    * Get an playlist name from CMPXMedia object
-    * @param aPlaylist, specify the source
-    * @param aPlaylistName, return result
+    * Get an abstract media name from CMPXMedia object
+    * @param aAbstractMedia, specify the source
+    * @param aCategory, specify the category
+    * @return, name of the source, ownership transferred
     */
-    IMPORT_C void GetPlaylistNameL( CMPXMedia* aPlaylist, TDes& aPlaylistName );
-
+    IMPORT_C HBufC* GetAbstractMediaNameL( CMPXMedia* aAbstractMedia,
+        TMPXGeneralCategory aCategory );
     /**
-    * Add object (music, video and playlist) info to DB
+    * Add object (music, video, playlist and abstract album) info to DB
     * @param aFullFileName, full file name of file
     * @return void
     */
-    void AddObjectL( const TDesC& aFullFileName, TBool aIsVideo = EFalse );
+    void AddObjectL( const TDesC& aFullFileName, TUint aFormatCode, TUint aSubFormatCode );
 
     /**
-    * Set playlist to DB
-    * @param aPlaylistFileName, full file name of playlist file
+    * Set abstract media to DB
+    * @param aAbstractMediaFileName, full file name of abstract media file
     * @param aRefFileArray, a array to store the full file name of media files
+    * @param aCategory, the category of abstract media
     * @return void
     */
-    IMPORT_C void SetPlaylistL( const TDesC& aPlaylistFileName,
-        CDesCArray& aRefFileArray );
+    IMPORT_C void SetAbstractMediaL( const TDesC& aAbstractMediaFileName,
+        CDesCArray& aRefFileArray,
+        TMPXGeneralCategory aCategory );
 
     /**
     * Gets a piece of metadata from the collection
@@ -140,8 +145,8 @@
     * @parem aHeight,  the height of an object in pixels to set
     */
     void SetImageObjPropL( const TDesC& aFullFileName,
-           const TUint32 aWidth,
-           const TUint32 aHeight );
+        const TUint32 aWidth,
+        const TUint32 aHeight );
 
     /*
     * get image specific properties specific to videos
@@ -150,9 +155,9 @@
     * @parem aHeight,  the height of an object in pixels to get
     */
     void GetImageObjPropL( const TDesC& aFullFileName,
-            TUint32& aWidth,
-            TUint32& aHeight );
-    
+        TUint32& aWidth,
+        TUint32& aHeight );
+
     /**
     * Get Modified object from DB
     * @param aStorageRoot, the root path of storage
@@ -160,16 +165,16 @@
     * @param aRefFileArray, a array to store the full file name of media files
     * @return void
     */
-    IMPORT_C void GetModifiedContentL( const TDesC& aStorageRoot, 
+    IMPORT_C void GetModifiedContentL( const TDesC& aStorageRoot,
         TInt& arrayCount,
         CDesCArray& aRefFileArray );
- 
+
     /**
     * Updated Music DB
     * @return void
     */
-    IMPORT_C void UpdateMusicCollectionL(); 
-    
+    IMPORT_C void UpdateMusicCollectionL();
+
     /*
     * Called when the MTP session is initialised
     */
@@ -179,35 +184,35 @@
     * clean up db resource especially for video dp
     */
     void CloseSessionL();
-    
+
     /**
     * Cleanup database
     */
     IMPORT_C void CleanupDatabaseL();
-    
+
     /**
     * if the playlsit exist in the MPX DB
     * @param aSuid, the suid of playlsit
     */
     TBool IsExistL( const TDesC& aSuid );
-    
+
     // related to dummy files
     /**
     * Add one dummy file to dummy files array
     */
     IMPORT_C void AddDummyFileL( const TDesC& aDummyFileName );
-    
+
     /**
     * Delete one dummy file from dummy files array
-    */    
+    */
     IMPORT_C void DeleteDummyFile( const TDesC& aDummyFileName );
-    
+
     /**
     * Create a Dummy File from the virtual playlist URI
     * @param aPlaylistName, specify the filename of the dummy file
     */
     IMPORT_C void CreateDummyFile( const TDesC& aPlaylistName );
-    
+
 private:
 
     CMmMtpDpMetadataAccessWrapper( RFs& aRfs, MMTPDataProviderFramework& aFramework );
@@ -215,7 +220,7 @@
     void ConstructL();
 
     TMPXGeneralCategory Category( const TUint aFormatCode );
-    
+
     /**
     * Remove all dummy file of which format is "pla", and leave the "m3u"
     */
@@ -227,11 +232,11 @@
     CMmMtpDpMetadataMpxAccess* iMmMtpDpMetadataMpxAccess;
     CMmMtpDpMetadataVideoAccess* iMmMtpDpMetadataVideoAccess;
     TBool iOpenSession;
-    
-    MMTPDataProviderFramework& iFramework;  
-    
-    CDesCArray* iPlaylistArray;
-    
+
+    MMTPDataProviderFramework& iFramework;
+
+    CDesCArray* iAbstractMediaArray;
+
     };
 
 #endif // CMMMTPDPMETADATAACCESSWRAPPER_H
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatampxaccess.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatampxaccess.h	Fri Feb 26 18:11:38 2010 +0000
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Meta data Mpx access
-*
-*/
-
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  Meta data Mpx access
+ *
+ */
 
 #ifndef CMMMTPDPMETADATAMPXACCESS_H
 #define CMMMTPDPMETADATAMPXACCESS_H
@@ -23,16 +22,6 @@
 
 #include "cmmmtpdpperflog.h"
 
-// keep here to avoid warning on urel
-_LIT( KMpxCollectionNewL, "MpxCollectionNewL" );
-_LIT( KMpxCollectionAddL, "MpxCollectionAddL" );
-_LIT( KMpxCollectionGetL, "MpxCollectionGetL" );
-_LIT( KMpxCollectionSetL, "MpxCollectionSetL" );
-_LIT( KMpxCollectionGetPlaylist, "MpxCollectionGetPlaylist" );
-_LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
-_LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
-_LIT( KMpxCollectionFindAllLBeforeAdd, "KMpxCollectionFindAllLBeforeAdd" );
-
 // forward declacration
 class CMPXMedia;
 class CMTPObjectMetaData;
@@ -50,158 +39,173 @@
     } TMetadataTable;
 
 /**
-* Controls access to the music MPX store database.  Allows access to the
-* information about any of the music stored in any of the MPX db's on any
-* of the drives. Also supports deletions and insertions into the db.
-*/
+ * Controls access to the music MPX store database.  Allows access to the
+ * information about any of the music stored in any of the MPX db's on any
+ * of the drives. Also supports deletions and insertions into the db.
+ */
 class CMmMtpDpMetadataMpxAccess : public CBase
     {
 public:
 
-    static CMmMtpDpMetadataMpxAccess* NewL( RFs& aRfs, MMTPDataProviderFramework& aFramework );
+    static CMmMtpDpMetadataMpxAccess* NewL( RFs& aRfs,
+        MMTPDataProviderFramework& aFramework );
 
     /**
-    * Destructor
-    */
+     * Destructor
+     */
     ~CMmMtpDpMetadataMpxAccess();
 
 public:
     /**
-    * Get all playlists from MPX database in the assigned store
-    * @param aStoreRoot, specify in which drive playlists are stored
-    * @param aPlaylists, return result array
-    */
-    void GetAllPlaylistL( const TDesC& aStoreRoot, CMPXMediaArray** aPlaylists );
+     * Get all abstract medias from MPX database in the assigned store
+     * @param aStoreRoot, specify in which drive abstract medias are stored
+     * @param aAbstractMedias, return result array
+     * @param aCategory, indicate the category of abstract medias
+     */
+    void GetAllAbstractMediaL( const TDesC& aStoreRoot,
+        CMPXMediaArray** aAbstractMedias,
+        TMPXGeneralCategory aCategory );
 
     /**
-    * Get all references of specified playlist
-    * @param aPlaylist, specify of which reference should be get
-    * @param aReferences, return result array which stored handles of all references
-    */
-    void GetAllReferenceL( CMPXMedia* aPlaylist, CDesCArray& aReferences );
+     * Get all references of specified abstract media
+     * @param aAbstractMedia, specify of which reference should be get
+     * @param aReferences, return result array which stored handles of all references
+     */
+    void GetAllReferenceL( CMPXMedia* aAbstractMedia,
+        CDesCArray& aReferences );
 
     /**
-    * Get an playlist name from CMPXMedia object
-    * @param aPlaylist, specify the source
-    * @param aPlaylistName, return result
-    */
-    void GetPlaylistNameL( CMPXMedia* aPlaylist, TDes& aPlaylistName );
+     * Get an abstract media name from CMPXMedia object
+     * @param aAbstractMedia, specify the source
+     * @param aCategory, specify the category
+     * @return, name of the source, ownership transferred
+     */
+    HBufC* CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL( CMPXMedia* aAbstractMedia,
+        TMPXGeneralCategory aCategory );
 
     /**
-    * Adds Songs info to Mpx DB
-    * @param aFullFileName, full file name of Media file
-    */
+     * Adds Songs info to Mpx DB
+     * @param aFullFileName, full file name of Media file
+     */
     void AddSongL( const TDesC& aFullFileName );
 
     /**
-    * Adds Playlist to Mpx DB
-    * @param aFullFileName, full file name of Playlist file
-    */
-    void AddPlaylistL( const TDesC& aFullFileName );
+     * Adds abstract media to Mpx DB
+     * @param aFullFileName, full file name of abstract media file
+     * @param aCategory, indicate the category of abstract media
+     */
+    void AddAbstractMediaL( const TDesC& aFullFileName,
+        TMPXGeneralCategory aCategory );
 
     /**
-    * Set playlist to DB
-    * @param aPlaylistFileName, full file name of playlist file
-    * @param aRefFileArray, a array to store the full file name of media files
-    */
-    void SetPlaylistL( const TDesC& aPlaylistFileName,
-            CDesCArray& aRefFileArray );
+     * Set abstract media to DB
+     * @param aAbstractMediaFileName, full file name of abstract media file
+     * @param aRefFileArray, a array to store the full file name of media files
+     * @param aCategory, indicate the category of abstract media
+     */
+    void SetAbstractMediaL( const TDesC& aAbstractMediaFileName,
+        CDesCArray& aRefFileArray,
+        TMPXGeneralCategory aCategory );
 
     void GetObjectMetadataValueL( const TUint16 aPropCode,
-            MMTPType& aNewData,
-            const CMTPObjectMetaData& aObjectMetaData );
+        MMTPType& aNewData,
+        const CMTPObjectMetaData& aObjectMetaData );
 
     /**
-    * Set object property and updated object in DB according property code,
-    * only for update, not for creation
-    * @param aPropCode, property code of aObjectMetaData
-    * @param aNewData, object property value which will be set into
-    *     aObjectMetaData
-    * @param aObjectMetaData, owner of the property which should be
-    *     updated into database
-    */
+     * Set object property and updated object in DB according property code,
+     * only for update, not for creation
+     * @param aPropCode, property code of aObjectMetaData
+     * @param aNewData, object property value which will be set into
+     *     aObjectMetaData
+     * @param aObjectMetaData, owner of the property which should be
+     *     updated into database
+     */
     void SetObjectMetadataValueL( const TUint16 aPropCode,
-            const MMTPType& aNewData,
-            const CMTPObjectMetaData& aObjectMetaData );
+        const MMTPType& aNewData,
+        const CMTPObjectMetaData& aObjectMetaData );
 
     /**
-    * Set object property and updated object in DB according property code,
-    * only for update, not for creation
-    * @param aPropCode, property code of aObjectMetaData
-    * @param aNewData, object property value which will be set into
-    *     aObjectMetaData
-    * @param aSuid, full file name of object of which properties need to set
-    */
+     * Set object property and updated object in DB according property code,
+     * only for update, not for creation
+     * @param aPropCode, property code of aObjectMetaData
+     * @param aNewData, object property value which will be set into
+     *     aObjectMetaData
+     * @param aSuid, full file name of object of which properties need to set
+     */
     void SetObjectMetadataValueL( const TUint16 aPropCode,
-            const MMTPType& aNewData,
-            const TDesC& aSuid );
+        const MMTPType& aNewData,
+        const TDesC& aSuid );
 
-    CMPXMedia* FindWMPMediaLC( TMPXAttributeData aWMPMediaID, TBool aFlag );
+    CMPXMedia* FindWMPMediaLC( TMPXAttributeData aWMPMediaID,
+        TBool aFlag );
 
     /**
-    * Update the Sync flag for those not synchronized, Update the Modified
-    * flag for those have been modified, and delete the stale records for
-    * files that have been deleted.
-    */
+     * Update the Sync flag for those not synchronized, Update the Modified
+     * flag for those have been modified, and delete the stale records for
+     * files that have been deleted.
+     */
     void UpdateMusicCollectionL();
 
     /**
-    * Remove the file from MPX DB
-    * @param aFullFileName, the file to remove
-    * @param aCategory, the category of the file
-    */
-    void DeleteObjectL( const TDesC& aFullFileName, TMPXGeneralCategory aCategory );
+     * Remove the file from MPX DB
+     * @param aFullFileName, the file to remove
+     * @param aCategory, the category of the file
+     */
+    void DeleteObjectL( const TDesC& aFullFileName,
+        TMPXGeneralCategory aCategory );
 
     /**
-    * Rename the filename onto MPX DB
-    * @param aOldFileName, the old file to rename
-    * @param aNewFileName, the new file name
-    * @param aFormatCode, the format of object
-    */
-    void RenameObjectL( const TDesC& aOldFileName, const TDesC& aNewFileName,
-            TUint aFormatCode );
+     * Rename the filename onto MPX DB
+     * @param aOldFileName, the old file to rename
+     * @param aNewFileName, the new file name
+     * @param aFormatCode, the format of object
+     */
+    void RenameObjectL( const TDesC& aOldFileName,
+        const TDesC& aNewFileName,
+        TUint aFormatCode );
 
     /**
-    * Set current  drive info
-    * @param aStorageRoot, current drive info
-    */
+     * Set current  drive info
+     * @param aStorageRoot, current drive info
+     */
     void SetStorageRootL( const TDesC& aStorageRoot );
 
     /**
-    * Get modified content
-    * @param arrayCount, count of modified content
-    * @param aModifiedcontent, modified files name list
-    */
-    void GetModifiedContentL( TInt& arrayCount, CDesCArray& aModifiedcontent );
-    
+     * Get modified content
+     * @param arrayCount, count of modified content
+     * @param aModifiedcontent, modified files name list
+     */
+    void GetModifiedContentL( TInt& arrayCount,
+        CDesCArray& aModifiedcontent );
+
     /**
-    * if the playlsit exist in the MPX DB
-    * @param aSuid, the suid of playlsit
-    */
+     * if the playlsit exist in the MPX DB
+     * @param aSuid, the suid of playlsit
+     */
     TBool IsExistL( const TDesC& aSuid );
 
 private:
-    CMmMtpDpMetadataMpxAccess( RFs& aFs, MMTPDataProviderFramework& aFramework );
+    CMmMtpDpMetadataMpxAccess( RFs& aFs,
+        MMTPDataProviderFramework& aFramework );
 
     void ConstructL();
 
     void SetDefaultL( CMPXMedia& aMediaProp );
 
     /**
-    * Set property value into MPX object according to property code,
-    * only used by member functions of this class.
-    * @param aPropCode, specify property code of aMediaProp
-    * @param aNewData, object property value which will be set into
-    *     aObjectMetaData
-    * @param aObjectMetaData, owner of the property which should be
-    *     inserted or updated into database
-    */
+     * Set property value into MPX object according to property code,
+     * only used by member functions of this class.
+     * @param aPropCode, specify property code of aMediaProp
+     * @param aNewData, object property value which will be set into
+     *     aObjectMetaData
+     * @param aObjectMetaData, owner of the property which should be
+     *     inserted or updated into database
+     */
     void SetMetadataValueL( const TUint16 aPropCode,
-            const MMTPType& aNewData,
-            CMPXMedia& aMediaProp );
+        const MMTPType& aNewData,
+        CMPXMedia& aMediaProp );
 
-    TMPXAttributeData MpxAttribFromPropL( const CMPXMedia& aMedia,
-            const TUint16 aPropCode );
+    TMPXAttributeData MpxAttribFromPropL( const TUint16 aPropCode );
 
     MMPXCollectionHelper* CollectionHelperL();
 
@@ -212,8 +216,8 @@
     TBuf<KStorageRootMaxLength> iStoreRoot;
 
     MMPXCollectionHelper* iCollectionHelper;
-    
-    MMTPDataProviderFramework& iFramework;  
+
+    MMTPDataProviderFramework& iFramework;
 
 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
     CMmMtpDpPerfLog* iPerfLog;
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.h	Fri Feb 26 18:11:38 2010 +0000
@@ -38,47 +38,46 @@
 
 class TMmMtpDpOverflowHandler : public TDesOverflow
     {
-    public:
-        
-        inline void SetOwner( CMmMtpDpPerfLog* aOwner );
-        inline void Overflow( TDes& aDes );
-         
-    private:
-    
-        CMmMtpDpPerfLog* iOwner;
+public:
+    inline void SetOwner( CMmMtpDpPerfLog* aOwner );
+    inline void Overflow( TDes& aDes );
+
+private:
+    CMmMtpDpPerfLog* iOwner;
+
     };
 
 class CMmMtpDpPerfLog : public CBase
     {
-    public:
-        
-        inline static CMmMtpDpPerfLog* NewL( const TDesC& aTitle );
-        inline ~CMmMtpDpPerfLog();
-        
-        inline void Write( const TDesC& aText);
-        inline void WriteFormat( TRefByValue<const TDesC> aFmt, ... );
+public:
+
+    inline static CMmMtpDpPerfLog* NewL( const TDesC& aTitle );
+    inline ~CMmMtpDpPerfLog();
+
+    inline void Write( const TDesC& aText );
+    inline void WriteFormat( TRefByValue<const TDesC> aFmt, ... );
+
+    inline void Start( const TDesC& aDescription );
+    inline void Stop( const TDesC& aDescription );
+
+private:
 
-        inline void Start( const TDesC& aDescription );
-        inline void Stop( const TDesC& aDescription );
-        
-    private:
-        
-        inline CMmMtpDpPerfLog();
-        inline void ConstructL( const TDesC& aTitle );
+    inline CMmMtpDpPerfLog();
+    inline void ConstructL( const TDesC& aTitle );
+
+private:
+
+    TMmMtpDpOverflowHandler iOverflowHandler;
 
-    private:
-        
-        TMmMtpDpOverflowHandler iOverflowHandler;
+    HBufC16* iTitle;
+    CDesC16ArrayFlat iDescription;
+    CArrayFixFlat<TUint32> iStartTick;
+    CArrayFixFlat<TUint64> iTotalTime;
+    CArrayFixFlat<TUint32> iTotalUsage;
 
-        HBufC16* iTitle;
-        CDesC16ArrayFlat iDescription;
-        CArrayFixFlat<TUint32> iStartTick;
-        CArrayFixFlat<TUint64> iTotalTime;
-        CArrayFixFlat<TUint32> iTotalUsage;
-        
-        TInt iNTickPeriod;
-        TInt iLastIndex;
-        
+    TInt iNTickPeriod;
+    TInt iLastIndex;
+
     };
 
 #include "cmmmtpdpperflog.inl"
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.inl	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.inl	Fri Feb 26 18:11:38 2010 +0000
@@ -189,7 +189,7 @@
         {
         WriteFormat( _L( "<PERFLOG>%S-%S, usage = %u, last time = %u.%S ms, total time = %u.%S ms, average time = %u.%S ms</PERFLOG>" ), 
             iTitle, 
-            &iDescription[index], 
+            &iDescription[index],
             iTotalUsage[index], 
             lastTimeValue, 
             &lastTimeDecimal, 
@@ -202,7 +202,7 @@
         {
         WriteFormat( _L( "<PERFLOG>%S-%S, usage = %u, last time = %u.%S ms, total time = %u%u.%S ms, average time = %u.%S ms</PERFLOG>" ), 
             iTitle, 
-            &iDescription[index], 
+            &iDescription[index],
             iTotalUsage[index], 
             lastTimeValue, 
             &lastTimeDecimal, 
--- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdpconfig.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdpconfig.h	Fri Feb 26 18:11:38 2010 +0000
@@ -20,23 +20,27 @@
 #define MMMTPDPCONFIG_H
 
 class CMmMtpDpMetadataAccessWrapper;
+class CPropertySettingUtility;
+class CDescriptionUtility;
 
 class MMmMtpDpConfig
     {
 public:
     /**
     * Get supported format from special data provider
-    * @param aArray         The array which is used to store supported format
+    * @return The array which is used to store supported format
     */
     virtual const RArray<TUint>* GetSupportedFormat() const = 0;
 
     /**
-    *
+    * Get the arry of property code which is inline with the format code
+    * @return The array of what specified format supported
     */
     virtual const RArray<TUint>* GetSupportedPropertiesL( TUint32 aFormatCode ) const = 0;
 
     /**
-    *
+    * Get the array of property code what dp supported all
+    * @return The array of what dp supported
     */
     virtual const RArray<TUint>* GetAllSupportedProperties() const = 0;
 
@@ -46,10 +50,22 @@
     */
     virtual TUint32 GetDefaultStorageIdL() const = 0;
 
-    /*
-    *
+    /**
+    * Get db handler wrapper
+    * @return wrapper references
     */
     virtual CMmMtpDpMetadataAccessWrapper& GetWrapperL() = 0;
+
+    /**
+    * Get the utility to setting properties
+    */
+    virtual CPropertySettingUtility* PropSettingUtility() = 0;
+
+    /**
+    * Get the utiltiy to setting descriptions
+    */
+    virtual CDescriptionUtility* DescriptionUtility() = 0;
+
     };
 
 #endif // MMMTPDPCONFIG_H
--- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h	Fri Feb 26 18:11:38 2010 +0000
@@ -45,6 +45,13 @@
     static TBool HasMetadata( TUint16 aObjFormatCode );
 
     /**
+    * Utility function to decide if there is any reference
+    * @param aObjFormatCode, object format code
+    * @return TBool for decide if there are some references
+    */
+    static TBool HasReference( TUint16 aObjFormatCode );
+
+    /**
     * Utility function to decide if the file is video.
     * @param aFullFileName, the full file name
     * @return TBool for decide if the file is video
@@ -61,6 +68,15 @@
     static TBool IsVideoL( const TDesC& aFullFileName, const MMTPDataProviderFramework& aFramework );
 
     /**
+    * Utility function to decide if the file is video.
+    * For internal use, this is fast version by querying framework DB
+    * @param aFormatCode,
+    * @param aSubFormatCode,
+    * @return TBool for decide if the file is video
+    */
+    static TBool IsVideoL( TUint aFormatCode, TUint aSubFormatCode );
+
+    /**
     * Check the filename length to see if it exceeds Symbian 256 limit.
     * @param aPathName, the path name of the file
     * @param aFileName, the file to be check
--- a/mmappcomponents/mmmtpdataprovider/inc/tobjectdescription.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/tobjectdescription.h	Fri Feb 26 18:11:38 2010 +0000
@@ -32,7 +32,7 @@
 
 enum TGroupCodeType
     {
-    EGroupCodeGeneral     = 0x00000001,
+    EGroupCodeGeneral    = 0x00000001,
     EGroupCodeMediaDB    = 0x00FF0000,
     EGroupCodeNotDefined = 0xFFFFFFFF   // TODO: need to reconsider
     };
@@ -45,54 +45,55 @@
 
 static const TObjectDescription KPropGroupMapTable[] =
     {
-        // First group, mandatory for all
-        { EMTPObjectPropCodeStorageID,      EGroupCodeGeneral },
-        { EMTPObjectPropCodeObjectFormat,   EGroupCodeGeneral },
+        // The first group, mandatory for all
+        { EMTPObjectPropCodeStorageID,        EGroupCodeGeneral },
+        { EMTPObjectPropCodeObjectFormat,     EGroupCodeGeneral },
         { EMTPObjectPropCodeProtectionStatus, EGroupCodeGeneral },
-        { EMTPObjectPropCodeObjectSize,     EGroupCodeGeneral },
-        { EMTPObjectPropCodeObjectFileName, EGroupCodeGeneral },
-        { EMTPObjectPropCodeParentObject,   EGroupCodeGeneral },
+        { EMTPObjectPropCodeObjectSize,       EGroupCodeGeneral },
+        { EMTPObjectPropCodeObjectFileName,   EGroupCodeGeneral },
+        { EMTPObjectPropCodeParentObject,     EGroupCodeGeneral },
         { EMTPObjectPropCodePersistentUniqueObjectIdentifier,
-                                            EGroupCodeGeneral },
-        { EMTPObjectPropCodeNonConsumable,  EGroupCodeGeneral },
+                                              EGroupCodeGeneral },
+        { EMTPObjectPropCodeNonConsumable,    EGroupCodeGeneral },
 
-        // First group, addtional for all
-        { EMTPObjectPropCodeDateCreated,    EGroupCodeGeneral },
-        { EMTPObjectPropCodeDateModified,   EGroupCodeGeneral },
+        // The first group, addtional for all
+        { EMTPObjectPropCodeDateCreated,      EGroupCodeGeneral },
+        { EMTPObjectPropCodeDateModified,     EGroupCodeGeneral },
 
-        // Second group, additional for all
-        { EMTPObjectPropCodeName,           EGroupCodeMediaDB },
-        { EMTPObjectPropCodeDateAdded,      EGroupCodeMediaDB },
+        // The second group, additional for all
+        { EMTPObjectPropCodeName,             EGroupCodeMediaDB },
+        { EMTPObjectPropCodeDateAdded,        EGroupCodeMediaDB },
 
-        // Second group, mandatory for audio
-        { EMTPObjectPropCodeArtist,         EGroupCodeMediaDB },
-        { EMTPObjectPropCodeTrack,          EGroupCodeMediaDB },
-        { EMTPObjectPropCodeGenre,          EGroupCodeMediaDB },
-        { EMTPObjectPropCodeAlbumName,      EGroupCodeMediaDB },
-        { EMTPObjectPropCodeSampleRate,     EGroupCodeMediaDB },
+        // The second group, mandatory for audio
+        { EMTPObjectPropCodeArtist,           EGroupCodeMediaDB },
+        { EMTPObjectPropCodeTrack,            EGroupCodeMediaDB },
+        { EMTPObjectPropCodeGenre,            EGroupCodeMediaDB },
+        { EMTPObjectPropCodeAlbumName,        EGroupCodeMediaDB },
+        { EMTPObjectPropCodeSampleRate,       EGroupCodeMediaDB },
         { EMTPObjectPropCodeNumberOfChannels, EGroupCodeMediaDB },
-        { EMTPObjectPropCodeAudioWAVECodec, EGroupCodeMediaDB },
-        { EMTPObjectPropCodeAudioBitRate,   EGroupCodeMediaDB },
-        { EMTPObjectPropCodeDuration,       EGroupCodeMediaDB },
+        { EMTPObjectPropCodeAudioWAVECodec,   EGroupCodeMediaDB },
+        { EMTPObjectPropCodeAudioBitRate,     EGroupCodeMediaDB },
+        { EMTPObjectPropCodeDuration,         EGroupCodeMediaDB },
         { EMTPObjectPropCodeOriginalReleaseDate, EGroupCodeMediaDB },
-        { EMTPObjectPropCodeDescription,    EGroupCodeMediaDB },
-        { EMTPObjectPropCodeComposer,       EGroupCodeMediaDB },
+        { EMTPObjectPropCodeDescription,      EGroupCodeMediaDB },
+        { EMTPObjectPropCodeComposer,         EGroupCodeMediaDB },
 
-        // Second group, mandatory for video
-        { EMTPObjectPropCodeWidth,          EGroupCodeMediaDB },
-        { EMTPObjectPropCodeHeight,         EGroupCodeMediaDB },
-        { EMTPObjectPropCodeUseCount,       EGroupCodeMediaDB },
-        { EMTPObjectPropCodeScanType,       EGroupCodeMediaDB },
+        // The second group, mandatory for video
+        { EMTPObjectPropCodeWidth,            EGroupCodeMediaDB },
+        { EMTPObjectPropCodeHeight,           EGroupCodeMediaDB },
+        { EMTPObjectPropCodeUseCount,         EGroupCodeMediaDB },
+        { EMTPObjectPropCodeScanType,         EGroupCodeMediaDB },
         { EMTPObjectPropCodeVideoFourCCCodec, EGroupCodeMediaDB },
-        { EMTPObjectPropCodeVideoBitRate,   EGroupCodeMediaDB },
+        { EMTPObjectPropCodeVideoBitRate,     EGroupCodeMediaDB },
         { EMTPObjectPropCodeFramesPerThousandSeconds, EGroupCodeMediaDB },
         { EMTPObjectPropCodeKeyFrameDistance, EGroupCodeMediaDB },
-        { EMTPObjectPropCodeEncodingProfile, EGroupCodeMediaDB },
+        { EMTPObjectPropCodeEncodingProfile,  EGroupCodeMediaDB },
 
-        // Second group, additional for video
-        { EMTPObjectPropCodeParentalRating, EGroupCodeMediaDB },
-        { EMTPObjectPropCodeDRMStatus, EGroupCodeMediaDB },
-        { EMTPExtObjectPropCodeOmaDrmStatus, EGroupCodeMediaDB }
+        // The second group, additional for video
+        { EMTPObjectPropCodeParentalRating,   EGroupCodeMediaDB },
+        { EMTPObjectPropCodeDRMStatus,        EGroupCodeMediaDB },
+        { EMTPExtObjectPropCodeOmaDrmStatus,  EGroupCodeMediaDB }
     };
 
 #endif // TOBJECTDESCRIPTION_H
+
Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpstub.pkg has changed
Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdate.pkg has changed
Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdatedebug.pkg has changed
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/data/abstractmediamtpdataprovider_config.rss	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/data/abstractmediamtpdataprovider_config.rss	Fri Feb 26 18:11:38 2010 +0000
@@ -11,13 +11,12 @@
 *
 * Contributors:
 *
-* Description:  DP configuration information for abstract media dp on armv5 platform
+* Description:  DP configuration information for abstract media dp
 *
 */
 
 
 #include <mtp/mtpdataproviderconfig.rh>
-#include "abstractmediamtpdataprovider_config.rh"
 
 RESOURCE MTP_DATA_PROVIDER dpConfig
     {
@@ -27,14 +26,6 @@
     supported_modes = KMTPModeMTP;
     server_name = "";
     server_image_name = "";
-    opaque_resource = "folderConfig";
+    opaque_resource = 0;
     enumeration_phase = 12;
     }
-
-RESOURCE ABSTRACTMEDIAMTPDATAPROVIDER_CONFIG folderConfig
-    {
-    abstractmedia_drive = 4;
-    }
-
-
-
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/group/abstractmediamtpdataprovider.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/group/abstractmediamtpdataprovider.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -40,19 +40,16 @@
 SOURCE    abstractmediamtpdataprovidercontrollerimp.cpp
 SOURCE    abstractmediamtpdataproviderprocessor.cpp
 SOURCE    cabstractmediamtpdataproviderenumerator.cpp
-SOURCE    cabstractmediamtpdataprovidergetobjectpropdesc.cpp
-SOURCE    cabstractmediamtpdataprovidergetinterdependentpropdesc.cpp
 SOURCE    cabstractmediamtpdataprovidergetobjectpropvalue.cpp
 SOURCE    cabstractmediamtpdataprovidergetobjectproplist.cpp
 SOURCE    cabstractmediamtpdataprovidersetobjectpropvalue.cpp
-SOURCE    cabstractmediamtpdataprovidersetobjectproplist.cpp
 SOURCE    cabstractmediamtpdataprovidersetobjectreferences.cpp
 SOURCE    cabstractmediamtpdataproviderabstractmediapreference.cpp
 SOURCE    cabstractmediamtpdataprovidercopyobject.cpp
 SOURCE    cabstractmediamtpdataprovidermoveobject.cpp
 SOURCE    cabstractmediamtpdataproviderrenameobject.cpp
-SOURCE    cabstractmediamtpdataprovidersendobject.cpp
-SOURCE    cabstractmediamtpdataprovidergetformatcapabilities.cpp
+SOURCE    cabstractmediamtpdataproviderpropertysettingutility.cpp
+SOURCE    cabstractmediamtpdataproviderdescriptionutility.cpp
 
 
 SOURCEPATH        ../data 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataprovider_config.rh	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Resource headers for project abstractmediadp
-*
-*/
-
-
-#ifndef ABSTRACTMEDIAMTPDATAPROVIDER_RH
-#define ABSTRACTMEDIAMTPDATAPROVIDER_RH
-
-// --------------------------------------------------------------------
-// Defines the resource type for abstractmedia dp specific configuration data
-// --------------------------------------------------------------------
-//
-STRUCT ABSTRACTMEDIAMTPDATAPROVIDER_CONFIG
-    {
-    LONG abstractmedia_drive; // Symbian drive number @see TDrive
-    LTEXT abstractmedia_folder_root;
-    LTEXT folder_exclusion_list[]; // What to exclude
-    }
-
-#endif // ABSTRACTMEDIAMTPDATAPROVIDER_RH
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderconst.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderconst.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,11 +11,10 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
-
 #ifndef ABSTRACTMEDIAMTPDATAPROVIDERCONST_H
 #define ABSTRACTMEDIAMTPDATAPROVIDERCONST_H
 
@@ -55,39 +54,14 @@
     EMTPOpCodeGetObjectPropList,
     EMTPOpCodeSetObjectPropList,
     EMTPOpCodeGetInterdependentPropDesc,
-    
+
     EMTPExtOpCodeAbstractMediaPreference, // 0x9203
-    
+
     EMTPOpCodeCopyObject,
     EMTPOpCodeMoveObject,
-    
-    EMTPOpCodeSendObjectPropList, 
+
+    EMTPOpCodeSendObjectPropList,
     EMTPOpCodeGetFormatCapabilities
     };
 
-#if 0
-/**
-* define all the object properties that are supported by the abstract media data provider
-*/
-static const TUint16 KAbstractMediaMtpDataProviderSupportedProperties[] =
-    {
-    // Mandatory for all objects
-    EMTPObjectPropCodeStorageID,
-    EMTPObjectPropCodeObjectFormat,
-    EMTPObjectPropCodeProtectionStatus,
-    EMTPObjectPropCodeObjectSize,
-    EMTPObjectPropCodeObjectFileName,
-    EMTPObjectPropCodeParentObject,
-    EMTPObjectPropCodePersistentUniqueObjectIdentifier,
-    EMTPObjectPropCodeName,
-    EMTPObjectPropCodeNonConsumable,
-
-    // additional for all
-    EMTPObjectPropCodeDateAdded,
-    EMTPObjectPropCodeDateCreated,
-    EMTPObjectPropCodeDateModified,
-    };
-#endif
-
-
 #endif // ABSTRACTMEDIAMTPDATAPROVIDERCONST_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderprocessor.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderprocessor.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovider.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovider.h	Fri Feb 26 18:11:38 2010 +0000
@@ -25,7 +25,6 @@
 #include "mmmtpenumerationcallback.h"
 #include "mmmtpdpconfig.h"
 
-
 // Forward declaration
 class MMmRequestProcessor;
 class CAbstractMediaMtpDataProviderEnumerator;
@@ -66,10 +65,21 @@
     TUint32 GetDefaultStorageIdL() const;
 
     /**
-    * @return the reference of CMmMtpDpMetadataAccessWrapper to enumerator
+    * Get db handler wrapper
+    * @return wrapper references
     */
     CMmMtpDpMetadataAccessWrapper& GetWrapperL();
 
+    /**
+    * @return The utility to setting properties
+    */
+    CPropertySettingUtility* PropSettingUtility();
+
+    /**
+    * @return The utiltiy to setting descriptions
+    */
+    CDescriptionUtility* DescriptionUtility();
+
 protected:
     // from CMTPDataProviderPlugin
     void Cancel();
@@ -97,7 +107,7 @@
 
     /**
     * Notify the data provider that the session has been closed
-    * @param aConnection    The connection of the sesssion
+    * @param aSession    The connection of the sesssion
     */
     void SessionClosedL( const TMTPNotificationParamsSessionChange& aSession );
 
@@ -175,6 +185,7 @@
     RArray<TUint32> iPendingEnumerations;
 
     TInt iActiveProcessor;
+    TBool iActiveProcessorRemoved;
 
     CAbstractMediaMtpDataProviderRenameObject *iRenameObject;
     TBool iIsSessionOpen;
@@ -183,6 +194,9 @@
 
     RArray<TUint> iSupportedProperties;
 
+    CPropertySettingUtility* iPropSettingUtility;
+    CDescriptionUtility* iDescriptionUtility;
+
     };
 
 #endif // CABSTRACTMEDIAMTPDATAPROVIDER_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderabstractmediapreference.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderabstractmediapreference.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidercopyobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidercopyobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
@@ -65,10 +65,6 @@
         TUint32 aHandle,
         const CMTPObjectMetaData& aObject );
 
-    TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement );
-
     };
 
 #endif // CABSTRACTMEDIAMTPDATAPROVIDERCOPYOBJECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderdescriptionutility.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Abstract media dp specific property description construction utility.
+*              Used by all request processors which related to property description
+*
+*/
+
+#ifndef CABSTRACTMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H
+#define CABSTRACTMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H
+
+#include "cdescriptionutility.h"
+
+class CMTPTypeInterdependentPropDesc;
+class CMTPTypeObjectPropDesc;
+
+class CAbstractMediaMtpDataProviderDescriptionUtility : public CDescriptionUtility
+    {
+public:
+    static CAbstractMediaMtpDataProviderDescriptionUtility* NewL();
+
+    ~CAbstractMediaMtpDataProviderDescriptionUtility();
+
+private:
+    CAbstractMediaMtpDataProviderDescriptionUtility();
+
+public:
+    /**
+     * Construct media dp specific interdependent property description.
+     * according to assigned format code.
+     * @param aFormatCode
+     * @return Interdependent property description dataset.
+     */
+    CMTPTypeInterdependentPropDesc* NewInterdepentPropDescL( MMmMtpDpConfig& aDpConfig, TUint aFormatCode );
+
+    /**
+     * Construct media dp specific property description
+     * according to assigned format code and property code.
+     * @param aFormatCode
+     * @param aPropCode
+     * @return Property description dataset.
+     */
+    CMTPTypeObjectPropDesc* NewSpecificPropDescL( TUint aFormatCode, TUint16 aPropCode );
+
+private:
+    // Example for further extension
+    /**
+     * Construct audio wave codec property description.
+     * @param aFormatCode
+     * @return Property description dataset of audio wave codec.
+     */
+    // CMTPTypeObjectPropDesc* NewAudioWaveCodecPropDescL( TUint aFormatCode );
+
+    };
+
+#endif // CABSTRACTMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h	Fri Feb 26 18:11:38 2010 +0000
@@ -25,15 +25,6 @@
 #include "mmmtpenumerationcallback.h"
 #include "cmmmtpdpperflog.h"
 
-// keep here to avoid warning on urel
-_LIT( KMpxGetAllPlaylist, "MpxGetAllPlaylist" );
-_LIT( KMpxGetPlaylistName, "MpxGetPlaylistName" );
-_LIT( KMpxQueryPlaylistReference, "MpxQueryPlaylistReference" );
-_LIT( KObjectManagerObjectUid, "ObjectManagerObjectUid" );
-_LIT( KObjectManagerInsert, "ObjectManagerInsert" );
-_LIT( KObjectManagerHandle, "ObjectManagerHandle" );
-_LIT( KReferenceManagerSetReference, "ReferenceManagerSetReference" );
-
 // Forward declarations
 class MMTPDataProviderFramework;
 class MMTPObjectMgr;
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetformatcapabilities.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#ifndef CABSTRACTMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H
-#define CABSTRACTMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H
-
-#include "cgetformatcapabilities.h"
-
-// forward declaration
-class MMmMtpDpConfig;
-class CMTPTypeObjectPropDesc;
-class CMTPTypeInterdependentPropDesc;
-class CMTPTypeObjectPropDesc;
-class CMTPTypeString;
-class CGetFormatCapabilities;
-
-/**
-* Defines abstract media data provider GetFormatCapabilities
-*/
-class CAbstractMediaMtpDataProviderGetFormatCapabilities : public CGetFormatCapabilities
-    {
-public:
-
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-/*    *
-     * @param aFramework, The data provider framework
-     * @param aConnection, The connection from which the request comes
-     * @param aWrapper Medadata access
-     * @return A pointer to the created request processor object
-
-    static MMmRequestProcessor* NewLC( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );*/
-
-    /**
-    * Destructor
-    */
-    ~CAbstractMediaMtpDataProviderGetFormatCapabilities();
-
-protected:
-    // from CGetFormatCapabilities, override from baseclass
-
-    /**
-    * Service specific object property
-    * @param aPropCode, The prop code
-    * @return MTPType object propdesc
-    */
-    CMTPTypeObjectPropDesc* ServiceSpecificPropertyDescL( TUint16 aPropCode );
-
-    /**
-    * Service interdepent propdesc
-    * @param aFormatCode, The format code
-    * @return MTPTypeInterdependentPropDesc
-    */
-    void ServiceInterdepentPropDescL();
-
-private:
-
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    */
-    CAbstractMediaMtpDataProviderGetFormatCapabilities( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * two-phase construction
-    */
-    void ConstructL();
-    };
-
-#endif // CAbstractMediaMTPDATAPROVIDERGETFORMATCAPABILITIES_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetinterdependentpropdesc.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#ifndef CABSTRACTMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H
-#define CABSTRACTMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H
-
-#include "crequestprocessor.h"
-
-class CMTPTypeInterdependentPropDesc;
-class MMmMtpDpConfig;
-
-/**
-* Defines abstract media data provider GetInterdependentPropDesc request processor
-*/
-class CAbstractMediaMtpDataProviderGetInterdependentPropDesc: public CRequestProcessor
-    {
-public:
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CAbstractMediaMtpDataProviderGetInterdependentPropDesc();
-
-private:
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    */
-    CAbstractMediaMtpDataProviderGetInterdependentPropDesc( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection );
-
-    /**
-    * two-phase construction
-    */
-    void ConstructL();
-
-protected:
-    // from CRequestProcessor
-    TMTPResponseCode CheckRequestL();
-
-    void ServiceL();
-
-private:
-    void ServiceAudioWaveCodecL();
-
-    void ServiceAudioBitrateL();
-
-    void SetFormForResponseL( TUint16 aPropertyCode, const MMTPType& aForm );
-
-private:
-    /** Dataset to store the prop descriptions*/
-    CMTPTypeInterdependentPropDesc* iDataset;
-
-    TUint32 iFormatCode;
-
-    };
-
-#endif // CABSTRACTMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetobjectpropdesc.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#ifndef CABSTRACTMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H
-#define CABSTRACTMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H
-
-#include "cgetobjectpropdesc.h"
-
-/**
-* Defines abstract media data provider GetObjectPropDesc request processor
-*/
-class CAbstractMediaMtpDataProviderGetObjectPropDesc: public CGetObjectPropDesc
-    {
-public:
-
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CAbstractMediaMtpDataProviderGetObjectPropDesc();
-
-private:
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    */
-    CAbstractMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * second-phase construction
-    */
-    void ConstructL();
-
-protected:
-    // from CGetObjectPropDesc
-    void ServiceSpecificObjectPropertyL( TUint16 aPropCode );
-
-    };
-
-#endif // CABSTRACTMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidermoveobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidermoveobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
@@ -67,10 +67,6 @@
         TUint32 aHandle,
         const CMTPObjectMetaData& aObject );
 
-    TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement );
-
     };
 
 #endif // CABSTRACTMEDIAMTPDATAPROVIDERMOVEOBJECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderpropertysettingutility.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+
+#ifndef CABSTRACTMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H
+#define CABSTRACTMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H
+
+#include "cpropertysettingutility.h"
+
+/**
+* Defines media data provider SetObjectPropsList request processor
+*/
+class CAbstractMediaMtpDataProviderPropertySettingUtility: public CPropertySettingUtility
+    {
+public:
+    /**
+    * @param aFramework, The data provider framework
+    * @param aConnection, The connection from which the request comes
+    * @param aWrapper Medadata access
+    * @return A pointer to the created request processor object
+    */
+    static CAbstractMediaMtpDataProviderPropertySettingUtility* NewL();
+
+    /**
+    * Destructor
+    */
+    ~CAbstractMediaMtpDataProviderPropertySettingUtility();
+
+private:
+    /**
+    * Standard C++ Constructor
+    * @param aFramework, The data provider framework
+    * @param aConnection, The connection from which the request comes
+    * @param aWrapper Medadata access
+    */
+    CAbstractMediaMtpDataProviderPropertySettingUtility();
+
+protected:
+    TMTPResponseCode SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig,
+        TUint16 aPropCode,
+        const CMTPObjectMetaData& aObject,
+        const CMTPTypeObjectPropListElement& aElement );
+
+    };
+
+#endif // CABSTRACTMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersendobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   *
-*/
-
-#ifndef CABSTRACTMEDIAMTPDATAPROVIDERSENDOBJECT_H_
-#define CABSTRACTMEDIAMTPDATAPROVIDERSENDOBJECT_H_
-
-#include "csendobject.h"
-
-/**
-* Defines media data provider SetObjectPropsList request processor
-*/
-class CAbstractMediaMtpDataProviderSendObject: public CSendObject
-    {
-public:
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CAbstractMediaMtpDataProviderSendObject();
-
-private:
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    */
-    CAbstractMediaMtpDataProviderSendObject( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * 2nd Phase Constructor
-    */
-    void ConstructL();
-
-protected:
-    // from CSendObjectInfo
-    TMTPResponseCode SetSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement );
-
-    TMTPResponseCode CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType );
-
-    TInt HandleSpecificWrapperError(TInt aError,
-            const CMTPObjectMetaData& aObject);
-
-    };
-
-#endif /*CABSTRACTMEDIAMTPDATAPROVIDERSENDOBJECT_H_*/
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersetobjectproplist.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
- *
-*/
-
-
-#ifndef CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H
-#define CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H
-
-#include "csetobjectproplist.h"
-
-class MMmMtpDpConfig;
-
-/**
-* Defines abstract media data provider SetObjectPropList request processor
-*/
-class CAbstractMediaMtpDataProviderSetObjectPropList : public CSetObjectPropList
-    {
-public:
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CAbstractMediaMtpDataProviderSetObjectPropList();
-
-private:
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    */
-    CAbstractMediaMtpDataProviderSetObjectPropList( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * 2nd Phase Constructor
-    */
-    void ConstructL();
-
-protected:
-    // from CSetObjectPropList
-    TMTPResponseCode ServiceSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement );
-
-    TInt HandleSpecificWrapperError( TInt aError,
-        const CMTPObjectMetaData& aObject);
-
-    };
-
-#endif // CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H
-
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersetobjectreferences.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersetobjectreferences.h	Fri Feb 26 18:11:38 2010 +0000
@@ -69,9 +69,9 @@
     * @param aRefFileArray     the array of file names, to
     */
     void DoSetObjectReferencesL( CMmMtpDpMetadataAccessWrapper& aWrapper,
-            TUint16 aObjectFormat,
-            const TDesC& aSrcFileName,
-            CDesCArray& aRefFileArray );
+        TUint16 aObjectFormat,
+        const TDesC& aSrcFileName,
+        CDesCArray& aRefFileArray );
 
     };
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataprovidercontrollerimp.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataprovidercontrollerimp.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -26,15 +26,14 @@
 //
 static const TImplementationProxy ImplementationTable[] =
     {
-    {{0x10207C53}, (TProxyNewLPtr) ( CAbstractMediaMtpDataProvider::NewL )}
+    { { 0x10207C53 }, ( TProxyNewLPtr ) ( CAbstractMediaMtpDataProvider::NewL ) }
     };
 
 // -----------------------------------------------------------------------------
 //  ECOM entry point
 // -----------------------------------------------------------------------------
 //
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
-        TInt& aTableCount )
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
     {
     aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
     return ImplementationTable;
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataproviderprocessor.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataproviderprocessor.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -28,15 +28,15 @@
 
 #include "abstractmediamtpdataproviderconst.h"
 #include "cgetobjectpropssupported.h"
-#include "cabstractmediamtpdataprovidergetobjectpropdesc.h"
-#include "cabstractmediamtpdataprovidergetinterdependentpropdesc.h"
+#include "cgetobjectpropdesc.h"
+#include "cgetinterdependentpropdesc.h"
 #include "cgetobject.h"
 #include "cgetobjectinfo.h"
-#include "cabstractmediamtpdataprovidersendobject.h"
+#include "csendobject.h"
 #include "cabstractmediamtpdataprovidergetobjectpropvalue.h"
 #include "cabstractmediamtpdataprovidergetobjectproplist.h"
 #include "cabstractmediamtpdataprovidersetobjectpropvalue.h"
-#include "cabstractmediamtpdataprovidersetobjectproplist.h"
+#include "csetobjectproplist.h"
 #include "cgetobjectreferences.h"
 #include "cabstractmediamtpdataprovidersetobjectreferences.h"
 #include "cdeleteobject.h"
@@ -44,33 +44,32 @@
 #include "cabstractmediamtpdataprovidermoveobject.h"
 #include "cgetpartialobject.h"
 #include "cabstractmediamtpdataproviderabstractmediapreference.h"
-#include "cabstractmediamtpdataprovidergetformatcapabilities.h"
+#include "cgetformatcapabilities.h"
 
 
 /** A mapping table from the operation code to the request processor factory method */
 const TAbstractMediaMtpDataProviderRequestProcessorEntry KAbstractMediaMtpDataProviderRequestProcessorTable[] =
     {
-    {EMTPOpCodeGetObjectPropsSupported, CGetObjectPropsSupported::NewL}, //Get Supported Props
-    {EMTPOpCodeGetObjectPropDesc, CAbstractMediaMtpDataProviderGetObjectPropDesc::NewL}, //Get Props Description
-    {EMTPOpCodeGetInterdependentPropDesc, CAbstractMediaMtpDataProviderGetInterdependentPropDesc::NewL},
-    {EMTPOpCodeGetObjectInfo, CGetObjectInfo::NewL}, //GetObjectInfo
-    {EMTPOpCodeGetObject, CGetObject::NewL}, //GetObject
-    {EMTPOpCodeGetObjectPropValue, CAbstractMediaMtpDataProviderGetObjectPropValue::NewL},
-    {EMTPOpCodeGetObjectPropList, CAbstractMediaMtpDataProviderGetObjectPropList::NewL}, //GetObjectPropList
-    {EMTPOpCodeSendObjectInfo, CAbstractMediaMtpDataProviderSendObject::NewL}, //SendObjectInfo (routed to SendObject)
-    {EMTPOpCodeSendObject, CAbstractMediaMtpDataProviderSendObject::NewL}, //SendObject
-    {EMTPOpCodeSendObjectPropList, CAbstractMediaMtpDataProviderSendObject::NewL}, // SendobjectPropList (routed to SendObject)
-    {EMTPOpCodeSetObjectPropValue, CAbstractMediaMtpDataProviderSetObjectPropValue::NewL},
-    {EMTPOpCodeSetObjectPropList, CAbstractMediaMtpDataProviderSetObjectPropList::NewL}, //SetObjectPropList
-    {EMTPOpCodeGetObjectReferences, CGetObjectReferences::NewL}, //Get Object References
-    {EMTPOpCodeSetObjectReferences, CAbstractMediaMtpDataProviderSetObjectReferences::NewL}, //Set Object References
-    {EMTPOpCodeDeleteObject, CDeleteObject::NewL}, //DeleteObject
-    {EMTPOpCodeCopyObject, CAbstractMediaMtpDataProviderCopyObject::NewL}, // Copy Object
-    {EMTPOpCodeMoveObject, CAbstractMediaMtpDataProviderMoveObject::NewL}, // Move Object
-    {EMTPOpCodeGetPartialObject, CGetPartialObject::NewL}, //GetPartialObject
-    {EMTPExtOpCodeAbstractMediaPreference, CAbstractMediaMtpDataProviderAbstractMediaPreference::NewL}, // WMPReportSyncOnlyAbstractMedias
-    {EMTPOpCodeGetFormatCapabilities, CAbstractMediaMtpDataProviderGetFormatCapabilities::NewL} // GetFormatCapabilities
-
+        { EMTPOpCodeGetObjectPropsSupported, CGetObjectPropsSupported::NewL }, //Get Supported Props
+        { EMTPOpCodeGetObjectPropDesc, CGetObjectPropDesc::NewL }, //Get Props Description
+        { EMTPOpCodeGetInterdependentPropDesc, CGetInterdependentPropDesc::NewL },
+        { EMTPOpCodeGetObjectInfo, CGetObjectInfo::NewL }, //GetObjectInfo
+        { EMTPOpCodeGetObject, CGetObject::NewL }, //GetObject
+        { EMTPOpCodeGetObjectPropValue, CAbstractMediaMtpDataProviderGetObjectPropValue::NewL },
+        { EMTPOpCodeGetObjectPropList, CAbstractMediaMtpDataProviderGetObjectPropList::NewL }, //GetObjectPropList
+        { EMTPOpCodeSendObjectInfo, CSendObject::NewL }, //SendObjectInfo (routed to SendObject)
+        { EMTPOpCodeSendObject, CSendObject::NewL }, //SendObject
+        { EMTPOpCodeSendObjectPropList, CSendObject::NewL }, // SendobjectPropList (routed to SendObject)
+        { EMTPOpCodeSetObjectPropValue, CAbstractMediaMtpDataProviderSetObjectPropValue::NewL },
+        { EMTPOpCodeSetObjectPropList, CSetObjectPropList::NewL }, //SetObjectPropList
+        { EMTPOpCodeGetObjectReferences, CGetObjectReferences::NewL }, //Get Object References
+        { EMTPOpCodeSetObjectReferences, CAbstractMediaMtpDataProviderSetObjectReferences::NewL }, //Set Object References
+        { EMTPOpCodeDeleteObject, CDeleteObject::NewL }, //DeleteObject
+        { EMTPOpCodeCopyObject, CAbstractMediaMtpDataProviderCopyObject::NewL }, // Copy Object
+        { EMTPOpCodeMoveObject, CAbstractMediaMtpDataProviderMoveObject::NewL }, // Move Object
+        { EMTPOpCodeGetPartialObject, CGetPartialObject::NewL }, //GetPartialObject
+        { EMTPExtOpCodeAbstractMediaPreference, CAbstractMediaMtpDataProviderAbstractMediaPreference::NewL }, // WMPReportSyncOnlyAbstractMedias
+        { EMTPOpCodeGetFormatCapabilities, CGetFormatCapabilities::NewL } // GetFormatCapabilities
     };
 
 // -----------------------------------------------------------------------------
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -38,6 +38,8 @@
 #include "cabstractmediamtpdataproviderrenameobject.h"
 #include "mmmtpdpdefs.h"
 #include "mmmtpdpfiledefs.h"
+#include "cabstractmediamtpdataproviderpropertysettingutility.h"
+#include "cabstractmediamtpdataproviderdescriptionutility.h"
 
 // Class constants.
 // Defines the number of MTP Active Processors allowed
@@ -76,6 +78,7 @@
     iSupportedFormat( KAbstractMediaMtpDpArrayGranularity ),
     iSupportedProperties( KAbstractMediaMtpDpArrayGranularity )
     {
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -87,6 +90,9 @@
     {
     PRINT( _L( "MM MTP => CAbstractMediaMtpDataProvider::~CAbstractMediaMtpDataProvider" ) );
 
+    delete iPropSettingUtility;
+    delete iDescriptionUtility;
+
     iPendingEnumerations.Close();
     TInt count = iActiveProcessors.Count();
     for ( TInt i = 0; i < count; i++ )
@@ -128,6 +134,9 @@
     GetSupportedFormatL();
     GetSupportedPropertiesL();
 
+    iPropSettingUtility = CAbstractMediaMtpDataProviderPropertySettingUtility::NewL();
+    iDescriptionUtility = CAbstractMediaMtpDataProviderDescriptionUtility::NewL();
+
     PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProvider::ConstructL" ) );
     }
 
@@ -158,13 +167,11 @@
         {
         case EMTPSessionClosed:
             PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProvider::ProcessNotificationL EMTPSessionClosed event recvd" ) );
-
             SessionClosedL( *reinterpret_cast<const TMTPNotificationParamsSessionChange*> ( aParams ) );
             break;
 
         case EMTPSessionOpened:
             PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProvider::ProcessNotificationL EMTPSessionOpened event recvd" ) );
-
             SessionOpenedL( *reinterpret_cast<const TMTPNotificationParamsSessionChange*> ( aParams ) );
             break;
 
@@ -201,18 +208,18 @@
 
     MMmRequestProcessor* processor = iActiveProcessors[index];
     iActiveProcessor = index;
-    // iActiveProcessorRemoved = EFalse;
+    iActiveProcessorRemoved = EFalse;
     TBool result = processor->HandleRequestL( aRequest, aPhase );
-    if( !iIsSessionOpen )
+    if ( !iIsSessionOpen )
         {
         processor->Release();
         }
     // iActiveProcessorRemoved will be set to ETrue in the above function
-    // HandleRequestL(),such as SessionClose()
-    // else if ( iActiveProcessorRemoved )
-    //     {
-    //     processor->Release(); // destroy the processor
-    //     }
+    // HandleRequestL(), such as SessionClose()
+    else if ( iActiveProcessorRemoved )
+        {
+        processor->Release(); // destroy the processor
+        }
     else if ( result ) // destroy the processor
         {
         processor->Release();
@@ -231,7 +238,7 @@
     iIsSessionOpen = EFalse;
     TInt count = iActiveProcessors.Count();
     PRINT1( _L( "MM MTP => CAbstractMediaMtpDataProvider::SessionClosedL, total processor count = %d" ), count );
-    for( TInt i = 0; i < count; i++ )
+    for ( TInt i = 0; i < count; i++ )
         {
         MMmRequestProcessor* processor = iActiveProcessors[i];
 
@@ -240,17 +247,17 @@
         TUint32 sessionId = processor->SessionId();
 
         if ( ( sessionId == aSession.iMTPId )
-                && ( processor->Connection().ConnectionId()
-                == aSession.iConnection.ConnectionId() ) )
+            && ( processor->Connection().ConnectionId() 
+			== aSession.iConnection.ConnectionId() ) )
             {
             processor->UsbDisconnect(); // Rollback
 
             iActiveProcessors.Remove( i );
-            // if ( i == iActiveProcessor )
-            //     {
-            //     iActiveProcessorRemoved = ETrue;
-            //     }
-            //     else
+            if ( i == iActiveProcessor )
+                {
+                iActiveProcessorRemoved = ETrue;
+                }
+            else
                 {
                 processor->Release();
                 }
@@ -472,7 +479,7 @@
 
 // -----------------------------------------------------------------------------
 // CAbstractMediaMtpDataProvider::GetWrapper
-// return the reference of CMmMtpDpMetadataAccessWrapper to enumerator
+// return wrapper references
 // -----------------------------------------------------------------------------
 //
 CMmMtpDpMetadataAccessWrapper& CAbstractMediaMtpDataProvider::GetWrapperL()
@@ -480,6 +487,26 @@
     return CMmMtpDpAccessSingleton::GetAccessWrapperL();
     }
 
+// -----------------------------------------------------------------------------
+// CAbstractMediaMtpDataProvider::PropSettingUtility
+// return The utility to setting properties
+// -----------------------------------------------------------------------------
+//
+CPropertySettingUtility* CAbstractMediaMtpDataProvider::PropSettingUtility()
+    {
+    return iPropSettingUtility;
+    }
+
+// -----------------------------------------------------------------------------
+// CAbstractMediaMtpDataProvider::DescriptionUtility
+// return The utiltiy to setting descriptions
+// -----------------------------------------------------------------------------
+//
+CDescriptionUtility* CAbstractMediaMtpDataProvider::DescriptionUtility()
+    {
+    return iDescriptionUtility;
+    }
+
 // ---------------------------------------------------------------------------
 // CAbstractMediaMtpDataProvider::GetSupportedFormat
 //
@@ -501,8 +528,9 @@
         }
     }
 
-const RArray<TUint>* CAbstractMediaMtpDataProvider::GetSupportedPropertiesL( TUint32 aFormatCode ) const
+const RArray<TUint>* CAbstractMediaMtpDataProvider::GetSupportedPropertiesL( TUint32 /*aFormatCode*/ ) const
     {
+    // May need add more implementation here for further extension.
     return &iSupportedProperties;
     }
 
@@ -552,10 +580,19 @@
 
     TDriveInfo driveInfo;
     User::LeaveIfError( Framework().Fs().Drive( driveInfo, driveNum ) );
+    PRINT3( _L( "driveInfo.iType = 0x%x, driveInfo.iDriveAtt = 0x%x, driveInfo.iMediaAtt = 0x%x" ),
+        driveInfo.iType,
+        driveInfo.iDriveAtt,
+        driveInfo.iMediaAtt );
     if( driveInfo.iType == EMediaNotPresent || driveInfo.iType == EMediaUnknown )
         {
-        err = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultPhoneMemory, driveNum );
-        PRINT( _L( "MM MTP <> Memory card doesn't exist, set PhoneMemory to default" ) );
+        err = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, driveNum );
+        User::LeaveIfError( Framework().Fs().Drive( driveInfo, driveNum ) );
+        if( driveInfo.iType == EMediaNotPresent || driveInfo.iType == EMediaUnknown )
+            {
+            err = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultPhoneMemory, driveNum );
+            PRINT( _L( "MM MTP <> Memory card doesn't exist, set PhoneMemory to default" ) );
+            }
         }
 
     return Framework().StorageMgr().FrameworkStorageId( TDriveNumber( driveNum ) );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderabstractmediapreference.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderabstractmediapreference.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -71,7 +71,7 @@
 //
 CAbstractMediaMtpDataProviderAbstractMediaPreference::~CAbstractMediaMtpDataProviderAbstractMediaPreference()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -81,7 +81,7 @@
 //
 void CAbstractMediaMtpDataProviderAbstractMediaPreference::ConstructL()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -94,3 +94,6 @@
     TUint32 referenceType = EMTPAbstractMediaRefOrdinary;
     SendResponseL( EMTPRespCodeOK, 1, &referenceType );
     }
+
+// end of file
+
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidercopyobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidercopyobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -60,7 +60,7 @@
 //
 CAbstractMediaMtpDataProviderCopyObject::~CAbstractMediaMtpDataProviderCopyObject()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -73,7 +73,7 @@
     MMmMtpDpConfig& aDpConfig ) :
     CCopyObject( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -86,21 +86,8 @@
     const CMTPObjectMetaData& /*aObject*/ )
     {
     PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderCopyObject::ServiceGetSpecificObjectPropertyL" ) );
-    // do nothing
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL
-// do nothing here
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CAbstractMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL( TUint16 /*aPropCode*/,
-    const CMTPObjectMetaData& /*aObject*/,
-    const CMTPTypeObjectPropListElement& /*aElement*/)
-    {
-    PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL" ) );
-
-    return EMTPRespCodeOK;
+    // Do nothing now.
+    // May need add implementation here for further extension.
     }
 
 // end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderdescriptionutility.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Media dp specific property description construction utility.
+*              Used by all request processors which related to property description
+*
+*/
+
+#include <mtp/cmtptypeobjectpropdesc.h>
+#include <mtp/cmtptypestring.h>
+
+#include "cabstractmediamtpdataproviderdescriptionutility.h"
+#include "mmmtpdpconfig.h"
+#include "mmmtpdplogger.h"
+
+// -----------------------------------------------------------------------------
+// CAbstractMediaMtpDataProviderDescriptionUtility::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CAbstractMediaMtpDataProviderDescriptionUtility* CAbstractMediaMtpDataProviderDescriptionUtility::NewL()
+    {
+    CAbstractMediaMtpDataProviderDescriptionUtility* self =
+        new( ELeave ) CAbstractMediaMtpDataProviderDescriptionUtility();
+
+    return self;
+    }
+
+CAbstractMediaMtpDataProviderDescriptionUtility::CAbstractMediaMtpDataProviderDescriptionUtility()
+    {
+    // Do nothing
+    }
+
+CAbstractMediaMtpDataProviderDescriptionUtility::~CAbstractMediaMtpDataProviderDescriptionUtility()
+    {
+    // Do nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CAbstractMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL
+// Construct media dp specific interdependent property description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeInterdependentPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL( MMmMtpDpConfig& /*aDpConfig*/,
+    TUint /*aFormatCode*/ )
+    {
+    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) );
+
+    CMTPTypeInterdependentPropDesc* interdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL();
+
+    PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) );
+    return interdependentPropDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CAbstractMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL
+// Construct media dp specific property description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL( TUint /*aFormatCode*/,
+    TUint16 aPropCode )
+    {
+    CMTPTypeObjectPropDesc* propertyDesc = NULL;
+
+    switch ( aPropCode )
+        {
+        // format specific
+        // May need add implementation here for further extension.
+        default:
+            // Do nothing now.
+            break;
+        }
+    return propertyDesc;
+    }
+
+// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -34,11 +34,20 @@
 #include "cmmmtpdpmetadatampxaccess.h"
 
 
-/** Number of objects to insert into the object manager in one go*/
 const TInt KMTPDriveGranularity = 5;
+const TInt KAbstractMediaDpArrayGranularity = 2;
 
 _LIT( KPlaylistFilePath, "Playlists\\" );
 
+#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
+_LIT( KMpxGetAllAbstractMedia, "MpxGetAllAbstractMedia" );
+_LIT( KMpxQueryAbstractMediaReference, "MpxQueryAbstractMediaReference" );
+_LIT( KObjectManagerObjectUid, "ObjectManagerObjectUid" );
+_LIT( KObjectManagerInsert, "ObjectManagerInsert" );
+_LIT( KObjectManagerHandle, "ObjectManagerHandle" );
+_LIT( KReferenceManagerSetReference, "ReferenceManagerSetReference" );
+#endif
+
 // -----------------------------------------------------------------------------
 // CAbstractMediaMtpDataProviderEnumerator::NewL
 // Two phase constructor
@@ -69,7 +78,7 @@
     iObjectMgr( aFramework.ObjectMgr() ),
     iDataProviderId( aFramework.DataProviderId() ),
     iDataProvider( aDataProvider ),
-    iStorages( 2 ),
+    iStorages( KAbstractMediaDpArrayGranularity ),
     iAbstractMedias( NULL ),
     iCount( 0 ),
     iCurrentIndex( 0 )
@@ -105,6 +114,7 @@
 
     delete iAbstractMedias;
     iAbstractMedias = NULL;
+
 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
     delete iPerfLog;
 #endif // _DEBUG
@@ -202,7 +212,8 @@
     PRINT1( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::ScanStorageL StorageSuid = %S" ), &root );
 
     // created by windows media player, or else return responsecode is Access denied
-    // Create abstract media directory if it does not exist
+    // Create playlist directory if it does not exist
+    // NOTE: Only playlist need to create directory here, for the dummy files
     HBufC* tempBuf = HBufC::NewLC( KMaxFileName );  // + tempBuf
     TPtr folder = tempBuf->Des();
     folder.Zero();
@@ -232,9 +243,9 @@
     // find all abstract medias stored in MPX
     delete iAbstractMedias;
     iAbstractMedias = NULL;
-    PERFLOGSTART( KMpxGetAllPlaylist );
-    TRAPD( err, iDataProvider.GetWrapperL().GetAllPlaylistL( root, &iAbstractMedias ) );
-    PERFLOGSTOP( KMpxGetAllPlaylist );
+    PERFLOGSTART( KMpxGetAllAbstractMedia );
+    TRAPD( err, iDataProvider.GetWrapperL().GetAllAbstractMediaL( root, &iAbstractMedias, EMPXPlaylist  ) );
+    PERFLOGSTOP( KMpxGetAllAbstractMedia );
 
     if ( iAbstractMedias != NULL && err == KErrNone )
         {
@@ -262,7 +273,7 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::ScanNextL()
     {
-    PRINT1( _L( "MM MTP = > CAbstractMediaMtpDataProviderEnumerator::ScanNextStorageL iStorages.Count = %d" ), iStorages.Count() );
+    PRINT1( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::ScanNextL iStorages.Count = %d" ), iStorages.Count() );
     if ( iCurrentIndex < iCount )
         {
         TRequestStatus* status = &iStatus;
@@ -296,28 +307,31 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::RunL()
     {
-    TBuf<KMaxFileName> playlist;
+    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::RunL" ) );
 
-    // insert all playlists into handle db of framework
+    // insert all abstract medias into handle db of framework
     CMPXMedia* media = ( *iAbstractMedias )[iCurrentIndex];
-    PERFLOGSTART( KMpxGetPlaylistName );
-    iDataProvider.GetWrapperL().GetPlaylistNameL( media, playlist );
-    PERFLOGSTOP( KMpxGetPlaylistName );
-    AddEntryL( playlist );
+    
+    // Increase the index first in case of leave
+    iCurrentIndex++;
+    
+    HBufC* abstractMedia = iDataProvider.GetWrapperL().GetAbstractMediaNameL( media, EMPXPlaylist );
+    CleanupStack::PushL( abstractMedia ); // + abstractMedia
+    AddEntryL( *abstractMedia );
 
-    // find all reference of each playlist and create dummy files for each playlist
+    // find all reference of each abstract media
     CDesCArray* references = new ( ELeave ) CDesCArrayFlat( KMTPDriveGranularity );
     CleanupStack::PushL( references ); // + references
 
-    PERFLOGSTART( KMpxQueryPlaylistReference );
+    PERFLOGSTART( KMpxQueryAbstractMediaReference );
     iDataProvider.GetWrapperL().GetAllReferenceL( media, *references );
-    PERFLOGSTOP( KMpxQueryPlaylistReference );
+    PERFLOGSTOP( KMpxQueryAbstractMediaReference );
 
     // insert references into reference db
-    AddReferencesL( playlist, *references );
+    AddReferencesL( *abstractMedia, *references );
 
     CleanupStack::PopAndDestroy( references ); // - references
-    iCurrentIndex++;
+    CleanupStack::PopAndDestroy( abstractMedia ); // - abstractMedia
 
     ScanNextL();
     }
@@ -343,7 +357,7 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::DoCancel()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -380,9 +394,9 @@
     PERFLOGSTOP( KObjectManagerObjectUid );
     object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
 
-    PERFLOGSTART(KObjectManagerInsert);
+    PERFLOGSTART( KObjectManagerInsert );
     iObjectMgr.InsertObjectL( *object );
-    PERFLOGSTOP(KObjectManagerInsert);
+    PERFLOGSTOP( KObjectManagerInsert );
 
     CleanupStack::PopAndDestroy( object );// - object
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetformatcapabilities.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include <mtp/cmtptypeinterdependentpropdesc.h>
-
-#include "cabstractmediamtpdataprovidergetformatcapabilities.h"
-
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetFormatCapabilities::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-
-MMmRequestProcessor* CAbstractMediaMtpDataProviderGetFormatCapabilities::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
-    {
-    CAbstractMediaMtpDataProviderGetFormatCapabilities* self =
-        new ( ELeave ) CAbstractMediaMtpDataProviderGetFormatCapabilities( aFramework,
-            aConnection,
-            aDpConfig );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetFormatCapabilities::ConstructL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-void CAbstractMediaMtpDataProviderGetFormatCapabilities::ConstructL()
-    {
-    CGetFormatCapabilities::ConstructL();
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetFormatCapabilities::~CAbstractMediaMtpDataProviderGetFormatCapabilities()
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderGetFormatCapabilities::~CAbstractMediaMtpDataProviderGetFormatCapabilities()
-    {
-
-    }
-
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetFormatCapabilities::CAbstractMediaMtpDataProviderGetFormatCapabilities
-// Standard c++ constructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderGetFormatCapabilities::CAbstractMediaMtpDataProviderGetFormatCapabilities( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig ) :
-    CGetFormatCapabilities( aFramework, aConnection, aDpConfig )
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDesc
-//
-// -----------------------------------------------------------------------------
-//
-void CAbstractMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL()
-    {
-    iInterdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL();
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificObjectPropertyL
-// Service specific object property
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificPropertyDescL( TUint16 aPropCode )
-    {
-    return NULL;
-    }
-
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetinterdependentpropdesc.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: GetInterdenpendentPropDesc
-*
-*/
-
-
-#include <mtp/tmtptyperequest.h>
-#include <mtp/mtpdatatypeconstants.h>
-#include <mtp/mmtpdataproviderframework.h>
-#include <mtp/mmtpobjectmgr.h>
-#include <mtp/cmtpobjectmetadata.h>
-#include <mtp/cmtptypestring.h>
-#include <mtp/cmtptypeobjectpropdesc.h>
-#include <mtp/cmtptypeinterdependentpropdesc.h>
-
-#include "cabstractmediamtpdataprovidergetinterdependentpropdesc.h"
-#include "cmmmtpdpmetadataaccesswrapper.h"
-#include "tmmmtpdppanic.h"
-#include "abstractmediamtpdataproviderconst.h"
-#include "mmmtpdplogger.h"
-#include "mmmtpdpconfig.h"
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CAbstractMediaMtpDataProviderGetInterdependentPropDesc::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& /*aDpConfig*/ )
-    {
-    CAbstractMediaMtpDataProviderGetInterdependentPropDesc* self =
-        new ( ELeave ) CAbstractMediaMtpDataProviderGetInterdependentPropDesc( aFramework,
-            aConnection );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ConstructL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-void CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ConstructL()
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::~CAbstractMediaMtpDataProviderGetInterdependentPropDesc
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderGetInterdependentPropDesc::~CAbstractMediaMtpDataProviderGetInterdependentPropDesc()
-    {
-    delete iDataset;
-    }
-
-// -----------------------------------------------------------------------------
-// CMTPGetInterdependentPropDesc::CMTPGetInterdependentPropDesc
-// Standard c++ constructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderGetInterdependentPropDesc::CAbstractMediaMtpDataProviderGetInterdependentPropDesc( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection ) :
-    CRequestProcessor( aFramework, aConnection, 0, NULL )
-    {
-    PRINT( _L( "Operation: GetInterdependentPropDesc(0x9807)" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::CheckRequestL
-// Verify the reqeust and returns it
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CAbstractMediaMtpDataProviderGetInterdependentPropDesc::CheckRequestL()
-    {
-    TMTPResponseCode responseCode = CRequestProcessor::CheckRequestL();
-    iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
-
-    if ( EMTPRespCodeOK == responseCode )
-        {
-        TInt count = sizeof( KAbstractMediaMtpDataProviderSupportedFormats ) / sizeof( TUint16 );
-
-        responseCode = EMTPRespCodeInvalidObjectFormatCode;
-
-        for ( TInt i = 0; i < count; i++ )
-            {
-            if ( iFormatCode == KAbstractMediaMtpDataProviderSupportedFormats[i] )
-                {
-                responseCode = EMTPRespCodeOK;
-                break;
-                }
-            }
-        }
-
-    return responseCode;
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL
-// service a request at request phase
-// -----------------------------------------------------------------------------
-//
-void CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL()
-    {
-    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL" ) );
-
-    // Clear the data set.
-    delete iDataset;
-    iDataset = NULL;
-    iDataset = CMTPTypeInterdependentPropDesc::NewL();
-
-    PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL don't have interdependent properties!" ) );
-
-    // Send the dataset.
-    SendDataL( *iDataset );
-    PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL" ) );
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropdesc.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: GetObjectPropDesc
-*
-*/
-
-#include <mtp/cmtptypeobjectpropdesc.h>
-#include <mtp/mtpprotocolconstants.h>
-
-#include "cabstractmediamtpdataprovidergetobjectpropdesc.h"
-#include "mmmtpdplogger.h"
-#include "abstractmediamtpdataproviderconst.h"
-#include "mmmtpdpdefs.h"
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetObjectPropDesc::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CAbstractMediaMtpDataProviderGetObjectPropDesc::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
-    {
-    CAbstractMediaMtpDataProviderGetObjectPropDesc* self =
-        new ( ELeave ) CAbstractMediaMtpDataProviderGetObjectPropDesc( aFramework,
-            aConnection,
-            aDpConfig );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetObjectPropDesc::ConstructL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-void CAbstractMediaMtpDataProviderGetObjectPropDesc::ConstructL()
-    {
-    CGetObjectPropDesc::ConstructL();
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetObjectPropDesc::~CAbstractMediaMtpDataProviderGetObjectPropDesc
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderGetObjectPropDesc::~CAbstractMediaMtpDataProviderGetObjectPropDesc()
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetObjectPropDesc::CAbstractMediaMtpDataProviderGetObjectPropDesc
-// Standard c++ constructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderGetObjectPropDesc::CAbstractMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig ) :
-    CGetObjectPropDesc( aFramework, aConnection, aDpConfig )
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL
-//
-// -----------------------------------------------------------------------------
-//
-void CAbstractMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/ )
-    {
-    PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL leave with not supportd" ) );
-    User::Leave( KErrNotSupported );
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -50,7 +50,7 @@
 //
 CAbstractMediaMtpDataProviderGetObjectPropList::~CAbstractMediaMtpDataProviderGetObjectPropList()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -61,9 +61,9 @@
 CAbstractMediaMtpDataProviderGetObjectPropList::CAbstractMediaMtpDataProviderGetObjectPropList( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
-    CGetObjectPropList( aFramework, aConnection, aDpConfig )
+        CGetObjectPropList( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -85,6 +85,10 @@
     TUint32 /*aHandle*/ )
     {
     PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL, leave with KErrNotSupported" ) );
+
+    // Do nothing now.
+    // May need add implementation here for further extension.
+
     return KErrNotSupported;
     }
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -49,7 +49,7 @@
 //
 void CAbstractMediaMtpDataProviderGetObjectPropValue::ConstructL()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -59,7 +59,7 @@
 //
 CAbstractMediaMtpDataProviderGetObjectPropValue::~CAbstractMediaMtpDataProviderGetObjectPropValue()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -72,7 +72,7 @@
     MMmMtpDpConfig& aDpConfig ) :
     CGetObjectPropValue( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -84,6 +84,9 @@
 void CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/ )
     {
     PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL, leave with KErrNotSupported"));
+
+    // May need add implementation here for further extension.
+
     User::Leave( KErrNotSupported );
     }
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidermoveobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidermoveobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -61,7 +61,7 @@
 //
 CAbstractMediaMtpDataProviderMoveObject::~CAbstractMediaMtpDataProviderMoveObject()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -74,7 +74,7 @@
     MMmMtpDpConfig& aDpConfig ) :
     CMoveObject( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -87,21 +87,10 @@
     const CMTPObjectMetaData& /*aObject*/ )
     {
     PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderMoveObject::ServiceGetSpecificObjectPropertyL" ) );
-    // do nothing
-    }
 
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL
-// do nothing here
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CAbstractMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL( TUint16 /*aPropCode*/,
-        const CMTPObjectMetaData& /*aObject*/,
-        const CMTPTypeObjectPropListElement& /*aElement*/ )
-    {
-    PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL" ) );
+    // Do nothing now.
+    // May need add implementation here for further extension.
 
-    return EMTPRespCodeOK;
     }
 
 // end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderpropertysettingutility.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include <mtp/cmtptypeobjectproplist.h>
+#include <mtp/mtpprotocolconstants.h>
+
+#include "cabstractmediamtpdataproviderpropertysettingutility.h"
+#include "mmmtpdplogger.h"
+
+// -----------------------------------------------------------------------------
+// CAbstractMediaMtpDataProviderPropertySettingUtility::NewL
+// Two-phase construction method
+// -----------------------------------------------------------------------------
+//
+CAbstractMediaMtpDataProviderPropertySettingUtility* CAbstractMediaMtpDataProviderPropertySettingUtility::NewL()
+    {
+    CAbstractMediaMtpDataProviderPropertySettingUtility* self =
+        new ( ELeave ) CAbstractMediaMtpDataProviderPropertySettingUtility();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CAbstractMediaMtpDataProviderPropertySettingUtility::~CAbstractMediaMtpDataProviderPropertySettingUtility
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CAbstractMediaMtpDataProviderPropertySettingUtility::~CAbstractMediaMtpDataProviderPropertySettingUtility()
+    {
+    // Do nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CAbstractMediaMtpDataProviderPropertySettingUtility::CAbstractMediaMtpDataProviderPropertySettingUtility
+// Standard C++ Constructor
+// -----------------------------------------------------------------------------
+//
+CAbstractMediaMtpDataProviderPropertySettingUtility::CAbstractMediaMtpDataProviderPropertySettingUtility()
+    {
+    // Do nothing
+    }
+
+TMTPResponseCode CAbstractMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL( MMmMtpDpConfig& /*aDpConfig*/,
+    TUint16 /*aPropCode*/,
+    const CMTPObjectMetaData& /*aObject*/,
+    const CMTPTypeObjectPropListElement& /*aElement*/ )
+    {
+    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL" ) );
+
+    // Do nothing now.
+    // May need add implementation here for further extension.
+
+    return EMTPRespCodeOK;
+    }
+
+// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -53,9 +53,9 @@
 //
 CAbstractMediaMtpDataProviderRenameObject::CAbstractMediaMtpDataProviderRenameObject( MMTPDataProviderFramework& aFramework,
     CMmMtpDpMetadataAccessWrapper& aWrapper ) :
-    CRenameObject( aFramework, aWrapper )
+        CRenameObject( aFramework, aWrapper )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -65,7 +65,7 @@
 //
 CAbstractMediaMtpDataProviderRenameObject::~CAbstractMediaMtpDataProviderRenameObject()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersendobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: SendObjectInfo/SendObjectPropList/SendObject
-*
-*/
-
-
-#include <mtp/mmtpdataproviderframework.h>
-#include <mtp/cmtptypeobjectproplist.h>
-
-#include "cabstractmediamtpdataprovidersendobject.h"
-#include "abstractmediamtpdataproviderconst.h"
-#include "mmmtpdplogger.h"
-#include "mmmtpdpconfig.h"
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSendObject::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CAbstractMediaMtpDataProviderSendObject::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
-    {
-    CAbstractMediaMtpDataProviderSendObject* self =
-        new (ELeave) CAbstractMediaMtpDataProviderSendObject( aFramework,
-            aConnection,
-            aDpConfig );
-
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSendObject::~CAbstractMediaMtpDataProviderSendObject
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderSendObject::~CAbstractMediaMtpDataProviderSendObject()
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSendObject::CAbstractMediaMtpDataProviderSendObject
-// Standard C++ Constructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderSendObject::CAbstractMediaMtpDataProviderSendObject( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig ) :
-    CSendObject( aFramework, aConnection, aDpConfig )
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSendObject::ConstructL
-// 2nd Phase Constructor
-// -----------------------------------------------------------------------------
-//
-void CAbstractMediaMtpDataProviderSendObject::ConstructL()
-    {
-    CSendObject::ConstructL();
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSendObject::ServiceSpecificObjectPropertyL
-// no need to do anything here, just leave, as this should never be invoked or
-// invalid propcode
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CAbstractMediaMtpDataProviderSendObject::SetSpecificObjectPropertyL( TUint16 /*aPropCode*/,
-    const CMTPObjectMetaData& /*aObject*/,
-    const CMTPTypeObjectPropListElement& /*aElement*/ )
-    {
-    PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderSendObject::ServiceSpecificObjectPropertyL, leave with KErrNotSupported" ) );
-    User::Leave( KErrNotSupported );
-
-    return EMTPRespCodeOK;
-    }
-
-TMTPResponseCode CAbstractMediaMtpDataProviderSendObject::CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType )
-    {
-    PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderSendObject::ServiceSpecificCheckDataTypeL, leave with KErrNotSupported" ) );
-    // TODO: User::Leave( KErrNotSupported );
-    return EMTPRespCodeOK;
-    }
-
-TInt CAbstractMediaMtpDataProviderSendObject::HandleSpecificWrapperError( TInt aError,
-    const CMTPObjectMetaData& /*aObject*/ )
-    {
-    // do nothing, simply return the error
-    return aError;
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectproplist.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: getobjectproplist
-*
-*/
-
-
-#include <mtp/mmtpdataproviderframework.h>
-#include <mtp/cmtptypeobjectproplist.h>
-
-#include "cabstractmediamtpdataprovidersetobjectproplist.h"
-#include "abstractmediamtpdataproviderconst.h"
-#include "mmmtpdplogger.h"
-#include "mmmtpdpconfig.h"
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSetObjectPropList::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CAbstractMediaMtpDataProviderSetObjectPropList::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
-    {
-    CAbstractMediaMtpDataProviderSetObjectPropList* self =
-        new (ELeave) CAbstractMediaMtpDataProviderSetObjectPropList( aFramework,
-            aConnection,
-            aDpConfig );
-
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSetObjectPropList::~CAbstractMediaMtpDataProviderSetObjectPropList
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderSetObjectPropList::~CAbstractMediaMtpDataProviderSetObjectPropList()
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSetObjectPropList::CAbstractMediaMtpDataProviderSetObjectPropList
-// Standard C++ Constructor
-// -----------------------------------------------------------------------------
-//
-CAbstractMediaMtpDataProviderSetObjectPropList::CAbstractMediaMtpDataProviderSetObjectPropList( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig ) :
-    CSetObjectPropList( aFramework, aConnection, aDpConfig )
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSetObjectPropList::ConstructL
-// 2nd Phase Constructor
-// -----------------------------------------------------------------------------
-//
-void CAbstractMediaMtpDataProviderSetObjectPropList::ConstructL()
-    {
-    CSetObjectPropList::ConstructL();
-    }
-
-// -----------------------------------------------------------------------------
-// CAbstractMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL
-// no need to do anything here, just leave, as this should never be invoked or
-// invalid propcode
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CAbstractMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/,
-    const CMTPObjectMetaData& /*aObject*/,
-    const CMTPTypeObjectPropListElement& /*aElement*/ )
-    {
-    PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL, leave with KErrNotSupported" ) );
-    User::Leave( KErrNotSupported );
-
-    return EMTPRespCodeOK;
-    }
-
-TInt CAbstractMediaMtpDataProviderSetObjectPropList::HandleSpecificWrapperError( TInt aError,
-    const CMTPObjectMetaData& /*aObject*/ )
-    {
-    // do nothing, simply return the error
-    return aError;
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectpropvalue.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectpropvalue.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -49,7 +49,7 @@
 //
 void CAbstractMediaMtpDataProviderSetObjectPropValue::ConstructL()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -60,9 +60,9 @@
 CAbstractMediaMtpDataProviderSetObjectPropValue::CAbstractMediaMtpDataProviderSetObjectPropValue( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
-    CSetObjectPropValue( aFramework, aConnection, aDpConfig )
+        CSetObjectPropValue( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -72,7 +72,7 @@
 //
 CAbstractMediaMtpDataProviderSetObjectPropValue::~CAbstractMediaMtpDataProviderSetObjectPropValue()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -95,6 +95,10 @@
 void CAbstractMediaMtpDataProviderSetObjectPropValue::ReceiveDataSpecificObjectPropertyL( TUint16 /*aPropCode*/ )
     {
     PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderSetObjectPropValue::ReceiveDataSpecificObjectPropertyL leave with KErrNotSupported" ) );
+
+    // Do nothing now.
+    // May need add implementation here for further extension.
+
     User::Leave( KErrNotSupported );
     }
 
@@ -107,6 +111,9 @@
 TMTPResponseCode CAbstractMediaMtpDataProviderSetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/ )
     {
     PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderSetObjectPropValue::ServiceSpecificObjectPropertyL leave with KErrNotSupported" ) );
+
+    // Do nothing now.
+    // May need add implementation here for further extension.
     User::Leave( KErrNotSupported );
 
     return EMTPRespCodeOK;
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectreferences.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectreferences.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -48,7 +48,7 @@
 //
 void CAbstractMediaMtpDataProviderSetObjectReferences::ConstructL()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -58,7 +58,7 @@
 //
 CAbstractMediaMtpDataProviderSetObjectReferences::~CAbstractMediaMtpDataProviderSetObjectReferences()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -69,9 +69,9 @@
 CAbstractMediaMtpDataProviderSetObjectReferences::CAbstractMediaMtpDataProviderSetObjectReferences( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
-    CSetObjectReferences( aFramework, aConnection, aDpConfig )
+        CSetObjectReferences( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -87,7 +87,7 @@
     TInt count = sizeof( KAbstractMediaMtpDataProviderSupportedFormats ) / sizeof (TUint16);
     TBool supported = EFalse;
 
-    for( TInt i = 0; i < count; i++ )
+    for ( TInt i = 0; i < count; i++ )
         {
         if( KAbstractMediaMtpDataProviderSupportedFormats[i] == aObjectFormat )
             {
@@ -98,7 +98,7 @@
 
     if ( supported )
         {
-        aWrapper.SetPlaylistL( aSrcFileName, aRefFileArray );
+        aWrapper.SetAbstractMediaL( aSrcFileName, aRefFileArray, EMPXPlaylist );
         }
     }
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/data/mediamtpdataprovider_config.rss	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/data/mediamtpdataprovider_config.rss	Fri Feb 26 18:11:38 2010 +0000
@@ -17,24 +17,15 @@
 
 
 #include <mtp/mtpdataproviderconfig.rh>
-#include "mediamtpdataprovider_config.rh"
 
 RESOURCE MTP_DATA_PROVIDER dpConfig
     {
     type = KMTPDataProviderTypeECOM;
     major_version = 1;
     object_enumeration_persistent = 0;
-    supported_modes = KMTPModeMTP;  
+    supported_modes = KMTPModeMTP;
     server_name = "";
     server_image_name = "";
-    opaque_resource = "folderConfig";
+    opaque_resource = 0;
     enumeration_phase = 11;
     }
-
-RESOURCE MEDIAMTPDATAPROVIDE_CONFIG folderConfig
-    {
-    media_drive = 4;  // 2 change to SD card
-    }
-    
-    
-    
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/group/mediamtpdataprovider.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/group/mediamtpdataprovider.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -40,16 +40,15 @@
 SOURCE          mediamtpdataprovidercontrollerimp.cpp
 SOURCE          mediamtpdataproviderprocessor.cpp
 SOURCE          cmediamtpdataproviderenumerator.cpp
-SOURCE          cmediamtpdataprovidergetobjectpropdesc.cpp
-SOURCE          cmediamtpdataprovidergetinterdependentpropdesc.cpp
 SOURCE          cmediamtpdataprovidergetobjectpropvalue.cpp 
 SOURCE          cmediamtpdataprovidergetobjectproplist.cpp 
 SOURCE          cmediamtpdataprovidersetobjectpropvalue.cpp
-SOURCE          cmediamtpdataprovidersetobjectproplist.cpp
+
 SOURCE          cmediamtpdataprovidercopyobject.cpp
 SOURCE          cmediamtpdataprovidermoveobject.cpp
-SOURCE          cmediamtpdataprovidersendobject.cpp
-SOURCE          cmediamtpdataprovidergetformatcapabilities.cpp
+SOURCE          cmediamtpdataproviderpropertysettingutility.cpp 
+SOURCE          cmediamtpdataproviderdescriptionutility.cpp
+
 
 SOURCEPATH      ../data 
 START RESOURCE  mediamtpdataprovider.rss
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovider.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovider.h	Fri Feb 26 18:11:38 2010 +0000
@@ -69,6 +69,16 @@
     */
     CMmMtpDpMetadataAccessWrapper& GetWrapperL();
 
+    /**
+    * @return The utility to setting properties
+    */
+    CPropertySettingUtility* PropSettingUtility();
+
+    /**
+    * @return The utiltiy to setting descriptions
+    */
+    CDescriptionUtility* DescriptionUtility();
+
 protected:
     // from CMTPDataProviderPlugin
     void Cancel();
@@ -168,6 +178,7 @@
     RArray<TUint32> iPendingEnumerations;
 
     TInt iActiveProcessor;
+    TBool iActiveProcessorRemoved;
     TBool iIsSessionOpen;
 
     CRenameObject *iRenameObject;
@@ -180,6 +191,9 @@
 
     TUint32 iDefaultStorageId;
 
+    CPropertySettingUtility* iPropSettingUtility;
+    CDescriptionUtility* iDescriptionUtility;
+
     };
 
 #endif // CMEDIAMTPDATAPROVIDER_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidercopyobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidercopyobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
@@ -65,10 +65,6 @@
         TUint32 aHandle,
         const CMTPObjectMetaData& aObject );
 
-    TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement );
-
     };
 
 #endif // CMEDIAMTPDATAPROVIDERCOPYOBJECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderdescriptionutility.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Media dp specific property description construction utility.
+*              Used by all request processors which related to property description
+*
+*/
+
+#ifndef CMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H
+#define CMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H
+
+#include "cdescriptionutility.h"
+
+class CMTPTypeInterdependentPropDesc;
+class CMTPTypeObjectPropDesc;
+
+class CMediaMtpDataProviderDescriptionUtility : public CDescriptionUtility
+    {
+public:
+    static CMediaMtpDataProviderDescriptionUtility* NewL();
+
+private:
+    CMediaMtpDataProviderDescriptionUtility();
+
+public:
+    /**
+     * Construct media dp specific interdependent property description.
+     * according to assigned format code.
+     * @param aFormatCode
+     * @return Interdependent property description dataset.
+     */
+    CMTPTypeInterdependentPropDesc* NewInterdepentPropDescL( MMmMtpDpConfig& aDpConfig, TUint aFormatCode );
+
+    /**
+     * Construct media dp specific property description
+     * according to assigned format code and property code.
+     * @param aFormatCode
+     * @param aPropCode
+     * @return Property description dataset.
+     */
+    CMTPTypeObjectPropDesc* NewSpecificPropDescL( TUint aFormatCode, TUint16 aPropCode );
+
+private:
+    /**
+     * Construct audio wave codec property description.
+     * @param aFormatCode
+     * @return Property description dataset of audio wave codec.
+     */
+    CMTPTypeObjectPropDesc* NewAudioWaveCodecPropDescL( TUint aFormatCode );
+
+    /**
+     * Construct audio bitrate property description.
+     * @param aFormatCode, The format code
+     * @return Property description dataset of audio bitrate.
+     */
+    CMTPTypeObjectPropDesc* NewAudioBitratePropDescL( TUint aFormatCode );
+
+    /**
+     * Construct property description of video fourCC codec.
+     * @param aFormatCode, The format code
+     * @return Property description dataset of video fourCC codec.
+     */
+    CMTPTypeObjectPropDesc* NewVideoFourCCCodecPropDescL( TUint aFormatCode );
+
+    /**
+     * Construct property description of VideoBitrate.
+     * @param aFormatCode, The format code
+     * @return Property description dataset of video bitrate.
+     */
+    CMTPTypeObjectPropDesc* NewVideoBitratePropDescL( TUint aFormatCode );
+
+    /**
+     * Construct property description of number of channels.
+     * @return Property description dataset of number of channels.
+     */
+    CMTPTypeObjectPropDesc* NewNumberOfChannelsPropDescL();
+
+    /**
+     * Construct property description of code sample rate.
+     * @return Property description dataset of sample rate.
+     */
+    CMTPTypeObjectPropDesc* NewCodeSampleRatePropDescL();
+
+    /**
+     * Construct property description of description.
+     * @return Property description dataset of description.
+     */
+    CMTPTypeObjectPropDesc* NewDescriptionPropDescL();
+
+    /**
+     * Construct property description of scan type description.
+     * @return Property description dataset of scan type description.
+     */
+    CMTPTypeObjectPropDesc* NewScanTypeDescriptionPropDescL();
+
+    /**
+     * Construct property description of encoding profile description.
+     * @return Property description dataset of encoding profile description.
+     */
+    CMTPTypeObjectPropDesc* NewEncodingProfileDescriptionPropDescL();
+
+    /**
+     * Construct property description of DRM status.
+     * @return Property description dataset of drm status.
+     */
+    CMTPTypeObjectPropDesc* NewDRMStatusPropDescL();
+
+    /**
+     * Construct property description of OMADRM status.
+     * @return Property description dataset of oma drm status.
+     */
+    CMTPTypeObjectPropDesc* NewOMADRMStatusPropDescL();
+
+    };
+
+#endif // CMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderenumerator.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderenumerator.h	Fri Feb 26 18:11:38 2010 +0000
@@ -25,12 +25,6 @@
 #include "mmmtpenumerationcallback.h"
 #include "cmmmtpdpperflog.h"
 
-// keep here to avoid warning on urel
-_LIT( KDirectoryScan, "DirectoryScan" );
-_LIT( KFormatFilter, "FormatFilter" );
-_LIT( KObjectManagerObjectUid, "ObjectManagerObjectUid" );
-_LIT( KObjectManagerInsert, "ObjectManagerInsert" );
-
 // Forward declarations
 class MMTPDataProviderFramework;
 class MMTPObjectMgr;
@@ -63,7 +57,7 @@
     * @param aStorageId storage to be enumerated
     */
     void StartL( TUint32 aStorageId );
-    
+
     // introduce to cleanup db at close session
     void SessionClosedL();
 
@@ -192,7 +186,7 @@
 
     /** MTP Data Provider ID */
     TUint iDataProviderId;
-    
+
     CMediaMtpDataProvider& iDataProvider;
     TParse iPath;
     RDir iDir;
@@ -208,7 +202,7 @@
     // record the system tick
     TUint iTickCountBegin;
     TInt iTickPeriod;
-    
+
 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
     CMmMtpDpPerfLog* iPerfLog;
 #endif
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetformatcapabilities.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef CMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H
-#define CMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H
-
-#include "cgetformatcapabilities.h"
-
-class CMTPTypeObjectPropDesc;
-/**
-* Defines media data provider GetFormatCapabilities
-*/
-class CMediaMtpDataProviderGetFormatCapabilities : public CGetFormatCapabilities
-    {
-public:
-
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CMediaMtpDataProviderGetFormatCapabilities();
-
-protected:
-    // from CGetFormatCapabilities, override from baseclass
-    /**
-    * Service interdepent propdesc
-    */
-    void ServiceInterdepentPropDescL();
-
-    /**
-    * Service specific object property
-    * @param aPropCode, The prop code
-    * @return MTPType object propdesc
-    */
-    CMTPTypeObjectPropDesc* ServiceSpecificPropertyDescL( TUint16 aPropCode );
-
-private:
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    */
-    CMediaMtpDataProviderGetFormatCapabilities( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * two-phase construction
-    */
-    void ConstructL();
-
-    //functions used by ServiceInterdepentPropDesc
-    /**
-    * Service AudioWaveCodec
-    * @param aFormatCode, The format code
-    * @return MTPTypeInterdependentProperties
-    */
-    CMTPTypeObjectPropDesc* ServiceAudioWaveCodecL();
-
-    /**
-    * Service AudioBitrate
-    * @param aFormatCode, The format code
-    * @return MTPTypeInterdependentProperties
-    */
-    CMTPTypeObjectPropDesc* ServiceAudioBitrateL();
-
-    /**
-    * Service videoFourCCCodec
-    * @param aFormatCode, The format code
-    * @return MTPTypeInterdependentProperties
-    */
-    CMTPTypeObjectPropDesc* ServiceVideoFourCCCodecL();
-
-    /**
-    * Service VideoBitrate
-    * @param aFormatCode, The format code
-    * @return MTPTypeInterdependentProperties
-    */
-    CMTPTypeObjectPropDesc* ServiceVideoBitrateL();
-
-    /**
-    * Service RangeForm Description
-    * @param aMinValue The minimal value
-    * @param aMaxValue The maximal value
-    * @param aStepValue The step value
-    * @return MTPTypeObjectPropDescRangeForm
-    */
-    CMTPTypeObjectPropDesc* ServiceRangeFormDescriptionL( TUint16 aPropCode,
-        TUint32 aMinValue,
-        TUint32 aMaxValue,
-        TUint32 aStepValue,
-        TBool aIsReadOnly = EFalse );
-
-    //functions used by ServiceSpecificObjectPropertyL
-    /**
-    * Service number of channels
-    * @return MTPTypeObjectPropDesc
-    */
-    CMTPTypeObjectPropDesc* ServiceNumberOfChannelsL();
-
-    /**
-    * Service code sample rate
-    * @return MTPTypeObjectPropDesc
-    */
-    CMTPTypeObjectPropDesc* ServiceCodeSampleRateL();
-
-    /**
-    * Service description
-    * @return MTPTypeObjectPropDesc
-    */
-    CMTPTypeObjectPropDesc* ServiceDescriptionL();
-
-    /**
-    * Service scan type description
-    * @return MTPTypeObjectPropDesc
-    */
-    CMTPTypeObjectPropDesc* ServiceScanTypeDescriptionL();
-
-    /**
-    * Service encoding profile description
-    * @return MTPTypeObjectPropDesc
-    */
-    CMTPTypeObjectPropDesc* ServiceEncodingProfileDescriptionL();
-
-    /**
-    * Service DRM status
-    * @return MTPTypeObjectPropDesc
-    */
-    CMTPTypeObjectPropDesc* ServiceDRMStatusL();
-
-    /**
-    * Service OMADRM status
-    * @return MTPTypeObjectPropDesc
-    */
-    CMTPTypeObjectPropDesc* ServiceOMADRMStatusL();
-
-
-    };
-
-#endif // CMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetinterdependentpropdesc.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#ifndef CMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H
-#define CMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H
-
-#include <mtp/cmtptypeobjectpropdesc.h>
-#include "crequestprocessor.h"
-
-class CMTPTypeInterdependentPropDesc;
-class CMTPTypeInterdependentProperties;
-class MMmMtpDpConfig;
-
-/**
-* Defines media data provider GetInterDependentPropDesc request processor
-*/
-class CMediaMtpDataProviderGetInterDependentPropDesc: public CRequestProcessor
-    {
-public:
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CMediaMtpDataProviderGetInterDependentPropDesc();
-
-private:
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    */
-    CMediaMtpDataProviderGetInterDependentPropDesc( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection );
-
-protected:
-    // from CRequestProcessor
-    TMTPResponseCode CheckRequestL();
-    void ServiceL();
-
-private:
-    /**
-    * two-phase construction
-    */
-    void ConstructL();
-
-    void ServiceAudioWaveCodecL();
-    void ServiceAudioBitrateL();
-
-    void ServiceVideoFourCCCodecL();
-    void ServiceVideoBitrateL();
-
-    void ServiceRangeFormDescriptionL( TUint16 aPropCode,
-        TUint32 aMinValue,
-        TUint32 aMaxValue,
-        TUint32 aStepValue,
-        TBool aIsReadOnly = EFalse);
-
-    void SetFormForResponseL( TUint16 aPropertyCode,
-                CMTPTypeObjectPropDesc::TPropertyInfo& aPropInfo,
-                const MMTPType* aForm );
-
-private:
-    /** Dataset to store the prop descriptions*/
-    CMTPTypeInterdependentPropDesc* iDataset;
-
-    /**support configuration correctly*/
-    CMTPTypeInterdependentProperties* iProperties;
-
-    TUint32 iFormatCode;
-
-    };
-
-#endif // CMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetobjectpropdesc.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#ifndef CMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H
-#define CMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H
-
-#include "cgetobjectpropdesc.h"
-
-/**
-* Defines media data provider GetObjectPropDesc request processor
-*/
-class CMediaMtpDataProviderGetObjectPropDesc: public CGetObjectPropDesc
-    {
-public:
-
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CMediaMtpDataProviderGetObjectPropDesc();
-
-protected:
-    // from CGetObjectPropDesc, override from baseclass
-    void ServiceSpecificObjectPropertyL( TUint16 aPropCode );
-
-private:
-
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    */
-    CMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-    /**
-    * two-phase construction
-    */
-    void ConstructL();
-
-    void ServiceNumberOfChannelsL();
-    void ServiceCodeSampleRateL();
-    void ServiceCodeWaveCodecL();
-    void ServiceCodeAudioBitrateL();
-    void ServiceDurationL();
-    void ServiceDescriptionL();
-    void ServiceScanTypeDescriptionL();
-    void ServiceVideoFourCCCodecL();
-    void ServiceVideoBitrateL();
-    void ServiceEncodingProfileDescriptionL();
-    void ServiceDRMStatusL();
-    void ServiceOMADRMStatusL();
-
-    void ServiceRangeFormDescriptionL( TUint16 aPropCode,
-        TUint32 aMinValue,
-        TUint32 aMaxValue,
-        TUint32 aStepValue,
-        TBool aIsReadOnly = EFalse );
-
-    };
-
-#endif // CMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidermoveobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidermoveobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
@@ -62,15 +62,10 @@
     void ConstructL();
 
 protected:
-
     void ServiceGetSpecificObjectPropertyL( TUint16 aPropCode,
         TUint32 aHandle,
         const CMTPObjectMetaData& aObject );
 
-    TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement );
-
     };
 
 #endif // CMEDIAMTPDATAPROVIDERMOVEOBJECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderpropertysettingutility.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+
+#ifndef CMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H
+#define CMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H
+
+#include "cpropertysettingutility.h"
+
+/**
+* Defines media data provider SetObjectPropsList request processor
+*/
+class CMediaMtpDataProviderPropertySettingUtility: public CPropertySettingUtility
+    {
+public:
+    /**
+    * @param aFramework, The data provider framework
+    * @param aConnection, The connection from which the request comes
+    * @param aWrapper Medadata access
+    * @return A pointer to the created request processor object
+    */
+    static CMediaMtpDataProviderPropertySettingUtility* NewL();
+
+    /**
+    * Destructor
+    */
+    ~CMediaMtpDataProviderPropertySettingUtility();
+
+private:
+    /**
+    * Standard C++ Constructor
+    * @param aFramework, The data provider framework
+    * @param aConnection, The connection from which the request comes
+    * @param aWrapper Medadata access
+    */
+    CMediaMtpDataProviderPropertySettingUtility();
+
+protected:
+    TMTPResponseCode SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig,
+        TUint16 aPropCode,
+        const CMTPObjectMetaData& aObject,
+        const CMTPTypeObjectPropListElement& aElement );
+
+    };
+
+#endif // CMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidersendobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   *
-*/
-
-
-#ifndef CMEDIAMTPDATAPROVIDERSENDOBJECT_H_
-#define CMEDIAMTPDATAPROVIDERSENDOBJECT_H_
-
-#include "csendobject.h"
-
-/**
-* Defines media data provider SetObjectPropsList request processor
-*/
-class CMediaMtpDataProviderSendObject: public CSendObject
-    {
-public:
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CMediaMtpDataProviderSendObject();
-
-private:
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    */
-    CMediaMtpDataProviderSendObject( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * 2nd Phase Constructor
-    */
-    void ConstructL();
-
-protected:
-    // from CSendObject
-    TMTPResponseCode SetSpecificObjectPropertyL( TUint16 aPropCode,
-            const CMTPObjectMetaData& aObject,
-            const CMTPTypeObjectPropListElement& aElement );
-
-    TMTPResponseCode CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType );
-
-    TInt HandleSpecificWrapperError(TInt aError,
-            const CMTPObjectMetaData& aObject);
-
-    };
-
-
-#endif /*CMEDIAMTPDATAPROVIDERSENDOBJECT_H_*/
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidersetobjectproplist.h	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   *
-*/
-
-
-#ifndef CMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H
-#define CMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H
-
-#include"csetobjectproplist.h"
-
-/**
-* Defines media data provider SetObjectPropsList request processor
-*/
-class CMediaMtpDataProviderSetObjectPropList: public CSetObjectPropList
-    {
-public:
-    /**
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    * @return A pointer to the created request processor object
-    */
-    static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * Destructor
-    */
-    ~CMediaMtpDataProviderSetObjectPropList();
-
-private:
-    /**
-    * Standard C++ Constructor
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper Medadata access
-    */
-    CMediaMtpDataProviderSetObjectPropList( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig );
-
-    /**
-    * 2nd Phase Constructor
-    */
-    void ConstructL();
-
-protected:
-    // from CSetObjectPropList
-    TMTPResponseCode ServiceSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement );
-
-    TInt HandleSpecificWrapperError( TInt aError,
-        const CMTPObjectMetaData& aObject);
-
-    };
-
-#endif // CMEDIAMTPDATAPROVIDERGETOBJECTPROPLIST_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataprovider_config.rh	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Resource headers for project media mtp data provider
-*
-*/
-
-
-#ifndef MEDIAMTPDATAPROVIDER_RH
-#define MEDIAMTPDATAPROVIDER_RH
-
-// --------------------------------------------------------------------
-// Defines the resource type for media mtp data provider specific configuration data
-// --------------------------------------------------------------------
-//
-STRUCT MEDIAMTPDATAPROVIDE_CONFIG
-    {
-    LONG media_drive; // Symbian drive number @see TDrive
-    LTEXT media_folder_root;
-    LTEXT folder_exclusion_list[]; // What to exclude
-    }
-
-#endif // MEDIAMTPDATAPROVIDER_RH
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h	Fri Feb 26 18:11:38 2010 +0000
@@ -181,6 +181,8 @@
     EMTPOpCodeSetObjectPropList,
     EMTPOpCodeGetInterdependentPropDesc,
     EMTPOpCodeSendObjectPropList,
+
+    // window 7 extension
     EMTPOpCodeGetFormatCapabilities
     };
 
@@ -236,5 +238,4 @@
     EMTPExtObjectPropCodeOmaDrmStatus,
     };
 
-
 #endif // MEDIAMTPDATAPROVIDERCONST_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovider.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovider.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -15,7 +15,6 @@
 *
 */
 
-
 #include <mtp/mmtpconnection.h>
 #include <mtp/mmtpdataproviderframework.h>
 #include <mtp/mmtpstoragemgr.h>
@@ -36,6 +35,8 @@
 #include "crenameobject.h"
 #include "mmmtpdpdefs.h"
 #include "mmmtpdpfiledefs.h"
+#include "cmediamtpdataproviderpropertysettingutility.h"
+#include "cmediamtpdataproviderdescriptionutility.h"
 
 // Class constants.
 // Defines the number of MTP Active Processors allowed
@@ -77,6 +78,7 @@
     iSupportedPropVideo( KMediaMtpDpArrayGranularity ),
     iSupportedPropAll( KMediaMtpDpArrayGranularity )
     {
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -90,6 +92,8 @@
 
     CMmMtpDpAccessSingleton::Release();
     delete iMediaEnumerator;
+    delete iPropSettingUtility;
+    delete iDescriptionUtility;
 
     iPendingEnumerations.Close();
     TInt count = iActiveProcessors.Count();
@@ -132,6 +136,9 @@
     GetSupportedPropL();
     GetAllSupportedPropL();
 
+    iPropSettingUtility = CMediaMtpDataProviderPropertySettingUtility::NewL();
+    iDescriptionUtility = CMediaMtpDataProviderDescriptionUtility::NewL();
+
     PRINT( _L( "MM MTP <= CMediaMtpDataProvider::ConstructL" ) );
     }
 
@@ -162,13 +169,11 @@
         {
         case EMTPSessionClosed:
             PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPSessionClosed event recvd" ) );
-
             SessionClosedL( *reinterpret_cast<const TMTPNotificationParamsSessionChange*> ( aParams ) );
             break;
 
         case EMTPSessionOpened:
             PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPSessionOpened event recvd" ) );
-
             SessionOpenedL( *reinterpret_cast<const TMTPNotificationParamsSessionChange*> ( aParams ) );
             break;
 
@@ -205,14 +210,19 @@
 
     MMmRequestProcessor* processor = iActiveProcessors[index];
     iActiveProcessor = index;
-    // iActiveProcessorRemoved = EFalse;
+    iActiveProcessorRemoved = EFalse;
     TBool result = processor->HandleRequestL( aRequest, aPhase );
 
-    if( !iIsSessionOpen )
+    if ( !iIsSessionOpen )
         {
         processor->Release();
         }
-
+    // iActiveProcessorRemoved will be set to ETrue in the above function
+    // HandleRequestL(),such as SessionClose()
+    else if ( iActiveProcessorRemoved )
+        {
+        processor->Release(); // destroy the processor
+        }
     else if ( result ) // destroy the processor
         {
         processor->Release();
@@ -246,7 +256,14 @@
             processor->UsbDisconnect(); // Rollback
 
             iActiveProcessors.Remove( i );
-            processor->Release();
+            if ( i == iActiveProcessor )
+                {
+                iActiveProcessorRemoved = ETrue;
+                }
+            else
+                {
+                processor->Release();
+                }
             }
         }
 
@@ -500,7 +517,7 @@
 
 // -----------------------------------------------------------------------------
 // CMediaMtpDataProvider::GetWrapper
-// return the reference of CMmMtpDpMetadataAccessWrapper to enumerator
+// return wrapper references
 // -----------------------------------------------------------------------------
 //
 CMmMtpDpMetadataAccessWrapper& CMediaMtpDataProvider::GetWrapperL()
@@ -508,6 +525,26 @@
     return CMmMtpDpAccessSingleton::GetAccessWrapperL();
     }
 
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProvider::PropSettingUtility
+// return The utility to setting properties
+// -----------------------------------------------------------------------------
+//
+CPropertySettingUtility* CMediaMtpDataProvider::PropSettingUtility()
+    {
+    return iPropSettingUtility;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProvider::DescriptionUtility
+// return The utiltiy to setting descriptions
+// -----------------------------------------------------------------------------
+//
+CDescriptionUtility* CMediaMtpDataProvider::DescriptionUtility()
+    {
+    return iDescriptionUtility;
+    }
+
 // ---------------------------------------------------------------------------
 // CMediaMtpDataProvider::GetSupportedFormat
 //
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidercopyobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidercopyobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -65,7 +65,7 @@
 //
 CMediaMtpDataProviderCopyObject::~CMediaMtpDataProviderCopyObject()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -78,7 +78,7 @@
     MMmMtpDpConfig& aDpConfig ) :
     CCopyObject( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -124,10 +124,6 @@
                 {
                 iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
                 iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars());
-                
-//                iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                    aPropCode,
-//                    *textData );
                 }
 
             CleanupStack::PopAndDestroy( textData );  // - textData
@@ -148,10 +144,6 @@
                 {
                 iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
                 iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData);
-                
-//                iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                    aPropCode,
-//                    *desData );
                 }
 
             CleanupStack::PopAndDestroy( desData );  // - desData
@@ -173,12 +165,7 @@
                 {
                 iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
                 iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, uint16.Value());
-                
-//                iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                    aPropCode,
-//                    uint16 );
                 }
-
             }
             break;
 
@@ -204,9 +191,6 @@
                 {
                 iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
                 iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, uint32.Value());
-//                iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                    aPropCode,
-//                    uint32 );
                 }
             }
             break;
@@ -220,14 +204,9 @@
             if ( drmStatus == EMTPDrmStatusProtected )
                 result.Set( 1 );
 
-            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8);
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8 );
             iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, result.Value());
-            
-//            iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                aPropCode,
-//                EMTPTypeUINT8,
-//                result );
             }
             break;
 
@@ -242,9 +221,9 @@
     // leave for KErrNotSupported in base class like previous version.
     if ( ( err == KErrNotFound )
         || ( ( err == KErrNotSupported )
-        && ( ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeASF )
-        || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeMP4Container )
-        || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCode3GPContainer ) ) ) )
+            && ( ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeASF )
+                || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeMP4Container )
+                || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCode3GPContainer ) ) ) )
         {
         iPropertyElement = NULL;
         }
@@ -255,121 +234,4 @@
     PRINT( _L( "MM MTP <= CMediaMtpDataProviderCopyObject::ServiceSpecificObjectPropertyL" ) );
     }
 
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL
-//
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, const CMTPObjectMetaData& aObject,
-    const CMTPTypeObjectPropListElement& aElement )
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL" ) );
-    TMTPResponseCode responseCode( EMTPRespCodeOK );
-
-    switch ( aPropCode )
-        {
-        case EMTPObjectPropCodeArtist:
-        case EMTPObjectPropCodeGenre:
-        case EMTPObjectPropCodeComposer:
-        case EMTPObjectPropCodeOriginalReleaseDate:
-        case EMTPObjectPropCodeAlbumName:
-        case EMTPObjectPropCodeParentalRating:
-        case EMTPObjectPropCodeEncodingProfile:
-            {
-            CMTPTypeString* stringData =
-                CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
-
-            responseCode = ServiceMetaDataToWrapper( aPropCode,
-                *stringData,
-                aObject );
-
-            CleanupStack::PopAndDestroy( stringData ); // - stringData
-            }
-            break;
-
-        case EMTPObjectPropCodeVideoBitRate:
-            {
-            responseCode = EMTPRespCodeAccessDenied;
-            }
-            break;
-
-        case EMTPObjectPropCodeDescription:
-            {
-            CMTPTypeArray*  desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData
-//            aElement.GetL( CMTPTypeObjectPropListElement::EValue, *desData );
-            desData->SetByDesL(aElement.ArrayL(CMTPTypeObjectPropListElement::EValue));
-            //desData(aElement.ArrayL(CMTPTypeObjectPropListElement::EValue));
-            
-            responseCode = ServiceMetaDataToWrapper( aPropCode,
-                    *desData,
-                    aObject );
-            CleanupStack::PopAndDestroy( desData ); // - desData
-            }
-            break;
-
-        case EMTPObjectPropCodeWidth:
-        case EMTPObjectPropCodeHeight:
-        case EMTPObjectPropCodeDuration:
-        case EMTPObjectPropCodeUseCount:
-        case EMTPObjectPropCodeSampleRate:
-        case EMTPObjectPropCodeAudioWAVECodec:
-        case EMTPObjectPropCodeAudioBitRate:
-        case EMTPObjectPropCodeVideoFourCCCodec:
-        case EMTPObjectPropCodeFramesPerThousandSeconds:
-        case EMTPObjectPropCodeKeyFrameDistance:
-            {
-            TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) );
-            responseCode = ServiceMetaDataToWrapper( aPropCode,
-                uint32,
-                aObject );
-            }
-            break;
-
-        case EMTPObjectPropCodeTrack:
-        case EMTPObjectPropCodeNumberOfChannels:
-        case EMTPObjectPropCodeScanType:
-        case EMTPObjectPropCodeDRMStatus:
-            {
-            TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue ));
-            responseCode = ServiceMetaDataToWrapper( aPropCode,
-                uint16,
-                aObject );
-            }
-            break;
-
-        case EMTPExtObjectPropCodeOmaDrmStatus:
-            {
-            TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( CMTPObjectMetaData::ESuid ) );
-
-            if (drmStatus == EMTPDrmStatusUnknown)
-                {
-                responseCode = EMTPRespCodeAccessDenied;
-                }
-            else
-                {
-                TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
-
-                // there's no DB field to remember the value, so return an error
-                // if there's a mismatch to CAF protection status
-                if ( ( ( drmStatus == EMTPDrmStatusProtected) && ( newValue.Value() == 0 ) ) ||
-                    ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( newValue.Value() == 1 ) ) )
-                    {
-                    responseCode = EMTPRespCodeAccessDenied;
-                    }
-                }
-            }
-            break;
-
-        default:
-            {
-            User::Leave( KErrNotSupported );
-            }
-            break;
-        }
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL" ) );
-
-    return responseCode;
-    }
-
 // end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderdescriptionutility.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,635 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Media dp specific property description construction utility.
+*              Used by all request processors which related to property description
+*
+*/
+
+#include <mtp/cmtptypeobjectpropdesc.h>
+#include <mtp/cmtptypestring.h>
+
+#include "cmediamtpdataproviderdescriptionutility.h"
+#include "mediamtpdataproviderconst.h"
+#include "mmmtpdpconfig.h"
+#include "mmmtpdplogger.h"
+
+const TUint32 KMTPDescriptionLen = 0x00000200;
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CMediaMtpDataProviderDescriptionUtility* CMediaMtpDataProviderDescriptionUtility::NewL()
+    {
+    CMediaMtpDataProviderDescriptionUtility* self =
+        new( ELeave ) CMediaMtpDataProviderDescriptionUtility();
+
+    return self;
+    }
+
+CMediaMtpDataProviderDescriptionUtility::CMediaMtpDataProviderDescriptionUtility()
+    {
+    // Do nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL
+// Construct media dp specific interdependent property description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeInterdependentPropDesc* CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL( MMmMtpDpConfig& aDpConfig, TUint aFormatCode )
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) );
+
+    TBool audioWaveCodecSupported = EFalse;
+    TBool audioBitRateSupported = EFalse;
+    TBool videoFourCcCodecSupported = EFalse;
+    TBool videoBitRateSupported = EFalse;
+
+    const RArray<TUint>* properties = aDpConfig.GetSupportedPropertiesL( aFormatCode );
+
+    TInt count = properties->Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        switch ( ( *properties )[i] )
+            {
+            case EMTPObjectPropCodeAudioWAVECodec:
+                audioWaveCodecSupported = ETrue;
+                break;
+            case EMTPObjectPropCodeAudioBitRate:
+                audioBitRateSupported = ETrue;
+                break;
+            case EMTPObjectPropCodeVideoFourCCCodec:
+                videoFourCcCodecSupported = ETrue;
+                break;
+            case EMTPObjectPropCodeVideoBitRate:
+                videoBitRateSupported = ETrue;
+                break;
+            default:
+                // do nothing
+                break;
+            }
+        }
+
+    CMTPTypeInterdependentPropDesc* interdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL();
+
+    if ( audioWaveCodecSupported && audioBitRateSupported )
+        {
+        CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL();
+        properties->AppendL( NewAudioWaveCodecPropDescL( aFormatCode ) );
+        properties->AppendL( NewAudioBitratePropDescL( aFormatCode ) );
+        interdependentPropDesc->AppendL( properties );
+        }
+
+    if ( videoFourCcCodecSupported && videoBitRateSupported )
+        {
+        CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL();
+        properties->AppendL( NewVideoFourCCCodecPropDescL( aFormatCode ) );
+        properties->AppendL( NewVideoBitratePropDescL( aFormatCode ) );
+        interdependentPropDesc->AppendL( properties );
+        }
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) );
+    return interdependentPropDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL
+// Construct media dp specific property description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL( TUint aFormatCode, TUint16 aPropCode )
+    {
+    CMTPTypeObjectPropDesc* propertyDesc = NULL;
+
+    switch ( aPropCode )
+        {
+        // format specific
+        case EMTPObjectPropCodeArtist: // Artist
+        case EMTPObjectPropCodeTrack: // Track
+        case EMTPObjectPropCodeGenre: // Genre
+        case EMTPObjectPropCodeUseCount: // Use Count
+        case EMTPObjectPropCodeAlbumName: // Album Name
+        case EMTPObjectPropCodeAlbumArtist: // Album Artist
+        case EMTPObjectPropCodeOriginalReleaseDate: // Original Release Date
+        case EMTPObjectPropCodeComposer: // Composer
+        case EMTPObjectPropCodeParentalRating:
+            propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode );
+            break;
+
+        // Number of Channels (m)
+        case EMTPObjectPropCodeNumberOfChannels:
+            propertyDesc = NewNumberOfChannelsPropDescL();
+            break;
+
+        // Sample Rate (HAS MINIMUM AND MAX VALUE)
+        case EMTPObjectPropCodeSampleRate:
+            propertyDesc = NewCodeSampleRatePropDescL();
+            break;
+
+        // Audio Wave Codec (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
+        case EMTPObjectPropCodeAudioWAVECodec:
+            propertyDesc = NewAudioWaveCodecPropDescL( aFormatCode );
+            break;
+
+        // Audio Bit Rate (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
+        case EMTPObjectPropCodeAudioBitRate:
+            propertyDesc = NewAudioBitratePropDescL( aFormatCode );
+            break;
+
+        // Duration
+        case EMTPObjectPropCodeDuration:
+            propertyDesc = NewRangeFormDescriptionL( aPropCode,
+                EMTPMinDuration,
+                EMTPMaxDuration,
+                EMTPDurationStep );
+            break;
+
+        // Description
+        case EMTPObjectPropCodeDescription:
+            propertyDesc = NewDescriptionPropDescL();
+            break;
+
+        case EMTPObjectPropCodeWidth:
+            propertyDesc = NewRangeFormDescriptionL( aPropCode,
+                EMTPMinWidth,
+                EMTPMaxWidth,
+                EMTPStepWidth );
+            break;
+
+        case EMTPObjectPropCodeHeight:
+            propertyDesc = NewRangeFormDescriptionL( aPropCode,
+                EMTPMinHeight,
+                EMTPMaxHeight,
+                EMTPStepHeight );
+            break;
+
+        case EMTPObjectPropCodeScanType:
+            propertyDesc = NewScanTypeDescriptionPropDescL();
+            break;
+
+        case EMTPObjectPropCodeVideoFourCCCodec:
+            propertyDesc = NewVideoFourCCCodecPropDescL( aFormatCode );
+            break;
+
+        case EMTPObjectPropCodeVideoBitRate:
+            propertyDesc = NewVideoBitratePropDescL( aFormatCode );
+            break;
+
+        case EMTPObjectPropCodeFramesPerThousandSeconds:
+            propertyDesc = NewRangeFormDescriptionL( aPropCode,
+                EMTPMinFramesPerThousandSeconds,
+                EMTPMaxFramesPerThousandSeconds,
+                EMTPStepFramesPerThousandSeconds );
+            break;
+
+        case EMTPObjectPropCodeKeyFrameDistance:
+            propertyDesc = NewRangeFormDescriptionL( aPropCode,
+                EMTPMinKeyFrameDistance,
+                EMTPMaxKeyFrameDistance,
+                EMTPStepKeyFrameDistance );
+            break;
+
+        case EMTPObjectPropCodeEncodingProfile:
+            propertyDesc = NewEncodingProfileDescriptionPropDescL();
+            break;
+
+        case EMTPObjectPropCodeDRMStatus:
+            propertyDesc = NewDRMStatusPropDescL();
+            break;
+
+        case EMTPExtObjectPropCodeOmaDrmStatus:
+            propertyDesc = NewOMADRMStatusPropDescL();
+            break;
+
+        default:
+            // do nothing
+            break;
+        }
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewAudioWaveCodecPropDescL
+// Construct audio wave codec property description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewAudioWaveCodecPropDescL( TUint aFormatCode )
+    {
+    CMTPTypeObjectPropDescEnumerationForm* form =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 );    // + form
+
+    switch( aFormatCode )
+        {
+        case EMTPFormatCodeWMA:
+        case EMTPFormatCodeWMV:
+        case EMTPFormatCodeASF:
+            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) );
+            break;
+
+        case EMTPFormatCodeMP3:
+            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecMP3 ) );
+            break;
+
+        case EMTPFormatCodeMP4Container:
+        case EMTPFormatCode3GPContainer:
+        case EMTPFormatCodeAAC:
+            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecAAC ) );
+            break;
+
+        case EMTPFormatCodeWAV:
+            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecPCM ) );
+            break;
+
+        default:
+            User::Leave( KErrNotSupported );
+            break;
+        }
+
+    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form );
+
+    CleanupStack::PopAndDestroy( form ); // - form
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewAudioWaveCodecPropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewAudioBitratePropDescL
+// Construct audio bitrate property description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewAudioBitratePropDescL( TUint aFormatCode )
+    {
+    PRINT1( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewAudioBitratePropDescL, iFormatCode = 0x%x" ), aFormatCode );
+    CMTPTypeObjectPropDesc* propertyDesc = NULL;
+    switch( aFormatCode )
+        {
+        case EMTPFormatCodeWMA:
+        case EMTPFormatCodeWMV:
+        case EMTPFormatCodeASF:
+            propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+                EMTPWMAMinBitrate,
+                EMTPWMAMaxBitrate,
+                EMTPAudioBitrateStep );
+            break;
+
+        case EMTPFormatCodeMP3:
+            propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+                EMTPMP3MinBitrate,
+                EMTPMP3MaxBitrate,
+                EMTPAudioBitrateStep );
+            break;
+
+        case EMTPFormatCodeAAC:
+            propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+                EMTPAACMinBitrate,
+                EMTPAACMaxBitrate,
+                EMTPAudioBitrateStep );
+            break;
+
+        case EMTPFormatCodeWAV:
+            propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+                EMTPPCMMinBitrate,
+                EMTPPCMMaxBitrate,
+                EMTPAudioBitrateStep );
+            break;
+
+        case EMTPFormatCodeMP4Container:
+        case EMTPFormatCode3GPContainer:
+            propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+                EMTPAACPlusMinBitrate,
+                EMTPAACPlusMaxBitrate,
+                EMTPAudioBitrateStep );
+            break;
+
+        default:
+            // do nothing
+            break;
+        }
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewAudioBitratePropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewVideoFourCCCodecPropDescL
+// Construct property description of video fourCC codec.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewVideoFourCCCodecPropDescL( TUint aFormatCode )
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewVideoFourCCCodecPropDescL" ) );
+
+    CMTPTypeObjectPropDesc* propertyDesc = NULL;
+
+    if ( ( EMTPFormatCodeWMV == aFormatCode )
+        || ( EMTPFormatCodeASF == aFormatCode ) )
+        {
+        CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+            CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm
+
+        TUint32 values[] =
+            {
+            EMTPVideoFourCCCodecWMV3
+            };
+
+        TInt numValues = sizeof( values ) / sizeof( values[0] );
+        for ( TInt i = 0; i < numValues; i++ )
+            {
+            TMTPTypeUint32 data( values[i] );
+            expectedForm->AppendSupportedValueL( data );
+            }
+
+        propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeVideoFourCCCodec,
+            *expectedForm );
+
+        CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+        }
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewVideoFourCCCodecPropDescL" ) );
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewVideoBitratePropDescL
+// Construct property description of VideoBitrate.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewVideoBitratePropDescL( TUint aFormatCode )
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewVideoBitratePropDescL" ) );
+
+    CMTPTypeObjectPropDesc* propertyDesc = NULL;
+
+    if ( ( EMTPFormatCodeWMV == aFormatCode )
+        || ( EMTPFormatCodeASF == aFormatCode ) )
+        {
+        propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeVideoBitRate,
+            EMTPWMVMinBitrate,
+            EMTPWMVMaxBitrate,
+            EMTPVideoBitrateStep,
+            ETrue );
+        }
+
+    PRINT( _L( "MM MTP <= MmMtpDpDescriptionUtiliNewviceVideoBitratePropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewNumberOfChannelsPropDescL()
+// Construct property description of number of channels.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewNumberOfChannelsPropDescL()
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewNumberOfChannelsPropDescL" ) );
+
+    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
+
+    TUint16 values[] =
+        {
+        EMTPChannelMono,
+        EMTPChannelStereo
+        };
+
+    TInt numValues = sizeof( values ) / sizeof( values[0] );
+    for ( TInt i = 0; i < numValues; i++ )
+        {
+        TMTPTypeUint16 data( values[i] );
+        expectedForm->AppendSupportedValueL( data );
+        }
+
+    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNumberOfChannels,
+        *expectedForm );
+
+    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewNumberOfChannelsPropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewCodeSampleRatePropDescL
+// Construct property description of code sample rate.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewCodeSampleRatePropDescL()
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewCodeSampleRatePropDescL" ) );
+
+    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm
+
+    TUint32 values[] =
+        {
+            EMTPSampleRate8K,
+            EMTPSampleRate16K,
+            EMTPSampleRate22_05K,
+            EMTPSampleRate24K,
+            EMTPSampleRate32K,
+            EMTPSampleRate44_1K,
+            EMTPSampleRate48K
+        };
+
+    TInt numValues = sizeof( values ) / sizeof( values[0] );
+    for ( TInt i = 0; i < numValues; i++ )
+        {
+        TMTPTypeUint32 data( values[i] );
+        expectedForm->AppendSupportedValueL( data );
+        }
+
+    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeSampleRate,
+        CMTPTypeObjectPropDesc::EEnumerationForm,
+        expectedForm );
+
+    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewCodeSampleRatePropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewDescriptionPropDescL()
+// Construct property description of description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewDescriptionPropDescL()
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewDescriptionPropDescL" ) );
+
+    TMTPTypeUint32 uint32Data( KMTPDescriptionLen );
+    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDescription,
+        CMTPTypeObjectPropDesc::ELongStringForm,
+        &uint32Data );
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewDescriptionPropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewScanTypeDescriptionPropDescL
+// Construct property description of scan type description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewScanTypeDescriptionPropDescL()
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewScanTypeDescriptionPropDescL" ) );
+
+    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
+
+    TUint16 values[] =
+        {
+        EMTPScanTypeProgressive
+        };
+
+    TInt numValues = sizeof( values ) / sizeof( values[0] );
+    for ( TInt i = 0; i < numValues; i++ )
+        {
+        TMTPTypeUint16 data( values[i] );
+        expectedForm->AppendSupportedValueL( data );
+        }
+
+    CMTPTypeObjectPropDesc* propertyDesc = NULL;
+    propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeScanType,
+        *expectedForm );
+
+    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewScanTypeDescriptionPropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewEncodingProfileDescriptionPropDescL
+// Construct property description of encoding profile description.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewEncodingProfileDescriptionPropDescL()
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewEncodingProfileDescriptionPropDescL" ) );
+
+    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeString ); // + expectedForm
+
+    CMTPTypeString* string = CMTPTypeString::NewLC( _L( "SP@LL" ) );    // + string
+    expectedForm->AppendSupportedValueL( *string );
+    string->SetL( _L("SP@ML"));
+    expectedForm->AppendSupportedValueL( *string );
+    string->SetL( _L("MP@LL"));
+    expectedForm->AppendSupportedValueL( *string );
+
+    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
+    propertyInfo.iDataType = EMTPTypeString;
+    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
+    propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
+
+    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeEncodingProfile,
+            propertyInfo,
+            expectedForm );
+
+    CleanupStack::PopAndDestroy( string );       // - string
+    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewEncodingProfileDescriptionPropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewDRMStatusPropDescL
+// Construct property description of DRM status.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewDRMStatusPropDescL()
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewDRMStatusPropDescL" ) );
+
+    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
+
+    TUint16 values[] =
+        {
+        EMTPDrmNoProtection,
+        EMTPDrmProtection,
+        EMTPDrmReserveForMTP,
+        EMTPDrmVenderExtension
+        };
+
+    TInt numValues = sizeof( values ) / sizeof( values[0] );
+    for ( TInt i = 0; i < numValues; i++ )
+        {
+        TMTPTypeUint16 data( values[i] );
+        expectedForm->AppendSupportedValueL( data );
+        }
+
+    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDRMStatus,
+        *expectedForm );
+
+    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewDRMStatusPropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewOMADRMStatusPropDescL
+// Construct property description of OMADRM status.
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewOMADRMStatusPropDescL()
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::NewOMADRMStatusPropDescL" ) );
+
+    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 );  // + expectedForm
+
+    TUint8 values[] =
+        {
+        EMTPOMADrmNoProtection,
+        EMTPOMADrmProtection,
+        };
+
+    TInt numValues = sizeof( values ) / sizeof( values[0] );
+    for ( TInt i = 0; i < numValues; i++ )
+        {
+        TMTPTypeUint8 data( values[i] );
+        expectedForm->AppendSupportedValueL( data );
+        }
+
+    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
+    propertyInfo.iDataType = EMTPTypeUINT8;
+    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
+
+    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPExtObjectPropCodeOmaDrmStatus,
+        propertyInfo,
+        expectedForm );
+
+    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::NewOMADRMStatusPropDescL" ) );
+
+    return propertyDesc;
+    }
+
+// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderenumerator.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderenumerator.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -30,6 +30,14 @@
 #include "cmmmtpdpaccesssingleton.h"
 #include "cmmmtpdpmetadataaccesswrapper.h"
 
+
+#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
+_LIT( KDirectoryScan, "DirectoryScan" );
+_LIT( KFormatFilter, "FormatFilter" );
+_LIT( KObjectManagerObjectUid, "ObjectManagerObjectUid" );
+_LIT( KObjectManagerInsert, "ObjectManagerInsert" );
+#endif
+
 // Unit: microsecond
 const TInt KThresholdOfEnumerationLoopDuration = 1000 * 1000; // microsecond
 
@@ -187,7 +195,7 @@
     TFileName root( storage.DesC( CMTPStorageMetaData::EStorageSuid ) );
     PRINT2( _L("MM MTP <> CMediaMtpDataProviderEnumerator::ScanStorageL aStorageId = 0x%x, StorageSuid = %S"), aStorageId, &root );
 
-    iParentHandle = KMTPHandleNone;
+    iParentHandle = KMTPHandleNoParent;
     iPath.Set( root, NULL, NULL);
     iDir.Close();
     User::LeaveIfError( iDir.Open( iFramework.Fs(),
@@ -218,7 +226,6 @@
         }
     else
         {
-
         // Round trip suppport
         const CMTPStorageMetaData& storage( iFramework.StorageMgr().StorageL( iStorages[0] ) );
         TFileName root( storage.DesC( CMTPStorageMetaData::EStorageSuid ) );
@@ -283,7 +290,7 @@
                 delete entry;
                 entry = NULL;
                 iDir.Close();
-    
+
                 // Scan the next directory of the parent
                 ScanNextDirL();
                 }
@@ -314,9 +321,9 @@
     // A empty (non-constructed) TEntry is our marker telling us to pop a directory
     // from iPath when we see this
     TEntry* entry = new TEntry( TEntry() );
-    
+
     User::LeaveIfNull( entry );
-    
+
     iDirStack.AppendL( entry );
 
     // Leave with KErrNotFound if we don't find the object handle since it shouldn't be on the
@@ -326,7 +333,7 @@
     PERFLOGSTART( KObjectManagerObjectUid );
     iParentHandle = iFramework.ObjectMgr().HandleL( suid );
     PERFLOGSTOP( KObjectManagerObjectUid );
-    PRINT1( _L( "MM MTP <> iParentHandle = 0x%Lx" ), iParentHandle );
+    PRINT1( _L( "MM MTP <> iParentHandle = 0x%x" ), iParentHandle );
 
     // Kick-off a scan of the next directory
     iDir.Close();
@@ -553,7 +560,7 @@
 //
 TBool CMediaMtpDataProviderEnumerator::IsFileAccepted( const TDesC& aFullFileName )
     {
-    PERFLOGSTART(KFormatFilter);
+    PERFLOGSTART( KFormatFilter );
     iFormatCode = GetObjectFormatCode( aFullFileName );
     PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::IsFileAcceptedL formatCode = 0x%x" ), iFormatCode );
     TBool accepted = EFalse;
@@ -567,7 +574,7 @@
             }
         }
 
-    PERFLOGSTOP(KFormatFilter);
+    PERFLOGSTOP( KFormatFilter );
     return accepted;
     }
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetformatcapabilities.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,795 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:
- *
- */
-#include <mtp/cmtptypeobjectpropdesc.h>
-#include <mtp/mtpprotocolconstants.h>
-#include <mtp/cmtptypestring.h>
-
-#include "cmediamtpdataprovidergetobjectpropdesc.h"
-#include "mediamtpdataproviderconst.h"
-#include "cmediamtpdataprovidergetformatcapabilities.h"
-#include "mmmtpdplogger.h"
-
-const TUint32 KMTPDescriptionLen = 0x00000200;
-
-// forward declaration
-class MMmMtpDpConfig;
-class CMTPTypeObjectPropDesc;
-class CMTPTypeInterdependentPropDesc;
-class CMTPTypeObjectPropDesc;
-class CMTPTypeString;
-class CGetFormatCapabilities;
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CMediaMtpDataProviderGetFormatCapabilities::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
-    {
-    CMediaMtpDataProviderGetFormatCapabilities* self =
-        new ( ELeave ) CMediaMtpDataProviderGetFormatCapabilities( aFramework,
-            aConnection,
-            aDpConfig );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ConstructL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetFormatCapabilities::ConstructL()
-    {
-    CGetFormatCapabilities::ConstructL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::~CMediaMtpDataProviderGetFormatCapabilities()
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderGetFormatCapabilities::~CMediaMtpDataProviderGetFormatCapabilities()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::CMediaMtpDataProviderGetFormatCapabilities
-// Standard c++ constructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderGetFormatCapabilities::CMediaMtpDataProviderGetFormatCapabilities( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig ) :
-    CGetFormatCapabilities( aFramework, aConnection, aDpConfig )
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL" ) );
-
-    iInterdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL();
-
-    TBool audioWaveCodecSupported = EFalse;
-    TBool audioBitRateSupported = EFalse;
-    TBool videoFourCcCodecSupported = EFalse;
-    TBool videoBitRateSupported = EFalse;
-
-    switch ( iFormatCode )
-        {
-        case EMTPFormatCodeWMA:
-        case EMTPFormatCodeMP3:
-        case EMTPFormatCodeAAC:
-        case EMTPFormatCodeWAV:
-            {
-            TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
-
-            for ( TInt i = 0; i < count; i++ )
-                {
-                switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
-                    {
-                    case EMTPObjectPropCodeAudioWAVECodec:
-                        audioWaveCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeAudioBitRate:
-                        audioBitRateSupported = ETrue;
-                        break;
-                    default:
-                        // do nothing
-                        break;
-                    }
-                }
-            }
-            break;
-
-        case EMTPFormatCodeMP4Container:
-            {
-            TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
-
-            for ( TInt i = 0; i < count; i++ )
-                {
-                switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
-                    {
-                    case EMTPObjectPropCodeAudioWAVECodec:
-                        audioWaveCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeAudioBitRate:
-                        audioBitRateSupported = ETrue;
-                        break;
-                    default:
-                        // do nothing
-                        break;
-                    }
-                }
-            }
-            break;
-
-        case EMTPFormatCode3GPContainer:
-            {
-            TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
-
-            for ( TInt i = 0; i < count; i++ )
-                {
-                switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
-                    {
-                    case EMTPObjectPropCodeAudioWAVECodec:
-                        audioWaveCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeAudioBitRate:
-                        audioBitRateSupported = ETrue;
-                        break;
-                    default:
-                        // do nothing
-                        break;
-                    }
-                }
-            }
-            break;
-
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            {
-            TInt count = sizeof( KMmMtpDpSupportedPropMandatoryWMV ) / sizeof( TUint16 );
-
-            for ( TInt i = 0; i < count; i++ )
-                {
-                switch ( KMmMtpDpSupportedPropMandatoryWMV[i] )
-                    {
-                    case EMTPObjectPropCodeAudioWAVECodec:
-                        audioWaveCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeAudioBitRate:
-                        audioBitRateSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeVideoFourCCCodec:
-                        videoFourCcCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeVideoBitRate:
-                        videoBitRateSupported = ETrue;
-                        break;
-                    default:
-                        // do nothing
-                        break;
-                    }
-                }
-            }
-            break;
-
-        default:
-            {
-            User::Leave( KErrNotSupported );
-            }
-            break;
-        }
-
-
-    if ( audioWaveCodecSupported && audioBitRateSupported )
-        {
-        CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL();
-        if ( videoFourCcCodecSupported && videoBitRateSupported )
-            {
-            // TODO: need to confirm
-            properties->AppendL( ServiceVideoFourCCCodecL() );
-            properties->AppendL( ServiceVideoBitrateL() );
-            iInterdependentPropDesc->AppendL( properties );
-            }
-        properties = CMTPTypeInterdependentProperties::NewL();
-        properties->AppendL( ServiceAudioWaveCodecL() );
-        properties->AppendL( ServiceAudioBitrateL() );
-        iInterdependentPropDesc->AppendL( properties );
-        }
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioWaveCodecL
-//
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioWaveCodecL()
-    {
-    PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioWaveCodecL, iFormatCode = 0x%X" ), iFormatCode );
-    CMTPTypeObjectPropDescEnumerationForm* form =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 );    // + form
-
-    switch( iFormatCode )
-        {
-        case EMTPFormatCodeWMA:
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) );
-            break;
-
-        case EMTPFormatCodeMP3:
-            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecMP3 ) );
-            break;
-
-        case EMTPFormatCodeMP4Container:
-        case EMTPFormatCode3GPContainer:
-        case EMTPFormatCodeAAC:
-            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecAAC ) );
-            break;
-
-        case EMTPFormatCodeWAV:
-            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecPCM ) );
-            break;
-
-        default:
-            User::Leave( KErrNotSupported );
-            break;
-        }
-
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewLC( EMTPObjectPropCodeAudioWAVECodec, *form );    // + propertyDesc
-
-    // Set group code
-    propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode,
-        EGroupCodeMediaDB );
-    CleanupStack::Pop( propertyDesc );    // - propertyDesc
-    CleanupStack::PopAndDestroy( form ); // - form
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioWaveCodecL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioBitrateL
-//
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioBitrateL()
-    {
-    PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioBitrateL, iFormatCode = 0x%X" ), iFormatCode );
-    CMTPTypeObjectPropDesc* propertyDesc = NULL;
-    switch( iFormatCode )
-        {
-        case EMTPFormatCodeWMA:
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPWMAMinBitrate,
-                EMTPWMAMaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        case EMTPFormatCodeMP3:
-            propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPMP3MinBitrate,
-                EMTPMP3MaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        case EMTPFormatCodeAAC:
-            propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPAACMinBitrate,
-                EMTPAACMaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        case EMTPFormatCodeWAV:
-            propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPPCMMinBitrate,
-                EMTPPCMMaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        case EMTPFormatCodeMP4Container:
-        case EMTPFormatCode3GPContainer:
-            propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPAACPlusMinBitrate,
-                EMTPAACPlusMaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        default:
-            User::Leave( KErrNotSupported );
-            break;
-        }
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioBitrateL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoFourCCCodecL
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoFourCCCodecL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoFourCCCodecL" ) );
-    CMTPTypeObjectPropDesc* propertyDesc = NULL;
-    if ( ( EMTPFormatCodeWMV == iFormatCode )
-        || ( EMTPFormatCodeASF == iFormatCode ) )
-        {
-        CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-            CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm
-
-        TUint32 values[] =
-            {
-            EMTPVideoFourCCCodecWMV3
-            };
-
-        TInt numValues = sizeof( values ) / sizeof( values[0] );
-        for ( TInt i = 0; i < numValues; i++ )
-            {
-            TMTPTypeUint32 data( values[i] );
-            expectedForm->AppendSupportedValueL( data );
-            }
-        propertyDesc = CMTPTypeObjectPropDesc::NewLC( EMTPObjectPropCodeVideoFourCCCodec,
-            *expectedForm );    // + propertyDesc
-        // Set group code
-        propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode,
-            EGroupCodeMediaDB );
-        CleanupStack::Pop( propertyDesc ); // - propertyDesc
-        CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-        }
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoFourCCCodecL" ) );
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoBitrateL
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoBitrateL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoBitrateL" ) );
-    CMTPTypeObjectPropDesc* propertyDesc = NULL;
-    if ( ( EMTPFormatCodeWMV == iFormatCode )
-        || ( EMTPFormatCodeASF == iFormatCode ) )
-        {
-        propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeVideoBitRate,
-            EMTPWMVMinBitrate,
-            EMTPWMVMaxBitrate,
-            EMTPVideoBitrateStep,
-            ETrue );
-        }
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoBitrateL" ) );
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceRangeFormDescriptionL
-//
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceRangeFormDescriptionL( TUint16 aPropertyCode,
-    TUint32 aMinValue,
-    TUint32 aMaxValue,
-    TUint32 aStepValue,
-    TBool aIsReadOnly )
-    {
-    PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceRangeFormDescriptionL, aPropertyCode = 0x%X" ),
-        aPropertyCode );
-    CMTPTypeObjectPropDescRangeForm* form =
-        CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
-
-    // Set expected values
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue );
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue );
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue );
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeUINT32;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm;
-    propertyInfo.iGetSet = !aIsReadOnly;
-
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewLC( aPropertyCode,
-        propertyInfo,
-        form );    // + propertyDesc
-    // Set group code
-    propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, EGroupCodeMediaDB );
-
-    CleanupStack::Pop( propertyDesc );     // - propertyDesc
-    CleanupStack::PopAndDestroy( form ); // - form
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceRangeFormDescriptionL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificpropertyDescL
-//
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificPropertyDescL( TUint16 aPropertyCode )
-    {
-    PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificPropertyDescL, aPropertyCode = 0x%X" ), aPropertyCode );
-    // Property object to return with the desc value
-    CMTPTypeObjectPropDesc* propertyDesc = NULL;
-
-    switch ( aPropertyCode )
-        {
-        // format specific
-        case EMTPObjectPropCodeArtist: // Artist
-        case EMTPObjectPropCodeTrack: // Track
-        case EMTPObjectPropCodeGenre: // Genre
-        case EMTPObjectPropCodeUseCount: // Use Count
-        case EMTPObjectPropCodeAlbumName: // Album Name
-        case EMTPObjectPropCodeAlbumArtist: // Album Artist
-        case EMTPObjectPropCodeOriginalReleaseDate: // Original Release Date
-        case EMTPObjectPropCodeComposer: // Composer
-        case EMTPObjectPropCodeParentalRating:
-            propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropertyCode );
-            break;
-
-            // Number of Channels (m)
-        case EMTPObjectPropCodeNumberOfChannels:
-            propertyDesc = ServiceNumberOfChannelsL();
-            break;
-
-            // Sample Rate (HAS MINIMUM AND MAX VALUE)
-        case EMTPObjectPropCodeSampleRate:
-            propertyDesc = ServiceCodeSampleRateL();
-            break;
-
-            // Audio Wave Codec (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
-        case EMTPObjectPropCodeAudioWAVECodec:
-            propertyDesc = ServiceAudioWaveCodecL();
-            break;
-
-            // Audio Bit Rate (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
-        case EMTPObjectPropCodeAudioBitRate:
-            propertyDesc = ServiceAudioBitrateL();
-            break;
-
-            // Duration
-        case EMTPObjectPropCodeDuration:
-            propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode,
-                EMTPMinDuration,
-                EMTPMaxDuration,
-                EMTPDurationStep );
-            break;
-
-            // Description
-        case EMTPObjectPropCodeDescription:
-            propertyDesc = ServiceDescriptionL();
-            break;
-
-        case EMTPObjectPropCodeWidth:
-            propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode,
-                EMTPMinWidth,
-                EMTPMaxWidth,
-                EMTPStepWidth );
-            break;
-
-        case EMTPObjectPropCodeHeight:
-            propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode,
-                EMTPMinHeight,
-                EMTPMaxHeight,
-                EMTPStepHeight );
-            break;
-
-        case EMTPObjectPropCodeScanType:
-            propertyDesc = ServiceScanTypeDescriptionL();
-            break;
-
-        case EMTPObjectPropCodeVideoFourCCCodec:
-            propertyDesc = ServiceVideoFourCCCodecL();
-            break;
-
-        case EMTPObjectPropCodeVideoBitRate:
-            propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode,
-                EMTPWMVMinBitrate,
-                EMTPWMVMaxBitrate,
-                EMTPVideoBitrateStep,
-                ETrue );
-            break;
-
-        case EMTPObjectPropCodeFramesPerThousandSeconds:
-            propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode,
-                EMTPMinFramesPerThousandSeconds,
-                EMTPMaxFramesPerThousandSeconds,
-                EMTPStepFramesPerThousandSeconds );
-            break;
-
-        case EMTPObjectPropCodeKeyFrameDistance:
-            propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode,
-                EMTPMinKeyFrameDistance,
-                EMTPMaxKeyFrameDistance,
-                EMTPStepKeyFrameDistance );
-            break;
-
-        case EMTPObjectPropCodeEncodingProfile:
-            propertyDesc = ServiceEncodingProfileDescriptionL();
-            break;
-
-        case EMTPObjectPropCodeDRMStatus:
-            propertyDesc = ServiceDRMStatusL();
-            break;
-
-        case EMTPExtObjectPropCodeOmaDrmStatus:
-            propertyDesc = ServiceOMADRMStatusL();
-            break;
-
-        default:
-            User::Leave( KErrNotSupported );
-            break;
-        }
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificPropertyDescL" ) );
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceNumberOfChannelsL()
-// Create list of possible Channel numbers and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceNumberOfChannelsL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceNumberOfChannelsL" ) );
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPChannelMono,
-        EMTPChannelStereo
-        };
-
-    TInt numValues = sizeof( values ) / sizeof( values[0] );
-
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNumberOfChannels,
-        *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceNumberOfChannelsL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-//CMediaMtpDataProviderGetFormatCapabilities::ServiceCodeSampleRateL
-// Create list of possible Sample rate list and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceCodeSampleRateL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceCodeSampleRateL" ) );
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm
-
-    TUint32 values[] =
-        {
-            EMTPSampleRate8K,
-            EMTPSampleRate16K,
-            EMTPSampleRate22_05K,
-            EMTPSampleRate24K,
-            EMTPSampleRate32K,
-            EMTPSampleRate44_1K,
-            EMTPSampleRate48K
-        };
-
-    TInt numValues = sizeof( values ) / sizeof( values[0] );
-
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint32 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeSampleRate,
-        CMTPTypeObjectPropDesc::EEnumerationForm,
-        expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceCodeSampleRateL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceDescriptionL()
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceDescriptionL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceDescriptionL" ) );
-
-    TMTPTypeUint32 uint32Data( KMTPDescriptionLen );
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDescription,
-        CMTPTypeObjectPropDesc::ELongStringForm,
-        &uint32Data );
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceDescriptionL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-//CMediaMtpDataProviderGetFormatCapabilities::ServiceScanTypeDescriptionL
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceScanTypeDescriptionL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceScanTypeDescriptionL" ) );
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPScanTypeProgressive
-        };
-
-    TInt numValues = sizeof( values ) / sizeof( values[0] );
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc* propertyDesc = NULL;
-    propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeScanType,
-        *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceScanTypeDescriptionL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceEncodingProfileDescriptionL
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceEncodingProfileDescriptionL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceEncodingProfileDescriptionL" ) );
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeString ); // + expectedForm
-
-    CMTPTypeString* string = CMTPTypeString::NewLC( _L( "SP@LL" ) );    // + string
-    expectedForm->AppendSupportedValueL( *string );
-    string->SetL( _L("SP@ML"));
-    expectedForm->AppendSupportedValueL( *string );
-    string->SetL( _L("MP@LL"));
-    expectedForm->AppendSupportedValueL( *string );
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeString;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-    propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
-
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeEncodingProfile,
-            propertyInfo,
-            expectedForm );
-
-    CleanupStack::PopAndDestroy( string );       // - string
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceEncodingProfileDescriptionL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceDRMStatusL
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceDRMStatusL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceDRMStatusL" ) );
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPDrmNoProtection,
-        EMTPDrmProtection,
-        EMTPDrmReserveForMTP,
-        EMTPDrmVenderExtension
-        };
-
-    TInt numValues = sizeof( values ) / sizeof( values[0] );
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDRMStatus,
-        *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceDRMStatusL" ) );
-
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetFormatCapabilities::ServiceOMADRMStatusL
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceOMADRMStatusL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceOMADRMStatusL" ) );
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 );  // + expectedForm
-
-    TUint8 values[] =
-        {
-        EMTPOMADrmNoProtection,
-        EMTPOMADrmProtection,
-        };
-
-    TInt numValues = sizeof( values ) / sizeof( values[0] );
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint8 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeUINT8;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPExtObjectPropCodeOmaDrmStatus,
-        propertyInfo,
-        expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceOMADRMStatusL" ) );
-
-    return propertyDesc;
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetinterdependentpropdesc.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,461 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: GetInterdenpendentPropDesc
-*
-*/
-
-
-#include "cmediamtpdataprovidergetinterdependentpropdesc.h"
-#include "mediamtpdataproviderconst.h"
-#include "mmmtpdplogger.h"
-#include "tobjectdescription.h"
-#include "mmmtpdpdefs.h"
-#include "mmmtpdpconfig.h"
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetInterDependentPropDesc::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CMediaMtpDataProviderGetInterDependentPropDesc::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
-    {
-    CMediaMtpDataProviderGetInterDependentPropDesc* self =
-        new ( ELeave ) CMediaMtpDataProviderGetInterDependentPropDesc( aFramework,
-            aConnection );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaDpMtpGetInterDependentPropDesc::ConstructL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetInterDependentPropDesc::ConstructL()
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetInterDependentPropDesc::~CMediaMtpDataProviderGetInterDependentPropDesc
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderGetInterDependentPropDesc::~CMediaMtpDataProviderGetInterDependentPropDesc()
-    {
-    delete iDataset;
-    delete iProperties;
-    }
-
-// -----------------------------------------------------------------------------
-// CMTPGetInterDependentPropDesc::CMTPGetInterDependentPropDesc
-// Standard c++ constructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderGetInterDependentPropDesc::CMediaMtpDataProviderGetInterDependentPropDesc( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection ) :
-    CRequestProcessor( aFramework, aConnection, 0, NULL )
-    {
-    PRINT( _L( "Operation: GetInterdependentPropDesc(0x9807)" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetInterDependentPropDesc::CheckRequestL
-// Verify the reqeust and returns it
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CMediaMtpDataProviderGetInterDependentPropDesc::CheckRequestL()
-    {
-    TMTPResponseCode responseCode = CRequestProcessor::CheckRequestL();
-    iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
-
-    if ( EMTPRespCodeOK == responseCode )
-        {
-        TInt count = sizeof( KMediaMtpDataProviderSupportedFormats ) / sizeof( TUint16 );
-
-        responseCode = EMTPRespCodeInvalidObjectFormatCode;
-
-        for ( TInt i = 0; i < count; i++ )
-            {
-            if ( iFormatCode == KMediaMtpDataProviderSupportedFormats[i] )
-                {
-                responseCode = EMTPRespCodeOK;
-                break;
-                }
-            }
-        }
-
-    return responseCode;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL
-// service a request at request phase
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL" ) );
-
-    // Clear the data set.
-    delete iDataset;
-    iDataset = NULL;
-    iDataset = CMTPTypeInterdependentPropDesc::NewL();
-
-    TBool audioWaveCodecSupported = EFalse;
-    TBool audioBitRateSupported = EFalse;
-    TBool videoFourCcCodecSupported = EFalse;
-    TBool videoBitRateSupported = EFalse;
-
-    switch ( iFormatCode )
-        {
-        case EMTPFormatCodeWMA:
-        case EMTPFormatCodeMP3:
-        case EMTPFormatCodeAAC:
-        case EMTPFormatCodeWAV:
-            {
-            TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
-
-            for ( TInt i = 0; i < count; i++ )
-                {
-                switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
-                    {
-                    case EMTPObjectPropCodeAudioWAVECodec:
-                        audioWaveCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeAudioBitRate:
-                        audioBitRateSupported = ETrue;
-                        break;
-                    default:
-                        PRINT( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL default" ) );
-                        // do nothing
-                        break;
-                    }
-                }
-            }
-            break;
-
-        case EMTPFormatCodeMP4Container:
-            {
-            TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
-
-            for ( TInt i = 0; i < count; i++ )
-                {
-                switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
-                    {
-                    case EMTPObjectPropCodeAudioWAVECodec:
-                        audioWaveCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeAudioBitRate:
-                        audioBitRateSupported = ETrue;
-                        break;
-                    default:
-                        // do nothing
-                        break;
-                    }
-                }
-            }
-            break;
-
-        case EMTPFormatCode3GPContainer:
-            {
-            TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
-
-            for ( TInt i = 0; i < count; i++ )
-                {
-                switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
-                    {
-                    case EMTPObjectPropCodeAudioWAVECodec:
-                        audioWaveCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeAudioBitRate:
-                        audioBitRateSupported = ETrue;
-                        break;
-                    default:
-                        // do nothing
-                        break;
-                    }
-                }
-            }
-            break;
-
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            {
-            TInt count = sizeof( KMmMtpDpSupportedPropMandatoryWMV ) / sizeof( TUint16 );
-
-            for ( TInt i = 0; i < count; i++ )
-                {
-                switch (KMmMtpDpSupportedPropMandatoryWMV[i] )
-                    {
-                    case EMTPObjectPropCodeAudioWAVECodec:
-                        audioWaveCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeAudioBitRate:
-                        audioBitRateSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeVideoFourCCCodec:
-                        videoFourCcCodecSupported = ETrue;
-                        break;
-                    case EMTPObjectPropCodeVideoBitRate:
-                        videoBitRateSupported = ETrue;
-                        break;
-                    default:
-                        // do nothing
-                        break;
-                    }
-                }
-            }
-            break;
-
-        default:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave( KErrNotSupported );
-            }
-            break;
-        }
-
-    if ( audioWaveCodecSupported && audioBitRateSupported )
-        {
-        if ( videoFourCcCodecSupported && videoBitRateSupported )
-            {
-            iProperties = CMTPTypeInterdependentProperties::NewL();
-            ServiceVideoFourCCCodecL();
-            ServiceVideoBitrateL();
-            iDataset->AppendL( iProperties );
-//            CleanupStack::Pop();
-            iProperties = NULL;
-            }
-
-        iProperties = CMTPTypeInterdependentProperties::NewL();
-        ServiceAudioWaveCodecL();
-        ServiceAudioBitrateL();
-        iDataset->AppendL( iProperties );
-//        CleanupStack::Pop();
-        iProperties = NULL;
-        }
-
-    // Send the dataset.
-    SendDataL( *iDataset );
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL()
-    {
-    CMTPTypeObjectPropDescEnumerationForm* form =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 );
-
-    switch( iFormatCode )
-        {
-        case EMTPFormatCodeWMA:
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) );
-            break;
-
-        case EMTPFormatCodeMP3:
-            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecMP3 ) );
-            break;
-
-        case EMTPFormatCodeMP4Container:
-        case EMTPFormatCode3GPContainer:
-        case EMTPFormatCodeAAC:
-            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecAAC ) );
-            break;
-
-        case EMTPFormatCodeWAV:
-            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecPCM ) );
-            break;
-
-        default:
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave( KErrNotSupported );
-            break;
-        }
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propInfo;
-    propInfo.iDataType = EMTPTypeUINT32;
-    propInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-    propInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
-    SetFormForResponseL( EMTPObjectPropCodeAudioWAVECodec, propInfo, form );
-    CleanupStack::PopAndDestroy( form );
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL
-//
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL()
-    {
-    switch( iFormatCode )
-        {
-        case EMTPFormatCodeWMA:
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPWMAMinBitrate,
-                EMTPWMAMaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        case EMTPFormatCodeMP3:
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPMP3MinBitrate,
-                EMTPMP3MaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        case EMTPFormatCodeAAC:
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPAACMinBitrate,
-                EMTPAACMaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        case EMTPFormatCodeWAV:
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPPCMMinBitrate,
-                EMTPPCMMaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        case EMTPFormatCodeMP4Container:
-        case EMTPFormatCode3GPContainer:
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPAACPlusMinBitrate,
-                EMTPAACPlusMaxBitrate,
-                EMTPAudioBitrateStep );
-            break;
-
-        default:
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave( KErrNotSupported );
-            break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL()
-    {
-    switch( iFormatCode )
-        {
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            {
-            CMTPTypeObjectPropDescEnumerationForm* form =
-                CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 );
-            CleanupStack::PushL( form ); // + form
-
-            TUint32 values[] =
-                {
-                EMTPVideoFourCCCodecWMV3
-                };
-
-            TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
-            for ( TInt i = 0; i < numValues; i++ )
-                {
-                TMTPTypeUint32 data( values[i] );
-                form->AppendSupportedValueL( data );
-                }
-            // TODO:
-            CMTPTypeObjectPropDesc::TPropertyInfo propInfo;
-            propInfo.iDataType = EMTPTypeUINT32;
-            propInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-            propInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
-            SetFormForResponseL( EMTPObjectPropCodeVideoFourCCCodec, propInfo, form );
-            CleanupStack::PopAndDestroy( form ); // - form
-            }
-            break;
-
-        default:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave( KErrNotSupported );
-            }
-            break;
-        }
-    }
-
-void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoBitrateL()
-    {
-    switch( iFormatCode )
-        {
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeVideoBitRate,
-                EMTPWMVMinBitrate,
-                EMTPWMVMaxBitrate,
-                EMTPVideoBitrateStep,
-                ETrue );
-            break;
-
-        default:
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave( KErrNotSupported );
-            break;
-        }
-    }
-
-void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceRangeFormDescriptionL( TUint16 aPropCode,
-    TUint32 aMinValue,
-    TUint32 aMaxValue,
-    TUint32 aStepValue,
-    TBool aIsReadOnly )
-    {
-    CMTPTypeObjectPropDescRangeForm* form =
-        CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
-
-    // Set expected values
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue );
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue );
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue );
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propInfo;
-    propInfo.iDataType = EMTPTypeUINT32;
-    propInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm;
-    propInfo.iGetSet = !aIsReadOnly;
-    SetFormForResponseL( aPropCode, propInfo, form );
-    CleanupStack::PopAndDestroy( form ); // - form
-    }
-
-void CMediaMtpDataProviderGetInterDependentPropDesc::SetFormForResponseL( TUint16 aPropertyCode,
-    CMTPTypeObjectPropDesc::TPropertyInfo& aPropInfo,
-    const MMTPType* aForm )
-    {
-    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewLC( aPropertyCode,
-        aPropInfo,
-        aForm );
-    // Set group code
-    propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, EGroupCodeMediaDB );
-
-    iProperties->AppendL( propertyDesc );
-    CleanupStack::Pop( propertyDesc );
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropdesc.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,716 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: GetObjectPropDesc
-*
-*/
-
-#include <mtp/cmtptypeobjectpropdesc.h>
-#include <mtp/mtpprotocolconstants.h>
-#include <mtp/cmtptypestring.h>
-
-#include "cmediamtpdataprovidergetobjectpropdesc.h"
-#include "mediamtpdataproviderconst.h"
-#include "mmmtpdplogger.h"
-#include "mmmtpdpdefs.h"
-
-const TUint32 KMTPDescriptionLen = 0x00000200;
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CMediaMtpDataProviderGetObjectPropDesc::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
-    {
-    CMediaMtpDataProviderGetObjectPropDesc* self =
-        new ( ELeave ) CMediaMtpDataProviderGetObjectPropDesc( aFramework,
-            aConnection,
-            aDpConfig );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::ConstructL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetObjectPropDesc::ConstructL()
-    {
-    CGetObjectPropDesc::ConstructL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::~CMediaMtpDataProviderGetObjectPropDesc
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderGetObjectPropDesc::~CMediaMtpDataProviderGetObjectPropDesc()
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::CMediaMtpDataProviderGetObjectPropDesc
-// Standard c++ constructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderGetObjectPropDesc::CMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig ) :
-    CGetObjectPropDesc( aFramework, aConnection, aDpConfig )
-    {
-
-    }
-
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL(TUint16 aPropCode)
-    {
-    switch (aPropCode)
-        {
-        // format specific
-        case EMTPObjectPropCodeArtist: // Artist
-        case EMTPObjectPropCodeTrack: // Track
-        case EMTPObjectPropCodeGenre: // Genre
-        case EMTPObjectPropCodeUseCount: // Use Count
-        case EMTPObjectPropCodeAlbumName: // Album Name
-        case EMTPObjectPropCodeAlbumArtist: // Album Artist
-        case EMTPObjectPropCodeOriginalReleaseDate: // Original Release Date
-        case EMTPObjectPropCodeComposer: // Composer
-        case EMTPObjectPropCodeParentalRating:
-            iObjectProperty = CMTPTypeObjectPropDesc::NewL( aPropCode );
-            break;
-
-        // Number of Channels (m)
-        case EMTPObjectPropCodeNumberOfChannels:
-            ServiceNumberOfChannelsL();
-            break;
-
-        // Sample Rate (HAS MINIMUM AND MAX VALUE)
-        case EMTPObjectPropCodeSampleRate:
-            ServiceCodeSampleRateL();
-            break;
-
-        // Audio Wave Codec (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
-        case EMTPObjectPropCodeAudioWAVECodec:
-            ServiceCodeWaveCodecL();
-            break;
-
-        // Audio Bit Rate (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
-        case EMTPObjectPropCodeAudioBitRate:
-            ServiceCodeAudioBitrateL();
-            break;
-
-        // Duration
-        case EMTPObjectPropCodeDuration:
-            ServiceDurationL();
-            break;
-
-        // Description
-        case EMTPObjectPropCodeDescription:
-            ServiceDescriptionL();
-            break;
-
-        case EMTPObjectPropCodeWidth:
-            ServiceRangeFormDescriptionL( aPropCode,
-                EMTPMinWidth,
-                EMTPMaxWidth,
-                EMTPStepWidth );
-            break;
-
-        case EMTPObjectPropCodeHeight:
-            ServiceRangeFormDescriptionL( aPropCode,
-                EMTPMinHeight,
-                EMTPMaxHeight,
-                EMTPStepHeight );
-            break;
-
-        case EMTPObjectPropCodeScanType:
-            ServiceScanTypeDescriptionL();
-            break;
-
-        case EMTPObjectPropCodeVideoFourCCCodec:
-            ServiceVideoFourCCCodecL();
-            break;
-
-        case EMTPObjectPropCodeVideoBitRate:
-            ServiceRangeFormDescriptionL( aPropCode,
-                EMTPWMVMinBitrate,
-                EMTPWMVMaxBitrate,
-                EMTPVideoBitrateStep,
-                ETrue );
-            break;
-
-        case EMTPObjectPropCodeFramesPerThousandSeconds:
-            ServiceRangeFormDescriptionL( aPropCode,
-                EMTPMinFramesPerThousandSeconds,
-                EMTPMaxFramesPerThousandSeconds,
-                EMTPStepFramesPerThousandSeconds );
-            break;
-
-        case EMTPObjectPropCodeKeyFrameDistance:
-            ServiceRangeFormDescriptionL( aPropCode,
-                EMTPMinKeyFrameDistance,
-                EMTPMaxKeyFrameDistance,
-                EMTPStepKeyFrameDistance );
-            break;
-
-        case EMTPObjectPropCodeEncodingProfile:
-            ServiceEncodingProfileDescriptionL();
-            break;
-
-        case EMTPObjectPropCodeDRMStatus:
-            ServiceDRMStatusL();
-            break;
-
-        case EMTPExtObjectPropCodeOmaDrmStatus:
-            ServiceOMADRMStatusL();
-            break;
-
-        default:
-            User::Leave( KErrNotSupported );
-            break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::ServiceDescriptionL()
-// Create Description and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceDescriptionL()
-    {
-    TMTPTypeUint32 uint32Data( KMTPDescriptionLen );
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDescription,
-        CMTPTypeObjectPropDesc::ELongStringForm,
-        &uint32Data );
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::ServiceNumberOfChannelsL
-// Create list of possible Channel numbers and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceNumberOfChannelsL()
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
-
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm = CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
-    CleanupStack::PushL( expectedForm ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPChannelMono,
-        EMTPChannelStereo
-        };
-
-    TInt numValues =  sizeof ( values ) / sizeof ( values[0] ) ;
-
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way :)
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNumberOfChannels, *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL
-// Create list of possible Sample rate list and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL()
-    {
-    // if some format does not support the sample rate,
-    // here still need an instance of CMTPTypeObjectPropDesc.
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
-
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm
-
-    TUint32 values[] =
-        {
-        EMTPSampleRate8K ,
-        EMTPSampleRate16K,
-        EMTPSampleRate22_05K,
-        EMTPSampleRate24K,
-        EMTPSampleRate32K,
-        EMTPSampleRate44_1K,
-        EMTPSampleRate48K
-        };
-
-    TInt numValues = sizeof( values ) / sizeof( values[0] ) ;
-
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint32 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way :)
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeSampleRate, CMTPTypeObjectPropDesc::EEnumerationForm, expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::ServiceWaveCodecL
-// Create list of possible bitrate types and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL()
-    {
-    PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL, format = 0x%x" ), iFormatCode );
-
-    CMTPTypeObjectPropDescEnumerationForm* form =
-    CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + form
-
-    switch (iFormatCode)
-        {
-        case EMTPFormatCodeWMA:
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
-            TMTPTypeUint32 data( EMTPAudioWAVECodecWMA );
-            form->AppendSupportedValueL( data );
-            }
-            break;
-
-        case EMTPFormatCodeMP3:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
-            TMTPTypeUint32 data( EMTPAudioWAVECodecMP3 );
-            form->AppendSupportedValueL( data );
-            }
-            break;
-
-        case EMTPFormatCodeMP4Container:
-        case EMTPFormatCode3GPContainer:
-        case EMTPFormatCodeAAC:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
-            TMTPTypeUint32 data( EMTPAudioWAVECodecAAC );
-            form->AppendSupportedValueL( data );
-            }
-            break;
-
-        case EMTPFormatCodeWAV:
-            {
-            PRINT1( _L("MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x"), iFormatCode );
-            TMTPTypeUint32 data( EMTPAudioWAVECodecPCM );
-            form->AppendSupportedValueL( data );
-            }
-            break;
-
-        default:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave(KErrNotSupported);
-            }
-            break;
-        }
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way :)
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form );
-    CleanupStack::PopAndDestroy( form ); // - form
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL" ) );
-    }
-
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitrateL()
-    {
-    PRINT1( _L("MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitrate, format = 0x%x"), iFormatCode );
-
-    switch (iFormatCode)
-        {
-        case EMTPFormatCodeWMA:
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            {
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPWMAMinBitrate,
-                EMTPWMAMaxBitrate,
-                EMTPAudioBitrateStep );
-            }
-            break;
-
-        case EMTPFormatCodeMP3:
-            {
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPMP3MinBitrate,
-                EMTPMP3MaxBitrate,
-                EMTPAudioBitrateStep );
-            }
-            break;
-
-        case EMTPFormatCodeAAC:
-            {
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPAACMinBitrate,
-                EMTPAACMaxBitrate,
-                EMTPAudioBitrateStep );
-            }
-            break;
-
-        case EMTPFormatCodeWAV:
-            {
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPPCMMinBitrate,
-                EMTPPCMMaxBitrate,
-                EMTPAudioBitrateStep );
-            }
-            break;
-
-        case EMTPFormatCodeMP4Container:
-        case EMTPFormatCode3GPContainer:
-            {
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPAACPlusMinBitrate,
-                EMTPAACPlusMaxBitrate,
-                EMTPAudioBitrateStep );
-            }
-            break;
-
-        default:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitRateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave( KErrNotSupported );
-            }
-        }
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitRateL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CGetObjectPropDesc::ServiceDurationL()
-// Create list of Duration types and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL()
-    {
-
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL" ) );
-
-    CMTPTypeObjectPropDescRangeForm* form = CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
-
-    // Set expected values
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, EMTPMinDuration );
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, EMTPMaxDuration );
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, EMTPDurationStep );
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDuration, *form );
-    CleanupStack::PopAndDestroy( form ); // - form
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL" ) );
-    }
-
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceScanTypeDescriptionL()
-    {
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
-    CleanupStack::PushL( expectedForm ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPScanTypeProgressive
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way :)
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeScanType, *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-    }
-
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoFourCCCodecL()
-    {
-    switch( iFormatCode )
-        {
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            {
-            CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-                CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 );
-            CleanupStack::PushL( expectedForm ); // + expectedForm
-
-            TUint32 values[] =
-                {
-                EMTPVideoFourCCCodecWMV3
-                };
-
-            TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
-            for ( TInt i = 0; i < numValues; i++ )
-                {
-                TMTPTypeUint32 data( values[i] );
-                expectedForm->AppendSupportedValueL( data );
-                }
-
-            // comment out asf fourcc for mp2a and mp4a, not sure if this is needed
-            /*if ( iFormatCode == EMTPFormatCodeASF )
-                {
-                TUint32 additionalValues[] =
-                    {
-                    EMTPVideoFourCCCodecMP2A,
-                    EMTPVideoFourCCCodecMP4A
-                    };
-
-                for ( TInt j = 0; i < sizeof(additionalValues) / sizeof(additionalValues[0]) )
-                    {
-                    TMTPTypeUint32 data( additionalValues[i] );
-                    expectedForm->AppendSupportedValueL( data );
-                    }
-                }*/
-
-            // Althrough iObjectProperty is released in ServiceL(),
-            // release it here maybe a more safer way :)
-            if ( iObjectProperty != NULL )
-                {
-                delete iObjectProperty;
-                iObjectProperty = NULL;
-                }
-
-            iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeVideoFourCCCodec, *expectedForm );
-            CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-            }
-            break;
-
-        default:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoFourCCCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave( KErrNotSupported );
-            }
-            break;
-        }
-    }
-
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoBitrateL()
-    {
-    switch( iFormatCode )
-        {
-        case EMTPFormatCodeWMV:
-        case EMTPFormatCodeASF:
-            {
-            ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
-                EMTPWMVMinBitrate,
-                EMTPWMVMaxBitrate,
-                EMTPVideoBitrateStep,
-                ETrue );
-            }
-            break;
-
-        default:
-            {
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
-            User::Leave( KErrNotSupported );
-            }
-            break;
-        }
-    }
-
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceEncodingProfileDescriptionL()
-    {
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeString ); // + expectedForm
-
-    CMTPTypeString* string = CMTPTypeString::NewLC( _L( "SP@LL" ) );
-    expectedForm->AppendSupportedValueL( *string );
-    string->SetL(_L("SP@ML"));
-    expectedForm->AppendSupportedValueL( *string );
-    string->SetL(_L("MP@LL"));
-    expectedForm->AppendSupportedValueL( *string );
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeString;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-    propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeEncodingProfile,
-        propertyInfo,
-        expectedForm );
-
-    CleanupStack::PopAndDestroy( string );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-    }
-
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceRangeFormDescriptionL( TUint16 aPropCode,
-    TUint32 aMinValue,
-    TUint32 aMaxValue,
-    TUint32 aStepValue,
-    TBool aIsReadOnly )
-    {
-    CMTPTypeObjectPropDescRangeForm* form =
-        CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
-
-    // Set expected values
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue );
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue );
-    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue );
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeUINT32;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm;
-    propertyInfo.iGetSet = !aIsReadOnly;
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( aPropCode, propertyInfo, form );
-
-    CleanupStack::PopAndDestroy( form ); // - form
-    }
-
-// -----------------------------------------------------------------------------
-// CGetObjectPropDesc::ServiceDRMStatusL
-// Create list of possible DRM status and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceDRMStatusL()
-    {
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
-    CleanupStack::PushL( expectedForm ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPDrmNoProtection,
-        EMTPDrmProtection,
-        EMTPDrmReserveForMTP,
-        EMTPDrmVenderExtension
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way :)
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDRMStatus, *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderGetObjectPropDesc::ServiceOMADRMStatusL
-// Create list of possible OMA DRM status and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderGetObjectPropDesc::ServiceOMADRMStatusL()
-    {
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT8 );
-    CleanupStack::PushL( expectedForm ); // + expectedForm
-
-    TUint8 values[] =
-        {
-        EMTPOMADrmNoProtection,
-        EMTPOMADrmProtection,
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint8 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way :)
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeUINT8;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPExtObjectPropCodeOmaDrmStatus,
-        propertyInfo,
-        expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectproplist.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectproplist.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -54,7 +54,7 @@
 //
 CMediaMtpDataProviderGetObjectPropList::~CMediaMtpDataProviderGetObjectPropList()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -63,10 +63,11 @@
 // -----------------------------------------------------------------------------
 //
 CMediaMtpDataProviderGetObjectPropList::CMediaMtpDataProviderGetObjectPropList( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig ) :
-    CGetObjectPropList( aFramework, aConnection, aDpConfig )
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig ) :
+        CGetObjectPropList( aFramework, aConnection, aDpConfig )
     {
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropvalue.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropvalue.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -54,7 +54,7 @@
 //
 void CMediaMtpDataProviderGetObjectPropValue::ConstructL()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -64,7 +64,7 @@
 //
 CMediaMtpDataProviderGetObjectPropValue::~CMediaMtpDataProviderGetObjectPropValue()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -77,7 +77,7 @@
     MMmMtpDpConfig& aDpConfig ) :
     CGetObjectPropValue( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 void CMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL(TUint16 aPropCode)
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidermoveobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidermoveobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: Copy Object
-*
-*/
-
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  Implement the operation: Move Object
+ *
+ */
 
 #include <mtp/mmtpdataproviderframework.h>
 #include <mtp/cmtptypeobjectproplist.h>
@@ -65,7 +64,7 @@
 //
 CMediaMtpDataProviderMoveObject::~CMediaMtpDataProviderMoveObject()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -78,7 +77,7 @@
     MMmMtpDpConfig& aDpConfig ) :
     CMoveObject( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -90,7 +89,8 @@
     TUint32 aHandle,
     const CMTPObjectMetaData& aObject )
     {
-    PRINT1( _L( "MM MTP => CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL aPropCode(0x%x)" ), aPropCode );
+    PRINT1( _L( "MM MTP => CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL aPropCode(0x%x)" ),
+        aPropCode );
 
     CMTPTypeString* textData = NULL;
     CMTPTypeArray* desData = NULL;
@@ -112,7 +112,7 @@
         case EMTPObjectPropCodeParentalRating:
         case EMTPObjectPropCodeEncodingProfile:
             {
-            textData = CMTPTypeString::NewLC();   // + textData
+            textData = CMTPTypeString::NewLC(); // + textData
 
             TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( aPropCode,
                 *textData,
@@ -122,45 +122,8 @@
 
             if ( err == KErrNone )
                 {
-                iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-                iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars());
-                
-//                iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                    aPropCode,
-//                    *textData );
-                }
-            else if ( err == KErrNotFound )
-              {
-                iPropertyElement = NULL;
-              }
-            else
-              {
-                User::Leave( err );
-              }
-
-            CleanupStack::PopAndDestroy( textData );  // - textData
-            }
-            break;
-
-        case EMTPObjectPropCodeDescription:
-            {
-            desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 );   // + desData
-
-            TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( aPropCode,
-                *desData,
-                aObject ) );
-
-            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL err = %d" ), err );
-
-            if ( err == KErrNone )
-                {
-                
-                iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-                iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData);
-                
-//                iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                    aPropCode,
-//                    *desData );
+                iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+                iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars() );
                 }
             else if ( err == KErrNotFound )
                 {
@@ -171,7 +134,36 @@
                 User::Leave( err );
                 }
 
-            CleanupStack::PopAndDestroy( desData );  // - desData
+            CleanupStack::PopAndDestroy( textData ); // - textData
+            }
+            break;
+
+        case EMTPObjectPropCodeDescription:
+            {
+            desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData
+
+            TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( aPropCode,
+                *desData,
+                aObject ) );
+
+            PRINT1( _L( "MM MTP <> CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL err = %d" ), err );
+
+            if ( err == KErrNone )
+                {
+
+                iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+                iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData );
+                }
+            else if ( err == KErrNotFound )
+                {
+                iPropertyElement = NULL;
+                }
+            else
+                {
+                User::Leave( err );
+                }
+
+            CleanupStack::PopAndDestroy( desData ); // - desData
             }
             break;
 
@@ -188,13 +180,8 @@
 
             if ( err == KErrNone )
                 {
-                
-                iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-                iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, uint16.Value());
-                
-//                iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                    aPropCode,
-//                    uint16 );
+                iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+                iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, uint16.Value() );
                 }
             else if ( err == KErrNotFound )
                 {
@@ -227,12 +214,8 @@
 
             if ( err == KErrNone )
                 {
-                iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-                iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, uint32.Value());
-                
-//                iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                    aPropCode,
-//                    uint32 );
+                iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+                iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, uint32.Value() );
                 }
             else if ( err == KErrNotFound )
                 {
@@ -254,129 +237,9 @@
             if ( drmStatus == EMTPDrmStatusProtected )
                 result.Set( 1 );
 
-            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8);
-            iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, result.Value());
-            
-//            iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle,
-//                aPropCode,
-//                EMTPTypeUINT8,
-//                result );
-            }
-            break;
-
-        default:
-            {
-            User::Leave( KErrNotSupported );
-            }
-          break;
-        }
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL
-//
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, const CMTPObjectMetaData& aObject,
-    const CMTPTypeObjectPropListElement& aElement )
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL" ) );
-    TMTPResponseCode responseCode( EMTPRespCodeOK );
-
-    switch ( aPropCode )
-        {
-        case EMTPObjectPropCodeArtist:
-        case EMTPObjectPropCodeGenre:
-        case EMTPObjectPropCodeComposer:
-        case EMTPObjectPropCodeOriginalReleaseDate:
-        case EMTPObjectPropCodeAlbumName:
-        case EMTPObjectPropCodeParentalRating:
-        case EMTPObjectPropCodeEncodingProfile:
-            {
-            CMTPTypeString* stringData =
-                CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
-
-            responseCode = ServiceMetaDataToWrapper( aPropCode,
-                *stringData,
-                aObject );
-
-            CleanupStack::PopAndDestroy( stringData );// - stringData
-            }
-            break;
-
-        case EMTPObjectPropCodeVideoBitRate:
-            {
-            responseCode = EMTPRespCodeAccessDenied;
-            }
-            break;
-
-        case EMTPObjectPropCodeDescription:
-            {
-            CMTPTypeArray*  desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData
-//            aElement.GetL( CMTPTypeObjectPropListElement::EValue, *desData );
-            
-            desData->SetByDesL(aElement.ArrayL(CMTPTypeObjectPropListElement::EValue ));
-            responseCode = ServiceMetaDataToWrapper( aPropCode,
-                    *desData,
-                    aObject );
-            CleanupStack::PopAndDestroy( desData ); // - desData
-            }
-            break;
-
-        case EMTPObjectPropCodeWidth:
-        case EMTPObjectPropCodeHeight:
-        case EMTPObjectPropCodeDuration:
-        case EMTPObjectPropCodeUseCount:
-        case EMTPObjectPropCodeSampleRate:
-        case EMTPObjectPropCodeAudioWAVECodec:
-        case EMTPObjectPropCodeAudioBitRate:
-        case EMTPObjectPropCodeVideoFourCCCodec:
-        case EMTPObjectPropCodeFramesPerThousandSeconds:
-        case EMTPObjectPropCodeKeyFrameDistance:
-            {
-            TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) );
-            responseCode = ServiceMetaDataToWrapper( aPropCode,
-                uint32,
-                aObject );
-            }
-            break;
-
-        case EMTPObjectPropCodeTrack:
-        case EMTPObjectPropCodeNumberOfChannels:
-        case EMTPObjectPropCodeScanType:
-        case EMTPObjectPropCodeDRMStatus:
-            {
-            TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue ));
-            responseCode = ServiceMetaDataToWrapper( aPropCode,
-                uint16,
-                aObject );
-            }
-            break;
-
-        case EMTPExtObjectPropCodeOmaDrmStatus:
-            {
-            TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC(
-                CMTPObjectMetaData::ESuid ) );
-
-            if ( drmStatus == EMTPDrmStatusUnknown )
-                {
-                responseCode = EMTPRespCodeAccessDenied;
-                }
-            else
-                {
-                TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
-
-                // there's no DB field to remember the value, so return an error
-                // if there's a mismatch to CAF protection status
-                if ( ( ( drmStatus == EMTPDrmStatusProtected ) && ( newValue.Value() == 0 ) )
-                    || ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( newValue.Value() == 1 ) ) )
-                    {
-                    responseCode = EMTPRespCodeAccessDenied;
-                    }
-                }
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8 );
+            iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, result.Value() );
             }
             break;
 
@@ -387,9 +250,7 @@
             break;
         }
 
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL" ) );
-
-    return responseCode;
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL" ) );
     }
 
 // end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderpropertysettingutility.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include <mtp/cmtptypeobjectproplist.h>
+#include <mtp/cmtptypestring.h>
+#include <mtp/cmtptypearray.h>
+#include <mtp/tmtptypeuint8.h>
+#include <mtp/tmtptypeuint16.h>
+#include <mtp/tmtptypeuint32.h>
+#include <mtp/mtpdatatypeconstants.h>
+
+#include "tobjectdescription.h"
+#include "cmmmtpdpmetadataaccesswrapper.h"
+#include "mmmtpdpconfig.h"
+#include "mmmtpdputility.h"
+
+#include "cmediamtpdataproviderpropertysettingutility.h"
+#include "mmmtpdplogger.h"
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderPropertySettingUtility::NewL
+// Two-phase construction method
+// -----------------------------------------------------------------------------
+//
+CMediaMtpDataProviderPropertySettingUtility* CMediaMtpDataProviderPropertySettingUtility::NewL()
+    {
+    CMediaMtpDataProviderPropertySettingUtility* self =
+        new ( ELeave ) CMediaMtpDataProviderPropertySettingUtility();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderPropertySettingUtility::~CMediaMtpDataProviderPropertySettingUtility
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CMediaMtpDataProviderPropertySettingUtility::~CMediaMtpDataProviderPropertySettingUtility()
+    {
+    // Do nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderSetObjectPropList::CMediaMtpDataProviderSetObjectPropList
+// Standard C++ Constructor
+// -----------------------------------------------------------------------------
+//
+CMediaMtpDataProviderPropertySettingUtility::CMediaMtpDataProviderPropertySettingUtility()
+    {
+    // Do nothing
+    }
+
+TMTPResponseCode CMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig,
+    TUint16 aPropCode,
+    const CMTPObjectMetaData& aObject,
+    const CMTPTypeObjectPropListElement& aElement )
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL" ) );
+    TMTPResponseCode responseCode( EMTPRespCodeOK );
+
+    switch ( aPropCode )
+        {
+        case EMTPObjectPropCodeArtist:
+        case EMTPObjectPropCodeGenre:
+        case EMTPObjectPropCodeComposer:
+        case EMTPObjectPropCodeOriginalReleaseDate:
+        case EMTPObjectPropCodeAlbumName:
+        case EMTPObjectPropCodeParentalRating:
+        case EMTPObjectPropCodeEncodingProfile:
+            {
+            CMTPTypeString* stringData =
+                CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
+
+            responseCode = SetMetaDataToWrapperL( aDpConfig,
+                aPropCode,
+                *stringData,
+                aObject );
+
+            CleanupStack::PopAndDestroy( stringData );// - stringData
+            }
+            break;
+
+        case EMTPObjectPropCodeVideoBitRate:
+            /*
+             spec:
+             * Object properties that are get-only (0x00 GET)
+             * should accept values during object creation by
+             * way of the SendObjectPropList command.
+             */
+            break;
+
+        case EMTPObjectPropCodeDescription:
+            {
+            CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData
+            desData->SetByDesL( aElement.ArrayL( CMTPTypeObjectPropListElement::EValue ) );
+            responseCode = SetMetaDataToWrapperL( aDpConfig,
+                aPropCode,
+                *desData,
+                aObject );
+            CleanupStack::PopAndDestroy( desData ); // - desData
+            }
+            break;
+
+        case EMTPObjectPropCodeWidth:
+        case EMTPObjectPropCodeHeight:
+        case EMTPObjectPropCodeDuration:
+        case EMTPObjectPropCodeUseCount:
+        case EMTPObjectPropCodeSampleRate:
+        case EMTPObjectPropCodeAudioWAVECodec:
+        case EMTPObjectPropCodeAudioBitRate:
+        case EMTPObjectPropCodeVideoFourCCCodec:
+        case EMTPObjectPropCodeFramesPerThousandSeconds:
+        case EMTPObjectPropCodeKeyFrameDistance:
+            {
+            TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) );
+            responseCode = SetMetaDataToWrapperL( aDpConfig,
+                aPropCode,
+                uint32,
+                aObject );
+            }
+            break;
+
+        case EMTPObjectPropCodeTrack:
+        case EMTPObjectPropCodeNumberOfChannels:
+        case EMTPObjectPropCodeScanType:
+        case EMTPObjectPropCodeDRMStatus:
+            {
+            TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue ) );
+            responseCode = SetMetaDataToWrapperL( aDpConfig,
+                aPropCode,
+                uint16,
+                aObject );
+            }
+            break;
+
+        case EMTPExtObjectPropCodeOmaDrmStatus:
+            {
+            TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( CMTPObjectMetaData::ESuid ) );
+
+            if ( drmStatus == EMTPDrmStatusUnknown )
+                {
+                responseCode = EMTPRespCodeAccessDenied;
+                }
+            else
+                {
+                TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
+
+                // there's no DB field to remember the value, so return an error
+                // if there's a mismatch to CAF protection status
+                if ( ( ( drmStatus == EMTPDrmStatusProtected )
+                    && ( newValue.Value() == 0 ) )
+                    || ( ( drmStatus == EMTPDrmStatusNotProtected )
+                        && ( newValue.Value() == 1 ) ) )
+                    {
+                    responseCode = EMTPRespCodeAccessDenied;
+                    }
+                }
+            }
+            break;
+
+        default:
+            {
+            // Should not happen, property code should have been checked before set to store.
+            User::Leave( KErrNotSupported );
+            }
+            break;
+        }
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderPropertySettingUtility::ServiceSpecificObjectPropertyL" ) );
+
+    return responseCode;
+    }
+
+// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersendobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:  Implement the operation: SendObjectInfo/SendObjectPropList/SendObject
- *
- */
-
-#include <mtp/mmtpdataproviderframework.h>
-#include <mtp/cmtptypeobjectproplist.h>
-#include <mtp/cmtptypestring.h>
-#include <mtp/cmtptypearray.h>
-
-#include "cmediamtpdataprovidersendobject.h"
-#include "mediamtpdataproviderconst.h"
-#include "mmmtpdplogger.h"
-#include "cmmmtpdpmetadataaccesswrapper.h"
-#include "mmmtpdputility.h"
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderSendObject::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CMediaMtpDataProviderSendObject::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig)
-    {
-    CMediaMtpDataProviderSendObject* self = new ( ELeave ) CMediaMtpDataProviderSendObject( aFramework, aConnection, aDpConfig );
-
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderSendObject::~CMediaMtpDataProviderSendObject
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderSendObject::~CMediaMtpDataProviderSendObject()
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderSendObject::CMediaMtpDataProviderSendObject
-// Standard C++ Constructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderSendObject::CMediaMtpDataProviderSendObject(
-        MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig) :
-    CSendObject(aFramework, aConnection, aDpConfig)
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderSendObject::ConstructL
-// 2nd Phase Constructor
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderSendObject::ConstructL()
-    {
-    CSendObject::ConstructL();
-    }
-
-TMTPResponseCode CMediaMtpDataProviderSendObject::CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType )
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderSendObject::CheckSepecificPropType" ) );
-    TMTPResponseCode responseCode( EMTPRespCodeOK );
-
-    switch ( aPropCode )
-        {
-        case EMTPObjectPropCodeArtist: // 0xDC46
-        case EMTPObjectPropCodeGenre: // 0xDC8C
-        case EMTPObjectPropCodeParentalRating: // 0xDC94
-        case EMTPObjectPropCodeComposer: // 0xDC96
-        case EMTPObjectPropCodeOriginalReleaseDate: // 0xDC99
-        case EMTPObjectPropCodeAlbumName: // 0xDC9A
-        case EMTPObjectPropCodeEncodingProfile: // 0xDEA1
-            if ( aDataType != EMTPTypeString)
-                {
-                responseCode = EMTPRespCodeInvalidObjectPropFormat;
-                }
-            break;
-
-        case EMTPObjectPropCodeDescription:
-            if ( aDataType != EMTPTypeAUINT16)
-                {
-                responseCode = EMTPRespCodeInvalidObjectPropFormat;
-                }
-            break;
-
-        case EMTPObjectPropCodeTrack: // 0xDC8B
-        case EMTPObjectPropCodeDRMStatus: // 0xDC9D
-        case EMTPObjectPropCodeNumberOfChannels: // 0xDE94
-        case EMTPObjectPropCodeScanType: // 0xDE97
-            if ( aDataType != EMTPTypeUINT16)
-                {
-                responseCode = EMTPRespCodeInvalidObjectPropFormat;
-                }
-            break;
-
-            //Get Data for Int32 objects
-        case EMTPObjectPropCodeWidth: // 0xDC87
-        case EMTPObjectPropCodeHeight: // 0xDC88
-        case EMTPObjectPropCodeDuration: // 0xDC89
-        case EMTPObjectPropCodeUseCount: // 0xDC91
-        case EMTPObjectPropCodeSampleRate: // 0xDE93
-        case EMTPObjectPropCodeAudioWAVECodec: // 0xDE99
-        case EMTPObjectPropCodeAudioBitRate: // 0xDE9A
-        case EMTPObjectPropCodeVideoFourCCCodec: // 0xDE9B
-        case EMTPObjectPropCodeFramesPerThousandSeconds: // 0xDE9D
-        case EMTPObjectPropCodeKeyFrameDistance: // 0xDE9E
-            if ( aDataType != EMTPTypeUINT32)
-                {
-                responseCode = EMTPRespCodeInvalidObjectPropFormat;
-                }
-            break;
-
-        case EMTPExtObjectPropCodeOmaDrmStatus:
-            if ( aDataType != EMTPTypeUINT8)
-                {
-                responseCode = EMTPRespCodeInvalidObjectPropFormat;
-                }
-            break;
-
-        default:
-            // It's not possible to run here.
-            responseCode = EMTPRespCodeInvalidObjectPropCode;
-            break;
-
-        }
-    PRINT1( _L( "MM MTP <= CMediaMtpDataProviderSendObject::CheckSepecificPropType, responseCode = 0x%X" ), responseCode );
-    return responseCode;
-    }
-
-TMTPResponseCode CMediaMtpDataProviderSendObject::SetSpecificObjectPropertyL( TUint16 aPropCode,
-    const CMTPObjectMetaData& aObject,
-    const CMTPTypeObjectPropListElement& aElement )
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderSendObject::SetSpecificObjectPropertyL" ) );
-    TMTPResponseCode responseCode(EMTPRespCodeOK);
-
-    switch ( aPropCode )
-        {
-        case EMTPObjectPropCodeArtist:
-        case EMTPObjectPropCodeGenre:
-        case EMTPObjectPropCodeComposer:
-        case EMTPObjectPropCodeOriginalReleaseDate:
-        case EMTPObjectPropCodeAlbumName:
-        case EMTPObjectPropCodeParentalRating:
-        case EMTPObjectPropCodeEncodingProfile:
-            {
-            CMTPTypeString* stringData =
-                CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
-
-            responseCode = SetMetaDataToWrapperL( aPropCode,
-                *stringData,
-                aObject );
-
-            CleanupStack::PopAndDestroy( stringData );// - stringData
-            }
-            break;
-
-        case EMTPObjectPropCodeVideoBitRate:
-            // TODO: Does anything need to be done?
-            /* spec:
-             * Object properties that are get-only (0x00 GET)
-             * should accept values during object creation by
-             * way of the SendObjectPropList command.
-             */
-            break;
-
-        case EMTPObjectPropCodeDescription:
-            {
-            CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData
-            //            aElement.GetL( CMTPTypeObjectPropListElement::EValue, *desData );
-            desData->SetByDesL( aElement.ArrayL( CMTPTypeObjectPropListElement::EValue ) );
-            responseCode = SetMetaDataToWrapperL( aPropCode,
-                *desData,
-                aObject );
-            CleanupStack::PopAndDestroy( desData ); // - desData
-            }
-            break;
-
-        case EMTPObjectPropCodeWidth:
-        case EMTPObjectPropCodeHeight:
-        case EMTPObjectPropCodeDuration:
-        case EMTPObjectPropCodeUseCount:
-        case EMTPObjectPropCodeSampleRate:
-        case EMTPObjectPropCodeAudioWAVECodec:
-        case EMTPObjectPropCodeAudioBitRate:
-        case EMTPObjectPropCodeVideoFourCCCodec:
-        case EMTPObjectPropCodeFramesPerThousandSeconds:
-        case EMTPObjectPropCodeKeyFrameDistance:
-            {
-            TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) );
-            responseCode = SetMetaDataToWrapperL( aPropCode,
-                uint32,
-                aObject );
-            }
-            break;
-
-        case EMTPObjectPropCodeTrack:
-        case EMTPObjectPropCodeNumberOfChannels:
-        case EMTPObjectPropCodeScanType:
-        case EMTPObjectPropCodeDRMStatus:
-            {
-            TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue ) );
-            responseCode = SetMetaDataToWrapperL( aPropCode,
-                uint16,
-                aObject );
-            }
-            break;
-
-        case EMTPExtObjectPropCodeOmaDrmStatus:
-            {
-            TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( CMTPObjectMetaData::ESuid ) );
-
-            if ( drmStatus == EMTPDrmStatusUnknown )
-                {
-                responseCode = EMTPRespCodeAccessDenied;
-                }
-            else
-                {
-                TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
-
-                // there's no DB field to remember the value, so return an error
-                // if there's a mismatch to CAF protection status
-                if ( ( ( drmStatus == EMTPDrmStatusProtected )
-                    && ( newValue.Value() == 0 ) )
-                    || ( ( drmStatus == EMTPDrmStatusNotProtected )
-                        && ( newValue.Value() == 1 ) ) )
-                    {
-                    responseCode = EMTPRespCodeAccessDenied;
-                    }
-                }
-            }
-            break;
-
-        default:
-            {
-            PRINT( _L( "MM MTP <> Default CASE leaving CMedia...tInfo::SetSpecificObjectPropertyL" ) );
-            User::Leave( KErrNotSupported );
-            }
-            break;
-        }
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderSendObject::ServiceSpecificObjectPropertyL" ) );
-
-    return responseCode;
-    }
-
-// TODO: Is it necessary?
-TInt CMediaMtpDataProviderSendObject::HandleSpecificWrapperError( TInt aError,
-    const CMTPObjectMetaData& aObject )
-    {
-    PRINT( _L( "MM MTP <> CMediaMtpDataProviderSendObject::HandleSpecificWrapperError" ) );
-    TInt err = aError;
-
-    if ( ( err == KErrNotSupported )
-        && ( ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeASF )
-        || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeMP4Container )
-        || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCode3GPContainer ) ) )
-        {
-        // do nothing, handle gracefully
-        // should only happens for container case where metadata field does not match in different DB
-        err = KErrNone;
-        PRINT( _L( "MM MTP <> CMediaMtpDataProviderSendObject::HandleSpecificWrapperError, gracefully dealt with error" ) );
-        }
-
-    return err;
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersetobjectproplist.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: getobjectproplist
-*
-*/
-
-
-#include <mtp/mmtpdataproviderframework.h>
-#include <mtp/cmtptypeobjectproplist.h>
-#include <mtp/cmtptypestring.h>
-#include <mtp/cmtptypearray.h>
-
-#include "cmediamtpdataprovidersetobjectproplist.h"
-#include "mediamtpdataproviderconst.h"
-#include "mmmtpdplogger.h"
-#include "cmmmtpdpmetadataaccesswrapper.h"
-#include "mmmtpdputility.h"
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderSetObjectPropList::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-MMmRequestProcessor* CMediaMtpDataProviderSetObjectPropList::NewL( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
-    {
-    CMediaMtpDataProviderSetObjectPropList* self =
-        new ( ELeave ) CMediaMtpDataProviderSetObjectPropList( aFramework, aConnection, aDpConfig );
-
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderSetObjectPropList::~CMediaMtpDataProviderSetObjectPropList
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderSetObjectPropList::~CMediaMtpDataProviderSetObjectPropList()
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderSetObjectPropList::CMediaMtpDataProviderSetObjectPropList
-// Standard C++ Constructor
-// -----------------------------------------------------------------------------
-//
-CMediaMtpDataProviderSetObjectPropList::CMediaMtpDataProviderSetObjectPropList( MMTPDataProviderFramework& aFramework,
-    MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig ) :
-    CSetObjectPropList( aFramework, aConnection, aDpConfig )
-    {
-
-    }
-
-// -----------------------------------------------------------------------------
-// CMediaMtpDataProviderSetObjectPropList::ConstructL
-// 2nd Phase Constructor
-// -----------------------------------------------------------------------------
-//
-void CMediaMtpDataProviderSetObjectPropList::ConstructL()
-    {
-    CSetObjectPropList::ConstructL();
-    }
-
-TMTPResponseCode CMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 aPropCode, const CMTPObjectMetaData& aObject,
-    const CMTPTypeObjectPropListElement& aElement )
-    {
-    PRINT( _L( "MM MTP => CMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL" ) );
-    TMTPResponseCode responseCode( EMTPRespCodeOK );
-
-    switch ( aPropCode )
-        {
-        case EMTPObjectPropCodeArtist:
-        case EMTPObjectPropCodeGenre:
-        case EMTPObjectPropCodeComposer:
-        case EMTPObjectPropCodeOriginalReleaseDate:
-        case EMTPObjectPropCodeAlbumName:
-        case EMTPObjectPropCodeParentalRating:
-        case EMTPObjectPropCodeEncodingProfile:
-            {
-            CMTPTypeString* stringData =
-                CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
-
-            responseCode = ServiceMetaDataToWrapperL( aPropCode,
-                *stringData,
-                aObject );
-
-            CleanupStack::PopAndDestroy( stringData );// - stringData
-            }
-            break;
-
-        case EMTPObjectPropCodeVideoBitRate:
-            {
-            responseCode = EMTPRespCodeAccessDenied;
-            }
-            break;
-
-        case EMTPObjectPropCodeDescription:
-            {
-            CMTPTypeArray*  desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData
-//            aElement.GetL( CMTPTypeObjectPropListElement::EValue, *desData );
-            desData->SetByDesL(aElement.ArrayL(CMTPTypeObjectPropListElement::EValue ));
-            responseCode = ServiceMetaDataToWrapperL( aPropCode,
-                    *desData,
-                    aObject );
-            CleanupStack::PopAndDestroy( desData ); // - desData
-            }
-            break;
-
-        case EMTPObjectPropCodeWidth:
-        case EMTPObjectPropCodeHeight:
-        case EMTPObjectPropCodeDuration:
-        case EMTPObjectPropCodeUseCount:
-        case EMTPObjectPropCodeSampleRate:
-        case EMTPObjectPropCodeAudioWAVECodec:
-        case EMTPObjectPropCodeAudioBitRate:
-        case EMTPObjectPropCodeVideoFourCCCodec:
-        case EMTPObjectPropCodeFramesPerThousandSeconds:
-        case EMTPObjectPropCodeKeyFrameDistance:
-            {
-            TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) );
-            responseCode = ServiceMetaDataToWrapperL( aPropCode,
-                uint32,
-                aObject );
-            }
-            break;
-
-        case EMTPObjectPropCodeTrack:
-        case EMTPObjectPropCodeNumberOfChannels:
-        case EMTPObjectPropCodeScanType:
-        case EMTPObjectPropCodeDRMStatus:
-            {
-            TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue ));
-            responseCode = ServiceMetaDataToWrapperL( aPropCode,
-                uint16,
-                aObject );
-            }
-            break;
-
-        case EMTPExtObjectPropCodeOmaDrmStatus:
-            {
-            TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( CMTPObjectMetaData::ESuid ) );
-
-            if (drmStatus == EMTPDrmStatusUnknown)
-                {
-                responseCode = EMTPRespCodeAccessDenied;
-                }
-            else
-                {
-                TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
-
-                // there's no DB field to remember the value, so return an error
-                // if there's a mismatch to CAF protection status
-                if ( ( ( drmStatus == EMTPDrmStatusProtected) && ( newValue.Value() == 0 ) ) ||
-                    ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( newValue.Value() == 1 ) ) )
-                    {
-                    responseCode = EMTPRespCodeAccessDenied;
-                    }
-                }
-            }
-            break;
-
-        default:
-            {
-            User::Leave( KErrNotSupported );
-            }
-            break;
-        }
-
-    PRINT( _L( "MM MTP <= CMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL" ) );
-
-    return responseCode;
-    }
-
-TInt CMediaMtpDataProviderSetObjectPropList::HandleSpecificWrapperError( TInt aError,
-    const CMTPObjectMetaData& aObject)
-    {
-    TInt err = aError;
-
-    if ( ( err == KErrNotSupported )
-        && ( ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeASF )
-        || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeMP4Container )
-        || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCode3GPContainer ) ) )
-        {
-        // do nothing, handle gracefully
-        // should only happens for container case where metadata field does not match in different DB
-        err = KErrNone;
-        PRINT( _L( "MM MTP <> CMediaMtpDataProviderSetObjectPropList::HandleSpecificWrapperError, gracefully dealt with error" ) );
-        }
-
-    return err;
-    }
-
-// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersetobjectpropvalue.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersetobjectpropvalue.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -54,7 +54,7 @@
 //
 void CMediaMtpDataProviderSetObjectPropValue::ConstructL()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -65,9 +65,9 @@
 CMediaMtpDataProviderSetObjectPropValue::CMediaMtpDataProviderSetObjectPropValue( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
-    CSetObjectPropValue( aFramework, aConnection, aDpConfig )
+        CSetObjectPropValue( aFramework, aConnection, aDpConfig )
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -77,7 +77,7 @@
 //
 CMediaMtpDataProviderSetObjectPropValue::~CMediaMtpDataProviderSetObjectPropValue()
     {
-
+    // Do nothing
     }
 
 TBool CMediaMtpDataProviderSetObjectPropValue::IsSpecificPropCodeReadOnly( TUint16 aPropCode ) const
@@ -221,12 +221,10 @@
                 }
             else
                 {
-                TMTPTypeUint8 newValue( iMTPTypeUint8 );
-
                 // there's no DB field to remember the value, so return an error
                 // if there's a mismatch to CAF protection status
-                if ( ( ( drmStatus == EMTPDrmStatusProtected) && ( newValue.Value() == 0 ) ) ||
-                    ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( newValue.Value() == 1 ) ) )
+                if ( ( ( drmStatus == EMTPDrmStatusProtected) && ( iMTPTypeUint8.Value() == 0 ) ) ||
+                    ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( iMTPTypeUint8.Value() == 1 ) ) )
                     {
                     responseCode = EMTPRespCodeAccessDenied;
                     }
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataprovidercontrollerimp.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataprovidercontrollerimp.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -26,7 +26,7 @@
 //
 static const TImplementationProxy ImplementationTable[] =
     {
-    {{0x10207C4B}, (TProxyNewLPtr) ( CMediaMtpDataProvider::NewL )}
+    { { 0x10207C4B }, ( TProxyNewLPtr ) ( CMediaMtpDataProvider::NewL ) }
     };
 
 // ----------------------------------------------------------------------------- 
@@ -36,7 +36,7 @@
 EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
         TInt& aTableCount )
     {
-    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
     return ImplementationTable;
     }
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataproviderprocessor.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataproviderprocessor.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -18,54 +18,51 @@
 
 #include <mtp/tmtptyperequest.h>
 
-//Include the standard request processor headers
 #include "crequestunknown.h"
-
 #include "mediamtpdataproviderprocessor.h"
+#include "mmmtpdplogger.h"
 
 //Include the required header for carrying out the specified request
-#include "mmmtpdplogger.h"
-
 #include "cgetobjectpropssupported.h"
-#include "cmediamtpdataprovidergetobjectpropdesc.h"
-#include "cmediamtpdataprovidergetinterdependentpropdesc.h"
+#include "cgetobjectpropdesc.h"
+#include "cgetinterdependentpropdesc.h"
 #include "cgetobject.h"
 #include "cgetobjectinfo.h"
 #include "cmediamtpdataprovidergetobjectpropvalue.h"
 #include "cmediamtpdataprovidergetobjectproplist.h"
-#include "cmediamtpdataprovidersendobject.h"
+#include "csendobject.h"
 #include "cmediamtpdataprovidersetobjectpropvalue.h"
-#include "cmediamtpdataprovidersetobjectproplist.h"
+#include "csetobjectproplist.h"
 #include "cgetobjectreferences.h"
 #include "csetobjectreferences.h"
 #include "cdeleteobject.h"
 #include "cmediamtpdataprovidercopyobject.h"
 #include "cmediamtpdataprovidermoveobject.h"
 #include "cgetpartialobject.h"
-#include "cmediamtpdataprovidergetformatcapabilities.h"
+#include "cgetformatcapabilities.h"
 
 /** A mapping table from the operation code to the request processor factory method */
 const TMediaMtpDataProviderRequestProcessorEntry KKMediaMtpDataProviderRequestProcessorTable[] =
     {
-    {EMTPOpCodeGetObjectPropsSupported, CGetObjectPropsSupported::NewL}, //Get Supported Props
-    {EMTPOpCodeGetObjectPropDesc, CMediaMtpDataProviderGetObjectPropDesc::NewL}, //Get Props Description
-    {EMTPOpCodeGetInterdependentPropDesc, CMediaMtpDataProviderGetInterDependentPropDesc::NewL},//Get Interdependent PropDesc
-    {EMTPOpCodeGetObjectInfo, CGetObjectInfo::NewL}, //GetObjectInfo
-    {EMTPOpCodeGetObject, CGetObject::NewL}, //GetObject
-    {EMTPOpCodeGetObjectPropValue, CMediaMtpDataProviderGetObjectPropValue::NewL}, //Get Props Value
-    {EMTPOpCodeGetObjectPropList, CMediaMtpDataProviderGetObjectPropList::NewL}, //GetObjectPropList
-    {EMTPOpCodeSendObjectInfo, CMediaMtpDataProviderSendObject::NewL}, //SendObjectInfo (routed to SendObject)
-    {EMTPOpCodeSendObject, CMediaMtpDataProviderSendObject::NewL}, //SendObject
-    {EMTPOpCodeSendObjectPropList, CMediaMtpDataProviderSendObject::NewL}, // SendobjectPropList (routed to SendObject)
-    {EMTPOpCodeSetObjectPropValue, CMediaMtpDataProviderSetObjectPropValue::NewL}, //Set Props Value
-    {EMTPOpCodeSetObjectPropList, CMediaMtpDataProviderSetObjectPropList::NewL}, //SetObjectPropList
-    {EMTPOpCodeDeleteObject, CDeleteObject::NewL}, //DeleteObject
-    {EMTPOpCodeCopyObject, CMediaMtpDataProviderCopyObject::NewL}, // Copy Object
-    {EMTPOpCodeMoveObject, CMediaMtpDataProviderMoveObject::NewL}, // Move Object
-    {EMTPOpCodeGetPartialObject, CGetPartialObject::NewL}, // GetPartialObject
-    {EMTPOpCodeSetObjectReferences, CSetObjectReferences::NewL}, //Set Object References
-    {EMTPOpCodeGetObjectReferences, CGetObjectReferences::NewL},  //Get Object References
-    {EMTPOpCodeGetFormatCapabilities, CMediaMtpDataProviderGetFormatCapabilities::NewL} // GetFormatCapabilities
+        { EMTPOpCodeGetObjectPropsSupported, CGetObjectPropsSupported::NewL }, //Get Supported Props
+        { EMTPOpCodeGetObjectPropDesc, CGetObjectPropDesc::NewL }, //Get Props Description
+        { EMTPOpCodeGetInterdependentPropDesc, CGetInterdependentPropDesc::NewL },//Get Interdependent PropDesc
+        { EMTPOpCodeGetObjectInfo, CGetObjectInfo::NewL }, //GetObjectInfo
+        { EMTPOpCodeGetObject, CGetObject::NewL }, //GetObject
+        { EMTPOpCodeGetObjectPropValue, CMediaMtpDataProviderGetObjectPropValue::NewL }, //Get Props Value
+        { EMTPOpCodeGetObjectPropList, CMediaMtpDataProviderGetObjectPropList::NewL }, //GetObjectPropList
+        { EMTPOpCodeSendObjectInfo, CSendObject::NewL }, //SendObjectInfo (routed to SendObject)
+        { EMTPOpCodeSendObject, CSendObject::NewL }, //SendObject
+        { EMTPOpCodeSendObjectPropList, CSendObject::NewL }, // SendobjectPropList (routed to SendObject)
+        { EMTPOpCodeSetObjectPropValue, CMediaMtpDataProviderSetObjectPropValue::NewL }, //Set Props Value
+        { EMTPOpCodeSetObjectPropList, CSetObjectPropList::NewL }, //SetObjectPropList
+        { EMTPOpCodeDeleteObject, CDeleteObject::NewL }, //DeleteObject
+        { EMTPOpCodeCopyObject, CMediaMtpDataProviderCopyObject::NewL }, // Copy Object
+        { EMTPOpCodeMoveObject, CMediaMtpDataProviderMoveObject::NewL }, // Move Object
+        { EMTPOpCodeGetPartialObject, CGetPartialObject::NewL }, // GetPartialObject
+        { EMTPOpCodeSetObjectReferences, CSetObjectReferences::NewL }, //Set Object References
+        { EMTPOpCodeGetObjectReferences, CGetObjectReferences::NewL },  //Get Object References
+        { EMTPOpCodeGetFormatCapabilities, CGetFormatCapabilities::NewL } // GetFormatCapabilities
     };
 
 // -----------------------------------------------------------------------------
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def	Fri Feb 26 18:11:38 2010 +0000
@@ -3,152 +3,158 @@
 	?DoHandleResponsePhaseL@CSetObjectPropValue@@MAEHXZ @ 2 NONAME ; int CSetObjectPropValue::DoHandleResponsePhaseL(void)
 	?NewL@CDeleteObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 3 NONAME ; class MMmRequestProcessor * CDeleteObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
 	?StartL@CRenameObject@@QAEXKABVTDesC16@@@Z @ 4 NONAME ; void CRenameObject::StartL(unsigned long, class TDesC16 const &)
-	?ConstructL@CGetObjectPropDesc@@IAEXXZ @ 5 NONAME ; void CGetObjectPropDesc::ConstructL(void)
-	??1CRequestUnknown@@UAE@XZ @ 6 NONAME ; CRequestUnknown::~CRequestUnknown(void)
-	?Release@CRequestProcessor@@MAEXXZ @ 7 NONAME ; void CRequestProcessor::Release(void)
-	?HandleRequestL@CRequestProcessor@@MAEHABVTMTPTypeRequest@@W4TMTPTransactionPhase@@@Z @ 8 NONAME ; int CRequestProcessor::HandleRequestL(class TMTPTypeRequest const &, enum TMTPTransactionPhase)
+	??1CRequestUnknown@@UAE@XZ @ 5 NONAME ; CRequestUnknown::~CRequestUnknown(void)
+	?Release@CRequestProcessor@@MAEXXZ @ 6 NONAME ; void CRequestProcessor::Release(void)
+	?HandleRequestL@CRequestProcessor@@MAEHABVTMTPTypeRequest@@W4TMTPTransactionPhase@@@Z @ 7 NONAME ; int CRequestProcessor::HandleRequestL(class TMTPTypeRequest const &, enum TMTPTransactionPhase)
+	??1CGetInterdependentPropDesc@@UAE@XZ @ 8 NONAME ; CGetInterdependentPropDesc::~CGetInterdependentPropDesc(void)
 	?OpenSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 9 NONAME ; void CMmMtpDpAccessSingleton::OpenSessionL(void)
 	?ServiceL@CGetPartialObject@@MAEXXZ @ 10 NONAME ; void CGetPartialObject::ServiceL(void)
 	??0CGetObjectInfo@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 11 NONAME ; CGetObjectInfo::CGetObjectInfo(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
 	?DoHandleResponsePhaseL@CRequestProcessor@@MAEHXZ @ 12 NONAME ; int CRequestProcessor::DoHandleResponsePhaseL(void)
-	?RunError@CCopyObject@@MAEHH@Z @ 13 NONAME ; int CCopyObject::RunError(int)
+	?NewL@CGetObjectPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 13 NONAME ; class MMmRequestProcessor * CGetObjectPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
 	??0CGetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 14 NONAME ; CGetObjectPropValue::CGetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ServiceMetaDataToWrapper@CCopyObject@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 15 NONAME ; enum TMTPResponseCode CCopyObject::ServiceMetaDataToWrapper(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?CheckRequestL@CSetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 15 NONAME ; enum TMTPResponseCode CSetObjectPropList::CheckRequestL(void)
 	?RunL@CRequestProcessor@@MAEXXZ @ 16 NONAME ; void CRequestProcessor::RunL(void)
-	?ServiceL@CDeleteObject@@MAEXXZ @ 17 NONAME ; void CDeleteObject::ServiceL(void)
-	?DoCancel@CSetObjectPropList@@MAEXXZ @ 18 NONAME ; void CSetObjectPropList::DoCancel(void)
-	?CleanupDatabaseL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 19 NONAME ; void CMmMtpDpMetadataAccessWrapper::CleanupDatabaseL(void)
-	?ServiceL@CGetObjectPropsSupported@@MAEXXZ @ 20 NONAME ; void CGetObjectPropsSupported::ServiceL(void)
-	?NewL@CSetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 21 NONAME ; class MMmRequestProcessor * CSetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ServiceMetaDataToWrapperL@CSetObjectPropList@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 22 NONAME ; enum TMTPResponseCode CSetObjectPropList::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	??0CGetObjectPropDesc@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 23 NONAME ; CGetObjectPropDesc::CGetObjectPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?Release@CMmMtpDpAccessSingleton@@SAXXZ @ 24 NONAME ; void CMmMtpDpAccessSingleton::Release(void)
-	?UsbDisconnect@CSendObject@@MAEXXZ @ 25 NONAME ; void CSendObject::UsbDisconnect(void)
-	?DoSetObjectReferencesL@CSetObjectReferences@@MAEXAAVCMmMtpDpMetadataAccessWrapper@@GABVTDesC16@@AAVCDesC16Array@@@Z @ 26 NONAME ; void CSetObjectReferences::DoSetObjectReferencesL(class CMmMtpDpMetadataAccessWrapper &, unsigned short, class TDesC16 const &, class CDesC16Array &)
-	?ServiceL@CGetFormatCapabilities@@MAEXXZ @ 27 NONAME ; void CGetFormatCapabilities::ServiceL(void)
-	?GetAllReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVCDesC16Array@@@Z @ 28 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL(class CMPXMedia *, class CDesC16Array &)
-	??1CSetObjectPropList@@UAE@XZ @ 29 NONAME ; CSetObjectPropList::~CSetObjectPropList(void)
-	?ServiceL@CSetObjectPropList@@MAEXXZ @ 30 NONAME ; void CSetObjectPropList::ServiceL(void)
-	??0CMoveObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 31 NONAME ; CMoveObject::CMoveObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??0CRequestUnknown@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 32 NONAME ; CRequestUnknown::CRequestUnknown(class MMTPDataProviderFramework &, class MMTPConnection &)
-	?ConstructL@CGetObjectPropList@@IAEXXZ @ 33 NONAME ; void CGetObjectPropList::ConstructL(void)
-	??1CSendObject@@UAE@XZ @ 34 NONAME ; CSendObject::~CSendObject(void)
-	?ServiceMetaDataFromWrapperL@CGetObjectPropValue@@IAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 35 NONAME ; void CGetObjectPropValue::ServiceMetaDataFromWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?NewL@CGetObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 36 NONAME ; class MMmRequestProcessor * CGetObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectPropValue@@UAE@XZ @ 37 NONAME ; CGetObjectPropValue::~CGetObjectPropValue(void)
-	??1CGetFormatCapabilities@@UAE@XZ @ 38 NONAME ; CGetFormatCapabilities::~CGetFormatCapabilities(void)
-	?SetMetaDataToWrapperL@CSendObject@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 39 NONAME ; enum TMTPResponseCode CSendObject::SetMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?ServiceL@CSetObjectReferences@@EAEXXZ @ 40 NONAME ; void CSetObjectReferences::ServiceL(void)
-	?DoHandleDataIToRPhaseL@CRequestProcessor@@MAEHXZ @ 41 NONAME ; int CRequestProcessor::DoHandleDataIToRPhaseL(void)
-	??0CGetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 42 NONAME ; CGetObjectPropList::CGetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ConstructL@CCopyObject@@IAEXXZ @ 43 NONAME ; void CCopyObject::ConstructL(void)
-	?ServiceL@CGetObjectPropValue@@MAEXXZ @ 44 NONAME ; void CGetObjectPropValue::ServiceL(void)
-	??1CRenameObject@@UAE@XZ @ 45 NONAME ; CRenameObject::~CRenameObject(void)
-	?Match@CRequestProcessor@@MBEHABVTMTPTypeEvent@@AAVMMTPConnection@@@Z @ 46 NONAME ; int CRequestProcessor::Match(class TMTPTypeEvent const &, class MMTPConnection &) const
-	?DoHandleCompletingPhaseL@CSendObject@@MAEHXZ @ 47 NONAME ; int CSendObject::DoHandleCompletingPhaseL(void)
-	?GetDrmStatus@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 48 NONAME ; int MmMtpDpUtility::GetDrmStatus(class TDesC16 const &)
-	?RunL@CRenameObject@@MAEXXZ @ 49 NONAME ; void CRenameObject::RunL(void)
-	??0CSendObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 50 NONAME ; CSendObject::CSendObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??0CSetObjectReferences@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 51 NONAME ; CSetObjectReferences::CSetObjectReferences(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??0CRequestProcessor@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@HPBUTMTPRequestElementInfo@@@Z @ 52 NONAME ; CRequestProcessor::CRequestProcessor(class MMTPDataProviderFramework &, class MMTPConnection &, int, struct TMTPRequestElementInfo const *)
-	?ServiceL@CSendObject@@MAEXXZ @ 53 NONAME ; void CSendObject::ServiceL(void)
-	?Request@CRequestProcessor@@MBEABVTMTPTypeRequest@@XZ @ 54 NONAME ; class TMTPTypeRequest const & CRequestProcessor::Request(void) const
-	?CreateL@CMmMtpDpAccessSingleton@@SAXAAVRFs@@AAVMMTPDataProviderFramework@@@Z @ 55 NONAME ; void CMmMtpDpAccessSingleton::CreateL(class RFs &, class MMTPDataProviderFramework &)
-	?ServiceMetaDataToWrapper@CMoveObject@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 56 NONAME ; enum TMTPResponseCode CMoveObject::ServiceMetaDataToWrapper(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?CheckRequestL@CGetPartialObject@@MAE?AW4TMTPResponseCode@@XZ @ 57 NONAME ; enum TMTPResponseCode CGetPartialObject::CheckRequestL(void)
-	?DoCancel@CRequestProcessor@@MAEXXZ @ 58 NONAME ; void CRequestProcessor::DoCancel(void)
-	?ConstructL@CSetObjectPropList@@IAEXXZ @ 59 NONAME ; void CSetObjectPropList::ConstructL(void)
-	?NewL@CRequestUnknown@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 60 NONAME ; class MMmRequestProcessor * CRequestUnknown::NewL(class MMTPDataProviderFramework &, class MMTPConnection &)
-	?ConstructL@CGetObjectInfo@@AAEXXZ @ 61 NONAME ; void CGetObjectInfo::ConstructL(void)
-	?UsbDisconnect@CRequestProcessor@@MAEXXZ @ 62 NONAME ; void CRequestProcessor::UsbDisconnect(void)
-	?UpdateMusicCollectionL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 63 NONAME ; void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL(void)
-	??1CMoveObject@@UAE@XZ @ 64 NONAME ; CMoveObject::~CMoveObject(void)
-	?CheckRequestL@CSendObject@@MAE?AW4TMTPResponseCode@@XZ @ 65 NONAME ; enum TMTPResponseCode CSendObject::CheckRequestL(void)
-	??1CRequestProcessor@@MAE@XZ @ 66 NONAME ; CRequestProcessor::~CRequestProcessor(void)
-	?DoCancel@CDeleteObject@@MAEXXZ @ 67 NONAME ; void CDeleteObject::DoCancel(void)
-	?RunL@CMoveObject@@MAEXXZ @ 68 NONAME ; void CMoveObject::RunL(void)
-	??1CGetObject@@UAE@XZ @ 69 NONAME ; CGetObject::~CGetObject(void)
-	?DoHandleResponsePhaseL@CSetObjectReferences@@EAEHXZ @ 70 NONAME ; int CSetObjectReferences::DoHandleResponsePhaseL(void)
-	?GetPlaylistNameL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVTDes16@@@Z @ 71 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetPlaylistNameL(class CMPXMedia *, class TDes16 &)
-	?GetAccessWrapperL@CMmMtpDpAccessSingleton@@SAAAVCMmMtpDpMetadataAccessWrapper@@XZ @ 72 NONAME ; class CMmMtpDpMetadataAccessWrapper & CMmMtpDpAccessSingleton::GetAccessWrapperL(void)
-	??1CGetObjectPropsSupported@@UAE@XZ @ 73 NONAME ; CGetObjectPropsSupported::~CGetObjectPropsSupported(void)
-	?CheckRequestL@CGetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 74 NONAME ; enum TMTPResponseCode CGetObjectPropList::CheckRequestL(void)
-	?HasDataphase@CRequestProcessor@@MBEHXZ @ 75 NONAME ; int CRequestProcessor::HasDataphase(void) const
-	?NewL@CGetObjectPropsSupported@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 76 NONAME ; class MMmRequestProcessor * CGetObjectPropsSupported::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?Connection@CRequestProcessor@@MBEAAVMMTPConnection@@XZ @ 77 NONAME ; class MMTPConnection & CRequestProcessor::Connection(void) const
-	??1CGetPartialObject@@UAE@XZ @ 78 NONAME ; CGetPartialObject::~CGetPartialObject(void)
-	?NewL@CGetObjectInfo@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 79 NONAME ; class MMmRequestProcessor * CGetObjectInfo::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?RunError@CSetObjectPropList@@MAEHH@Z @ 80 NONAME ; int CSetObjectPropList::RunError(int)
-	?Match@CRequestUnknown@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 81 NONAME ; int CRequestUnknown::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
-	?ServiceL@CMoveObject@@MAEXXZ @ 82 NONAME ; void CMoveObject::ServiceL(void)
-	?CreateDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 83 NONAME ; void CMmMtpDpMetadataAccessWrapper::CreateDummyFile(class TDesC16 const &)
-	?CheckRequestL@CGetObjectPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 84 NONAME ; enum TMTPResponseCode CGetObjectPropDesc::CheckRequestL(void)
-	?DoHandleRToIPhaseL@CRequestProcessor@@MAEHXZ @ 85 NONAME ; int CRequestProcessor::DoHandleRToIPhaseL(void)
-	?ServiceMetaDataToWrapperL@CSetObjectPropValue@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 86 NONAME ; enum TMTPResponseCode CSetObjectPropValue::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?SetMetaDataToWrapperL@CPropertySettingUtility@@QAE?AW4TMTPResponseCode@@AAVMMmMtpDpConfig@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 17 NONAME ; enum TMTPResponseCode CPropertySettingUtility::SetMetaDataToWrapperL(class MMmMtpDpConfig &, unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?ServiceL@CDeleteObject@@MAEXXZ @ 18 NONAME ; void CDeleteObject::ServiceL(void)
+	?DoCancel@CSetObjectPropList@@MAEXXZ @ 19 NONAME ; void CSetObjectPropList::DoCancel(void)
+	?CleanupDatabaseL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 20 NONAME ; void CMmMtpDpMetadataAccessWrapper::CleanupDatabaseL(void)
+	?ServiceL@CGetObjectPropsSupported@@MAEXXZ @ 21 NONAME ; void CGetObjectPropsSupported::ServiceL(void)
+	?NewL@CSetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 22 NONAME ; class MMmRequestProcessor * CSetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?Release@CMmMtpDpAccessSingleton@@SAXXZ @ 23 NONAME ; void CMmMtpDpAccessSingleton::Release(void)
+	?UsbDisconnect@CSendObject@@MAEXXZ @ 24 NONAME ; void CSendObject::UsbDisconnect(void)
+	?DoSetObjectReferencesL@CSetObjectReferences@@MAEXAAVCMmMtpDpMetadataAccessWrapper@@GABVTDesC16@@AAVCDesC16Array@@@Z @ 25 NONAME ; void CSetObjectReferences::DoSetObjectReferencesL(class CMmMtpDpMetadataAccessWrapper &, unsigned short, class TDesC16 const &, class CDesC16Array &)
+	?ServiceL@CGetFormatCapabilities@@MAEXXZ @ 26 NONAME ; void CGetFormatCapabilities::ServiceL(void)
+	?GetAllReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVCDesC16Array@@@Z @ 27 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL(class CMPXMedia *, class CDesC16Array &)
+	??1CSetObjectPropList@@UAE@XZ @ 28 NONAME ; CSetObjectPropList::~CSetObjectPropList(void)
+	?ServiceL@CSetObjectPropList@@MAEXXZ @ 29 NONAME ; void CSetObjectPropList::ServiceL(void)
+	??0CMoveObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 30 NONAME ; CMoveObject::CMoveObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CRequestUnknown@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 31 NONAME ; CRequestUnknown::CRequestUnknown(class MMTPDataProviderFramework &, class MMTPConnection &)
+	?ConstructL@CGetObjectPropList@@IAEXXZ @ 32 NONAME ; void CGetObjectPropList::ConstructL(void)
+	??1CSendObject@@UAE@XZ @ 33 NONAME ; CSendObject::~CSendObject(void)
+	?ServiceMetaDataFromWrapperL@CGetObjectPropValue@@IAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 34 NONAME ; void CGetObjectPropValue::ServiceMetaDataFromWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?NewL@CGetObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 35 NONAME ; class MMmRequestProcessor * CGetObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectPropValue@@UAE@XZ @ 36 NONAME ; CGetObjectPropValue::~CGetObjectPropValue(void)
+	??1CGetFormatCapabilities@@UAE@XZ @ 37 NONAME ; CGetFormatCapabilities::~CGetFormatCapabilities(void)
+	?ServiceL@CSetObjectReferences@@EAEXXZ @ 38 NONAME ; void CSetObjectReferences::ServiceL(void)
+	?DoHandleDataIToRPhaseL@CRequestProcessor@@MAEHXZ @ 39 NONAME ; int CRequestProcessor::DoHandleDataIToRPhaseL(void)
+	??0CGetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 40 NONAME ; CGetObjectPropList::CGetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ConstructL@CCopyObject@@IAEXXZ @ 41 NONAME ; void CCopyObject::ConstructL(void)
+	?ServiceL@CGetObjectPropValue@@MAEXXZ @ 42 NONAME ; void CGetObjectPropValue::ServiceL(void)
+	??1CRenameObject@@UAE@XZ @ 43 NONAME ; CRenameObject::~CRenameObject(void)
+	?Match@CRequestProcessor@@MBEHABVTMTPTypeEvent@@AAVMMTPConnection@@@Z @ 44 NONAME ; int CRequestProcessor::Match(class TMTPTypeEvent const &, class MMTPConnection &) const
+	?DoHandleCompletingPhaseL@CSendObject@@MAEHXZ @ 45 NONAME ; int CSendObject::DoHandleCompletingPhaseL(void)
+	?GetDrmStatus@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 46 NONAME ; int MmMtpDpUtility::GetDrmStatus(class TDesC16 const &)
+	?RunL@CRenameObject@@MAEXXZ @ 47 NONAME ; void CRenameObject::RunL(void)
+	??0CSetObjectReferences@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 48 NONAME ; CSetObjectReferences::CSetObjectReferences(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CRequestProcessor@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@HPBUTMTPRequestElementInfo@@@Z @ 49 NONAME ; CRequestProcessor::CRequestProcessor(class MMTPDataProviderFramework &, class MMTPConnection &, int, struct TMTPRequestElementInfo const *)
+	?ServiceL@CSendObject@@MAEXXZ @ 50 NONAME ; void CSendObject::ServiceL(void)
+	?Request@CRequestProcessor@@MBEABVTMTPTypeRequest@@XZ @ 51 NONAME ; class TMTPTypeRequest const & CRequestProcessor::Request(void) const
+	?CreateL@CMmMtpDpAccessSingleton@@SAXAAVRFs@@AAVMMTPDataProviderFramework@@@Z @ 52 NONAME ; void CMmMtpDpAccessSingleton::CreateL(class RFs &, class MMTPDataProviderFramework &)
+	?DoCancel@CRequestProcessor@@MAEXXZ @ 53 NONAME ; void CRequestProcessor::DoCancel(void)
+	?CheckRequestL@CGetPartialObject@@MAE?AW4TMTPResponseCode@@XZ @ 54 NONAME ; enum TMTPResponseCode CGetPartialObject::CheckRequestL(void)
+	?NewL@CRequestUnknown@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 55 NONAME ; class MMmRequestProcessor * CRequestUnknown::NewL(class MMTPDataProviderFramework &, class MMTPConnection &)
+	??0CGetFormatCapabilities@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 56 NONAME ; CGetFormatCapabilities::CGetFormatCapabilities(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ConstructL@CGetObjectInfo@@AAEXXZ @ 57 NONAME ; void CGetObjectInfo::ConstructL(void)
+	?UsbDisconnect@CRequestProcessor@@MAEXXZ @ 58 NONAME ; void CRequestProcessor::UsbDisconnect(void)
+	?UpdateMusicCollectionL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 59 NONAME ; void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL(void)
+	??1CMoveObject@@UAE@XZ @ 60 NONAME ; CMoveObject::~CMoveObject(void)
+	?CheckRequestL@CSendObject@@MAE?AW4TMTPResponseCode@@XZ @ 61 NONAME ; enum TMTPResponseCode CSendObject::CheckRequestL(void)
+	??1CRequestProcessor@@MAE@XZ @ 62 NONAME ; CRequestProcessor::~CRequestProcessor(void)
+	?SetAbstractMediaL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAVCDesC16Array@@W4TMPXGeneralCategory@@@Z @ 63 NONAME ; void CMmMtpDpMetadataAccessWrapper::SetAbstractMediaL(class TDesC16 const &, class CDesC16Array &, enum TMPXGeneralCategory)
+	?DoCancel@CDeleteObject@@MAEXXZ @ 64 NONAME ; void CDeleteObject::DoCancel(void)
+	??1CGetObject@@UAE@XZ @ 65 NONAME ; CGetObject::~CGetObject(void)
+	?NewL@CGetInterdependentPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 66 NONAME ; class MMmRequestProcessor * CGetInterdependentPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?DoHandleResponsePhaseL@CSetObjectReferences@@EAEHXZ @ 67 NONAME ; int CSetObjectReferences::DoHandleResponsePhaseL(void)
+	?GetAccessWrapperL@CMmMtpDpAccessSingleton@@SAAAVCMmMtpDpMetadataAccessWrapper@@XZ @ 68 NONAME ; class CMmMtpDpMetadataAccessWrapper & CMmMtpDpAccessSingleton::GetAccessWrapperL(void)
+	??1CGetObjectPropsSupported@@UAE@XZ @ 69 NONAME ; CGetObjectPropsSupported::~CGetObjectPropsSupported(void)
+	?CheckRequestL@CGetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 70 NONAME ; enum TMTPResponseCode CGetObjectPropList::CheckRequestL(void)
+	?HasDataphase@CRequestProcessor@@MBEHXZ @ 71 NONAME ; int CRequestProcessor::HasDataphase(void) const
+	?NewL@CGetObjectPropsSupported@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 72 NONAME ; class MMmRequestProcessor * CGetObjectPropsSupported::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?Connection@CRequestProcessor@@MBEAAVMMTPConnection@@XZ @ 73 NONAME ; class MMTPConnection & CRequestProcessor::Connection(void) const
+	?ConstructL@CGetFormatCapabilities@@AAEXXZ @ 74 NONAME ; void CGetFormatCapabilities::ConstructL(void)
+	??1CPropertySettingUtility@@UAE@XZ @ 75 NONAME ; CPropertySettingUtility::~CPropertySettingUtility(void)
+	??1CGetPartialObject@@UAE@XZ @ 76 NONAME ; CGetPartialObject::~CGetPartialObject(void)
+	?NewL@CGetObjectInfo@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 77 NONAME ; class MMmRequestProcessor * CGetObjectInfo::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?RunError@CSetObjectPropList@@MAEHH@Z @ 78 NONAME ; int CSetObjectPropList::RunError(int)
+	?CheckRequestL@CGetInterdependentPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 79 NONAME ; enum TMTPResponseCode CGetInterdependentPropDesc::CheckRequestL(void)
+	?Match@CRequestUnknown@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 80 NONAME ; int CRequestUnknown::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
+	?ServiceL@CMoveObject@@MAEXXZ @ 81 NONAME ; void CMoveObject::ServiceL(void)
+	?CreateDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 82 NONAME ; void CMmMtpDpMetadataAccessWrapper::CreateDummyFile(class TDesC16 const &)
+	?CheckRequestL@CGetObjectPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 83 NONAME ; enum TMTPResponseCode CGetObjectPropDesc::CheckRequestL(void)
+	?DoHandleRToIPhaseL@CRequestProcessor@@MAEHXZ @ 84 NONAME ; int CRequestProcessor::DoHandleRToIPhaseL(void)
+	?ServiceMetaDataToWrapperL@CSetObjectPropValue@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 85 NONAME ; enum TMTPResponseCode CSetObjectPropValue::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?NewCommonObjectPropertyL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@G@Z @ 86 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewCommonObjectPropertyL(unsigned short)
 	?FormatFromFilename@MmMtpDpUtility@@SA?AW4TMTPFormatCode@@ABVTDesC16@@@Z @ 87 NONAME ; enum TMTPFormatCode MmMtpDpUtility::FormatFromFilename(class TDesC16 const &)
 	?CheckRequestL@CSetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 88 NONAME ; enum TMTPResponseCode CSetObjectPropValue::CheckRequestL(void)
-	?Match@CRequestProcessor@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 89 NONAME ; int CRequestProcessor::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
-	??0CCopyObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 90 NONAME ; CCopyObject::CCopyObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?CheckRequestL@CRequestProcessor@@MAE?AW4TMTPResponseCode@@XZ @ 91 NONAME ; enum TMTPResponseCode CRequestProcessor::CheckRequestL(void)
-	?SendResponseL@CRequestProcessor@@IAEXW4TMTPResponseCode@@HPAK@Z @ 92 NONAME ; void CRequestProcessor::SendResponseL(enum TMTPResponseCode, int, unsigned long *)
-	??0CGetPartialObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 93 NONAME ; CGetPartialObject::CGetPartialObject(class MMTPDataProviderFramework &, class MMTPConnection &)
-	?DoHandleCompletingPhaseL@CRequestProcessor@@MAEHXZ @ 94 NONAME ; int CRequestProcessor::DoHandleCompletingPhaseL(void)
-	??0CSetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 95 NONAME ; CSetObjectPropList::CSetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CPropertySettingUtility@@IAE@XZ @ 89 NONAME ; CPropertySettingUtility::CPropertySettingUtility(void)
+	?Match@CRequestProcessor@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 90 NONAME ; int CRequestProcessor::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
+	??0CCopyObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 91 NONAME ; CCopyObject::CCopyObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?CheckRequestL@CRequestProcessor@@MAE?AW4TMTPResponseCode@@XZ @ 92 NONAME ; enum TMTPResponseCode CRequestProcessor::CheckRequestL(void)
+	?SendResponseL@CRequestProcessor@@IAEXW4TMTPResponseCode@@HPAK@Z @ 93 NONAME ; void CRequestProcessor::SendResponseL(enum TMTPResponseCode, int, unsigned long *)
+	??0CGetPartialObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 94 NONAME ; CGetPartialObject::CGetPartialObject(class MMTPDataProviderFramework &, class MMTPConnection &)
+	?DoHandleCompletingPhaseL@CRequestProcessor@@MAEHXZ @ 95 NONAME ; int CRequestProcessor::DoHandleCompletingPhaseL(void)
 	?DeleteDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 96 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteDummyFile(class TDesC16 const &)
 	?IsVideoL@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 97 NONAME ; int MmMtpDpUtility::IsVideoL(class TDesC16 const &)
 	??1CGetObjectInfo@@UAE@XZ @ 98 NONAME ; CGetObjectInfo::~CGetObjectInfo(void)
 	?ServiceL@CRequestUnknown@@MAEXXZ @ 99 NONAME ; void CRequestUnknown::ServiceL(void)
 	?HasDataphase@CSetObjectPropList@@MBEHXZ @ 100 NONAME ; int CSetObjectPropList::HasDataphase(void) const
 	?NewL@CGetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 101 NONAME ; class MMmRequestProcessor * CGetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ConstructL@CGetFormatCapabilities@@IAEXXZ @ 102 NONAME ; void CGetFormatCapabilities::ConstructL(void)
-	?DoCancel@CRenameObject@@MAEXXZ @ 103 NONAME ; void CRenameObject::DoCancel(void)
-	??0CGetFormatCapabilities@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 104 NONAME ; CGetFormatCapabilities::CGetFormatCapabilities(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CSetObjectReferences@@UAE@XZ @ 105 NONAME ; CSetObjectReferences::~CSetObjectReferences(void)
-	?Match@CSendObject@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 106 NONAME ; int CSendObject::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
+	?DoCancel@CRenameObject@@MAEXXZ @ 102 NONAME ; void CRenameObject::DoCancel(void)
+	??1CSetObjectReferences@@UAE@XZ @ 103 NONAME ; CSetObjectReferences::~CSetObjectReferences(void)
+	?Match@CSendObject@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 104 NONAME ; int CSendObject::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
+	?NewL@CSetObjectPropList@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 105 NONAME ; class MMmRequestProcessor * CSetObjectPropList::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?GetAllAbstractMediaL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@PAPAVCMPXMediaArray@@W4TMPXGeneralCategory@@@Z @ 106 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL(class TDesC16 const &, class CMPXMediaArray * *, enum TMPXGeneralCategory)
 	??1CCopyObject@@UAE@XZ @ 107 NONAME ; CCopyObject::~CCopyObject(void)
-	?RunError@CMoveObject@@MAEHH@Z @ 108 NONAME ; int CMoveObject::RunError(int)
-	?ConstructL@CSendObject@@IAEXXZ @ 109 NONAME ; void CSendObject::ConstructL(void)
-	?GetModifiedContentL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAHAAVCDesC16Array@@@Z @ 110 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL(class TDesC16 const &, int &, class CDesC16Array &)
-	?RunL@CGetObjectPropList@@MAEXXZ @ 111 NONAME ; void CGetObjectPropList::RunL(void)
-	?RunL@CCopyObject@@MAEXXZ @ 112 NONAME ; void CCopyObject::RunL(void)
-	?RunError@CRequestProcessor@@MAEHH@Z @ 113 NONAME ; int CRequestProcessor::RunError(int)
-	?SessionId@CRequestProcessor@@MAEKXZ @ 114 NONAME ; unsigned long CRequestProcessor::SessionId(void)
-	?SetPlaylistL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAVCDesC16Array@@@Z @ 115 NONAME ; void CMmMtpDpMetadataAccessWrapper::SetPlaylistL(class TDesC16 const &, class CDesC16Array &)
-	?HandleEventL@CRequestProcessor@@MAEXABVTMTPTypeEvent@@@Z @ 116 NONAME ; void CRequestProcessor::HandleEventL(class TMTPTypeEvent const &)
-	?NewL@CGetPartialObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 117 NONAME ; class MMmRequestProcessor * CGetPartialObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?HasDataphase@CSetObjectReferences@@EBEHXZ @ 118 NONAME ; int CSetObjectReferences::HasDataphase(void) const
-	?RenameObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@0@Z @ 119 NONAME ; void CMmMtpDpMetadataAccessWrapper::RenameObjectL(class TDesC16 const &, class TDesC16 const &)
-	?RunError@CGetObjectPropList@@MAEHH@Z @ 120 NONAME ; int CGetObjectPropList::RunError(int)
-	?DoHandleResponsePhaseL@CSetObjectPropList@@MAEHXZ @ 121 NONAME ; int CSetObjectPropList::DoHandleResponsePhaseL(void)
-	??0CDeleteObject@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 122 NONAME ; CDeleteObject::CDeleteObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?GetAllPlaylistL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@PAPAVCMPXMediaArray@@@Z @ 123 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllPlaylistL(class TDesC16 const &, class CMPXMediaArray * *)
-	?NewL@CRenameObject@@SAPAV1@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 124 NONAME ; class CRenameObject * CRenameObject::NewL(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
-	?GetObjectMetadataValueL@CMmMtpDpMetadataAccessWrapper@@QAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 125 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?AddDummyFileL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 126 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddDummyFileL(class TDesC16 const &)
-	??1CGetObjectPropDesc@@UAE@XZ @ 127 NONAME ; CGetObjectPropDesc::~CGetObjectPropDesc(void)
-	?ServiceL@CGetObjectPropDesc@@MAEXXZ @ 128 NONAME ; void CGetObjectPropDesc::ServiceL(void)
-	?HasDataphase@CSetObjectPropValue@@MBEHXZ @ 129 NONAME ; int CSetObjectPropValue::HasDataphase(void) const
-	?ServiceL@CCopyObject@@MAEXXZ @ 130 NONAME ; void CCopyObject::ServiceL(void)
-	?CheckRequestL@CGetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 131 NONAME ; enum TMTPResponseCode CGetObjectPropValue::CheckRequestL(void)
-	?CloseSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 132 NONAME ; void CMmMtpDpAccessSingleton::CloseSessionL(void)
-	?ReceiveDataL@CRequestProcessor@@IAEXAAVMMTPType@@@Z @ 133 NONAME ; void CRequestProcessor::ReceiveDataL(class MMTPType &)
-	?ConstructL@CMoveObject@@IAEXXZ @ 134 NONAME ; void CMoveObject::ConstructL(void)
-	?RunL@CSetObjectPropList@@MAEXXZ @ 135 NONAME ; void CSetObjectPropList::RunL(void)
-	??1CGetObjectReferences@@UAE@XZ @ 136 NONAME ; CGetObjectReferences::~CGetObjectReferences(void)
-	?HasDataphase@CSendObject@@MBEHXZ @ 137 NONAME ; int CSendObject::HasDataphase(void) const
-	??1CSetObjectPropValue@@UAE@XZ @ 138 NONAME ; CSetObjectPropValue::~CSetObjectPropValue(void)
-	?ConstructL@CRenameObject@@IAEXXZ @ 139 NONAME ; void CRenameObject::ConstructL(void)
-	?DoHandleResponsePhaseL@CSendObject@@MAEHXZ @ 140 NONAME ; int CSendObject::DoHandleResponsePhaseL(void)
-	?SendDataL@CRequestProcessor@@IAEXABVMMTPType@@@Z @ 141 NONAME ; void CRequestProcessor::SendDataL(class MMTPType const &)
-	?DoCancel@CGetObjectPropList@@MAEXXZ @ 142 NONAME ; void CGetObjectPropList::DoCancel(void)
-	?DoHandleRequestPhaseL@CRequestProcessor@@MAEHXZ @ 143 NONAME ; int CRequestProcessor::DoHandleRequestPhaseL(void)
-	?ServiceL@CSetObjectPropValue@@MAEXXZ @ 144 NONAME ; void CSetObjectPropValue::ServiceL(void)
-	?RunError@CRenameObject@@MAEHH@Z @ 145 NONAME ; int CRenameObject::RunError(int)
-	??1CDeleteObject@@UAE@XZ @ 146 NONAME ; CDeleteObject::~CDeleteObject(void)
-	?DoHandleResponsePhaseL@CGetPartialObject@@MAEHXZ @ 147 NONAME ; int CGetPartialObject::DoHandleResponsePhaseL(void)
-	?CheckRequestL@CGetFormatCapabilities@@MAE?AW4TMTPResponseCode@@XZ @ 148 NONAME ; enum TMTPResponseCode CGetFormatCapabilities::CheckRequestL(void)
-	??0CSetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 149 NONAME ; CSetObjectPropValue::CSetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectPropList@@UAE@XZ @ 150 NONAME ; CGetObjectPropList::~CGetObjectPropList(void)
-	?ServiceL@CGetObjectPropList@@MAEXXZ @ 151 NONAME ; void CGetObjectPropList::ServiceL(void)
-	??0CRenameObject@@IAE@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 152 NONAME ; CRenameObject::CRenameObject(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
+	?RunL@CGetObjectPropList@@MAEXXZ @ 108 NONAME ; void CGetObjectPropList::RunL(void)
+	?GetModifiedContentL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAHAAVCDesC16Array@@@Z @ 109 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL(class TDesC16 const &, int &, class CDesC16Array &)
+	?NewRangeFormDescriptionL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@GKKKH@Z @ 110 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewRangeFormDescriptionL(unsigned short, unsigned long, unsigned long, unsigned long, int)
+	?RunError@CRequestProcessor@@MAEHH@Z @ 111 NONAME ; int CRequestProcessor::RunError(int)
+	?SessionId@CRequestProcessor@@MAEKXZ @ 112 NONAME ; unsigned long CRequestProcessor::SessionId(void)
+	??0CDescriptionUtility@@IAE@XZ @ 113 NONAME ; CDescriptionUtility::CDescriptionUtility(void)
+	?HandleEventL@CRequestProcessor@@MAEXABVTMTPTypeEvent@@@Z @ 114 NONAME ; void CRequestProcessor::HandleEventL(class TMTPTypeEvent const &)
+	?NewL@CGetPartialObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 115 NONAME ; class MMmRequestProcessor * CGetPartialObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?HasDataphase@CSetObjectReferences@@EBEHXZ @ 116 NONAME ; int CSetObjectReferences::HasDataphase(void) const
+	?ConstructL@CGetInterdependentPropDesc@@IAEXXZ @ 117 NONAME ; void CGetInterdependentPropDesc::ConstructL(void)
+	?RenameObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@0@Z @ 118 NONAME ; void CMmMtpDpMetadataAccessWrapper::RenameObjectL(class TDesC16 const &, class TDesC16 const &)
+	?RunError@CGetObjectPropList@@MAEHH@Z @ 119 NONAME ; int CGetObjectPropList::RunError(int)
+	?DoHandleResponsePhaseL@CSetObjectPropList@@MAEHXZ @ 120 NONAME ; int CSetObjectPropList::DoHandleResponsePhaseL(void)
+	??0CDeleteObject@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 121 NONAME ; CDeleteObject::CDeleteObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?NewL@CRenameObject@@SAPAV1@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 122 NONAME ; class CRenameObject * CRenameObject::NewL(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
+	?GetObjectMetadataValueL@CMmMtpDpMetadataAccessWrapper@@QAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 123 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?AddDummyFileL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 124 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddDummyFileL(class TDesC16 const &)
+	??0CGetObjectPropDesc@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 125 NONAME ; CGetObjectPropDesc::CGetObjectPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ConstructL@CGetObjectPropDesc@@AAEXXZ @ 126 NONAME ; void CGetObjectPropDesc::ConstructL(void)
+	??0CGetInterdependentPropDesc@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 127 NONAME ; CGetInterdependentPropDesc::CGetInterdependentPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectPropDesc@@UAE@XZ @ 128 NONAME ; CGetObjectPropDesc::~CGetObjectPropDesc(void)
+	?ServiceL@CGetObjectPropDesc@@MAEXXZ @ 129 NONAME ; void CGetObjectPropDesc::ServiceL(void)
+	?HasDataphase@CSetObjectPropValue@@MBEHXZ @ 130 NONAME ; int CSetObjectPropValue::HasDataphase(void) const
+	?ServiceL@CCopyObject@@MAEXXZ @ 131 NONAME ; void CCopyObject::ServiceL(void)
+	?CheckRequestL@CGetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 132 NONAME ; enum TMTPResponseCode CGetObjectPropValue::CheckRequestL(void)
+	?CloseSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 133 NONAME ; void CMmMtpDpAccessSingleton::CloseSessionL(void)
+	?NewL@CGetFormatCapabilities@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 134 NONAME ; class MMmRequestProcessor * CGetFormatCapabilities::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ReceiveDataL@CRequestProcessor@@IAEXAAVMMTPType@@@Z @ 135 NONAME ; void CRequestProcessor::ReceiveDataL(class MMTPType &)
+	??1CDescriptionUtility@@UAE@XZ @ 136 NONAME ; CDescriptionUtility::~CDescriptionUtility(void)
+	?RunL@CSetObjectPropList@@MAEXXZ @ 137 NONAME ; void CSetObjectPropList::RunL(void)
+	?ConstructL@CMoveObject@@IAEXXZ @ 138 NONAME ; void CMoveObject::ConstructL(void)
+	?NewL@CSendObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 139 NONAME ; class MMmRequestProcessor * CSendObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectReferences@@UAE@XZ @ 140 NONAME ; CGetObjectReferences::~CGetObjectReferences(void)
+	?HasDataphase@CSendObject@@MBEHXZ @ 141 NONAME ; int CSendObject::HasDataphase(void) const
+	??1CSetObjectPropValue@@UAE@XZ @ 142 NONAME ; CSetObjectPropValue::~CSetObjectPropValue(void)
+	?ConstructL@CRenameObject@@IAEXXZ @ 143 NONAME ; void CRenameObject::ConstructL(void)
+	?SendDataL@CRequestProcessor@@IAEXABVMMTPType@@@Z @ 144 NONAME ; void CRequestProcessor::SendDataL(class MMTPType const &)
+	?DoHandleResponsePhaseL@CSendObject@@MAEHXZ @ 145 NONAME ; int CSendObject::DoHandleResponsePhaseL(void)
+	?DoCancel@CGetObjectPropList@@MAEXXZ @ 146 NONAME ; void CGetObjectPropList::DoCancel(void)
+	?ServiceL@CGetInterdependentPropDesc@@MAEXXZ @ 147 NONAME ; void CGetInterdependentPropDesc::ServiceL(void)
+	?DoHandleRequestPhaseL@CRequestProcessor@@MAEHXZ @ 148 NONAME ; int CRequestProcessor::DoHandleRequestPhaseL(void)
+	?GetAbstractMediaNameL@CMmMtpDpMetadataAccessWrapper@@QAEPAVHBufC16@@PAVCMPXMedia@@W4TMPXGeneralCategory@@@Z @ 149 NONAME ; class HBufC16 * CMmMtpDpMetadataAccessWrapper::GetAbstractMediaNameL(class CMPXMedia *, enum TMPXGeneralCategory)
+	?ServiceL@CSetObjectPropValue@@MAEXXZ @ 150 NONAME ; void CSetObjectPropValue::ServiceL(void)
+	?RunError@CRenameObject@@MAEHH@Z @ 151 NONAME ; int CRenameObject::RunError(int)
+	??1CDeleteObject@@UAE@XZ @ 152 NONAME ; CDeleteObject::~CDeleteObject(void)
+	?DoHandleResponsePhaseL@CGetPartialObject@@MAEHXZ @ 153 NONAME ; int CGetPartialObject::DoHandleResponsePhaseL(void)
+	?CheckRequestL@CGetFormatCapabilities@@MAE?AW4TMTPResponseCode@@XZ @ 154 NONAME ; enum TMTPResponseCode CGetFormatCapabilities::CheckRequestL(void)
+	??0CSetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 155 NONAME ; CSetObjectPropValue::CSetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectPropList@@UAE@XZ @ 156 NONAME ; CGetObjectPropList::~CGetObjectPropList(void)
+	?ServiceL@CGetObjectPropList@@MAEXXZ @ 157 NONAME ; void CGetObjectPropList::ServiceL(void)
+	??0CRenameObject@@IAE@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 158 NONAME ; CRenameObject::CRenameObject(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def	Fri Feb 26 18:11:38 2010 +0000
@@ -4,255 +4,276 @@
 	_ZN10CGetObjectD1Ev @ 3 NONAME
 	_ZN10CGetObjectD2Ev @ 4 NONAME
 	_ZN11CCopyObject10ConstructLEv @ 5 NONAME
-	_ZN11CCopyObject24ServiceMetaDataToWrapperEtR8MMTPTypeRK18CMTPObjectMetaData @ 6 NONAME
-	_ZN11CCopyObject4RunLEv @ 7 NONAME
-	_ZN11CCopyObject8RunErrorEi @ 8 NONAME
-	_ZN11CCopyObject8ServiceLEv @ 9 NONAME
-	_ZN11CCopyObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 10 NONAME
-	_ZN11CCopyObjectD0Ev @ 11 NONAME
-	_ZN11CCopyObjectD1Ev @ 12 NONAME
-	_ZN11CCopyObjectD2Ev @ 13 NONAME
-	_ZN11CMoveObject10ConstructLEv @ 14 NONAME
-	_ZN11CMoveObject24ServiceMetaDataToWrapperEtR8MMTPTypeRK18CMTPObjectMetaData @ 15 NONAME
-	_ZN11CMoveObject4RunLEv @ 16 NONAME
-	_ZN11CMoveObject8RunErrorEi @ 17 NONAME
-	_ZN11CMoveObject8ServiceLEv @ 18 NONAME
-	_ZN11CMoveObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 19 NONAME
-	_ZN11CMoveObjectD0Ev @ 20 NONAME
-	_ZN11CMoveObjectD1Ev @ 21 NONAME
-	_ZN11CMoveObjectD2Ev @ 22 NONAME
-	_ZN11CSendObject10ConstructLEv @ 23 NONAME
-	_ZN11CSendObject13CheckRequestLEv @ 24 NONAME
-	_ZN11CSendObject13UsbDisconnectEv @ 25 NONAME
-	_ZN11CSendObject21SetMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 26 NONAME
-	_ZN11CSendObject22DoHandleResponsePhaseLEv @ 27 NONAME
-	_ZN11CSendObject24DoHandleCompletingPhaseLEv @ 28 NONAME
-	_ZN11CSendObject8ServiceLEv @ 29 NONAME
-	_ZN11CSendObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 30 NONAME
-	_ZN11CSendObjectD0Ev @ 31 NONAME
-	_ZN11CSendObjectD1Ev @ 32 NONAME
-	_ZN11CSendObjectD2Ev @ 33 NONAME
-	_ZN13CDeleteObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 34 NONAME
-	_ZN13CDeleteObject4RunLEv @ 35 NONAME
-	_ZN13CDeleteObject8DoCancelEv @ 36 NONAME
-	_ZN13CDeleteObject8ServiceLEv @ 37 NONAME
-	_ZN13CDeleteObjectD0Ev @ 38 NONAME
-	_ZN13CDeleteObjectD1Ev @ 39 NONAME
-	_ZN13CDeleteObjectD2Ev @ 40 NONAME
-	_ZN13CRenameObject10ConstructLEv @ 41 NONAME
-	_ZN13CRenameObject4NewLER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 42 NONAME
-	_ZN13CRenameObject4RunLEv @ 43 NONAME
-	_ZN13CRenameObject6StartLEmRK7TDesC16 @ 44 NONAME
-	_ZN13CRenameObject8DoCancelEv @ 45 NONAME
-	_ZN13CRenameObject8RunErrorEi @ 46 NONAME
-	_ZN13CRenameObjectC1ER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 47 NONAME
-	_ZN13CRenameObjectC2ER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 48 NONAME
-	_ZN13CRenameObjectD0Ev @ 49 NONAME
-	_ZN13CRenameObjectD1Ev @ 50 NONAME
-	_ZN13CRenameObjectD2Ev @ 51 NONAME
-	_ZN14CGetObjectInfo10ConstructLEv @ 52 NONAME
-	_ZN14CGetObjectInfo4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 53 NONAME
-	_ZN14CGetObjectInfoD0Ev @ 54 NONAME
-	_ZN14CGetObjectInfoD1Ev @ 55 NONAME
-	_ZN14CGetObjectInfoD2Ev @ 56 NONAME
-	_ZN14MmMtpDpUtility12GetDrmStatusERK7TDesC16 @ 57 NONAME
-	_ZN14MmMtpDpUtility18FormatFromFilenameERK7TDesC16 @ 58 NONAME
-	_ZN14MmMtpDpUtility8IsVideoLERK7TDesC16 @ 59 NONAME
-	_ZN15CRequestUnknown4NewLER25MMTPDataProviderFrameworkR14MMTPConnection @ 60 NONAME
-	_ZN15CRequestUnknown8ServiceLEv @ 61 NONAME
-	_ZN15CRequestUnknownC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 62 NONAME
-	_ZN15CRequestUnknownC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 63 NONAME
-	_ZN15CRequestUnknownD0Ev @ 64 NONAME
-	_ZN15CRequestUnknownD1Ev @ 65 NONAME
-	_ZN15CRequestUnknownD2Ev @ 66 NONAME
-	_ZN17CGetPartialObject13CheckRequestLEv @ 67 NONAME
-	_ZN17CGetPartialObject22DoHandleResponsePhaseLEv @ 68 NONAME
-	_ZN17CGetPartialObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 69 NONAME
-	_ZN17CGetPartialObject8ServiceLEv @ 70 NONAME
-	_ZN17CGetPartialObjectC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 71 NONAME
-	_ZN17CGetPartialObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 72 NONAME
-	_ZN17CGetPartialObjectD0Ev @ 73 NONAME
-	_ZN17CGetPartialObjectD1Ev @ 74 NONAME
-	_ZN17CGetPartialObjectD2Ev @ 75 NONAME
-	_ZN17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 76 NONAME
-	_ZN17CRequestProcessor12ReceiveDataLER8MMTPType @ 77 NONAME
-	_ZN17CRequestProcessor13CheckRequestLEv @ 78 NONAME
-	_ZN17CRequestProcessor13SendResponseLE16TMTPResponseCodeiPm @ 79 NONAME
-	_ZN17CRequestProcessor13UsbDisconnectEv @ 80 NONAME
-	_ZN17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 81 NONAME
-	_ZN17CRequestProcessor18DoHandleRToIPhaseLEv @ 82 NONAME
-	_ZN17CRequestProcessor21DoHandleRequestPhaseLEv @ 83 NONAME
-	_ZN17CRequestProcessor22DoHandleDataIToRPhaseLEv @ 84 NONAME
-	_ZN17CRequestProcessor22DoHandleResponsePhaseLEv @ 85 NONAME
-	_ZN17CRequestProcessor24DoHandleCompletingPhaseLEv @ 86 NONAME
-	_ZN17CRequestProcessor4RunLEv @ 87 NONAME
-	_ZN17CRequestProcessor7ReleaseEv @ 88 NONAME
-	_ZN17CRequestProcessor8DoCancelEv @ 89 NONAME
-	_ZN17CRequestProcessor8RunErrorEi @ 90 NONAME
-	_ZN17CRequestProcessor9SendDataLERK8MMTPType @ 91 NONAME
-	_ZN17CRequestProcessor9SessionIdEv @ 92 NONAME
-	_ZN17CRequestProcessorC2ER25MMTPDataProviderFrameworkR14MMTPConnectioniPK22TMTPRequestElementInfo @ 93 NONAME
-	_ZN17CRequestProcessorD0Ev @ 94 NONAME
-	_ZN17CRequestProcessorD1Ev @ 95 NONAME
-	_ZN17CRequestProcessorD2Ev @ 96 NONAME
-	_ZN18CGetObjectPropDesc10ConstructLEv @ 97 NONAME
-	_ZN18CGetObjectPropDesc13CheckRequestLEv @ 98 NONAME
-	_ZN18CGetObjectPropDesc8ServiceLEv @ 99 NONAME
-	_ZN18CGetObjectPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 100 NONAME
-	_ZN18CGetObjectPropDescD0Ev @ 101 NONAME
-	_ZN18CGetObjectPropDescD1Ev @ 102 NONAME
-	_ZN18CGetObjectPropDescD2Ev @ 103 NONAME
-	_ZN18CGetObjectPropList10ConstructLEv @ 104 NONAME
-	_ZN18CGetObjectPropList13CheckRequestLEv @ 105 NONAME
-	_ZN18CGetObjectPropList4RunLEv @ 106 NONAME
-	_ZN18CGetObjectPropList8DoCancelEv @ 107 NONAME
-	_ZN18CGetObjectPropList8RunErrorEi @ 108 NONAME
-	_ZN18CGetObjectPropList8ServiceLEv @ 109 NONAME
-	_ZN18CGetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 110 NONAME
-	_ZN18CGetObjectPropListD0Ev @ 111 NONAME
-	_ZN18CGetObjectPropListD1Ev @ 112 NONAME
-	_ZN18CGetObjectPropListD2Ev @ 113 NONAME
-	_ZN18CSetObjectPropList10ConstructLEv @ 114 NONAME
-	_ZN18CSetObjectPropList22DoHandleResponsePhaseLEv @ 115 NONAME
-	_ZN18CSetObjectPropList25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 116 NONAME
-	_ZN18CSetObjectPropList4RunLEv @ 117 NONAME
-	_ZN18CSetObjectPropList8DoCancelEv @ 118 NONAME
-	_ZN18CSetObjectPropList8RunErrorEi @ 119 NONAME
-	_ZN18CSetObjectPropList8ServiceLEv @ 120 NONAME
-	_ZN18CSetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 121 NONAME
-	_ZN18CSetObjectPropListD0Ev @ 122 NONAME
-	_ZN18CSetObjectPropListD1Ev @ 123 NONAME
-	_ZN18CSetObjectPropListD2Ev @ 124 NONAME
-	_ZN19CGetObjectPropValue13CheckRequestLEv @ 125 NONAME
-	_ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 126 NONAME
-	_ZN19CGetObjectPropValue8ServiceLEv @ 127 NONAME
-	_ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 128 NONAME
-	_ZN19CGetObjectPropValueD0Ev @ 129 NONAME
-	_ZN19CGetObjectPropValueD1Ev @ 130 NONAME
-	_ZN19CGetObjectPropValueD2Ev @ 131 NONAME
-	_ZN19CSetObjectPropValue13CheckRequestLEv @ 132 NONAME
-	_ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 133 NONAME
-	_ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 134 NONAME
-	_ZN19CSetObjectPropValue8ServiceLEv @ 135 NONAME
-	_ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 136 NONAME
-	_ZN19CSetObjectPropValueD0Ev @ 137 NONAME
-	_ZN19CSetObjectPropValueD1Ev @ 138 NONAME
-	_ZN19CSetObjectPropValueD2Ev @ 139 NONAME
-	_ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 140 NONAME
-	_ZN20CGetObjectReferencesD0Ev @ 141 NONAME
-	_ZN20CGetObjectReferencesD1Ev @ 142 NONAME
-	_ZN20CGetObjectReferencesD2Ev @ 143 NONAME
-	_ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 144 NONAME
-	_ZN20CSetObjectReferences22DoSetObjectReferencesLER29CMmMtpDpMetadataAccessWrappertRK7TDesC16R12CDesC16Array @ 145 NONAME
-	_ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 146 NONAME
-	_ZN20CSetObjectReferences8ServiceLEv @ 147 NONAME
-	_ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 148 NONAME
-	_ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 149 NONAME
-	_ZN20CSetObjectReferencesD0Ev @ 150 NONAME
-	_ZN20CSetObjectReferencesD1Ev @ 151 NONAME
-	_ZN20CSetObjectReferencesD2Ev @ 152 NONAME
-	_ZN22CGetFormatCapabilities10ConstructLEv @ 153 NONAME
-	_ZN22CGetFormatCapabilities13CheckRequestLEv @ 154 NONAME
+	_ZN11CCopyObject8ServiceLEv @ 6 NONAME
+	_ZN11CCopyObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 7 NONAME
+	_ZN11CCopyObjectD0Ev @ 8 NONAME
+	_ZN11CCopyObjectD1Ev @ 9 NONAME
+	_ZN11CCopyObjectD2Ev @ 10 NONAME
+	_ZN11CMoveObject10ConstructLEv @ 11 NONAME
+	_ZN11CMoveObject8ServiceLEv @ 12 NONAME
+	_ZN11CMoveObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 13 NONAME
+	_ZN11CMoveObjectD0Ev @ 14 NONAME
+	_ZN11CMoveObjectD1Ev @ 15 NONAME
+	_ZN11CMoveObjectD2Ev @ 16 NONAME
+	_ZN11CSendObject13CheckRequestLEv @ 17 NONAME
+	_ZN11CSendObject13UsbDisconnectEv @ 18 NONAME
+	_ZN11CSendObject22DoHandleResponsePhaseLEv @ 19 NONAME
+	_ZN11CSendObject24DoHandleCompletingPhaseLEv @ 20 NONAME
+	_ZN11CSendObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 21 NONAME
+	_ZN11CSendObject8ServiceLEv @ 22 NONAME
+	_ZN11CSendObjectD0Ev @ 23 NONAME
+	_ZN11CSendObjectD1Ev @ 24 NONAME
+	_ZN11CSendObjectD2Ev @ 25 NONAME
+	_ZN13CDeleteObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 26 NONAME
+	_ZN13CDeleteObject4RunLEv @ 27 NONAME
+	_ZN13CDeleteObject8DoCancelEv @ 28 NONAME
+	_ZN13CDeleteObject8ServiceLEv @ 29 NONAME
+	_ZN13CDeleteObjectD0Ev @ 30 NONAME
+	_ZN13CDeleteObjectD1Ev @ 31 NONAME
+	_ZN13CDeleteObjectD2Ev @ 32 NONAME
+	_ZN13CRenameObject10ConstructLEv @ 33 NONAME
+	_ZN13CRenameObject4NewLER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 34 NONAME
+	_ZN13CRenameObject4RunLEv @ 35 NONAME
+	_ZN13CRenameObject6StartLEmRK7TDesC16 @ 36 NONAME
+	_ZN13CRenameObject8DoCancelEv @ 37 NONAME
+	_ZN13CRenameObject8RunErrorEi @ 38 NONAME
+	_ZN13CRenameObjectC1ER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 39 NONAME
+	_ZN13CRenameObjectC2ER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 40 NONAME
+	_ZN13CRenameObjectD0Ev @ 41 NONAME
+	_ZN13CRenameObjectD1Ev @ 42 NONAME
+	_ZN13CRenameObjectD2Ev @ 43 NONAME
+	_ZN14CGetObjectInfo10ConstructLEv @ 44 NONAME
+	_ZN14CGetObjectInfo4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 45 NONAME
+	_ZN14CGetObjectInfoD0Ev @ 46 NONAME
+	_ZN14CGetObjectInfoD1Ev @ 47 NONAME
+	_ZN14CGetObjectInfoD2Ev @ 48 NONAME
+	_ZN14MmMtpDpUtility12GetDrmStatusERK7TDesC16 @ 49 NONAME
+	_ZN14MmMtpDpUtility18FormatFromFilenameERK7TDesC16 @ 50 NONAME
+	_ZN14MmMtpDpUtility8IsVideoLERK7TDesC16 @ 51 NONAME
+	_ZN15CRequestUnknown4NewLER25MMTPDataProviderFrameworkR14MMTPConnection @ 52 NONAME
+	_ZN15CRequestUnknown8ServiceLEv @ 53 NONAME
+	_ZN15CRequestUnknownC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 54 NONAME
+	_ZN15CRequestUnknownC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 55 NONAME
+	_ZN15CRequestUnknownD0Ev @ 56 NONAME
+	_ZN15CRequestUnknownD1Ev @ 57 NONAME
+	_ZN15CRequestUnknownD2Ev @ 58 NONAME
+	_ZN17CGetPartialObject13CheckRequestLEv @ 59 NONAME
+	_ZN17CGetPartialObject22DoHandleResponsePhaseLEv @ 60 NONAME
+	_ZN17CGetPartialObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 61 NONAME
+	_ZN17CGetPartialObject8ServiceLEv @ 62 NONAME
+	_ZN17CGetPartialObjectC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 63 NONAME
+	_ZN17CGetPartialObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 64 NONAME
+	_ZN17CGetPartialObjectD0Ev @ 65 NONAME
+	_ZN17CGetPartialObjectD1Ev @ 66 NONAME
+	_ZN17CGetPartialObjectD2Ev @ 67 NONAME
+	_ZN17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 68 NONAME
+	_ZN17CRequestProcessor12ReceiveDataLER8MMTPType @ 69 NONAME
+	_ZN17CRequestProcessor13CheckRequestLEv @ 70 NONAME
+	_ZN17CRequestProcessor13SendResponseLE16TMTPResponseCodeiPm @ 71 NONAME
+	_ZN17CRequestProcessor13UsbDisconnectEv @ 72 NONAME
+	_ZN17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 73 NONAME
+	_ZN17CRequestProcessor18DoHandleRToIPhaseLEv @ 74 NONAME
+	_ZN17CRequestProcessor21DoHandleRequestPhaseLEv @ 75 NONAME
+	_ZN17CRequestProcessor22DoHandleDataIToRPhaseLEv @ 76 NONAME
+	_ZN17CRequestProcessor22DoHandleResponsePhaseLEv @ 77 NONAME
+	_ZN17CRequestProcessor24DoHandleCompletingPhaseLEv @ 78 NONAME
+	_ZN17CRequestProcessor4RunLEv @ 79 NONAME
+	_ZN17CRequestProcessor7ReleaseEv @ 80 NONAME
+	_ZN17CRequestProcessor8DoCancelEv @ 81 NONAME
+	_ZN17CRequestProcessor8RunErrorEi @ 82 NONAME
+	_ZN17CRequestProcessor9SendDataLERK8MMTPType @ 83 NONAME
+	_ZN17CRequestProcessor9SessionIdEv @ 84 NONAME
+	_ZN17CRequestProcessorC2ER25MMTPDataProviderFrameworkR14MMTPConnectioniPK22TMTPRequestElementInfo @ 85 NONAME
+	_ZN17CRequestProcessorD0Ev @ 86 NONAME
+	_ZN17CRequestProcessorD1Ev @ 87 NONAME
+	_ZN17CRequestProcessorD2Ev @ 88 NONAME
+	_ZN18CGetObjectPropDesc10ConstructLEv @ 89 NONAME
+	_ZN18CGetObjectPropDesc13CheckRequestLEv @ 90 NONAME
+	_ZN18CGetObjectPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 91 NONAME
+	_ZN18CGetObjectPropDesc8ServiceLEv @ 92 NONAME
+	_ZN18CGetObjectPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 93 NONAME
+	_ZN18CGetObjectPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 94 NONAME
+	_ZN18CGetObjectPropDescD0Ev @ 95 NONAME
+	_ZN18CGetObjectPropDescD1Ev @ 96 NONAME
+	_ZN18CGetObjectPropDescD2Ev @ 97 NONAME
+	_ZN18CGetObjectPropList10ConstructLEv @ 98 NONAME
+	_ZN18CGetObjectPropList13CheckRequestLEv @ 99 NONAME
+	_ZN18CGetObjectPropList4RunLEv @ 100 NONAME
+	_ZN18CGetObjectPropList8DoCancelEv @ 101 NONAME
+	_ZN18CGetObjectPropList8RunErrorEi @ 102 NONAME
+	_ZN18CGetObjectPropList8ServiceLEv @ 103 NONAME
+	_ZN18CGetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 104 NONAME
+	_ZN18CGetObjectPropListD0Ev @ 105 NONAME
+	_ZN18CGetObjectPropListD1Ev @ 106 NONAME
+	_ZN18CGetObjectPropListD2Ev @ 107 NONAME
+	_ZN18CSetObjectPropList13CheckRequestLEv @ 108 NONAME
+	_ZN18CSetObjectPropList22DoHandleResponsePhaseLEv @ 109 NONAME
+	_ZN18CSetObjectPropList4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 110 NONAME
+	_ZN18CSetObjectPropList4RunLEv @ 111 NONAME
+	_ZN18CSetObjectPropList8DoCancelEv @ 112 NONAME
+	_ZN18CSetObjectPropList8RunErrorEi @ 113 NONAME
+	_ZN18CSetObjectPropList8ServiceLEv @ 114 NONAME
+	_ZN18CSetObjectPropListD0Ev @ 115 NONAME
+	_ZN18CSetObjectPropListD1Ev @ 116 NONAME
+	_ZN18CSetObjectPropListD2Ev @ 117 NONAME
+	_ZN19CDescriptionUtility24NewCommonObjectPropertyLEt @ 118 NONAME
+	_ZN19CDescriptionUtility24NewRangeFormDescriptionLEtmmmi @ 119 NONAME
+	_ZN19CDescriptionUtilityC2Ev @ 120 NONAME
+	_ZN19CDescriptionUtilityD0Ev @ 121 NONAME
+	_ZN19CDescriptionUtilityD1Ev @ 122 NONAME
+	_ZN19CDescriptionUtilityD2Ev @ 123 NONAME
+	_ZN19CGetObjectPropValue13CheckRequestLEv @ 124 NONAME
+	_ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 125 NONAME
+	_ZN19CGetObjectPropValue8ServiceLEv @ 126 NONAME
+	_ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 127 NONAME
+	_ZN19CGetObjectPropValueD0Ev @ 128 NONAME
+	_ZN19CGetObjectPropValueD1Ev @ 129 NONAME
+	_ZN19CGetObjectPropValueD2Ev @ 130 NONAME
+	_ZN19CSetObjectPropValue13CheckRequestLEv @ 131 NONAME
+	_ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 132 NONAME
+	_ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 133 NONAME
+	_ZN19CSetObjectPropValue8ServiceLEv @ 134 NONAME
+	_ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 135 NONAME
+	_ZN19CSetObjectPropValueD0Ev @ 136 NONAME
+	_ZN19CSetObjectPropValueD1Ev @ 137 NONAME
+	_ZN19CSetObjectPropValueD2Ev @ 138 NONAME
+	_ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 139 NONAME
+	_ZN20CGetObjectReferencesD0Ev @ 140 NONAME
+	_ZN20CGetObjectReferencesD1Ev @ 141 NONAME
+	_ZN20CGetObjectReferencesD2Ev @ 142 NONAME
+	_ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 143 NONAME
+	_ZN20CSetObjectReferences22DoSetObjectReferencesLER29CMmMtpDpMetadataAccessWrappertRK7TDesC16R12CDesC16Array @ 144 NONAME
+	_ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 145 NONAME
+	_ZN20CSetObjectReferences8ServiceLEv @ 146 NONAME
+	_ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 147 NONAME
+	_ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 148 NONAME
+	_ZN20CSetObjectReferencesD0Ev @ 149 NONAME
+	_ZN20CSetObjectReferencesD1Ev @ 150 NONAME
+	_ZN20CSetObjectReferencesD2Ev @ 151 NONAME
+	_ZN22CGetFormatCapabilities10ConstructLEv @ 152 NONAME
+	_ZN22CGetFormatCapabilities13CheckRequestLEv @ 153 NONAME
+	_ZN22CGetFormatCapabilities4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 154 NONAME
 	_ZN22CGetFormatCapabilities8ServiceLEv @ 155 NONAME
-	_ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 156 NONAME
-	_ZN22CGetFormatCapabilitiesD0Ev @ 157 NONAME
-	_ZN22CGetFormatCapabilitiesD1Ev @ 158 NONAME
-	_ZN22CGetFormatCapabilitiesD2Ev @ 159 NONAME
-	_ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 160 NONAME
-	_ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 161 NONAME
-	_ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 162 NONAME
-	_ZN23CMmMtpDpAccessSingleton7CreateLER3RFsR25MMTPDataProviderFramework @ 163 NONAME
-	_ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 164 NONAME
-	_ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 165 NONAME
-	_ZN24CGetObjectPropsSupported8ServiceLEv @ 166 NONAME
-	_ZN24CGetObjectPropsSupportedD0Ev @ 167 NONAME
-	_ZN24CGetObjectPropsSupportedD1Ev @ 168 NONAME
-	_ZN24CGetObjectPropsSupportedD2Ev @ 169 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper12SetPlaylistLERK7TDesC16R12CDesC16Array @ 170 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 171 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK7TDesC16S2_ @ 172 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 173 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 174 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15GetAllPlaylistLERK7TDesC16PP14CMPXMediaArray @ 175 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 176 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 177 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16GetPlaylistNameLEP9CMPXMediaR6TDes16 @ 178 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 179 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLEv @ 180 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 181 NONAME
-	_ZNK11CSendObject12HasDataphaseEv @ 182 NONAME
-	_ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 183 NONAME
-	_ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 184 NONAME
-	_ZNK17CRequestProcessor10ConnectionEv @ 185 NONAME
-	_ZNK17CRequestProcessor12HasDataphaseEv @ 186 NONAME
-	_ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 187 NONAME
-	_ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 188 NONAME
-	_ZNK17CRequestProcessor7RequestEv @ 189 NONAME
-	_ZNK18CSetObjectPropList12HasDataphaseEv @ 190 NONAME
-	_ZNK19CSetObjectPropValue12HasDataphaseEv @ 191 NONAME
-	_ZNK20CSetObjectReferences12HasDataphaseEv @ 192 NONAME
-	_ZTI10CGetObject @ 193 NONAME
-	_ZTI11CCopyObject @ 194 NONAME
-	_ZTI11CMoveObject @ 195 NONAME
-	_ZTI11CSendObject @ 196 NONAME
-	_ZTI13CDeleteObject @ 197 NONAME
-	_ZTI13CRenameObject @ 198 NONAME
-	_ZTI14CGetObjectInfo @ 199 NONAME
-	_ZTI15CRequestChecker @ 200 NONAME
-	_ZTI15CRequestUnknown @ 201 NONAME
-	_ZTI15TMTPTypeFlatBuf @ 202 NONAME
-	_ZTI17CGetPartialObject @ 203 NONAME
-	_ZTI17CRequestProcessor @ 204 NONAME
-	_ZTI18CGetObjectPropDesc @ 205 NONAME
-	_ZTI18CGetObjectPropList @ 206 NONAME
-	_ZTI18CHXMetaDataUtility @ 207 NONAME
-	_ZTI18CSetObjectPropList @ 208 NONAME
-	_ZTI19CGetObjectPropValue @ 209 NONAME
-	_ZTI19CSetObjectPropValue @ 210 NONAME
-	_ZTI20CGetObjectReferences @ 211 NONAME
-	_ZTI20CSetObjectReferences @ 212 NONAME
-	_ZTI22CGetFormatCapabilities @ 213 NONAME
-	_ZTI23CMmMtpDpAccessSingleton @ 214 NONAME
-	_ZTI24CGetObjectPropsSupported @ 215 NONAME
-	_ZTI25CMmMtpDpMetadataMpxAccess @ 216 NONAME
-	_ZTI27CMmMtpDpMetadataVideoAccess @ 217 NONAME
-	_ZTI29CMmMtpDpMetadataAccessWrapper @ 218 NONAME
-	_ZTV10CGetObject @ 219 NONAME
-	_ZTV11CCopyObject @ 220 NONAME
-	_ZTV11CMoveObject @ 221 NONAME
-	_ZTV11CSendObject @ 222 NONAME
-	_ZTV13CDeleteObject @ 223 NONAME
-	_ZTV13CRenameObject @ 224 NONAME
-	_ZTV14CGetObjectInfo @ 225 NONAME
-	_ZTV15CRequestChecker @ 226 NONAME
-	_ZTV15CRequestUnknown @ 227 NONAME
-	_ZTV15TMTPTypeFlatBuf @ 228 NONAME
-	_ZTV17CGetPartialObject @ 229 NONAME
-	_ZTV17CRequestProcessor @ 230 NONAME
-	_ZTV18CGetObjectPropDesc @ 231 NONAME
-	_ZTV18CGetObjectPropList @ 232 NONAME
-	_ZTV18CHXMetaDataUtility @ 233 NONAME
-	_ZTV18CSetObjectPropList @ 234 NONAME
-	_ZTV19CGetObjectPropValue @ 235 NONAME
-	_ZTV19CSetObjectPropValue @ 236 NONAME
-	_ZTV20CGetObjectReferences @ 237 NONAME
-	_ZTV20CSetObjectReferences @ 238 NONAME
-	_ZTV22CGetFormatCapabilities @ 239 NONAME
-	_ZTV23CMmMtpDpAccessSingleton @ 240 NONAME
-	_ZTV24CGetObjectPropsSupported @ 241 NONAME
-	_ZTV25CMmMtpDpMetadataMpxAccess @ 242 NONAME
-	_ZTV27CMmMtpDpMetadataVideoAccess @ 243 NONAME
-	_ZTV29CMmMtpDpMetadataAccessWrapper @ 244 NONAME
-	_ZThn28_N11CSendObject13UsbDisconnectEv @ 245 NONAME
-	_ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 246 NONAME
-	_ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 247 NONAME
-	_ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 248 NONAME
-	_ZThn28_N17CRequestProcessor7ReleaseEv @ 249 NONAME
-	_ZThn28_N17CRequestProcessor9SessionIdEv @ 250 NONAME
-	_ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 251 NONAME
-	_ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 252 NONAME
-	_ZThn28_NK17CRequestProcessor10ConnectionEv @ 253 NONAME
-	_ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 254 NONAME
-	_ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 255 NONAME
-	_ZThn28_NK17CRequestProcessor7RequestEv @ 256 NONAME
+	_ZN22CGetFormatCapabilitiesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 156 NONAME
+	_ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 157 NONAME
+	_ZN22CGetFormatCapabilitiesD0Ev @ 158 NONAME
+	_ZN22CGetFormatCapabilitiesD1Ev @ 159 NONAME
+	_ZN22CGetFormatCapabilitiesD2Ev @ 160 NONAME
+	_ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 161 NONAME
+	_ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 162 NONAME
+	_ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 163 NONAME
+	_ZN23CMmMtpDpAccessSingleton7CreateLER3RFsR25MMTPDataProviderFramework @ 164 NONAME
+	_ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 165 NONAME
+	_ZN23CPropertySettingUtility21SetMetaDataToWrapperLER14MMmMtpDpConfigtR8MMTPTypeRK18CMTPObjectMetaData @ 166 NONAME
+	_ZN23CPropertySettingUtilityC2Ev @ 167 NONAME
+	_ZN23CPropertySettingUtilityD0Ev @ 168 NONAME
+	_ZN23CPropertySettingUtilityD1Ev @ 169 NONAME
+	_ZN23CPropertySettingUtilityD2Ev @ 170 NONAME
+	_ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 171 NONAME
+	_ZN24CGetObjectPropsSupported8ServiceLEv @ 172 NONAME
+	_ZN24CGetObjectPropsSupportedD0Ev @ 173 NONAME
+	_ZN24CGetObjectPropsSupportedD1Ev @ 174 NONAME
+	_ZN24CGetObjectPropsSupportedD2Ev @ 175 NONAME
+	_ZN26CGetInterdependentPropDesc10ConstructLEv @ 176 NONAME
+	_ZN26CGetInterdependentPropDesc13CheckRequestLEv @ 177 NONAME
+	_ZN26CGetInterdependentPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 178 NONAME
+	_ZN26CGetInterdependentPropDesc8ServiceLEv @ 179 NONAME
+	_ZN26CGetInterdependentPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 180 NONAME
+	_ZN26CGetInterdependentPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 181 NONAME
+	_ZN26CGetInterdependentPropDescD0Ev @ 182 NONAME
+	_ZN26CGetInterdependentPropDescD1Ev @ 183 NONAME
+	_ZN26CGetInterdependentPropDescD2Ev @ 184 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 185 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK7TDesC16S2_ @ 186 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 187 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 188 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 189 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 190 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper17SetAbstractMediaLERK7TDesC16R12CDesC16Array19TMPXGeneralCategory @ 191 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 192 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper20GetAllAbstractMediaLERK7TDesC16PP14CMPXMediaArray19TMPXGeneralCategory @ 193 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper21GetAbstractMediaNameLEP9CMPXMedia19TMPXGeneralCategory @ 194 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLEv @ 195 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 196 NONAME
+	_ZNK11CSendObject12HasDataphaseEv @ 197 NONAME
+	_ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 198 NONAME
+	_ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 199 NONAME
+	_ZNK17CRequestProcessor10ConnectionEv @ 200 NONAME
+	_ZNK17CRequestProcessor12HasDataphaseEv @ 201 NONAME
+	_ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 202 NONAME
+	_ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 203 NONAME
+	_ZNK17CRequestProcessor7RequestEv @ 204 NONAME
+	_ZNK18CSetObjectPropList12HasDataphaseEv @ 205 NONAME
+	_ZNK19CSetObjectPropValue12HasDataphaseEv @ 206 NONAME
+	_ZNK20CSetObjectReferences12HasDataphaseEv @ 207 NONAME
+	_ZTI10CGetObject @ 208 NONAME
+	_ZTI11CCopyObject @ 209 NONAME
+	_ZTI11CMoveObject @ 210 NONAME
+	_ZTI11CSendObject @ 211 NONAME
+	_ZTI13CDeleteObject @ 212 NONAME
+	_ZTI13CRenameObject @ 213 NONAME
+	_ZTI14CGetObjectInfo @ 214 NONAME
+	_ZTI15CRequestChecker @ 215 NONAME
+	_ZTI15CRequestUnknown @ 216 NONAME
+	_ZTI15TMTPTypeFlatBuf @ 217 NONAME
+	_ZTI17CGetPartialObject @ 218 NONAME
+	_ZTI17CRequestProcessor @ 219 NONAME
+	_ZTI18CGetObjectPropDesc @ 220 NONAME
+	_ZTI18CGetObjectPropList @ 221 NONAME
+	_ZTI18CHXMetaDataUtility @ 222 NONAME
+	_ZTI18CSetObjectPropList @ 223 NONAME
+	_ZTI19CDescriptionUtility @ 224 NONAME
+	_ZTI19CGetObjectPropValue @ 225 NONAME
+	_ZTI19CSetObjectPropValue @ 226 NONAME
+	_ZTI20CGetObjectReferences @ 227 NONAME
+	_ZTI20CSetObjectReferences @ 228 NONAME
+	_ZTI22CGetFormatCapabilities @ 229 NONAME
+	_ZTI23CMmMtpDpAccessSingleton @ 230 NONAME
+	_ZTI23CPropertySettingUtility @ 231 NONAME
+	_ZTI24CGetObjectPropsSupported @ 232 NONAME
+	_ZTI25CMmMtpDpMetadataMpxAccess @ 233 NONAME
+	_ZTI26CGetInterdependentPropDesc @ 234 NONAME
+	_ZTI27CMmMtpDpMetadataVideoAccess @ 235 NONAME
+	_ZTI29CMmMtpDpMetadataAccessWrapper @ 236 NONAME
+	_ZTV10CGetObject @ 237 NONAME
+	_ZTV11CCopyObject @ 238 NONAME
+	_ZTV11CMoveObject @ 239 NONAME
+	_ZTV11CSendObject @ 240 NONAME
+	_ZTV13CDeleteObject @ 241 NONAME
+	_ZTV13CRenameObject @ 242 NONAME
+	_ZTV14CGetObjectInfo @ 243 NONAME
+	_ZTV15CRequestChecker @ 244 NONAME
+	_ZTV15CRequestUnknown @ 245 NONAME
+	_ZTV15TMTPTypeFlatBuf @ 246 NONAME
+	_ZTV17CGetPartialObject @ 247 NONAME
+	_ZTV17CRequestProcessor @ 248 NONAME
+	_ZTV18CGetObjectPropDesc @ 249 NONAME
+	_ZTV18CGetObjectPropList @ 250 NONAME
+	_ZTV18CHXMetaDataUtility @ 251 NONAME
+	_ZTV18CSetObjectPropList @ 252 NONAME
+	_ZTV19CDescriptionUtility @ 253 NONAME
+	_ZTV19CGetObjectPropValue @ 254 NONAME
+	_ZTV19CSetObjectPropValue @ 255 NONAME
+	_ZTV20CGetObjectReferences @ 256 NONAME
+	_ZTV20CSetObjectReferences @ 257 NONAME
+	_ZTV22CGetFormatCapabilities @ 258 NONAME
+	_ZTV23CMmMtpDpAccessSingleton @ 259 NONAME
+	_ZTV23CPropertySettingUtility @ 260 NONAME
+	_ZTV24CGetObjectPropsSupported @ 261 NONAME
+	_ZTV25CMmMtpDpMetadataMpxAccess @ 262 NONAME
+	_ZTV26CGetInterdependentPropDesc @ 263 NONAME
+	_ZTV27CMmMtpDpMetadataVideoAccess @ 264 NONAME
+	_ZTV29CMmMtpDpMetadataAccessWrapper @ 265 NONAME
+	_ZThn28_N11CSendObject13UsbDisconnectEv @ 266 NONAME
+	_ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 267 NONAME
+	_ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 268 NONAME
+	_ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 269 NONAME
+	_ZThn28_N17CRequestProcessor7ReleaseEv @ 270 NONAME
+	_ZThn28_N17CRequestProcessor9SessionIdEv @ 271 NONAME
+	_ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 272 NONAME
+	_ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 273 NONAME
+	_ZThn28_NK17CRequestProcessor10ConnectionEv @ 274 NONAME
+	_ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 275 NONAME
+	_ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 276 NONAME
+	_ZThn28_NK17CRequestProcessor7RequestEv @ 277 NONAME
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/group/mmmtpdprequestprocessor.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/group/mmmtpdprequestprocessor.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -54,6 +54,9 @@
 SOURCE              cmoveobject.cpp
 SOURCE              crenameobject.cpp
 SOURCE              cgetformatcapabilities.cpp
+SOURCE              cgetinterdependentpropdesc.cpp
+SOURCE              cdescriptionutility.cpp 
+SOURCE              cpropertysettingutility.cpp 
 
 SOURCEPATH          ../../src
 SOURCE              cmmmtpdpmetadatampxaccess.cpp
@@ -79,7 +82,6 @@
 LIBRARY             contentlistingframework.lib 
 LIBRARY             caf.lib
 
-
 #if defined(__WINDOWS_MEDIA)
 STATICLIBRARY       hxmetadatautil.lib
 #endif
@@ -90,4 +92,3 @@
 #else
 DEBUGLIBRARY        hal.lib
 #endif
-
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/ccopyobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/ccopyobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -22,7 +22,6 @@
 #include "crequestprocessor.h"
 
 class RFs;
-class CFileMan;
 class CMTPObjectMetaData;
 class CMTPTypeObjectPropList;
 class CMTPTypeObjectPropListElement;
@@ -70,32 +69,10 @@
     */
     IMPORT_C void ServiceL();
 
-    /**
-    * Set MetaData to CMetadataAccessWrapper, for internal use
-    * @param aPropCode, specify property code of aMediaProp
-    * @param aNewData, object property value which will be get from
-    *    aObjectMetaData
-    * @param aObjectMetaData, owner of the property which should be
-    *    inserted or updated into database
-    * @return response code
-    */
-    IMPORT_C TMTPResponseCode ServiceMetaDataToWrapper( const TUint16 aPropCode,
-            MMTPType& aNewData,
-            const CMTPObjectMetaData& aObject );
-
     virtual void ServiceGetSpecificObjectPropertyL( TUint16 aPropCode,
         TUint32 aHandle,
         const CMTPObjectMetaData& aObjectMetaData ) = 0;
 
-    virtual TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement ) = 0;
-
-    // from CActive
-    IMPORT_C void RunL();
-
-    IMPORT_C TInt RunError( TInt aError );
-
 private:
     /**
     * Retrieve the parameters of the request
@@ -107,13 +84,13 @@
     /**
     * Copy object operation
     */
-    void CopyObjectL( TUint32& aNewHandle );
+    void CopyObjectL();
 
     /**
     * Check if we can copy the file to the new location
     */
     TMTPResponseCode CanCopyObjectL( const TDesC& aOldName,
-            const TDesC& aNewName ) const;
+        const TDesC& aNewName ) const;
 
     /**
     * Save the object properties before doing the copy
@@ -132,53 +109,22 @@
     */
     TUint32 CopyFileL( const TDesC& aNewFileName );
 
-    /*
-    * Generate the list of handles that need to be copied to the new location.
-    */
-    void GenerateObjectHandleListL( TUint32 aParentHandle );
-
-    /**
-    * A helper function of CopyObjectL.
-    * @param aNewFolderName the new full file folder name after copy.
-    * @return objecthandle of new copy of the folder.
-    */
-    TUint32 CopyFolderL( const TDesC& aNewFolderName );
-
-    /**
-    * Set the object properties in the object property store.
-    */
-    void SetPropertiesL( const TDesC& aOldFileName,
-        const TDesC& aNewFileName,
-        const CMTPObjectMetaData& aObject );
-
     /**
     * Update object info in the database.
     */
-    TUint32 UpdateObjectInfoL( const TDesC& aOldObjectName,
-            const TDesC& aNewObjectName);
-
-    /*
-    * A helper function of CopyObjectL
-    * Copy a single object and update the database
-    */
-    void CopyAndUpdateL( TUint32 objectHandle );
+    TUint32 AddObjectToStoreL( const TDesC& aOldObjectName,
+        const TDesC& aNewObjectName );
 
 protected:
     CMTPTypeObjectPropListElement* iPropertyElement;
     MMmMtpDpConfig& iDpConfig;
     CMTPTypeObjectPropList* iPropertyList;
+
 private:
+    TUint32 iStorageId;
     CMTPObjectMetaData* iObjectInfo; // Not owned
-    RArray<TUint> iObjectHandles;
-    CFileMan* iFileMan;
     HBufC* iDest;
     TUint32 iNewParentHandle;
-    TUint32 iHandle;
-    TUint32 iStorageId;
-    TInt iCopyObjectIndex;
-    TInt iNumberOfObjects;
-    HBufC* iPathToCopy;
-    HBufC* iNewRootFolder;
     TTime iPreviousModifiedTime;
 
     };
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cdeleteobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cdeleteobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -127,6 +127,7 @@
 
     // Accessor of DB
     MMmMtpDpConfig& iDpConfig;
+
     };
 
 #endif // CDELETEOBJECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cdescriptionutility.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef CDESCRIPTIONUTILITY_H
+#define CDESCRIPTIONUTILITY_H
+
+class CMTPTypeObjectPropDesc;
+class CMTPTypeInterdependentPropDesc;
+class MMmMtpDpConfig;
+
+class CDescriptionUtility : public CBase
+    {
+protected:
+    /**
+     *
+     */
+    IMPORT_C CDescriptionUtility();
+
+public:
+    /**
+     *
+     */
+    IMPORT_C virtual ~CDescriptionUtility();
+
+public:
+    /**
+     *
+     */
+    CMTPTypeObjectPropDesc* NewCommonObjectPropertyL( TUint16 aPropCode );
+
+    /**
+     * New RangeForm Description
+     * @param aMinValue The minimal value
+     * @param aMaxValue The maximal value
+     * @param aStepValue The step value
+     * @return CMTPTypeObjectPropDesc
+     */
+    IMPORT_C CMTPTypeObjectPropDesc* NewRangeFormDescriptionL( TUint16 aPropCode,
+        TUint32 aMinValue,
+        TUint32 aMaxValue,
+        TUint32 aStepValue,
+        TBool aIsReadOnly = EFalse );
+
+    /**
+     * Get group code
+     * @param aPropCode Specify the property code of which the group code needed
+     * @return Group code of specified property
+     */
+    TUint32 GetGroupCode( TUint32 aPropCode );
+
+    /**
+     *
+     */
+    virtual CMTPTypeInterdependentPropDesc* NewInterdepentPropDescL( MMmMtpDpConfig& aDpConfig, TUint aFormatCode ) = 0;
+
+    /**
+     *
+     */
+    virtual CMTPTypeObjectPropDesc* NewSpecificPropDescL( TUint aFormatCode, TUint16 aPropCode ) = 0;
+
+private:
+    /**
+     * New a property description of protection status
+     * @return CMTPTypeObjectPropDesc
+     */
+    CMTPTypeObjectPropDesc* NewProtectionStatusPropDescL();
+
+    /**
+     * Get property description of file name
+     * @return CMTPTypeObjectPropDesc
+     */
+    CMTPTypeObjectPropDesc* NewFileNamePropDescL();
+
+    /**
+     * New a property description of nonconsumable
+     * @return CMTPTypeObjectPropDesc
+     */
+    CMTPTypeObjectPropDesc* NewNonConsumablePropDescL();
+
+    };
+
+#endif // CDESCRIPTIONUTILITY_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetformatcapabilities.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetformatcapabilities.h	Fri Feb 26 18:11:38 2010 +0000
@@ -20,16 +20,11 @@
 #include <mtp/cmtptypeformatcapabilitylist.h>
 
 #include "crequestprocessor.h"
-#include "mmmtpdplogger.h"
-#include "mmmtpdpconfig.h"
 
 // forward declaration
-class MMTPRequestProcessor;
 class MMmMtpDpConfig;
 class CMTPTypeObjectPropDesc;
 class CMTPTypeInterdependentPropDesc;
-class CMTPTypeObjectPropDesc;
-class CMTPTypeString;
 
 /**
 Implements the file data provider CMTPGetFormatCapabilities request processor.
@@ -39,18 +34,29 @@
     {
 public:
     /**
+    * Two-phase construction method
+    * @param aFramework The data provider framework
+    * @param aConnection The connection from which the request comes
+    * @param aDpConfig Configuration of data provider
+    * @return The pointer to the created request processor object
+    */
+    IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
+        MMTPConnection& aConnection,
+        MMmMtpDpConfig& aDpConfig );
+
+    /**
     * Destructor
     */
     IMPORT_C virtual ~CGetFormatCapabilities();
 
-protected:
+private:
     /**
     * Standard c++ constructor
     * @param aFramework    The data provider framework
     * @param aConnection   The connection from which the request comes
     * @param aDpConfig, The interface of dataprovider configuration
     */
-    IMPORT_C CGetFormatCapabilities( MMTPDataProviderFramework& aFramework,
+    CGetFormatCapabilities( MMTPDataProviderFramework& aFramework,
         MMTPConnection& aConnection,
         MMmMtpDpConfig& aDpConfig );
 
@@ -58,7 +64,7 @@
     * Constructor
     * Second phase constructor
     */
-    IMPORT_C void ConstructL();
+    void ConstructL();
 
 protected:
     // from CMTPRequestProcessor
@@ -74,73 +80,35 @@
     */
     IMPORT_C TMTPResponseCode CheckRequestL();
 
-protected:
-    // new virtuals
+private:
     /**
-    * Service specific object property
-    * @param aPropCode, The prop code
-    * @return MTPType object propdesc
-    */
-    virtual CMTPTypeObjectPropDesc* ServiceSpecificPropertyDescL( TUint16 aPropCode ) = 0;
+     * Handle one format's capabilities
+     */
+    void ServiceOneFormatCapabilitiesL( TUint aFormatCode );
 
     /**
-    * Service interdepent propdesc
-    * @param aFormatCode, The format code
-    * @return MTPTypeInterdependentPropDesc
-    */
-    virtual void ServiceInterdepentPropDescL() = 0;
-
-private:
-    /**
-    * Get  PropDesc via PropCode
+    * Handle one property description of one format
     * @param aPropCode    The Property Code
     * @return The MTPTypeObject PropDesc
     */
-    CMTPTypeObjectPropDesc* ServicePropDescL( TUint16 aPropCode );
-
-    /**
-    * Get PropDesc with Protection status
-    * @return The MTPTypeObject PropDesc
-    */
-    CMTPTypeObjectPropDesc*  ServiceProtectionStatusL();
-
-    /**
-    * Get PropDesc with file name
-    * @return The MTPTypeObject PropDesc
-    */
-    CMTPTypeObjectPropDesc*  ServiceFileNameL();
+    CMTPTypeObjectPropDesc* ServiceOnePropDescL( TUint16 aPropCode );
 
-    /**
-    * Get PropDesc with nonconsumable
-    * @return The MTPTypeObject PropDesc
-    */
-    CMTPTypeObjectPropDesc*  ServiceNonConsumableL();
-
-    /**
-    * Get group code
-    * @param aPropCode Specify the property code of which the group code needed
-    * @return Group code of specified property
-    */
-    TUint32 GetGroupCode( TUint32 aPropCode );
-
-protected:
+private:
     /*
      * Format code.
      */
     TUint iFormatCode;
 
-    CMTPTypeInterdependentPropDesc* iInterdependentPropDesc;
+    /*
+     * MMmMtpDpConfig.
+     */
+    MMmMtpDpConfig& iDpConfig;
 
-private: // Owned
     /*
      * CMTPTypeCapabilityList dataset.
      */
     CMTPTypeFormatCapabilityList* iCapabilityList;
 
-    /*
-     * MMmMtpDpConfig.
-     */
-    MMmMtpDpConfig& iDpConfig;
     };
 
 #endif // CMTPGETFORMATCAPABILITLIST_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetinterdependentpropdesc.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  GetInterdependentPropDesc operation
+*
+*/
+
+#ifndef CGETINTERDEPENDENTPROPDESC_H
+#define CGETINTERDEPENDENTPROPDESC_H
+
+#include "crequestprocessor.h"
+
+class MMmMtpDpConfig;
+class CMTPTypeInterdependentPropDesc;
+
+class CGetInterdependentPropDesc : public CRequestProcessor
+    {
+public:
+    /**
+     *
+     */
+    IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
+        MMTPConnection& aConnection,
+        MMmMtpDpConfig& aDpConfig );
+
+    /**
+    * Destructor
+    */
+    IMPORT_C virtual ~CGetInterdependentPropDesc();
+
+protected:
+    /**
+    * Standard C++ Constructor
+    * @param aFramework    The data provider framework
+    * @param aConnection   The connection from which the request comes
+    * @param aWrapper      Medadata access interface
+    */
+    CGetInterdependentPropDesc( MMTPDataProviderFramework& aFramework,
+        MMTPConnection& aConnection,
+        MMmMtpDpConfig& aDpConfig );
+
+    /**
+    * 2nd Phase Constructor
+    */
+    void ConstructL();
+
+protected:
+    // from CRequestProcessor
+    IMPORT_C TMTPResponseCode CheckRequestL();
+
+    IMPORT_C void ServiceL();
+
+protected:
+    MMmMtpDpConfig& iDpConfig;
+
+    CMTPTypeInterdependentPropDesc* iDataset;
+
+    TUint32 iFormatCode;
+
+    };
+
+#endif // CGETINTERDEPENDENTPROPDESC_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -87,8 +87,8 @@
     // Object Info
     CMTPObjectMetaData* iObjectInfo;
 
-    //
     TMTPResponseCode iError;
+
     };
 
 #endif // CGETOBJECT_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectinfo.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectinfo.h	Fri Feb 26 18:11:38 2010 +0000
@@ -78,10 +78,10 @@
     void BuildObjectInfoL();
 
 private:
-
     CMTPTypeObjectInfo* iObjectInfo;
 
     MMmMtpDpConfig& iDpConfig;
+
     };
 
 #endif // CGETOBJECTINFO_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropdesc.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropdesc.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,11 +11,10 @@
 *
 * Contributors:
 *
-* Description:  Get object properties descript operation
+* Description: Request processor which handle common property description
 *
 */
 
-
 #ifndef CGETOBJECTPROPDESC_H
 #define CGETOBJECTPROPDESC_H
 
@@ -32,33 +31,39 @@
     {
 public:
     /**
+    * Two-phase construction method
+    * @param aFramework The data provider framework
+    * @param aConnection The connection from which the request comes
+    * @param aDpConfig Configuration of data provider
+    * @return The pointer to the created request processor object
+    */
+    IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
+        MMTPConnection& aConnection,
+        MMmMtpDpConfig& aDpConfig );
+
+    /**
     * Destructor
     */
     IMPORT_C virtual ~CGetObjectPropDesc();
 
-protected:
+private:
     /**
     * Standard c++ constructor
     * @param aFramework    The data provider framework
     * @param aConnection   The connection from which the request comes
     * @param aWrapper      Medadata access interface
     */
-    IMPORT_C CGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
+    CGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
         MMTPConnection& aConnection,
         MMmMtpDpConfig& aDpConfig );
-    
+
     /**
     * Second phase constructor
     */
-    IMPORT_C void ConstructL();
+    void ConstructL();
 
 protected:
-    //from CRequestProcessor
-    /**
-    * GetObjectPropDesc request handler
-    */
-    IMPORT_C void ServiceL();
-
+    // from CRequestProcessor
     /**
     * Check the current request
     * @return EMTPRespCodeOK if the reqeust is good, otherwise,
@@ -66,9 +71,10 @@
     */
     IMPORT_C TMTPResponseCode CheckRequestL();
 
-protected:
-    // new virtuals
-    virtual void ServiceSpecificObjectPropertyL( TUint16 aPropCode ) = 0;
+    /**
+    * GetObjectPropDesc request handler
+    */
+    IMPORT_C void ServiceL();
 
 private:
     /**
@@ -85,37 +91,16 @@
     */
     TMTPResponseCode CheckPropCodeL() const;
 
-    /**
-    * Create list of possible protection status and create new ObjectPropDesc
-    */
-    void ServiceProtectionStatusL();
-
-    /**
-    * Create Regular expression for a file name and create new ObjectPropDesc
-    */
-    void ServiceFileNameL();
-
-    /**
-    * Create list of possible nonConsumable values and create new ObjectPropDesc
-    */
-    void ServiceNonConsumableL();
-
-    /*
-     * Get group code according to property code
-     * @param aPropCode Specify the property code of which the group code needed
-     * @return Group code of specified property
-     */
-    TUint32 GetGroupCode( TUint16 aPropCode );
-
-
-protected:
-    // Property object to return with the desc value
-    CMTPTypeObjectPropDesc* iObjectProperty;
-
-    //Format code
-    TUint32 iFormatCode;
+private:
+    TUint iFormatCode;
 
     MMmMtpDpConfig& iDpConfig;
+
+    TUint iPropCode;
+
+    // property description
+    CMTPTypeObjectPropDesc* iPropertyDesc;
+
     };
 
 #endif // CGETOBJECTPROPDESC_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropssupported.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropssupported.h	Fri Feb 26 18:11:38 2010 +0000
@@ -70,6 +70,7 @@
 private:
     CMTPTypeArray* iObjectPropsSupported;
     MMmMtpDpConfig& iDpConfig;
+
     };
 
 #endif // CGETOBJECTPROPSSUPPORTED_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetpartialobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetpartialobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -22,8 +22,6 @@
 #include "crequestprocessor.h"
 
 class MMTPDataProviderFramework;
-class RFs;
-class TMTPTypeFlatBase;
 class CMTPTypeFile;
 class CMmMtpDpMetadataAccessWrapper;
 class MMmMtpDpConfig;
@@ -100,16 +98,11 @@
 
 private:
     MMTPDataProviderFramework& iFramework;
-    RFs&                    iFs;
-    TMTPTypeFlatBase*       iPartialData;
-    HBufC8*                 iBuffer;
-    TPtr8                   iBufferPtr8;
-    TInt                    iOffset;
-    TInt                    iPartialDataLength;
-    TBool                   iCompleteFile;
-    CMTPTypeFile*           iFileObject;
-    TBuf<KMaxFileName>      iFileSuid;
-    TUint32                 iObjectHandle;
+    TUint iOffset;
+    TUint iPartialDataLength;
+
+    CMTPTypeFile* iFileObject;
+    TUint32 iObjectHandle;
 
     };
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cmoveobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cmoveobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -21,7 +21,6 @@
 
 #include "crequestprocessor.h"
 
-class CFileMan;
 class CMTPObjectMetaData;
 class CMmMtpDpMetadataAccessWrapper;
 class CMTPTypeObjectPropList;
@@ -35,18 +34,6 @@
     {
 public:
     /**
-    * Two-phase construction method
-    * @param aFramework The data provider framework
-    * @param aConnection  The connection from which the request comes
-    * @param aWrapper    medadata access interface
-    * @return a pointer to the created request processor object
-    */
-    //IMPORT_C static MMmRequestProcessor* NewL(
-    //        MMTPDataProviderFramework& aFramework,
-    //        MMTPConnection& aConnection,
-    //        CMmMtpDpMetadataAccessWrapper& aWrapper );
-
-    /**
     * Destructor
     */
     IMPORT_C virtual ~CMoveObject();
@@ -56,8 +43,8 @@
     * Standard c++ constructor
     */
     IMPORT_C CMoveObject( MMTPDataProviderFramework& aFramework,
-            MMTPConnection& aConnection,
-            MMmMtpDpConfig& aDpConfig );
+        MMTPConnection& aConnection,
+        MMmMtpDpConfig& aDpConfig );
 
     /**
     * Second phase constructor
@@ -71,34 +58,18 @@
     */
     IMPORT_C void ServiceL();
 
-    // from CActive
-    IMPORT_C void RunL();
-
-    IMPORT_C TInt RunError( TInt aError );
-
-
 protected:
     // new virtuals
     /**
     * Set MetaData to CMetadataAccessWrapper, for internal use
-    * @param aPropCode, specify property code of aMediaProp
-    * @param aNewData, object property value which will be get from
-    *    aObjectMetaData
-    * @param aObjectMetaData, owner of the property which should be
+    * @param aPropCode, specify property code of an object
+    * @param aHandle, object handles of which the properties are needed
+    * @param aObject, owner of the properties which should be
     *    inserted or updated into database
-    * @return response code
     */
-    IMPORT_C TMTPResponseCode ServiceMetaDataToWrapper( const TUint16 aPropCode,
-            MMTPType& aNewData,
-            const CMTPObjectMetaData& aObject );
-
     virtual void ServiceGetSpecificObjectPropertyL( TUint16 aPropCode,
-            TUint32 aHandle,
-            const CMTPObjectMetaData& aObject ) = 0;
-
-    virtual TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode,
-                const CMTPObjectMetaData& aObject,
-                const CMTPTypeObjectPropListElement& aElement ) = 0;
+        TUint32 aHandle,
+        const CMTPObjectMetaData& aObject ) = 0;
 
 private:
     /**
@@ -115,13 +86,13 @@
     * move object operations
     * @return A valid MTP response code.
     */
-    TMTPResponseCode MoveObjectL();
+    void MoveObjectL();
 
     /**
     * Check if we can move the file to the new location
     */
     TMTPResponseCode CanMoveObjectL( const TDesC& aOldName,
-            const TDesC& aNewName ) const;
+        const TDesC& aNewName ) const;
 
     /**
     * Save the object properties before moving
@@ -131,8 +102,7 @@
     /**
     * Set the object properties after moving
     */
-
-    void SetPreviousPropertiesL( const CMTPObjectMetaData& aObject );
+    void SetPreviousPropertiesL();
     /**
     * A helper function of MoveObjectL.
     * @param aNewFileName the new file name after the object is moved.
@@ -140,32 +110,10 @@
     void MoveFileL( const TDesC& aNewFileName );
 
     /**
-    * A helper function of MoveObjectL
-    */
-    void MoveFolderL();
-
-    /* Move the objects through iterations of RunL. It currently move 20 objects
-    * at a time and the number can be adjusted by changing
-    * "KMoveObjectGranularity"
-    */
-    TBool MoveOwnedObjectsL();
-
-    /**
     * Set the object properties in the object property store.
     */
     void SetPropertiesL( const TDesC& aOldFileName,
-        const TDesC& aNewFileName,
-        const CMTPObjectMetaData& aNewObject );
-
-    /*
-    * This function will actually delete the orginal folders from the file system.
-    */
-    TMTPResponseCode FinalPhaseMove();
-
-    /*
-    * Generate the list of handles that need to be moved to the new location.
-    */
-    void GenerateObjectHandleListL( TUint32 aParentHandle );
+        const TDesC& aNewFileName );
 
     /*
     * Move a single object and update the database
@@ -179,17 +127,12 @@
     CMTPTypeObjectPropList* iPropertyList;
 private:
     TBool iSameStorage;
-    CFileMan* iFileMan;
-    CMTPObjectMetaData* iObjectInfo; //Not owned.
+    CMTPObjectMetaData* iObjectInfo; // Not owned
     HBufC* iDest;
-    HBufC* iNewRootFolder;
     TUint32 iNewParentHandle;
     TUint32 iStorageId;
     TTime iPreviousModifiedTime;
-    HBufC* iPathToMove;
-    RArray<TUint> iObjectHandles;
-    TInt iMoveObjectIndex;
-    TInt iNumberOfObjects;
+
     };
 
 #endif // CMOVEOBJCT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cpropertysettingutility.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef CPROPERTYSETTINGUTILITY_H
+#define CPROPERTYSETTINGUTILITY_H
+
+#include <mtp/mtpprotocolconstants.h>   // TMTPResponseCode
+
+class MMmMtpDpConfig;
+class MMTPType;
+class CMTPObjectMetaData;
+class CMTPTypeObjectPropListElement;
+
+class CPropertySettingUtility : public CBase
+    {
+protected:
+    IMPORT_C CPropertySettingUtility();
+
+public:
+    IMPORT_C virtual ~CPropertySettingUtility();
+
+public:
+    /**
+    * Set metadata to database for processors which need set common property list
+    * @param aDpConfig, handler to get db access wrapper
+    * @param aPropCode, specify property code of aMediaProp
+    * @param aNewData, object property value which will be get from
+    *    aObjectMetaData
+    * @param aObjectMetaData, owner of the property which should be
+    *    inserted or updated into database
+    * @return response code
+    */
+    IMPORT_C TMTPResponseCode SetMetaDataToWrapperL( MMmMtpDpConfig& aDpConfig,
+        const TUint16 aPropCode,
+        MMTPType& aNewData,
+        const CMTPObjectMetaData& aObjectMetaData );
+
+    /**
+     * Interface to set metadata to database for dp specific objectproplist
+     * @param aDpConfig, handler to get db access wrapper
+     * @param aPropCode, specify property code of aMediaProp
+     * @param aObjectMetaData, owner of the property which should be
+     *    inserted or updated into database
+     * @param aElement, property list element
+     */
+    virtual TMTPResponseCode SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig,
+        TUint16 aPropCode,
+        const CMTPObjectMetaData& aObject,
+        const CMTPTypeObjectPropListElement& aElement ) = 0;
+
+    };
+
+#endif // CPROPERTYSETTINGUTILITY_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crenameobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crenameobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -92,6 +92,7 @@
 private:
     CActiveSchedulerWait* iRenameWaiter;
     TUint32 iParentHandle;
+
     };
 
 #endif // CRENAMEOBJECT_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h	Fri Feb 26 18:11:38 2010 +0000
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
@@ -100,8 +100,8 @@
 
     /*
     * Get the session id associated with current request object
-    * This interface was added to avoid the case that the data member iRequest 
-    * was sometimes invalid in session close phase, and getting session id from 
+    * This interface was added to avoid the case that the data member iRequest
+    * was sometimes invalid in session close phase, and getting session id from
     * request would cause panic
     * @return session id
     */
@@ -237,8 +237,8 @@
 
     /*
     * Get the session id associated with current request object
-    * This interface was added to avoid the case that the data member iRequest 
-    * was sometimes invalid in session close phase, and getting session id from 
+    * This interface was added to avoid the case that the data member iRequest
+    * was sometimes invalid in session close phase, and getting session id from
     * request would cause panic
     * @return session id
     */
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csendobject.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csendobject.h	Fri Feb 26 18:11:38 2010 +0000
@@ -40,25 +40,37 @@
     {
 public:
     /**
+    * Two-phase construction method
+    * @param aFramework The data provider framework
+    * @param aConnection The connection from which the request comes
+    * @param aDpConfig Configuration of data provider
+    * @return The pointer to the created request processor object
+    */
+    IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
+        MMTPConnection& aConnection,
+        MMmMtpDpConfig& aDpConfig );
+
+    /**
     * Destructor
     */
     IMPORT_C virtual ~CSendObject();
 
 protected:
     /**
-    * Standard C++ Constructor
-    * @param aFramework    The data provider framework
-    * @param aConnection   The connection from which the request comes
-    * @param aWrapper      Medadata access interface
+    * Standard C++ construction method
+    * @param aFramework The data provider framework
+    * @param aConnection The connection from which the request comes
+    * @param aDpConfig Configuration of data provider
+    * @return The pointer to the created request processor object
     */
-    IMPORT_C CSendObject( MMTPDataProviderFramework& aFramework,
+    CSendObject( MMTPDataProviderFramework& aFramework,
         MMTPConnection& aConnection,
         MMmMtpDpConfig& aDpConfig );
 
     /**
     * 2nd Phase Constructor
     */
-    IMPORT_C void ConstructL();
+    void ConstructL();
 
 protected:
     // from CRequestProcessor
@@ -104,31 +116,6 @@
     */
     IMPORT_C void UsbDisconnect();
 
-    // new protected function
-    /**
-     * Called by dp derived processor
-     */
-    IMPORT_C TMTPResponseCode SetMetaDataToWrapperL( const TUint16 aPropCode,
-        MMTPType& aNewData,
-        const CMTPObjectMetaData& aObjectMetaData );
-
-protected:
-    // new virtual functions
-    /**
-     *
-     */
-    virtual TMTPResponseCode SetSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement ) = 0;
-
-    /**
-     * Check datatypes for DP specific PropCodes
-     */
-    virtual TMTPResponseCode CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType ) = 0;
-
-    virtual TInt HandleSpecificWrapperError(TInt aError,
-            const CMTPObjectMetaData& aObject) = 0;
-
 private:
     /**
     * Verify if the SendObject request comes after SendObjectInfo request
@@ -197,7 +184,7 @@
     * Check if the object is too large
     * @return ETrue if yes, otherwise EFalse
     */
-    TBool IsTooLarge( TUint32 aObjectSize ) const;
+    TBool IsTooLarge( TUint64 aObjectSize ) const;
 
     /**
     * Check if we can store the file on the storage
@@ -299,6 +286,7 @@
 
     TUint32 iPreviousTransactionID;
     TUint32 iPreviousOperation;
+
     };
 
 #endif // CSENDOBJECT_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectproplist.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectproplist.h	Fri Feb 26 18:11:38 2010 +0000
@@ -36,39 +36,47 @@
 public:
     /**
     * Two-phase construction method
-    * @param aFramework, The data provider framework
-    * @param aConnection, The connection from which the request comes
-    * @param aWrapper    medadata access interface
-    * @return a pointer to the created request processor object
+    * @param aFramework The data provider framework
+    * @param aConnection The connection from which the request comes
+    * @param aDpConfig Configuration of data provider
+    * @return The pointer to the created request processor object
     */
-    //IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
-    //    MMTPConnection& aConnection,
-    //   CMmMtpDpMetadataAccessWrapper& aWrapper );
+    IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework,
+        MMTPConnection& aConnection,
+        MMmMtpDpConfig& aDpConfig );
 
     /**
     * Destructor
     */
     IMPORT_C virtual ~CSetObjectPropList();
 
-protected:
+private:
     /**
     * Standard c++ constructor
-    * @param aFramework    The data provider framework
-    * @param aConnection    The connection from which the request comes
-    * @param aWrapper    medadata access interface
+    * @param aFramework The data provider framework
+    * @param aConnection The connection from which the request comes
+    * @param aDpConfig Configuration of data provider
+    * @return The pointer to the created request processor object
     */
-    IMPORT_C CSetObjectPropList( MMTPDataProviderFramework& aFramework,
+    CSetObjectPropList( MMTPDataProviderFramework& aFramework,
         MMTPConnection& aConnection,
         MMmMtpDpConfig& aDpConfig );
 
     /**
     * 2nd Phase Constructor
     */
-    IMPORT_C void ConstructL();
+    void ConstructL();
 
 protected:
     // from CRequestProcessor
     /**
+    * Verify the reqeust
+    * @return EMTPRespCodeOK if request is verified, otherwise one of
+    *     the error response codes
+    */
+    IMPORT_C TMTPResponseCode CheckRequestL();
+
+    /**
     * SetObjectPropList request handler
     */
     IMPORT_C void ServiceL();
@@ -100,28 +108,6 @@
     */
     IMPORT_C TInt RunError( TInt aError );
 
-protected:
-    // new virtuals
-    /**
-    * Set MetaData to CMetadataAccessWrapper, for internal use
-    * @param aPropCode, specify property code of aMediaProp
-    * @param aNewData, object property value which will be get from
-    *    aObjectMetaData
-    * @param aObjectMetaData, owner of the property which should be
-    *    inserted or updated into database
-    * @return response code
-    */
-    IMPORT_C TMTPResponseCode ServiceMetaDataToWrapperL( const TUint16 aPropCode,
-        MMTPType& aNewData,
-        const CMTPObjectMetaData& aObjectMetaData );
-
-    virtual TMTPResponseCode ServiceSpecificObjectPropertyL( TUint16 aPropCode,
-        const CMTPObjectMetaData& aObject,
-        const CMTPTypeObjectPropListElement& aElement ) = 0;
-
-    virtual TInt HandleSpecificWrapperError( TInt aError,
-        const CMTPObjectMetaData& aObject) = 0;
-
 private:
     /*
     * Handle response phase of SetObjectPropListL operation
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectpropvalue.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectpropvalue.h	Fri Feb 26 18:11:38 2010 +0000
@@ -30,6 +30,7 @@
 class CMTPObjectMetaData;
 class MMTPObjectMgr;
 class MMmMtpDpConfig;
+class RFs;
 
 /**
 * Defines SetObjectPropValue request processor for common
@@ -127,6 +128,7 @@
     CMTPObjectMetaData* iObjectInfo;
     MMTPObjectMgr& iObjectMgr;
     MMmMtpDpConfig& iDpConfig;
+    RFs& iFs;
 
     };
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implement the operation: CopyObject
-*
-*/
-
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  Implement the operation: CopyObject
+ *
+ */
 
 #include <bautils.h>
 
@@ -33,16 +32,17 @@
 #include "mmmtpdputility.h"
 #include "mmmtpdpconfig.h"
 #include "cmmmtpdpmetadataaccesswrapper.h"
+#include "cpropertysettingutility.h"
 
 /**
-* Verification data for the CopyObject request
-*/
+ * Verification data for the CopyObject request
+ */
 const TMTPRequestElementInfo KMTPCopyObjectPolicy[] =
     {
         {
         TMTPTypeRequest::ERequestParameter1,
         EMTPElementTypeObjectHandle,
-        EMTPElementAttrFileOrDir,
+        EMTPElementAttrFile,
         0,
         0,
         0
@@ -75,13 +75,10 @@
     Cancel();
 
     delete iDest;
-    delete iFileMan;
-    iObjectHandles.Close();
+
     if ( iPropertyElement )
         delete iPropertyElement;
     delete iPropertyList;
-    delete iPathToCopy;
-    delete iNewRootFolder;
     }
 
 // -----------------------------------------------------------------------------
@@ -92,17 +89,30 @@
 EXPORT_C CCopyObject::CCopyObject( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
-    CRequestProcessor( aFramework,
-        aConnection,
-        sizeof ( KMTPCopyObjectPolicy ) / sizeof(TMTPRequestElementInfo),
-        KMTPCopyObjectPolicy ),
-    iDpConfig( aDpConfig ),
-    iObjectHandles( KMmMtpRArrayGranularity )
+        CRequestProcessor( aFramework,
+            aConnection, 
+            sizeof( KMTPCopyObjectPolicy ) / sizeof( TMTPRequestElementInfo ),
+            KMTPCopyObjectPolicy ),
+        iDpConfig( aDpConfig )
     {
     PRINT( _L( "Operation: CopyObject(0x101A)" ) );
     }
 
 // -----------------------------------------------------------------------------
+// CCopyObject::ConstructL
+// Second phase constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCopyObject::ConstructL()
+    {
+    iPropertyList = CMTPTypeObjectPropList::NewL();
+
+    // Set the CenRep value of MTP status,
+    // also need to do in other processors which related to MPX
+    SetPSStatus();
+    }
+
+// -----------------------------------------------------------------------------
 // CCopyObject::ServiceL
 // CopyObject request handler
 // -----------------------------------------------------------------------------
@@ -110,223 +120,52 @@
 EXPORT_C void CCopyObject::ServiceL()
     {
     PRINT( _L( "MM MTP => CCopyObject::ServiceL" ) );
-    iHandle = KMTPHandleNone;
 
-    CopyObjectL( iHandle );
+    CopyObjectL();
 
     PRINT( _L( "MM MTP <= CCopyObject::ServiceL" ) );
     }
 
 // -----------------------------------------------------------------------------
-// CCopyObject::ConstructL
-// Second phase constructor
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CCopyObject::ConstructL()
-    {
-    CActiveScheduler::Add( this );
-
-    iPropertyList = CMTPTypeObjectPropList::NewL();
-
-    // Set the CenRep value of MTP status,
-    // also need to do in other processors which related to MPX
-    SetPSStatus();
-    }
-
-// -----------------------------------------------------------------------------
-// CCopyObject::RunL
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CCopyObject::RunL()
-    {
-    PRINT( _L( "MM MTP => CCopyObject::RunL" ) );
-
-    if ( iCopyObjectIndex < iNumberOfObjects )
-        {
-        CopyAndUpdateL( iObjectHandles[iCopyObjectIndex++] );
-
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete( status, iStatus.Int() );
-        SetActive();
-        }
-    else
-        {
-        PRINT1( _L( "MM MTP <> CCopyObject::RunL iHandle = 0x%x" ), iHandle );
-        SendResponseL( EMTPRespCodeOK, 1, &iHandle );
-        }
-
-    PRINT( _L( "MM MTP <= CCopyObject::RunL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CCopyObject::CopyFileL
-// A helper function of CopyObjectL
-// -----------------------------------------------------------------------------
-//
-TUint32 CCopyObject::CopyFileL( const TDesC& aNewFileName )
-    {
-    const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
-    PRINT2( _L( "MM MTP => CCopyObject::CopyFileL old name = %S, aNewFileName = %S" ),
-        &suid,
-        &aNewFileName );
-
-    GetPreviousPropertiesL( *iObjectInfo );
-    User::LeaveIfError( iFileMan->Copy( suid, aNewFileName ) ); // iDest just folder
-    User::LeaveIfError( iFramework.Fs().SetModified( aNewFileName, iPreviousModifiedTime ) );
-    TUint32 handle = UpdateObjectInfoL( suid, aNewFileName );
-
-    PRINT1( _L( "MM MTP <= CCopyObject::CopyFileL handle = 0x%x" ), handle );
-
-    return handle;
-    }
-
-// -----------------------------------------------------------------------------
-// CCopyObject::GenerateObjectHandleListL
-// Generate the list of handles that need to be copied to the new location
-// -----------------------------------------------------------------------------
-//
-void CCopyObject::GenerateObjectHandleListL( TUint32 aParentHandle )
-    {
-    PRINT1( _L( "MM MTP => CCopyObject::GenerateObjectHandleListL aParentHandle = 0x%x" ),
-        aParentHandle );
-    RMTPObjectMgrQueryContext context;
-    RArray<TUint> handles;
-    CleanupClosePushL( context ); // + context
-    CleanupClosePushL( handles ); // + handles
-
-    TMTPObjectMgrQueryParams params( KMTPStorageAll, KMTPFormatsAll,
-            aParentHandle );
-    do
-        {
-        iFramework.ObjectMgr().GetObjectHandlesL( params, context, handles );
-
-        TInt numberOfObjects = handles.Count();
-        for ( TInt i = 0; i < numberOfObjects; i++ )
-            {
-            if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == iFramework.DataProviderId() )
-                {
-                iObjectHandles.AppendL( handles[i] );
-                continue;
-                }
-
-            // Folder
-            if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == 0 ) // We know that the device dp id is always 0, otherwise the whole MTP won't work.
-                {
-                GenerateObjectHandleListL( handles[i] );
-                }
-            }
-        }
-    while ( !context.QueryComplete() );
-
-    CleanupStack::PopAndDestroy( &handles ); // - handles
-    CleanupStack::PopAndDestroy( &context ); // - context
-    PRINT( _L( "MM MTP <= CCopyObject::GenerateObjectHandleListL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CCopyObject::CopyFolderL
-// A helper function of CopyObjectL
-// -----------------------------------------------------------------------------
-//
-TUint32 CCopyObject::CopyFolderL( const TDesC& aNewFolderName )
-    {
-    PRINT1( _L( "MM MTP => CCopyObject::CopyFolderL aNewFolderName = %S" ), &aNewFolderName );
-    TUint32 handle = iFramework.ObjectMgr().HandleL( aNewFolderName ); // just get it
-
-    GenerateObjectHandleListL( iObjectInfo->Uint( CMTPObjectMetaData::EHandle ) );
-    iCopyObjectIndex = 0;
-    iNumberOfObjects = iObjectHandles.Count();
-    PRINT1( _L( "MM MTP <> CCopyObject::CopyFolderL iNumberOfObjects = %d" ), iNumberOfObjects );
-
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status, iStatus.Int() );
-    SetActive();
-
-    PRINT1( _L( "MM MTP <= CCopyObject::CopyFolderL handle = 0x%x" ), handle );
-    return handle;
-    }
-
-// -----------------------------------------------------------------------------
 // CCopyObject::CopyObjectL
 // Copy object operation
 // -----------------------------------------------------------------------------
 //
-void CCopyObject::CopyObjectL( TUint32& aNewHandle )
+void CCopyObject::CopyObjectL()
     {
     PRINT( _L( "MM MTP => CCopyObject::CopyObjectL" ) );
+
     TMTPResponseCode responseCode = EMTPRespCodeOK;
-    aNewHandle = KMTPHandleNone;
 
     GetParametersL();
 
     RBuf newObjectName;
+    newObjectName.CreateL( KMaxFileName );
     newObjectName.CleanupClosePushL(); // + newObjectName
-    newObjectName.CreateL( KMaxFileName );
     newObjectName = *iDest;
 
     const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
     TParsePtrC fileNameParser( suid );
-
-    // Check if the object is a folder or a file.
-    TBool isFolder = EFalse;
-    User::LeaveIfError( BaflUtils::IsFolder( iFramework.Fs(), suid, isFolder ) );
-
-    if ( !isFolder )
-        {
-        if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() ) <= newObjectName.MaxLength() )
-            {
-            newObjectName.Append( fileNameParser.NameAndExt() );
-            }
-        responseCode = CanCopyObjectL( suid, newObjectName );
-        }
-    else // It is a folder.
+    if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() )
+        <= newObjectName.MaxLength() )
         {
-        TFileName rightMostFolderName;
-        User::LeaveIfError( BaflUtils::MostSignificantPartOfFullName( suid,
-            rightMostFolderName ) );
-        if ( ( newObjectName.Length() + rightMostFolderName.Length() + 1 ) <= newObjectName.MaxLength() )
-            {
-            newObjectName.Append( rightMostFolderName );
-            // Add backslash.
-            _LIT( KBackSlash, "\\" );
-            newObjectName.Append( KBackSlash );
-            }
+        newObjectName.Append( fileNameParser.NameAndExt() );
         }
+    responseCode = CanCopyObjectL( suid, newObjectName );
 
-    delete iNewRootFolder;
-    iNewRootFolder = NULL;
-    iNewRootFolder = newObjectName.AllocL();
-
+    TUint32 newHandle = KMTPHandleNone;
     if ( responseCode == EMTPRespCodeOK )
         {
-        delete iFileMan;
-        iFileMan = NULL;
-        iFileMan = CFileMan::NewL( iFramework.Fs() );
-
-        if ( !isFolder ) // It is a file.
-            {
-            aNewHandle = CopyFileL( newObjectName );
-//            if ( responseCode == EMTPRespCodeOK  )
-            SendResponseL( EMTPRespCodeOK, 1, &aNewHandle );
-//            else
-//                SendResponseL( responseCode );
-            }
-        else // It is a folder.
-            {
-            delete iPathToCopy;
-            iPathToCopy = NULL;
-            iPathToCopy = suid.AllocL();
-            PRINT1( _L( "MM MTP <> CCopyObject::CopyObjectL iPathToCopy = %S" ), iPathToCopy );
-            aNewHandle = CopyFolderL( newObjectName );
-            }
+        newHandle = CopyFileL( newObjectName );
+        SendResponseL( EMTPRespCodeOK, 1, &newHandle );
         }
     else
         SendResponseL( responseCode );
 
     CleanupStack::PopAndDestroy( &newObjectName ); // - newObjectName
     PRINT2( _L( "MM MTP <= CCopyObject::CopyObjectL responseCode = 0x%x, aNewHandle = 0x%x" ),
-            responseCode, aNewHandle );
+        responseCode,
+        newHandle );
     }
 
 // -----------------------------------------------------------------------------
@@ -337,30 +176,34 @@
 void CCopyObject::GetParametersL()
     {
     PRINT( _L( "MM MTP => CCopyObject::GetParametersL" ) );
+
     __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) );
 
     TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
     iStorageId = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
-    TUint32 parentObjectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter3 );
-    PRINT3( _L( "MM MTP <> CCopyObject::GetParametersL Object Hanlde = 0x%x, StorageId = 0x%x, Parent Handle = 0x%x" ),
-            objectHandle, iStorageId, parentObjectHandle );
+    iNewParentHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter3 );
+    PRINT3( _L( "MM MTP <> CCopyObject::GetParametersL Object Handle = 0x%x, StorageId = 0x%x, Parent Handle = 0x%x" ),
+        objectHandle,
+        iStorageId,
+        iNewParentHandle );
 
     // not taking owernship
     iObjectInfo = iRequestChecker->GetObjectInfo( objectHandle );
     __ASSERT_DEBUG( iObjectInfo, Panic( EMmMTPDpObjectNull ) );
 
-    if ( parentObjectHandle == 0 )
+    if ( iNewParentHandle == KMTPHandleNone )
         {
         SetDefaultParentObjectL();
         }
     else
         {
-        CMTPObjectMetaData* parentObjectInfo = iRequestChecker->GetObjectInfo( parentObjectHandle );
-        __ASSERT_DEBUG( parentObjectInfo, Panic( EMmMTPDpObjectNull ) );
+        CMTPObjectMetaData* parentObject = iRequestChecker->GetObjectInfo( iNewParentHandle );
+        __ASSERT_DEBUG( parentObject, Panic( EMmMTPDpObjectNull ) );
+
         delete iDest;
         iDest = NULL;
-        iDest = parentObjectInfo->DesC( CMTPObjectMetaData::ESuid ).AllocL();
-        iNewParentHandle = parentObjectHandle;
+        iDest = parentObject->DesC( CMTPObjectMetaData::ESuid ).AllocL();
+        PRINT1( _L( "MM MTP <> CMoveObject::GetParametersL iDest = %S" ), iDest );
         }
     PRINT( _L( "MM MTP <= CCopyObject::GetParametersL" ) );
     }
@@ -376,11 +219,11 @@
 
     delete iDest;
     iDest = NULL;
-    iDest = ( iFramework.StorageMgr().StorageL( iStorageId ).DesC(
-                CMTPStorageMetaData::EStorageSuid ) ).AllocL();
-    PRINT1( _L( "MM MTP <> CCopyObject::SetDefaultParentObjectL Destination location is %S" ), iDest );
+    iDest = iFramework.StorageMgr().StorageL( iStorageId ).DesC( CMTPStorageMetaData::EStorageSuid ).AllocL();
+
     iNewParentHandle = KMTPHandleNoParent;
-    PRINT( _L( "MM MTP <= CCopyObject::SetDefaultParentObjectL" ) );
+
+    PRINT1( _L( "MM MTP <= CCopyObject::SetDefaultParentObjectL, iDest = %S" ), iDest );
     }
 
 // -----------------------------------------------------------------------------
@@ -392,17 +235,18 @@
     const TDesC& aNewName ) const
     {
     PRINT2( _L( "MM MTP => CCopyObject::CanCopyObjectL aOldName = %S, aNewName = %S" ),
-            &aOldName, &aNewName );
+        &aOldName,
+        &aNewName );
     TMTPResponseCode result = EMTPRespCodeOK;
 
     TEntry fileEntry;
     User::LeaveIfError( iFramework.Fs().Entry( aOldName, fileEntry ) );
-    TDriveNumber drive( static_cast<TDriveNumber>( iFramework.StorageMgr().DriveNumber( iStorageId ) ) );
+    TInt drive = iFramework.StorageMgr().DriveNumber( iStorageId );
     User::LeaveIfError( drive );
     TVolumeInfo volumeInfo;
     User::LeaveIfError( iFramework.Fs().Volume( volumeInfo, drive ) );
 
-    if ( volumeInfo.iFree < fileEntry.iSize )
+    if ( volumeInfo.iFree < fileEntry.FileSize() )
         {
         result = EMTPRespCodeStoreFull;
         }
@@ -445,6 +289,37 @@
     }
 
 // -----------------------------------------------------------------------------
+// CCopyObject::CopyFileL
+// A helper function of CopyFileL
+// -----------------------------------------------------------------------------
+//
+TUint32 CCopyObject::CopyFileL( const TDesC& aNewFileName )
+    {
+    const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
+    PRINT2( _L( "MM MTP => CCopyObject::CopyFileL old name = %S, aNewFileName = %S" ),
+        &suid,
+        &aNewFileName );
+
+    GetPreviousPropertiesL( *iObjectInfo );
+
+    TUint32 handle = AddObjectToStoreL( suid, aNewFileName );
+
+    SetPreviousPropertiesL( *iObjectInfo );
+
+    CFileMan* fileMan = CFileMan::NewL( iFramework.Fs() );
+    User::LeaveIfError( fileMan->Copy( suid, aNewFileName ) );
+    delete fileMan;
+    fileMan = NULL;
+
+    User::LeaveIfError( iFramework.Fs().SetModified( aNewFileName,
+        iPreviousModifiedTime ) );
+
+    PRINT1( _L( "MM MTP <= CCopyObject::CopyFileL handle = 0x%x" ), handle );
+
+    return handle;
+    }
+
+// -----------------------------------------------------------------------------
 // CCopyObject::GetPreviousPropertiesL
 // Save the object properties before doing the copy
 // -----------------------------------------------------------------------------
@@ -454,29 +329,27 @@
     PRINT( _L( "MM MTP => CCopyObject::GetPreviousPropertiesL" ) );
 
     const TDesC& suid( aObject.DesC( CMTPObjectMetaData::ESuid ) );
-
     User::LeaveIfError( iFramework.Fs().Modified( suid, iPreviousModifiedTime ) );
 
     TUint formatCode = aObject.Uint( CMTPObjectMetaData::EFormatCode );
     const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( formatCode );
     TInt count = properties->Count();
 
-    CMTPTypeString* textData = NULL;
     TInt err = KErrNone;
     TUint16 propCode;
-    TUint32 handle = aObject.Uint( CMTPObjectMetaData::EHandle ) ;
+    TUint32 handle = aObject.Uint( CMTPObjectMetaData::EHandle );
 
-    if ( iPropertyElement )
+    if ( iPropertyElement != NULL )
         {
         delete iPropertyElement;
         iPropertyElement = NULL;
         }
-    
+
     for ( TInt i = 0; i < count; i++ )
         {
-        propCode = (*properties)[i];
+        propCode = ( *properties )[i];
 
-        switch( propCode )
+        switch ( propCode )
             {
             case EMTPObjectPropCodeStorageID:
             case EMTPObjectPropCodeObjectFormat:
@@ -485,31 +358,35 @@
             case EMTPObjectPropCodeObjectFileName:
             case EMTPObjectPropCodeParentObject:
             case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
-            case EMTPObjectPropCodeNonConsumable:
             case EMTPObjectPropCodeDateCreated:
             case EMTPObjectPropCodeDateModified:
                 break;
 
+            case EMTPObjectPropCodeNonConsumable:
+                iPropertyElement = &( iPropertyList->ReservePropElemL( handle, propCode ) );
+                iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue,
+                    aObject.Uint( CMTPObjectMetaData::ENonConsumable ) );
+                break;
+
             case EMTPObjectPropCodeName:
             case EMTPObjectPropCodeDateAdded:
                 if ( ( propCode == EMTPObjectPropCodeName )
-                   || ( ( !MmMtpDpUtility::IsVideoL( aObject.DesC( CMTPObjectMetaData::ESuid ), iFramework ) )
+                    || ( !MmMtpDpUtility::IsVideoL( aObject.DesC( CMTPObjectMetaData::ESuid ), iFramework )
                         && ( propCode == EMTPObjectPropCodeDateAdded ) ) )
                     {
-                    textData = CMTPTypeString::NewLC(); // + textData
+                    CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData
 
                     TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( propCode,
                         *textData,
                         aObject ) );
 
-                    PRINT1( _L( "MM MTP <> CCopyObject::GetPreviousPropertiesL::ServiceSpecificObjectPropertyL err = %d" ), err );
+                    PRINT1( _L( "MM MTP <> CCopyObject::GetPreviousPropertiesL err = %d" ), err );
 
                     if ( err == KErrNone )
                         {
-                        iPropertyElement = &(iPropertyList->ReservePropElemL(handle, propCode));
-                        iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, textData->StringChars());
-//                        iPropertyElement = CMTPTypeObjectPropListElement::NewL(
-//                                handle, propCode, *textData );
+                        iPropertyElement = &( iPropertyList->ReservePropElemL( handle, propCode ) );
+                        iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue,
+                            textData->StringChars() );
                         }
                     else if ( err == KErrNotFound )
                         {
@@ -531,7 +408,7 @@
                 break;
             }
 
-        if ( iPropertyElement )
+        if ( iPropertyElement != NULL )
             {
             iPropertyList->CommitPropElemL( *iPropertyElement );
             iPropertyElement = NULL;
@@ -542,54 +419,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CCopyObject::ServiceMetaDataToWrapper
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TMTPResponseCode CCopyObject::ServiceMetaDataToWrapper(
-    const TUint16 aPropCode,
-    MMTPType& aNewData,
-    const CMTPObjectMetaData& aObject )
-    {
-    TMTPResponseCode resCode = EMTPRespCodeOK;
-
-    TRAPD( err, iDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode,
-        aNewData,
-        aObject ) );
-
-    PRINT1( _L("MM MTP <> CCopyObject::ServiceMetaDataToWrapper err = %d"), err);
-
-    if ( err == KErrNone )
-        {
-        resCode = EMTPRespCodeOK;
-        }
-    else if ( err == KErrTooBig )
-        // according to the codes of S60
-        {
-        resCode = EMTPRespCodeInvalidDataset;
-        }
-    else if ( err == KErrPermissionDenied )
-        {
-        resCode = EMTPRespCodeAccessDenied;
-        }
-    else if ( err == KErrNotFound )
-        {
-        if ( MmMtpDpUtility::HasMetadata( aObject.Uint( CMTPObjectMetaData::EFormatCode ) ) )
-            resCode = EMTPRespCodeAccessDenied;
-        else
-            resCode = EMTPRespCodeOK;
-        }
-    else
-        {
-        resCode = EMTPRespCodeGeneralError;
-        }
-
-    PRINT1( _L("MM MTP <= CCopyObject::ServiceMetaDataToWrapper resCode = 0x%x"), resCode);
-
-    return resCode;
-    }
-
-// -----------------------------------------------------------------------------
 // CCopyObject::SetPreviousPropertiesL
 // Set the object properties after doing the copy
 // -----------------------------------------------------------------------------
@@ -597,23 +426,22 @@
 void CCopyObject::SetPreviousPropertiesL( const CMTPObjectMetaData& aObject )
     {
     PRINT( _L( "MM MTP => CCopyObject::SetPreviousPropertiesL" ) );
-    const TInt count( iPropertyList->NumberOfElements() );
-    PRINT1( _L( "MM MTP <> CCopyObject::SetPreviousPropertiesL count = %d" ), count );
+
     TMTPResponseCode respcode = EMTPRespCodeOK;
-    CMTPTypeString* stringData = NULL;
+
     iPropertyList->ResetCursor();
+    const TInt count = iPropertyList->NumberOfElements();
     for ( TInt i = 0; i < count; i++ )
         {
         CMTPTypeObjectPropListElement& element = iPropertyList->GetNextElementL();
 
-        TUint32 handle = element.Uint32L(
-                CMTPTypeObjectPropListElement::EObjectHandle );
-        TUint16 propertyCode = element.Uint16L(
-                CMTPTypeObjectPropListElement::EPropertyCode );
-        TUint16 dataType = element.Uint16L(
-                CMTPTypeObjectPropListElement::EDatatype );
+        TUint32 handle = element.Uint32L( CMTPTypeObjectPropListElement::EObjectHandle );
+        TUint16 propertyCode = element.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode );
+        TUint16 dataType = element.Uint16L( CMTPTypeObjectPropListElement::EDatatype );
         PRINT3( _L( "MM MTP <> CCopyObject::SetPreviousPropertiesL = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ),
-          handle, propertyCode, dataType );
+            handle,
+            propertyCode,
+            dataType );
 
         switch ( propertyCode )
             {
@@ -624,19 +452,26 @@
             case EMTPObjectPropCodeObjectFileName:
             case EMTPObjectPropCodeParentObject:
             case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
-            case EMTPObjectPropCodeNonConsumable:
             case EMTPObjectPropCodeDateCreated:
             case EMTPObjectPropCodeDateModified:
             case EMTPObjectPropCodeDateAdded:
                 break;
 
+            case EMTPObjectPropCodeNonConsumable:
+                iObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable,
+                    element.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
+                // TODO: need to reconsider,
+                // should wait all property setting finished then insert object, or not?
+                // need to investigate if it will affect performance result
+                iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
+                break;
+
             case EMTPObjectPropCodeName:
                 {
-                stringData = CMTPTypeString::NewLC(
-                    element.StringL(
-                    CMTPTypeObjectPropListElement::EValue)); // + stringData
+                CMTPTypeString *stringData = CMTPTypeString::NewLC( element.StringL( CMTPTypeObjectPropListElement::EValue ) ); // + stringData
 
-                respcode = ServiceMetaDataToWrapper( propertyCode,
+                respcode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapperL( iDpConfig,
+                    propertyCode,
                     *stringData,
                     aObject );
 
@@ -646,18 +481,16 @@
 
             default:
                 {
-                respcode = ServiceSetSpecificObjectPropertyL( propertyCode,
-                        aObject,
-                        element );
+                respcode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig,
+                    propertyCode,
+                    aObject,
+                    element );
                 }
                 break;
             }
         } // end of for loop
 
-    if( respcode == EMTPRespCodeOK )
-        {
-        // do nothing, ignore warning
-        }
+    // ignore errors
 
     PRINT1( _L( "MM MTP <= CCopyObject::SetPreviousPropertiesL respcode = 0x%x" ), respcode );
     }
@@ -667,168 +500,43 @@
 // Update object info in the database
 // -----------------------------------------------------------------------------
 //
-TUint32 CCopyObject::UpdateObjectInfoL( const TDesC& aOldObjectName, const TDesC& aNewObjectName )
+TUint32 CCopyObject::AddObjectToStoreL( const TDesC& aOldObjectName,
+    const TDesC& aNewObjectName )
     {
-    PRINT2( _L( "MM MTP => CCopyObject::UpdateObjectInfoL aOldObjectName = %S, aNewObjectName = %S" ),
-            &aOldObjectName, &aNewObjectName );
-    // We should not modify this object's handle, so just get a "copy".
+    PRINT2( _L( "MM MTP => CCopyObject::AddObjectToStoreL aOldObjectName = %S, aNewObjectName = %S" ),
+        &aOldObjectName,
+        &aNewObjectName );
+
     CMTPObjectMetaData* objectInfo = CMTPObjectMetaData::NewLC(); // + objectInfo
-    const TMTPTypeUint32 objectHandle( iObjectInfo->Uint( CMTPObjectMetaData::EHandle ) );
-    if ( iFramework.ObjectMgr().ObjectL( objectHandle, *objectInfo) )
+
+    // 1. Add new object into objectMgr db
+    objectInfo->SetUint( CMTPObjectMetaData::EDataProviderId, iObjectInfo->Uint( CMTPObjectMetaData::EDataProviderId ) );
+    TUint formatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatCode );
+    objectInfo->SetUint( CMTPObjectMetaData::EFormatCode, formatCode );
+    TUint subFormatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatSubCode );
+    objectInfo->SetUint( CMTPObjectMetaData::EFormatSubCode, subFormatCode );
+    objectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
+    objectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
+    objectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewObjectName );
+    iFramework.ObjectMgr().InsertObjectL( *objectInfo );
+
+    // 2. Add new object into MPX db
+    iDpConfig.GetWrapperL().AddObjectL( aNewObjectName, formatCode, subFormatCode );
+
+    // 3. Set references into references db
+    if ( formatCode == EMTPFormatCodeM3UPlaylist )
         {
-        objectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewObjectName );
-        objectInfo->SetUint( CMTPObjectMetaData::EParentHandle,
-                iNewParentHandle );
-        // Modify storage Id.
-        objectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
-        iFramework.ObjectMgr().InsertObjectL( *objectInfo );
-        }
-    else
-        {
-        User::Leave( KErrCorrupt );
+        MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr();
+        CDesCArray* references = referenceMgr.ReferencesLC( aOldObjectName ); // + references
+        referenceMgr.SetReferencesL( aNewObjectName, *references );
+        CleanupStack::PopAndDestroy( references ); // - references
         }
 
     TUint32 handle = objectInfo->Uint( CMTPObjectMetaData::EHandle );
-    PRINT1( _L( "MM MTP <> CCopyObject::UpdateObjectInfoL handle = 0x%x" ), handle );
-    SetPropertiesL( aOldObjectName, aNewObjectName, *objectInfo );
     CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo
-    PRINT( _L( "MM MTP <= CCopyObject::UpdateObjectInfoL" ) );
+
+    PRINT1( _L( "MM MTP <= CCopyObject::AddObjectToStoreL handle = 0x%x" ), handle );
     return handle;
     }
 
-// -----------------------------------------------------------------------------
-// CCopyObject::CopyAndUpdateL
-// Move a single object and update the database
-// -----------------------------------------------------------------------------
-//
-void CCopyObject::CopyAndUpdateL( TUint32 aObjectHandle )
-    {
-    PRINT1( _L( "MM MTP => CopyObject::CopyAndUpdateL aObjectHanlde = 0x%x" ), aObjectHandle );
-    CMTPObjectMetaData* objectInfo = CMTPObjectMetaData::NewLC(); // + objectInfo
-
-    if ( iFramework.ObjectMgr().ObjectL( aObjectHandle, *objectInfo ) )
-        {
-        // This is used to keep the same behavior in mass storage and device file manager.
-        if ( objectInfo->Uint( CMTPObjectMetaData::EFormatCode )
-            == EMTPFormatCodeAbstractAudioVideoPlaylist )
-            {
-            PRINT( _L( "MM MTP <> CopyObject::CopyAndUpdateL Playlist file don't to be copieds" ) );
-            CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo
-            return;
-            }
-
-        RBuf fileName; // This is the source object name.
-        fileName.CleanupClosePushL(); // + fileName
-        fileName.CreateL( KMaxFileName );
-
-        RBuf oldFileName;
-        oldFileName.CleanupClosePushL(); // + oldFileName
-        oldFileName.CreateL( KMaxFileName );
-
-        RBuf rightPartName;
-        rightPartName.CleanupClosePushL(); // + rightPartName
-        rightPartName.CreateL( KMaxFileName );
-
-        fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid );
-        oldFileName = fileName;
-
-        rightPartName = fileName.Right( fileName.Length()
-            - iPathToCopy->Length() );
-
-        if ( ( iNewRootFolder->Length() + rightPartName.Length() ) > fileName.MaxLength() )
-            {
-            User::Leave( KErrCorrupt );
-            }
-
-        fileName.Zero();
-        fileName.Append( *iNewRootFolder );
-        fileName.Append( rightPartName );
-        PRINT1( _L( "MM MTP <> CopyAndUpdateL fileName = %S" ), &fileName );
-
-        if ( objectInfo->Uint( CMTPObjectMetaData::EDataProviderId )
-            == iFramework.DataProviderId() )
-            {
-            // should copy before the set metadata DB
-            GetPreviousPropertiesL( *objectInfo );
-            TInt err = iFileMan->Copy( oldFileName, fileName );
-            PRINT1( _L( "MM MTP <> CCopyObject::CopyAndUpdateL err = %d" ), err );
-            User::LeaveIfError( err );
-            User::LeaveIfError( iFramework.Fs().SetModified( fileName,
-                iPreviousModifiedTime ) );
-
-            // Modify Suid
-            objectInfo->SetDesCL( CMTPObjectMetaData::ESuid, fileName );
-
-            // Modify parentHandle
-            TParsePtrC parentSuid( fileName );
-            PRINT1( _L( "MM MTP <> CCopyObject::CopyAndUpdateL parentSuid = %S" ), &(parentSuid.DriveAndPath()) );
-
-            TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parentSuid.DriveAndPath() );
-            objectInfo->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
-            PRINT1( _L( "MM MTP <> CCopyObject::CopyAndUpdateL parentHandle = 0x%x" ), parentHandle );
-
-            // Modify storage Id.
-            objectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
-            TRAP( err, iFramework.ObjectMgr().InsertObjectL( *objectInfo ) );
-            if ( err != KErrNone )
-                PRINT1( _L( "MM MTP <> CCopyObject::CopyAndUpdateL err = %d" ), err );
-            // Set the properties of the new object
-            SetPropertiesL( oldFileName, fileName, *objectInfo );
-            }
-        // Else this is not the owner of this object, so don't update the object store.
-
-        CleanupStack::PopAndDestroy( &rightPartName ); // - rightPartName
-        CleanupStack::PopAndDestroy( &oldFileName ); // - oldFileName
-        CleanupStack::PopAndDestroy( &fileName ); // - fileName
-        }
-    else
-        {
-        User::Leave( KErrCorrupt );
-        }
-
-    CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo
-
-    PRINT( _L( "MM MTP <= CopyObject::CopyAndUpdateL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CCopyObject::SetPropertiesL
-// Set the object properties in the object property store
-// -----------------------------------------------------------------------------
-//
-void CCopyObject::SetPropertiesL( const TDesC& aOldFileName,
-        const TDesC& aNewFileName,
-        const CMTPObjectMetaData& aObject )
-    {
-    PRINT( _L( "MM MTP => CCopyObject::SetPropertiesL" ) );
-    // won't leave with KErrAlreadyExist
-    iDpConfig.GetWrapperL().AddObjectL( aNewFileName );
-
-    TUint formatCode = aObject.Uint( CMTPObjectMetaData::EFormatCode );
-    if ( formatCode == EMTPFormatCodeM3UPlaylist )
-        {
-        MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr();
-        CDesCArray* references = referenceMgr.ReferencesLC( aOldFileName ); // + references
-        referenceMgr.SetReferencesL( aNewFileName, *references );
-        CleanupStack::PopAndDestroy( references ); // - references
-        }
-
-    SetPreviousPropertiesL( aObject );
-    PRINT( _L( "MM MTP <= CCopyObject::SetPropertiesL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CCopyObject::RunError
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CCopyObject::RunError( TInt aError )
-    {
-    if ( aError != KErrNone )
-        PRINT1( _L( "MM MTP <> CCopyObject::RunError aError = %d" ), aError );
-
-    TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) );
-    return KErrNone;
-    }
-
 // end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -18,12 +18,14 @@
 
 #include <mtp/mmtpdataproviderframework.h>
 #include <mtp/mmtpobjectmgr.h>
+#include <mtp/mmtpreferencemgr.h>
 #include <mtp/cmtpobjectmetadata.h>
 
 #include "cdeleteobject.h"
 #include "mmmtpdplogger.h"
 #include "mmmtpdpconfig.h"
 #include "cmmmtpdpmetadataaccesswrapper.h"
+#include "mmmtpdputility.h"
 
 // static const TInt KMTPDriveGranularity = 5;
 
@@ -91,7 +93,7 @@
         KMTPDeleteObjectPolicy ),
     iObjectMgr( aFramework.ObjectMgr() ),
     iFs( aFramework.Fs() ),
-    iObjectsToDelete( KMmMtpRArrayGranularity ), 
+    iObjectsToDelete( KMmMtpRArrayGranularity ),
     iDeleteError( KErrNone ),
     iDpConfig( aDpConfig )
     {
@@ -264,6 +266,10 @@
     // 3. Delete object from framework db
     iObjectMgr.RemoveObjectL( aObjectInfo.Uint( CMTPObjectMetaData::EHandle ) );
 
+    // 4. If the object has references, Delete references from reference manager
+    if ( MmMtpDpUtility::HasReference( aObjectInfo.Uint( CMTPObjectMetaData::EFormatCode ) ) )
+        iFramework.ReferenceMgr().RemoveReferencesL( aObjectInfo.DesC( CMTPObjectMetaData::ESuid ) );
+
     PRINT( _L( "MM MTP <= CDeleteObject::DeleteObjectL" ) );
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdescriptionutility.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <mtp/cmtptypeinterdependentpropdesc.h>
+#include <mtp/cmtptypeobjectpropdesc.h>
+#include <mtp/cmtptypestring.h>
+
+#include "cdescriptionutility.h"
+#include "tobjectdescription.h"
+
+#include "mmmtpdplogger.h"
+
+
+_LIT( KMtpObjDescObjFileName,
+    "[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 7}\\.[[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 2}]?" );
+// RegEx is [a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~][a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~ ]{0, 7}\.[[a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~][a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~ ]{0, 2}]?
+
+EXPORT_C CDescriptionUtility::CDescriptionUtility()
+    {
+    // Do nothing
+    }
+
+EXPORT_C CDescriptionUtility::~CDescriptionUtility()
+    {
+    // Do nothing
+    }
+
+EXPORT_C CMTPTypeObjectPropDesc* CDescriptionUtility::NewCommonObjectPropertyL( TUint16 aPropCode )
+    {
+    CMTPTypeObjectPropDesc* propertyDesc = NULL;
+
+    switch ( aPropCode )
+        {
+        case EMTPObjectPropCodeStorageID:
+        case EMTPObjectPropCodeObjectFormat:
+        case EMTPObjectPropCodeObjectSize:
+        case EMTPObjectPropCodeParentObject:
+        case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
+        case EMTPObjectPropCodeName:
+        case EMTPObjectPropCodeDateAdded:
+            propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode );
+            break;
+
+            // Protection Status (m)
+        case EMTPObjectPropCodeProtectionStatus:
+            propertyDesc = NewProtectionStatusPropDescL();
+            break;
+
+            // FileName
+        case EMTPObjectPropCodeObjectFileName:
+            propertyDesc = NewFileNamePropDescL();
+            break;
+
+            // Consumable (m)
+        case EMTPObjectPropCodeNonConsumable:
+            propertyDesc = NewNonConsumablePropDescL();
+            break;
+
+        case EMTPObjectPropCodeDateModified: // Date Modified
+        case EMTPObjectPropCodeDateCreated: // Date Created
+            {
+            CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
+            propertyInfo.iDataType = EMTPTypeString;
+            propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EDateTimeForm;
+            propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly;
+            propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode,
+                propertyInfo,
+                NULL );
+            }
+            break;
+
+        default:
+            break;
+        }
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CDescriptionUtility::NewRangeFormDescriptionL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMTPTypeObjectPropDesc* CDescriptionUtility::NewRangeFormDescriptionL( TUint16 aPropertyCode,
+    TUint32 aMinValue,
+    TUint32 aMaxValue,
+    TUint32 aStepValue,
+    TBool aIsReadOnly )
+    {
+    PRINT1( _L( "MM MTP => CDescriptionUtility::NewRangeFormDescriptionL, aPropertyCode = 0x%x" ),
+        aPropertyCode );
+    CMTPTypeObjectPropDescRangeForm* form =
+        CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
+
+    // Set expected values
+    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue );
+    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue );
+    form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue );
+
+    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
+    propertyInfo.iDataType = EMTPTypeUINT32;
+    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm;
+    propertyInfo.iGetSet = !aIsReadOnly;
+
+    CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropertyCode,
+        propertyInfo,
+        form );    // + propertyDesc
+
+    CleanupStack::PopAndDestroy( form ); // - form
+    PRINT( _L( "MM MTP <= CDescriptionUtility::NewRangeFormDescriptionL" ) );
+
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CDescriptionUtility::GetGroupCode
+// Get MTPTypeObjectPropDesc according to property code
+// -----------------------------------------------------------------------------
+//
+TUint32 CDescriptionUtility::GetGroupCode( TUint32 aPropCode )
+    {
+    TInt count = sizeof( KPropGroupMapTable ) / sizeof( KPropGroupMapTable[0] );
+    // TODO: if need to refine the search approach to improve performance
+    for( TInt i = 0; i < count; i++ )
+        {
+        if ( aPropCode == KPropGroupMapTable[i].iPropCode )
+            return KPropGroupMapTable[i].iGroupCode;
+        }
+    return EGroupCodeNotDefined;
+    }
+
+// -----------------------------------------------------------------------------
+// CDescriptionUtility::NewProtectionStatusPropDescL
+// New MTPTypeObjectPropDesc protection status
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CDescriptionUtility::NewProtectionStatusPropDescL()
+    {
+    PRINT( _L( "MM MTP => CDescriptionUtility::NewProtectionStatusPropDescL" ) );
+
+    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
+
+    TUint16 values[] =
+        {
+        EMTPProtectionNoProtection,
+        EMTPProtectionReadOnly
+        };
+
+    TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
+    for ( TInt i = 0; i < numValues; i++ )
+        {
+        TMTPTypeUint16 data( values[i] );
+        expectedForm->AppendSupportedValueL( data );
+        }
+
+    CMTPTypeObjectPropDesc* propertyDesc  = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeProtectionStatus, *expectedForm );
+    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+    PRINT( _L( "MM MTP <= CDescriptionUtility::NewProtectionStatusPropDescL" ) );
+    return propertyDesc;
+    }
+
+// -----------------------------------------------------------------------------
+// CDescriptionUtility::NewFileNamePropDescL
+// Get MTPTypeObjectPropDesc New file name
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CDescriptionUtility::NewFileNamePropDescL()
+    {
+    PRINT( _L( "MM MTP => CDescriptionUtility::NewFileNamePropDescL" ) );
+    CMTPTypeString* form = CMTPTypeString::NewLC( KMtpObjDescObjFileName ); // + form
+
+    CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeObjectFileName,
+        CMTPTypeObjectPropDesc::ERegularExpressionForm,
+        form );
+
+    CleanupStack::PopAndDestroy( form ); // - form
+    PRINT( _L( "MM MTP <= CDescriptionUtility::NewFileNamePropDescL" ) );
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CDescriptionUtility::NewFileNamePropDescL
+// Get MTPTypeObjectPropDesc New file name
+// -----------------------------------------------------------------------------
+//
+CMTPTypeObjectPropDesc* CDescriptionUtility::NewNonConsumablePropDescL()
+    {
+    PRINT( _L( "MM MTP => CDescriptionUtility::NewNonConsumablePropDescL" ) );
+    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 ); // + expectedForm
+    TUint8 values[] =
+        {
+        EMTPConsumable,
+        EMTPNonConsumable
+        };
+
+    TInt numValues = sizeof ( values ) / sizeof ( values[0] );
+    for ( TInt i = 0; i < numValues; i++ )
+        {
+        TMTPTypeUint8 data( values[i] );
+        expectedForm->AppendSupportedValueL( data );
+        }
+
+    CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNonConsumable,
+        CMTPTypeObjectPropDesc::EEnumerationForm,
+        expectedForm );
+    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+    PRINT( _L( "MM MTP <= CDescriptionUtility::NewNonConsumablePropDescL" ) );
+    return ret;
+    }
+
+// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetformatcapabilities.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetformatcapabilities.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -11,23 +11,35 @@
 *
 * Contributors:
 *
-* Description:  
+* Description:
 *
 */
 
 #include <mtp/cmtptypeinterdependentpropdesc.h>
 #include <mtp/cmtptypeobjectpropdesc.h>
-#include <mtp/mtpprotocolconstants.h>
-#include <mtp/mmtpdataproviderframework.h>
-#include <mtp/cmtptypestring.h>
-
 
 #include "cgetformatcapabilities.h"
-#include "mmmtpdplogger.h"
+#include "cdescriptionutility.h"
 #include "mmmtpdpconfig.h"
-#include "tobjectdescription.h"
+#include "mmmtpdplogger.h"
 
-_LIT( KMtpObjDescObjFileName, "[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 7}\\.[[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 2}]?" );
+// -----------------------------------------------------------------------------
+// CGetFormatCapabilities::NewL
+// Constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MMmRequestProcessor* CGetFormatCapabilities::NewL( MMTPDataProviderFramework& aFramework,
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig )
+    {
+    CGetFormatCapabilities* self = new ( ELeave ) CGetFormatCapabilities( aFramework, aConnection, aDpConfig );
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
 
 // -----------------------------------------------------------------------------
 // CGetFormatCapabilities::CGetFormatCapabilities
@@ -35,26 +47,27 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CGetFormatCapabilities::CGetFormatCapabilities( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig ) :
-    CRequestProcessor( aFramework, aConnection, 0, NULL ),
-    iDpConfig( aDpConfig )
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig ) :
+        CRequestProcessor( aFramework, aConnection, 0, NULL ),
+        iDpConfig( aDpConfig )
     {
     PRINT( _L( "Operation: CGetFormatCapabilities(0x930A)" ) );
     }
 
 // -----------------------------------------------------------------------------
 // CGetFormatCapabilities::ConstructL
-// Second phase constructor
+// The second phase constructor
 // -----------------------------------------------------------------------------
 //
 EXPORT_C void CGetFormatCapabilities::ConstructL()
     {
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
 // CGetFormatCapabilities::~CGetFormatCapabilities
-// Second phase constructor
+// Destructor
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CGetFormatCapabilities::~CGetFormatCapabilities()
@@ -91,7 +104,7 @@
             }
         }
 
-    PRINT1( _L( "MM MTP <= CGetFormatCapabilities::CheckRequestL, response = 0x%X" ), response );
+    PRINT1( _L( "MM MTP <= CGetFormatCapabilities::CheckRequestL, response = 0x%x" ), response );
     return response;
     }
 
@@ -108,7 +121,6 @@
     iCapabilityList = NULL;
 
     iCapabilityList = CMTPTypeFormatCapabilityList::NewL();
-    iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
 
     if ( KMTPFormatsAll == iFormatCode )
         {
@@ -117,102 +129,55 @@
         for( TInt i = 0; i < count; i++ )
             {
             PRINT( _L( "MM MTP <> CGetFormatCapabilities::ServiceL, KMTPFormatsAll!!!" ) );
+
             iFormatCode = ( *formatArray )[i];
-            ServiceInterdepentPropDescL();
-            CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( iFormatCode, iInterdependentPropDesc );
-            const RArray<TUint>* propertiesArray = iDpConfig.GetSupportedPropertiesL( iFormatCode );
-            TInt num = propertiesArray->Count();
-            for( TInt j = 0;j < num; j++ )
-                {
-                CMTPTypeObjectPropDesc* propertyDesc = ServicePropDescL( (*propertiesArray)[j] );
-                if ( propertyDesc != NULL )
-                    {
-                    frmCap->AppendL( propertyDesc );
-                    }
-                }//end for j
-            iCapabilityList->AppendL( frmCap );
-            }//end for i
-        }//end if
+            ServiceOneFormatCapabilitiesL( iFormatCode );
+            }
+        }
     else
-        {
-        ServiceInterdepentPropDescL();
-        PRINT1( _L( "MM MTP <> CGetFormatCapabilities::ServiceL, ONLY one Format!!! formatCode = 0x%X" ), iFormatCode );
-
-        CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( iFormatCode, iInterdependentPropDesc );
-        const RArray<TUint>* propertiesArray = iDpConfig.GetSupportedPropertiesL( iFormatCode );
-        TInt num = propertiesArray->Count();
-        for( TInt j = 0;j < num; j++ )
-            {
-            CMTPTypeObjectPropDesc* propertyDesc = ServicePropDescL( ( *propertiesArray )[j] );
-            if ( propertyDesc != NULL )
-                {
-                frmCap->AppendL( propertyDesc );
-                }
-            }//end for j
-        iCapabilityList->AppendL( frmCap );
-        }
+        ServiceOneFormatCapabilitiesL( iFormatCode );
 
     SendDataL( *iCapabilityList );
     PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceL" ) );
     }
 
+void CGetFormatCapabilities::ServiceOneFormatCapabilitiesL( TUint aFormatCode )
+    {
+    CMTPTypeInterdependentPropDesc* interdependentPropDesc = iDpConfig.DescriptionUtility()->NewInterdepentPropDescL( iDpConfig, aFormatCode );
+    CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( aFormatCode, interdependentPropDesc );
+
+    const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( aFormatCode );
+    TInt num = properties->Count();
+    for ( TInt i = 0; i < num; i++ )
+        {
+        CMTPTypeObjectPropDesc* propertyDesc = ServiceOnePropDescL( ( *properties )[i] );
+        if ( propertyDesc != NULL )
+            {
+            frmCap->AppendL( propertyDesc );
+            }
+        }
+    iCapabilityList->AppendL( frmCap );
+    }
+
 // -----------------------------------------------------------------------------
 // CGetFormatCapabilities::ServicePropDescL
 // Get MTPTypeObjectPropDesc according to property code
 // -----------------------------------------------------------------------------
 //
-CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServicePropDescL( TUint16 aPropCode )
+CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceOnePropDescL( TUint16 aPropCode )
     {
-    PRINT1( _L( "MM MTP => CGetFormatCapabilities::ServicePropDescL, aPropCode = 0x%X" ), aPropCode );
-    // implement just like what we did in CGetpropertyDescc::ServiceL
-    CMTPTypeObjectPropDesc* propertyDesc;
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-
-    /* Create new PropDesc object to return to device
-     m - signals only limited supported values - hence these requests require the expected form
-     variable to be passed into the NewL contstuctor as well */
-    switch( aPropCode )
-        {
-        case EMTPObjectPropCodeStorageID: // Storage ID
-        case EMTPObjectPropCodeObjectFormat: // Format Code
-        case EMTPObjectPropCodeObjectSize: // Object Size
-        case EMTPObjectPropCodeParentObject: // Parent Object
-        case EMTPObjectPropCodePersistentUniqueObjectIdentifier: // Unique Object Identifier
-        case EMTPObjectPropCodeName: // Name
-        case EMTPObjectPropCodeDateAdded: // Date Added
-            propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode );
-            break;
+    PRINT1( _L( "MM MTP => CGetFormatCapabilities::ServicePropDescL, aPropCode = 0x%x" ), aPropCode );
 
-            // Protection Status (m)
-        case EMTPObjectPropCodeProtectionStatus:
-            propertyDesc = ServiceProtectionStatusL();
-            break;
-
-            // FileName
-        case EMTPObjectPropCodeObjectFileName:
-            propertyDesc = ServiceFileNameL();
-            break;
+    // implement just like what we did in CGetpropertyDescc::ServiceL
+    CMTPTypeObjectPropDesc* propertyDesc =
+        iDpConfig.DescriptionUtility()->NewCommonObjectPropertyL( aPropCode );
 
-            // Consumable (m)
-        case EMTPObjectPropCodeNonConsumable:
-            propertyDesc = ServiceNonConsumableL();
-            break;
+    if ( propertyDesc == NULL )
+        propertyDesc = iDpConfig.DescriptionUtility()->NewSpecificPropDescL( iFormatCode, aPropCode );
 
-        case EMTPObjectPropCodeDateModified: // Date Modified
-        case EMTPObjectPropCodeDateCreated: // Date Created
-            propertyInfo.iDataType     = EMTPTypeString;
-            propertyInfo.iFormFlag     = CMTPTypeObjectPropDesc::EDateTimeForm;
-            propertyInfo.iGetSet       = CMTPTypeObjectPropDesc::EReadOnly;
-            propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode, propertyInfo, NULL);
-            break;
-
-        default:
-            propertyDesc = ServiceSpecificPropertyDescL( aPropCode );
-            break;
-        }
     if ( propertyDesc != NULL )
         {
-        TUint32 groupCode = GetGroupCode( aPropCode );
+        TUint32 groupCode = iDpConfig.DescriptionUtility()->GetGroupCode( aPropCode );
         propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, groupCode );
         }
 
@@ -221,108 +186,4 @@
     return propertyDesc;
     }
 
-// -----------------------------------------------------------------------------
-// CGetFormatCapabilities::GetGroupCode
-// Get MTPTypeObjectPropDesc according to property code
-// -----------------------------------------------------------------------------
-//
-TUint32 CGetFormatCapabilities::GetGroupCode( TUint32 aPropCode )
-    {
-    TInt count = sizeof( KPropGroupMapTable );
-    // TODO: if need to refine the search approach to improve performance
-    for( TInt i = 0; i < count; i++ )
-        {
-        if ( aPropCode == KPropGroupMapTable[i].iPropCode )
-            return KPropGroupMapTable[i].iGroupCode;
-        }
-    return EGroupCodeNotDefined;
-    }
-
-// -----------------------------------------------------------------------------
-// CGetFormatCapabilities::ServiceProtectionStatusL
-// Get MTPTypeObjectPropDesc protection status
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceProtectionStatusL()
-    {
-    PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceProtectionStatusL" ) );
-
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPProtectionNoProtection,
-        EMTPProtectionReadOnly
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc* propertyDesc  = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeProtectionStatus, *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceProtectionStatusL" ) );
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CGetFormatCapabilities::ServiceFileNameL
-// Get MTPTypeObjectPropDesc service file name
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceFileNameL()
-    {
-    PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceFileNameL" ) );
-    CMTPTypeString* form = CMTPTypeString::NewLC( KMtpObjDescObjFileName ); // + form
-
-    CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeObjectFileName,
-        CMTPTypeObjectPropDesc::ERegularExpressionForm,
-        form );
-
-    CleanupStack::PopAndDestroy( form ); // - form
-    PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceFileNameL" ) );
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CGetFormatCapabilities::ServiceFileNameL
-// Get MTPTypeObjectPropDesc service file name
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceNonConsumableL()
-    {
-    PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceNonConsumableL" ) );
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 ); // + expectedForm
-    TUint8 values[] =
-        {
-        EMTPConsumable,
-        EMTPNonConsumable
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] );
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint8 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeUINT8;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-    propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly;
-    CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNonConsumable,
-        propertyInfo,
-        expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceNonConsumableL" ) );
-    return ret;
-    }
-
 // end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetinterdependentpropdesc.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implement the operation: GetInterdenpendentPropDesc
+*
+*/
+
+#include <mtp/cmtptypeinterdependentpropdesc.h>
+
+#include "cgetinterdependentpropdesc.h"
+#include "mmmtpdplogger.h"
+#include "mmmtpdpconfig.h"
+#include "cdescriptionutility.h"
+
+// -----------------------------------------------------------------------------
+// CGetInterdependentPropDesc::NewL
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MMmRequestProcessor* CGetInterdependentPropDesc::NewL( MMTPDataProviderFramework& aFramework,
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig )
+    {
+    CGetInterdependentPropDesc* self = new ( ELeave ) CGetInterdependentPropDesc( aFramework, aConnection, aDpConfig );
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CGetInterdependentPropDesc::~CGetInterdependentPropDesc
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGetInterdependentPropDesc::~CGetInterdependentPropDesc()
+    {
+    delete iDataset;
+    iDataset = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CMTPGetInterDependentPropDesc::CMTPGetInterDependentPropDesc
+// Standard c++ constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGetInterdependentPropDesc::CGetInterdependentPropDesc( MMTPDataProviderFramework& aFramework,
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig ) :
+        CRequestProcessor( aFramework, aConnection, 0, NULL ),
+        iDpConfig( aDpConfig )
+    {
+    PRINT( _L( "Operation: GetInterdependentPropDesc(0x9807)" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaDpMtpGetInterDependentPropDesc::ConstructL
+// Two-phase construction method
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGetInterdependentPropDesc::ConstructL()
+    {
+    // Do nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CGetInterdependentPropDesc::CheckRequestL
+// Verify the reqeust and returns it
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TMTPResponseCode CGetInterdependentPropDesc::CheckRequestL()
+    {
+    PRINT( _L( "MM MTP => CGetInterdependentPropDesc::CheckRequestL" ) );
+
+    TMTPResponseCode responseCode = CRequestProcessor::CheckRequestL();
+    iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
+
+    // check if it is what dp supported
+    responseCode = EMTPRespCodeInvalidObjectFormatCode;
+
+    const RArray<TUint>* format = iDpConfig.GetSupportedFormat();
+    TInt count = format->Count();
+
+    for ( TInt i = 0; i < count; i++ )
+        {
+        if ( iFormatCode == ( *format )[i] )
+            {
+            responseCode = EMTPRespCodeOK;
+            break;
+            }
+        }
+
+    // Clear the data set.
+    delete iDataset;
+    iDataset = NULL;
+
+    PRINT2( _L( "MM MTP <= CGetInterdependentPropDesc::CheckRequestL, iFormatCode = 0x%x, responseCode = 0x%x" ),
+        iFormatCode,
+        responseCode );
+
+    return responseCode;
+    }
+
+// -----------------------------------------------------------------------------
+// CGetInterdependentPropDesc::ServiceL
+// service a request at request phase
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGetInterdependentPropDesc::ServiceL()
+    {
+    PRINT( _L( "MM MTP => CGetInterdependentPropDesc::ServiceL" ) );
+
+    iDataset = iDpConfig.DescriptionUtility()->NewInterdepentPropDescL( iDpConfig, iFormatCode );
+
+    // Send the dataset.
+    SendDataL( *iDataset );
+    PRINT( _L( "MM MTP <= CGetInterdependentPropDesc::ServiceL" ) );
+    }
+
+// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -84,12 +84,12 @@
 //
 CGetObject::CGetObject( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection ) :
-    CRequestProcessor( aFramework,
-        aConnection,
-        sizeof( KMTPGetObjectPolicy ) / sizeof( TMTPRequestElementInfo ),
-        KMTPGetObjectPolicy ),
-    iFs( iFramework.Fs() ),
-    iError( EMTPRespCodeOK )
+        CRequestProcessor( aFramework,
+            aConnection,
+            sizeof( KMTPGetObjectPolicy ) / sizeof( TMTPRequestElementInfo ),
+            KMTPGetObjectPolicy ),
+        iFs( iFramework.Fs() ),
+        iError( EMTPRespCodeOK )
     {
     PRINT( _L( "Operation: GetObject(0x1009)" ) );
     }
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropdesc.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropdesc.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -11,22 +11,35 @@
 *
 * Contributors:
 *
-* Description:  Implement operation: GetObjectPropDesc
+* Description: Request processor which handle common property description
 *
 */
 
-
 #include <mtp/cmtptypeobjectpropdesc.h>
-#include <mtp/cmtptypestring.h>
 
 #include "cgetobjectpropdesc.h"
+#include "cdescriptionutility.h"
+#include "mmmtpdpconfig.h"
 #include "tmmmtpdppanic.h"
 #include "mmmtpdplogger.h"
-#include "tobjectdescription.h"
-#include "mmmtpdpconfig.h"
 
-_LIT( KMtpObjDescObjFileName, "[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 7}\\.[[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 2}]?" );
-// RegEx is [a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~][a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~ ]{0, 7}\.[[a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~][a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~ ]{0, 2}]?
+// -----------------------------------------------------------------------------
+// CGetObjectPropDesc::NewL
+// Constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MMmRequestProcessor* CGetObjectPropDesc::NewL( MMTPDataProviderFramework& aFramework,
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig )
+    {
+    CGetObjectPropDesc* self = new ( ELeave ) CGetObjectPropDesc( aFramework, aConnection, aDpConfig );
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropDesc::~CGetObjectPropDesc
@@ -35,7 +48,8 @@
 //
 EXPORT_C CGetObjectPropDesc::~CGetObjectPropDesc()
     {
-    delete iObjectProperty;
+    delete iPropertyDesc;
+    iPropertyDesc = NULL;
     }
 
 // -----------------------------------------------------------------------------
@@ -46,21 +60,21 @@
 EXPORT_C CGetObjectPropDesc::CGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
-    CRequestProcessor( aFramework, aConnection, 0, NULL ),
-    iObjectProperty( NULL ),
-    iDpConfig( aDpConfig )
+        CRequestProcessor( aFramework, aConnection, 0, NULL ),
+        iDpConfig( aDpConfig ),
+        iPropertyDesc( NULL )
     {
     PRINT( _L( "Operation: GetObjectPropDesc(0x9802)" ) );
     }
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropDesc::ConstructL
-// Second phase constructor
+// The second phase constructor
 // -----------------------------------------------------------------------------
 //
 EXPORT_C void CGetObjectPropDesc::ConstructL()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -72,6 +86,12 @@
     {
     TMTPResponseCode response = CRequestProcessor::CheckRequestL();
 
+    iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
+    iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
+    PRINT2( _L( "MM MTP <> CGetObjectPropDesc::CheckPropCode, propCode = 0x%x, iFormatCode = 0x%x" ),
+        iPropCode,
+        iFormatCode );
+
     if ( response == EMTPRespCodeOK )
         {
         response = CheckFormatL();
@@ -87,203 +107,22 @@
     }
 
 // -----------------------------------------------------------------------------
-// CGetObjectPropDesc::ServiceL
-// GetObjectPropDesc request handler
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CGetObjectPropDesc::ServiceL()
-    {
-    PRINT( _L( "MM MTP => CGetObjectPropDesc::ServiceL" ) );
-    delete iObjectProperty;
-    iObjectProperty = NULL;
-
-    TUint32 propCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
-    iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
-    PRINT2( _L( "MM MTP <> CGetObjectPropDesc::ServiceL propCode = 0x%x, iFormatCode = 0x%x" ),
-            propCode,
-            iFormatCode );
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-
-    /* Create new PropDesc object to return to device
-     m - signals only limited supported values - hence these requests require the expected form
-     variable to be passed into the NewL contstuctor as well */
-    switch ( propCode )
-        {
-        case EMTPObjectPropCodeStorageID: // Storage ID
-        case EMTPObjectPropCodeObjectFormat: // Format Code
-        case EMTPObjectPropCodeObjectSize: // Object Size
-        case EMTPObjectPropCodeParentObject: // Parent Object
-        case EMTPObjectPropCodePersistentUniqueObjectIdentifier: // Unique Object Identifier
-        case EMTPObjectPropCodeName: // Name
-        case EMTPObjectPropCodeDateAdded: // Date Added
-            iObjectProperty = CMTPTypeObjectPropDesc::NewL( propCode );
-            break;
-
-            // Protection Status (m)
-        case EMTPObjectPropCodeProtectionStatus:
-            ServiceProtectionStatusL();
-            break;
-
-            // FileName
-        case EMTPObjectPropCodeObjectFileName:
-            ServiceFileNameL();
-            break;
-
-            // Consumable (m)
-        case EMTPObjectPropCodeNonConsumable:
-            ServiceNonConsumableL();
-            break;
-
-        case EMTPObjectPropCodeDateModified: // Date Modified
-        case EMTPObjectPropCodeDateCreated: // Date Created
-            propertyInfo.iDataType     = EMTPTypeString;
-            propertyInfo.iFormFlag     = CMTPTypeObjectPropDesc::EDateTimeForm;
-            propertyInfo.iGetSet       = CMTPTypeObjectPropDesc::EReadOnly;
-            iObjectProperty = CMTPTypeObjectPropDesc::NewL( propCode, propertyInfo, NULL);
-            break;
-
-            // Error - Should be caught by CheckRequestL
-        default:
-            ServiceSpecificObjectPropertyL( propCode );
-            break;
-        }
-
-    // Set group code
-    TUint32 groupCode = GetGroupCode( propCode );
-    PRINT1( _L("MM MTP <> CGetObjectPropDesc::ServiceL, groupCode = 0x%x"), groupCode );
-    iObjectProperty->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, groupCode );
-
-    __ASSERT_DEBUG( iObjectProperty, Panic( EMmMTPDpObjectPropertyNull ) );
-
-    SendDataL( *iObjectProperty );
-
-    PRINT( _L( "MM MTP <= CGetObjectPropDesc::ServiceL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CGetObjectPropDesc::ServiceProtectionStatusL
-// Create list of possible protection status and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CGetObjectPropDesc::ServiceProtectionStatusL()
-    {
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
-    CleanupStack::PushL( expectedForm ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPProtectionNoProtection,
-        EMTPProtectionReadOnly
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way :)
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeProtectionStatus, *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-    }
-
-// -----------------------------------------------------------------------------
-// CGetObjectPropDesc::ServiceFileNameL()
-// Create Regular expression for a file name and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CGetObjectPropDesc::ServiceFileNameL()
-    {
-    CMTPTypeString* form = CMTPTypeString::NewLC( KMtpObjDescObjFileName ); // + form
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeObjectFileName,
-        CMTPTypeObjectPropDesc::ERegularExpressionForm,
-        form );
-
-    CleanupStack::PopAndDestroy( form ); // - form
-    }
-
-// -----------------------------------------------------------------------------
-// CGetObjectPropDesc::ServiceNonConsumableL
-// Create list of possible nonConsumable values and create new ObjectPropDesc
-// -----------------------------------------------------------------------------
-//
-void CGetObjectPropDesc::ServiceNonConsumableL()
-    {
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT8 );
-    CleanupStack::PushL( expectedForm ); // + expectedForm
-    TUint8 values[] =
-        {
-        EMTPConsumable,
-        EMTPNonConsumable
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] );
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint8 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    // Althrough iObjectProperty is released in ServiceL(),
-    // release it here maybe a more safer way :)
-    if ( iObjectProperty != NULL )
-        {
-        delete iObjectProperty;
-        iObjectProperty = NULL;
-        }
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeUINT8;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-    propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly;
-    iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNonConsumable,
-        propertyInfo,
-        expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-    }
-
-// -----------------------------------------------------------------------------
 // CGetObjectPropList::CheckFormatL
-// Ensures the object format operation parameter is valid
+// Ensure the object format operation parameter is valid
 // -----------------------------------------------------------------------------
 //
 TMTPResponseCode CGetObjectPropDesc::CheckFormatL() const
     {
-    TMTPResponseCode response = EMTPRespCodeOK;
-
-    TUint32 formatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
-    PRINT1( _L( "MM MTP <> CGetObjectPropDesc::CheckFormatL formatCode = 0x%x" ), formatCode );
+    TMTPResponseCode response = EMTPRespCodeInvalidObjectFormatCode;
 
-    if( formatCode != 0)
+    if( iFormatCode != KMTPFormatsAll )
         {
-        response = EMTPRespCodeInvalidObjectFormatCode;
-
         const RArray<TUint>* format = iDpConfig.GetSupportedFormat();
         TInt count = format->Count();
 
         for ( TInt i = 0; i < count; i++ )
             {
-            if ( formatCode == (*format)[i] )
+            if ( iFormatCode == (*format)[i] )
                 {
                 response = EMTPRespCodeOK;
                 break;
@@ -296,60 +135,59 @@
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropDesc::CheckPropCodeL
-// Ensures the object prop code operation parameter is valid
+// Ensure the object prop code operation parameter is valid
 // -----------------------------------------------------------------------------
 //
 TMTPResponseCode CGetObjectPropDesc::CheckPropCodeL() const
     {
-    TMTPResponseCode response = EMTPRespCodeOK;
+    TMTPResponseCode response = EMTPRespCodeInvalidObjectPropCode;
 
-    TUint32 propCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
-    PRINT1( _L( "MM MTP <> CGetObjectPropDesc::CheckPropCode, propCode = 0x%x" ), propCode );
-
-    if ( propCode == 0 )
+    if ( iPropCode != KMTPNotSpecified32 && iPropCode != KMTPObjectPropCodeAll )
         {
-        // A propCode of 0 means specification by group (which is not supported)
-        response = EMTPRespCodeSpecificationByGroupUnsupported;
-        }
-    else
-        {
-        TUint32 formatCode  = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
-
-        const RArray<TUint>* properties = NULL;
-        if ( formatCode == KMTPFormatsAll )
-            properties= iDpConfig.GetAllSupportedProperties();
-        else
-            properties = iDpConfig.GetSupportedPropertiesL( formatCode );
+        const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( iFormatCode );
 
         const TInt count = properties->Count();
-        TInt i = 0;
-        for( i = 0; i < count; i++ )
+        for( TInt i = 0; i < count; i++ )
             {
-            if ( (*properties)[i] == propCode )
+            if ( (*properties)[i] == iPropCode )
                 {
+                response = EMTPRespCodeOK;
                 break;
                 }
             }
-
-        if ( i == count )
-            {
-            response = EMTPRespCodeInvalidObjectPropCode;
-            }
         }
 
     return response;
     }
 
-TUint32 CGetObjectPropDesc::GetGroupCode( TUint16 aPropCode )
+// -----------------------------------------------------------------------------
+// CGetObjectPropDesc::ServiceL
+// GetObjectPropDesc request handler
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGetObjectPropDesc::ServiceL()
     {
-    TInt count = sizeof( KPropGroupMapTable );
-    // TODO: if need to refine the search approach to improve performance
-    for( TInt i = 0; i < count; i++ )
-        {
-        if ( aPropCode == KPropGroupMapTable[i].iPropCode )
-            return KPropGroupMapTable[i].iGroupCode;
-        }
-    return EGroupCodeNotDefined;
+    PRINT( _L( "MM MTP => CGetObjectPropDesc::ServiceL" ) );
+
+    delete iPropertyDesc;
+    iPropertyDesc = NULL;
+
+    iPropertyDesc = iDpConfig.DescriptionUtility()->NewCommonObjectPropertyL( iPropCode );
+
+    // if iPropertyDesc == NULL, iPropCode is not common property but dp specific one.
+    if( iPropertyDesc == NULL )
+        iPropertyDesc = iDpConfig.DescriptionUtility()->NewSpecificPropDescL( iFormatCode, iPropCode );
+
+    __ASSERT_DEBUG( iPropertyDesc, Panic( EMmMTPDpObjectPropertyNull ) );
+
+    // Set group code
+    TUint32 groupCode = iDpConfig.DescriptionUtility()->GetGroupCode( iPropCode );
+    PRINT1( _L("MM MTP <> CGetObjectPropDesc::ServiceL, groupCode = 0x%x"), groupCode );
+    iPropertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, groupCode );
+
+    SendDataL( *iPropertyDesc );
+
+    PRINT( _L( "MM MTP <= CGetObjectPropDesc::ServiceL" ) );
     }
 
 // end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -82,13 +82,13 @@
 EXPORT_C CGetObjectPropList::CGetObjectPropList( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
-    CRequestProcessor( aFramework,
-        aConnection,
-        sizeof ( KMTPGetObjectPropListPolicy ) / sizeof( TMTPRequestElementInfo ),
-        KMTPGetObjectPropListPolicy ),
-    iHandles ( KMmMtpRArrayGranularity ),
-    iDpConfig( aDpConfig ),
-    iPropertyArray( KMmMtpRArrayGranularity )
+        CRequestProcessor( aFramework,
+            aConnection,
+            sizeof ( KMTPGetObjectPropListPolicy ) / sizeof( TMTPRequestElementInfo ),
+            KMTPGetObjectPropListPolicy ),
+        iHandles ( KMmMtpRArrayGranularity ),
+        iDpConfig( aDpConfig ),
+        iPropertyArray( KMmMtpRArrayGranularity )
     {
     PRINT( _L( "Operation: GetObjectPropList(0x9805)" ) );
     }
@@ -144,7 +144,7 @@
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropList::ServiceL
-// service a request at request phase
+// GetObjectPropList request handler
 // -----------------------------------------------------------------------------
 //
 EXPORT_C void CGetObjectPropList::ServiceL()
@@ -167,7 +167,7 @@
         TInt err = KErrNone;
         for ( TInt i = 0; i < numOfObjects; i++ )
             {
-            TUint32 handle = iHandles[i ];
+            TUint32 handle = iHandles[i];
 
             if ( iFramework.ObjectMgr().ObjectOwnerId( handle )
                 == iFramework.DataProviderId() )
@@ -187,9 +187,14 @@
                 }
             }
         PRINT1( _L( "MM MTP <> CGetObjectPropList::ServiceL, one property was queried, Send data to PC! err = %d" ), err );
-        if ( err == KErrNone  || err == KErrNotSupported )
+        if ( err == KErrNone
+            || ( err == KErrNotSupported && 0 < iPropertyList->NumberOfElements() ) )
+            // Make sure the dataset which is returned to pc is valid
             SendDataL( *iPropertyList );
-        else if ( err == KErrNotFound )
+        else if ( err == KErrNotFound || err == KErrNotSupported )
+            // The object entry is not in db
+            // or the ONLY required metadata is not in db.
+            // The second case is the same with GetObjectPropValue and device has nothing to return.
             SendResponseL( EMTPRespCodeAccessDenied );
         else
             SendResponseL( EMTPRespCodeGeneralError );
@@ -200,7 +205,7 @@
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropList::CheckFormatL
-// Ensures the object format operation parameter is valid
+// Ensure the object format operation parameter is valid
 // -----------------------------------------------------------------------------
 //
 TMTPResponseCode CGetObjectPropList::CheckFormatL() const
@@ -223,7 +228,7 @@
 
         for ( TInt i = 0; i < count; i++ )
             {
-            if ( formatCode == (*format)[i ] )
+            if ( formatCode == (*format)[i] )
                 {
                 response = EMTPRespCodeOK;
                 break;
@@ -238,7 +243,7 @@
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropList::CheckPropCodeL
-// Ensures the object prop code operation parameter is valid
+// Ensure the object prop code operation parameter is valid
 // -----------------------------------------------------------------------------
 //
 TMTPResponseCode CGetObjectPropList::CheckPropCodeL() const
@@ -259,8 +264,7 @@
         PRINT1( _L( "MM MTP <> CGetObjectPropList::CheckPropCode, Group Code = 0x%x" ), groupCode );
 
         // check if groupCode is supported
-        TInt count = sizeof ( KSupportedGroupCode )
-            / sizeof ( KSupportedGroupCode[0] );
+        TInt count = sizeof ( KSupportedGroupCode ) / sizeof ( KSupportedGroupCode[0] );
         TInt i = 0;
         for ( ; i < count; i++ )
             {
@@ -275,15 +279,12 @@
         {
         PRINT1( _L( "MM MTP <> CGetObjectPropList::CheckPropCode, Property(0x%x) was queried." ), iPropCode );
 
-        TInt err = KErrNone;
         const RArray<TUint>* properties = NULL;
         if ( formatCode == KMTPFormatsAll )
             properties = iDpConfig.GetAllSupportedProperties();
         else
             properties = iDpConfig.GetSupportedPropertiesL( formatCode );
 
-        User::LeaveIfError( err );
-
         const TInt count = properties->Count();
         TInt i = 0;
         for ( i = 0; i < count; i++ )
@@ -312,7 +313,7 @@
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropList::CheckDepth
-// Ensures the depth operation parameter is valid
+// Ensure the depth operation parameter is valid
 // -----------------------------------------------------------------------------
 //
 TMTPResponseCode CGetObjectPropList::CheckDepth() const
@@ -341,7 +342,7 @@
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropList::GetObjectHandlesL
-// Gets the handles for the objects that we want the properties for
+// Get the handles for the objects that we want the properties for
 // -----------------------------------------------------------------------------
 //
 void CGetObjectPropList::GetObjectHandlesL()
@@ -383,7 +384,7 @@
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropList::GetObjectHandlesL
-// Gets all object handles (for GetObjectHandlesL)
+// Get all object handles (for GetObjectHandlesL)
 // -----------------------------------------------------------------------------
 //
 void CGetObjectPropList::GetObjectHandlesL( TUint32 aStorageId,
@@ -512,20 +513,34 @@
     const TInt count = properties->Count();
 
     TInt err = KErrNone;
+    TBool successQuery = EFalse;
     for ( TInt i = 0; i < count; i++ )
         {
-        // no need to do the trap anymore, this is being handle internally in Media DP's ServiceSpecificObjectPropertyL, also, this base class should not know too much of different handling between different formats
+        // no need to do the trap anymore, this is being handle internally in Media DP's ServiceSpecificObjectPropertyL,
+        // also, this base class should not know too much of different handling between different formats
         err = ServiceOneObjectPropertyL( aHandle, (*properties)[i] );
-        if ( err == KErrNotSupported )  // Skip
+        if ( err == KErrNone )
+            successQuery = ETrue;
+        if ( err == KErrNotSupported || err == KErrNotFound )  // Skip
             err = KErrNone;
         if ( err != KErrNone )
             break;
         }
 
+    // In PC Suite combined mode, a file that was found at the beginning could be deleted by PC Suite protocol
+    // Need to fail it here.
+    if ( successQuery == EFalse )
+        err = KErrNotFound;
+
     PRINT1( _L( "MM MTP <= CGetObjectPropList::ServiceAllPropertiesL err = %d" ), err );
     return err;
     }
 
+// -----------------------------------------------------------------------------
+// CGetObjectPropList::ServiceGroupPropertiesL
+// Get the grouped object properties for specific object
+// -----------------------------------------------------------------------------
+//
 TInt CGetObjectPropList::ServiceGroupPropertiesL( TUint32 aHandle )
     {
     PRINT1( _L( "MM MTP => CGetObjectPropList::ServiceGroupPropertiesL aHandle = 0x%x" ), aHandle );
@@ -545,15 +560,23 @@
     const TInt count = iPropertyArray.Count();
 
     TInt err = KErrNone;
+    TBool successQuery = EFalse;
     for ( TInt i = 0; i < count; i++ )
         {
         err = ServiceOneObjectPropertyL( aHandle, iPropertyArray[i] );
-        if ( err == KErrNotSupported )  // Skip
+        if ( err == KErrNone )
+            successQuery = ETrue;
+        if ( err == KErrNotSupported || err == KErrNotFound )  // Skip
             err = KErrNone;
         if ( err != KErrNone )
             break;
         }
 
+    // In PC Suite combined mode, a file that was found at the beginning could be deleted by PC Suite protocol
+    // Need to fail it here.
+    if ( successQuery == EFalse )
+        err = KErrNotFound;
+
     PRINT1( _L( "MM MTP <= CGetObjectPropList::ServiceGroupPropertiesL err = %d" ), err );
 
     return err;
@@ -561,7 +584,7 @@
 
 // -----------------------------------------------------------------------------
 // CGetObjectPropList::ServiceOneObjectPropertyL
-//  Gets the object property information for the required object
+//  Get the object property information for the required object
 // -----------------------------------------------------------------------------
 //
 TInt CGetObjectPropList::ServiceOneObjectPropertyL( TUint32 aHandle,
@@ -585,8 +608,8 @@
         case EMTPObjectPropCodeStorageID:
             {
             TMTPTypeUint32 storageId( iObject->Uint( CMTPObjectMetaData::EStorageId ) );
-            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetUint32L(CMTPTypeObjectPropListElement::EValue, storageId.Value());
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, storageId.Value() );
             }
             break;
 
@@ -594,8 +617,8 @@
         case EMTPObjectPropCodeObjectFormat:
             {
             TMTPTypeUint16 objectFormat( iObject->Uint( CMTPObjectMetaData::EFormatCode ) );
-            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetUint16L(CMTPTypeObjectPropListElement::EValue, objectFormat.Value());
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, objectFormat.Value() );
             }
             break;
 
@@ -604,8 +627,8 @@
             {
             TMTPTypeUint16 protectionStatus( MmMtpDpUtility::GetProtectionStatusL( iFramework.Fs(),
                 iObject->DesC( CMTPObjectMetaData::ESuid ) ) );
-            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetUint16L(CMTPTypeObjectPropListElement::EValue,  protectionStatus.Value());
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue,  protectionStatus.Value() );
             }
             break;
 
@@ -630,8 +653,8 @@
 #endif // _DEBUG
             TParsePtrC parse( iObject->DesC( CMTPObjectMetaData::ESuid ) );
             textData = CMTPTypeString::NewLC( parse.NameAndExt() );    // + textData
-            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, textData->StringChars());
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode) );
+            iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars() );
             CleanupStack::PopAndDestroy( textData );    // - textData
             }
             break;
@@ -639,8 +662,8 @@
         // Parent Object
         case EMTPObjectPropCodeParentObject:
             {
-            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetUint32L(CMTPTypeObjectPropListElement::EValue, iObject->Uint( CMTPObjectMetaData::EParentHandle ));
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, iObject->Uint( CMTPObjectMetaData::EParentHandle ) );
             }
             break;
 
@@ -648,8 +671,8 @@
         case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
             {
             TMTPTypeUint128 puid = iFramework.ObjectMgr().PuidL( aHandle );
-            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetUint128L(CMTPTypeObjectPropListElement::EValue,puid.UpperValue(), puid.LowerValue() );
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint128L( CMTPTypeObjectPropListElement::EValue,puid.UpperValue(), puid.LowerValue() );
             }
             break;
 
@@ -671,13 +694,16 @@
                 if ( err == KErrNone )
                     {
                     iPropertyElement = &(iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
-                    iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, textData->StringChars());
+                    iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars() );
                     }
 
                 CleanupStack::PopAndDestroy( textData );  // - textData
+                break;
                 }
+            // Else, video DB does not support DateAdded field, use the file system date!
+            // It's the same behavior with DateCreated and DateModified.
+            // Fall through intentional.
             }
-            break;
 
         case EMTPObjectPropCodeDateCreated:
         case EMTPObjectPropCodeDateModified:
@@ -701,12 +727,15 @@
         case EMTPObjectPropCodeNonConsumable:
             {
             iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
-            iPropertyElement->SetUint8L(CMTPTypeObjectPropListElement::EValue,0);
+            iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue,
+                iObject->Uint( CMTPObjectMetaData::ENonConsumable ) );
             }
             break;
 
         default:
             {
+            // "err == KErrNotFound" means the object entry does not exist in DB,
+            // "err == KErrNotSupported" means the entry is there but this metadata not.
             err = ServiceSpecificObjectPropertyL( aPropCode, aHandle );
             }
             break;
@@ -773,7 +802,8 @@
         }
     else // all handles processed, can send data
         {
-        PRINT( _L( "MM MTP <> CGetObjectPropList::RunL, Finished, Send data to PC!" ) );
+        PRINT1( _L( "MM MTP <> CGetObjectPropList::RunL, Finished, Send data to PC!, iPropertyList->NumberOfElements() = %d" ),
+            iPropertyList->NumberOfElements() );
         SendDataL( *iPropertyList );
         }
     }
@@ -798,8 +828,6 @@
 //
 EXPORT_C void CGetObjectPropList::DoCancel()
     {
-    // TODO: need to send the data here?
-    // SendDataL( *iPropertyList );
     }
 
 void CGetObjectPropList::GetPropertiesL( RArray<TUint>& aPropArray,
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -240,6 +240,9 @@
                 ServiceMetaDataFromWrapperL( propCode, *iMTPTypeString, *iObjectInfo );
                 break;
                 }
+            // Else, video DB does not support DateAdded field, use the file system date!
+            // It's the same behavior with DateCreated and DateModified.
+            // Fall through intentional.
             }
         //lint -fallthrough
         case EMTPObjectPropCodeDateCreated:
@@ -260,7 +263,7 @@
         // Consumable
         case EMTPObjectPropCodeNonConsumable:
             {
-            iMTPTypeUint8.Set( 0 );
+            iMTPTypeUint8.Set( iObjectInfo->Uint( CMTPObjectMetaData::ENonConsumable ) );
             SendDataL( iMTPTypeUint8 );
             }
             break;
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -23,7 +23,6 @@
 #include "cgetpartialobject.h"
 #include "mmmtpdplogger.h"
 #include "tmmmtpdppanic.h"
-#include "ttypeflatbuf.h"
 #include "mmmtpdpconfig.h"
 
 /**
@@ -41,7 +40,7 @@
 //
 EXPORT_C MMmRequestProcessor* CGetPartialObject::NewL( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
-    MMmMtpDpConfig& aDpConfig )
+    MMmMtpDpConfig& /*aDpConfig*/ )
     {
     CGetPartialObject* self = new (ELeave) CGetPartialObject( aFramework, aConnection );
     CleanupStack::PushL( self );
@@ -57,8 +56,6 @@
 //
 EXPORT_C CGetPartialObject::~CGetPartialObject()
     {
-    delete iBuffer;
-    delete iPartialData;
     delete iFileObject;
     }
 
@@ -69,18 +66,26 @@
 //
 EXPORT_C CGetPartialObject::CGetPartialObject( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection ) :
-    CRequestProcessor( aFramework,
-        aConnection,
-        sizeof( KMTPGetPartialObjectPolicy ) / sizeof( TMTPRequestElementInfo ),
-        KMTPGetPartialObjectPolicy ),
-    iFramework ( aFramework ),
-    iFs( iFramework.Fs() ),
-    iBufferPtr8( NULL, 0 )
+        CRequestProcessor( aFramework,
+            aConnection,
+            sizeof( KMTPGetPartialObjectPolicy ) / sizeof( TMTPRequestElementInfo ),
+            KMTPGetPartialObjectPolicy ),
+        iFramework ( aFramework )
     {
     PRINT( _L( "Operation: GetPartialObject(0x101B)" ) );
     }
 
 // -----------------------------------------------------------------------------
+// CGetPartialObject::ConstructL()
+// Second-phase construction
+// -----------------------------------------------------------------------------
+//
+void CGetPartialObject::ConstructL()
+    {
+    SetPSStatus();
+    }
+
+// -----------------------------------------------------------------------------
 // CGetPartialObject::CheckRequestL
 // Check the GetPartialObject reqeust
 // -----------------------------------------------------------------------------
@@ -106,14 +111,17 @@
 TBool CGetPartialObject::VerifyParametersL()
     {
     PRINT( _L( "MM MTP => CGetPartialObject::VerifyParametersL" ) );
+
     __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) );
     TBool result = EFalse;
     iObjectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
-    PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL iObjectHandle = 0x%x" ), iObjectHandle );
     iOffset = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
-    PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL iOffset = %d" ), iOffset );
-    TUint32 maxLength = Request().Uint32( TMTPTypeRequest::ERequestParameter3 );
-    PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL maxLength = %d" ), maxLength );
+    iPartialDataLength = Request().Uint32( TMTPTypeRequest::ERequestParameter3 );
+
+    PRINT3( _L( "MM MTP <> CGetPartialObject::VerifyParametersL iObjectHandle = 0x%x, iOffset = 0x%x, iMaxLength = 0x%x " ),
+        iObjectHandle,
+        iOffset,
+        iPartialDataLength );
 
     //get object info, but do not have the ownship of the object
     CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( iObjectHandle );
@@ -122,28 +130,12 @@
     const TDesC& suid( objectInfo->DesC( CMTPObjectMetaData::ESuid ) );
     PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL suid = %S" ), &suid );
 
-    if ( objectInfo->Uint( CMTPObjectMetaData::EDataProviderId )
-        == iFramework.DataProviderId() )
-        result = ETrue;
-
     TEntry fileEntry;
-    User::LeaveIfError( iFs.Entry( suid, fileEntry ) );
-    TInt64 fileSize = fileEntry.iSize;
-    if( ( iOffset < fileEntry.iSize ) && result )
+    User::LeaveIfError( iFramework.Fs().Entry( suid, fileEntry ) );
+    if ( iOffset < fileEntry.FileSize() )
         {
-        if ( maxLength == fileSize )
-            {
-            iCompleteFile = ETrue;
-            }
-
-        if( iOffset + maxLength > fileSize )
-            {
-            maxLength = fileSize - iOffset;
-            }
-        iPartialDataLength = maxLength;
         result = ETrue;
         }
-    PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL iPartialDataLength = %d" ), iPartialDataLength );
 
     PRINT1( _L( "MM MTP <= CGetPartialObject::VerifyParametersL result = %d" ), result );
     return result;
@@ -157,29 +149,21 @@
 EXPORT_C void CGetPartialObject::ServiceL()
     {
     PRINT( _L( "MM MTP => CGetPartialObject::ServiceL" ) );
+
     // Get file information
     CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( iObjectHandle );
     __ASSERT_DEBUG( objectInfo, Panic( EMmMTPDpObjectNull ) );
-    iFileSuid.SetLength( 0 );
-    iFileSuid.Append( objectInfo->DesC( CMTPObjectMetaData::ESuid ) );
+    TBuf<KMaxFileName> fileSuid;
+    fileSuid.Append( objectInfo->DesC( CMTPObjectMetaData::ESuid ) );
 
-    if ( iCompleteFile )
-        {
-        // Pass the complete file back to the host
-        delete iFileObject;
-        iFileObject = NULL;
-        iFileObject = CMTPTypeFile::NewL( iFramework.Fs(), iFileSuid, EFileRead );
-        SendDataL( *iFileObject );
-        }
-    else
-        {
-        // Send partial file fragment back.
-        BuildPartialDataL();
-        delete iPartialData;
-        iPartialData = NULL;
-        iPartialData  = new (ELeave) TMTPTypeFlatBuf( iBufferPtr8 );
-        SendDataL( *iPartialData );
-        }
+    iFileObject = CMTPTypeFile::NewL( iFramework.Fs(),
+        fileSuid,
+        ( TFileMode ) ( EFileRead | EFileShareReadersOnly ),
+        iPartialDataLength,
+        iOffset );
+
+    SendDataL( *iFileObject );
+
     PRINT( _L( "MM MTP <= CGetPartialObject::ServiceL" ) );
     }
 
@@ -191,50 +175,12 @@
 EXPORT_C TBool CGetPartialObject::DoHandleResponsePhaseL()
     {
     PRINT( _L( "MM MTP => CGetPartialObject::DoHandleResponsePhaseL" ) );
-    TUint32 dataLength = iPartialDataLength;
-    PRINT1( _L( "MM MTP <> CGetPartialObject::DoHandleResponsePhaseL dataLength = %d" ), dataLength );
+
+    TUint32 dataLength = iFileObject->GetByteSent();
     SendResponseL( EMTPRespCodeOK, 1, &dataLength );
-    PRINT( _L( "MM MTP <= CGetPartialObject::DoHandleResponsePhaseL" ) );
+
+    PRINT1( _L( "MM MTP <= CGetPartialObject::DoHandleResponsePhaseL dataLength = %d" ), dataLength );
     return EFalse;
     }
 
-// -----------------------------------------------------------------------------
-// CGetPartialObject::ConstructL()
-// Second-phase construction
-// -----------------------------------------------------------------------------
-//
-void CGetPartialObject::ConstructL()
-    {
-    SetPSStatus();
-    }
-
-// -----------------------------------------------------------------------------
-// CGetPartialObject::BuildPartialDataL()
-// Populate the partial data object
-// -----------------------------------------------------------------------------
-//
-void CGetPartialObject::BuildPartialDataL()
-    {
-    PRINT( _L( "MM MTP => CGetPartialObject::BuildPartialDataL" ) );
-    __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) );
-
-    if ( iBuffer )
-        {
-        delete iBuffer;
-        iBuffer = NULL;
-        }
-
-    // We might fail if we have insufficient memory...
-    iBuffer = HBufC8::NewL( iPartialDataLength );
-    iBuffer->Des().Zero();
-    iBufferPtr8.Set( iBuffer->Des() );
-
-    RFile file;
-    User::LeaveIfError( file.Open( iFs, iFileSuid, EFileRead ) );
-    CleanupClosePushL( file ); // + file
-    User::LeaveIfError( file.Read( iOffset, iBufferPtr8, iPartialDataLength ) );
-    CleanupStack::PopAndDestroy( &file ); // - file
-    PRINT( _L( "MM MTP <= CGetPartialObject::BuildPartialDataL" ) );
-    }
-
 // end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -20,7 +20,6 @@
 #include <mtp/mmtpdataproviderframework.h>
 #include <mtp/mmtpobjectmgr.h>
 #include <mtp/mmtpstoragemgr.h>
-#include <mtp/mmtpreferencemgr.h>
 #include <mtp/cmtpobjectmetadata.h>
 #include <mtp/cmtptypearray.h>
 #include <mtp/cmtptypestring.h>
@@ -32,6 +31,7 @@
 #include "mmmtpdputility.h"
 #include "cmmmtpdpmetadataaccesswrapper.h"
 #include "mmmtpdpconfig.h"
+#include "cpropertysettingutility.h"
 
 /**
 * Verification data for the MoveObject request
@@ -39,37 +39,32 @@
 const TMTPRequestElementInfo KMTPMoveObjectPolicy[] =
     {
         {
-        TMTPTypeRequest::ERequestParameter1, EMTPElementTypeObjectHandle,
-                EMTPElementAttrFileOrDir | EMTPElementAttrWrite, 0, 0, 0
+        TMTPTypeRequest::ERequestParameter1,
+        EMTPElementTypeObjectHandle,
+        EMTPElementAttrFile | EMTPElementAttrWrite,
+        0,
+        0,
+        0
         },
         {
-        TMTPTypeRequest::ERequestParameter2, EMTPElementTypeStorageId,
-                EMTPElementAttrWrite, 0, 0, 0
+        TMTPTypeRequest::ERequestParameter2,
+        EMTPElementTypeStorageId,
+        EMTPElementAttrWrite,
+        0,
+        0,
+        0
         },
         {
-        TMTPTypeRequest::ERequestParameter3, EMTPElementTypeObjectHandle,
-                EMTPElementAttrDir | EMTPElementAttrWrite, 1, 0, 0
+        TMTPTypeRequest::ERequestParameter3,
+        EMTPElementTypeObjectHandle,
+        EMTPElementAttrDir | EMTPElementAttrWrite,
+        1,
+        0,
+        0
         }
     };
 
 // -----------------------------------------------------------------------------
-// CMoveObject::NewL
-// Two-phase construction method
-// -----------------------------------------------------------------------------
-//
-//EXPORT_C MMmRequestProcessor* CMoveObject::NewL( MMTPDataProviderFramework& aFramework,
-//        MMTPConnection& aConnection,
-//        CMmMtpDpMetadataAccessWrapper& aWrapper )
-//    {
-//    CMoveObject* self = new (ELeave) CMoveObject( aFramework, aConnection, aWrapper );
-//    CleanupStack::PushL( self );
-//    self->ConstructL();
-//    CleanupStack::Pop( self );
-//
-//    return self;
-//    }
-
-// -----------------------------------------------------------------------------
 // CMoveObject::~CMoveObject
 // Destructor
 // -----------------------------------------------------------------------------
@@ -79,12 +74,10 @@
     Cancel();
 
     delete iDest;
-    delete iFileMan;
-    delete iPathToMove;
-    delete iNewRootFolder;
-    iObjectHandles.Close();
+
     if ( iPropertyElement )
         delete iPropertyElement;
+
     delete iPropertyList;
     }
 
@@ -94,18 +87,32 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CMoveObject::CMoveObject( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig) :
-    CRequestProcessor( aFramework, aConnection, sizeof( KMTPMoveObjectPolicy )
-            /sizeof( TMTPRequestElementInfo ), KMTPMoveObjectPolicy),
-    iDpConfig( aDpConfig ),
-    iObjectHandles( KMmMtpRArrayGranularity ),
-    iMoveObjectIndex( 0 )
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig ) :
+        CRequestProcessor( aFramework,
+            aConnection,
+            sizeof( KMTPMoveObjectPolicy ) / sizeof( TMTPRequestElementInfo ),
+            KMTPMoveObjectPolicy ),
+        iDpConfig( aDpConfig )
     {
     PRINT( _L( "Operation: MoveObject(0x1019)" ) );
     }
 
 // -----------------------------------------------------------------------------
+// CMoveObject::ConstructL
+// Second phase constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMoveObject::ConstructL()
+    {
+    iPropertyList = CMTPTypeObjectPropList::NewL();
+
+    // Set the CenRep value of MTP status,
+    // also need to do in other processors which related to MPX
+    SetPSStatus();
+    }
+
+// -----------------------------------------------------------------------------
 // CMoveObject::ServiceL
 // MoveObject request handler
 // -----------------------------------------------------------------------------
@@ -113,156 +120,18 @@
 EXPORT_C void CMoveObject::ServiceL()
     {
     PRINT( _L( "MM MTP => CMoveObject::ServiceL" ) );
-    TMTPResponseCode ret = MoveObjectL();
-    PRINT1( _L( "MM MTP <> CMoveObject::ServiceL ret = 0x%x" ), ret );
-    if ( EMTPRespCodeOK != ret )
-        {
-        SendResponseL( ret );
-        }
+
+    MoveObjectL();
+
     PRINT( _L( "MM MTP <= CMoveObject::ServiceL" ) );
     }
 
 // -----------------------------------------------------------------------------
-// CMoveObject::ConstructL
-// Second phase constructor
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CMoveObject::ConstructL()
-    {
-    CActiveScheduler::Add( this );
-
-    iPropertyList = CMTPTypeObjectPropList::NewL();
-    SetPSStatus();
-    }
-
-// -----------------------------------------------------------------------------
-// CMoveObject::RunL
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CMoveObject::RunL()
-    {
-    PRINT( _L( "MM MTP => CMoveObject::RunL" ) );
-    if ( MoveOwnedObjectsL() )
-        {
-        // Reset iMoveObjectIndex count since move completed
-        iMoveObjectIndex = 0;
-
-        TMTPResponseCode ret = EMTPRespCodeOK;
-        // Delete the original folders in the device dp.
-        if ( iObjectInfo->Uint( CMTPObjectMetaData::EDataProviderId )
-                == iFramework.DataProviderId() )
-            {
-            ret = FinalPhaseMove();
-            }
-        PRINT1( _L("MM MTP <> CMoveObject::RunL ret = 0x%x"), ret );
-        SendResponseL( ret );
-        }
-    PRINT( _L( "MM MTP <= CMoveObject::RunL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMoveObject::RunError
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CMoveObject::RunError( TInt aError )
-    {
-    if ( aError != KErrNone )
-        PRINT1( _L( "MM MTP <> CMoveObject::RunError aError = %d" ), aError );
-    TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) );
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CMoveObject::MoveFileL
-// A helper function of MoveObjectL
+// CMoveObject::MoveObjectL
+// Move object operation
 // -----------------------------------------------------------------------------
 //
-void CMoveObject::MoveFileL( const TDesC& aNewFileName )
-    {
-    PRINT1( _L( "MM MTP => CMoveObject::MoveFileL aNewFileName = %S" ), &aNewFileName );
-    const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
-    TFileName oldFileName( suid ); // save the old file name, the suid will be modified
-    PRINT1( _L( "MM MTP <> CMoveObject::MoveFileL oldFileName = %S" ), &suid );
-
-    if ( iStorageId == iObjectInfo->Uint( CMTPObjectMetaData::EStorageId ) )
-        iSameStorage = ETrue;
-    else
-        iSameStorage = EFalse;
-    GetPreviousPropertiesL( *iObjectInfo );
-    User::LeaveIfError( iFileMan->Move( suid, aNewFileName ) ); // iDest just Folder
-    User::LeaveIfError( iFramework.Fs().SetModified( aNewFileName, iPreviousModifiedTime ) );
-
-    iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName );
-    iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
-    iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
-    iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
-    SetPropertiesL( oldFileName, aNewFileName, *iObjectInfo );
-    PRINT( _L( "MM MTP <= CMoveObject::MoveFileL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMoveObject::MoveOwnedObjectsL
-// Move the objects through iterations of RunL
-// -----------------------------------------------------------------------------
-//
-TBool CMoveObject::MoveOwnedObjectsL()
-    {
-    PRINT( _L( "MM MTP => CMoveObject::MoveOwnedObjectsL" ) );
-    TBool ret = EFalse;
-
-    if ( iMoveObjectIndex < iNumberOfObjects )
-        {
-        MoveAndUpdateL( iObjectHandles[iMoveObjectIndex++] );
-
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete( status, iStatus.Int() );
-        SetActive();
-        }
-    else
-        {
-        ret = ETrue;
-        }
-
-    PRINT1( _L( "MM MTP <= CMoveObject::MoveOwnedObjectsL ret = %d" ), ret );
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CMoveObject::MoveFolderL
-// A helper function of MoveObjectL
-// -----------------------------------------------------------------------------
-//
-void CMoveObject::MoveFolderL()
-    {
-    PRINT( _L( "MM MTP => CMoveObject::MoveFolderL" ) );
-    RBuf oldFolderName;
-    oldFolderName.CreateL( KMaxFileName );
-    oldFolderName.CleanupClosePushL(); // + oldFileName
-    oldFolderName = iObjectInfo->DesC( CMTPObjectMetaData::ESuid );
-    PRINT1( _L( "MM MTP <> CMoveObject::MoveFolderL oldFolderName = %S" ), &oldFolderName );
-    iPathToMove = oldFolderName.AllocL();
-    CleanupStack::PopAndDestroy( &oldFolderName ); // - oldFolderName
-
-    GenerateObjectHandleListL( iObjectInfo->Uint( CMTPObjectMetaData::EHandle ) );
-
-    iNumberOfObjects = iObjectHandles.Count();
-    PRINT1( _L( "MM MTP <> CMoveObject::MoveFolderL iNumberOfObjects = %d" ), iNumberOfObjects );
-
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status, iStatus.Int() );
-    SetActive();
-
-    PRINT( _L( "MM MTP <= CMoveObject::MoveFolderL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMoveObject::MoveObjectL
-// move object operations
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CMoveObject::MoveObjectL()
+void CMoveObject::MoveObjectL()
     {
     PRINT( _L( "MM MTP => CMoveObject::MoveObjectL" ) );
     TMTPResponseCode responseCode = EMTPRespCodeOK;
@@ -276,55 +145,21 @@
 
     const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
     TParsePtrC fileNameParser( suid );
-
-    // Check if the object is a folder or a file.
-    TBool isFolder = EFalse;
-    User::LeaveIfError( BaflUtils::IsFolder( iFramework.Fs(), suid, isFolder ) );
-
-    if ( !isFolder )
+    if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() )
+        <= newObjectName.MaxLength() )
         {
-        if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() ) <= newObjectName.MaxLength() )
-            {
-            newObjectName.Append( fileNameParser.NameAndExt() );
-            }
-        responseCode = CanMoveObjectL( suid, newObjectName );
+        newObjectName.Append( fileNameParser.NameAndExt() );
         }
-    else // It is a folder.
-        {
-        TFileName rightMostFolderName;
-        User::LeaveIfError( BaflUtils::MostSignificantPartOfFullName( suid,
-                rightMostFolderName ) );
-        if ( ( newObjectName.Length() + rightMostFolderName.Length() + 1 ) <= newObjectName.MaxLength() )
-            {
-            newObjectName.Append( rightMostFolderName );
-            // Add backslash.
-            _LIT( KBackSlash, "\\" );
-            newObjectName.Append( KBackSlash );
-            }
-        }
-
-    iNewRootFolder = newObjectName.AllocL();
+    responseCode = CanMoveObjectL( suid, newObjectName );
 
     if ( responseCode == EMTPRespCodeOK )
-        {
-        delete iFileMan;
-        iFileMan = NULL;
-        iFileMan = CFileMan::NewL( iFramework.Fs() );
+        MoveFileL( newObjectName );
 
-        if ( !isFolder )
-            {
-            MoveFileL( newObjectName );
-            SendResponseL( responseCode );
-            }
-        else
-            {
-            MoveFolderL();
-            }
-        }
-    CleanupStack::PopAndDestroy( &newObjectName ); // - newObjectName.
+    SendResponseL( responseCode );
+
+    CleanupStack::PopAndDestroy( &newObjectName ); // - newObjectName
 
     PRINT1( _L( "MM MTP <= CMoveObject::MoveObjectL responseCode = 0x%x" ), responseCode );
-    return responseCode;
     }
 
 // -----------------------------------------------------------------------------
@@ -335,30 +170,33 @@
 void CMoveObject::GetParametersL()
     {
     PRINT( _L( "MM MTP => CMoveObject::GetParametersL" ) );
+
     __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) );
 
     TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
     iStorageId = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
     iNewParentHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter3 );
-    PRINT3( _L( "MM MTP <> objectHandle = 0x%x, iStoargeId = 0x%x, iNewParentHandle = 0x%x" ),
-            objectHandle, iStorageId, iNewParentHandle );
+    PRINT3( _L( "MM MTP <> objectHandle = 0x%x, iStorageId = 0x%x, iNewParentHandle = 0x%x" ),
+        objectHandle,
+        iStorageId,
+        iNewParentHandle );
 
     // not taking owernship
     iObjectInfo = iRequestChecker->GetObjectInfo( objectHandle );
     __ASSERT_DEBUG( iObjectInfo, Panic( EMmMTPDpObjectNull ) );
 
-    if ( iNewParentHandle == 0 )
+    if ( iNewParentHandle == KMTPHandleNone )
         {
         SetDefaultParentObjectL();
         }
     else
         {
-        CMTPObjectMetaData* parentObjectInfo =
-                iRequestChecker->GetObjectInfo( iNewParentHandle );
-        __ASSERT_DEBUG( parentObjectInfo, Panic( EMmMTPDpObjectNull ) );
+        CMTPObjectMetaData* parentObject = iRequestChecker->GetObjectInfo( iNewParentHandle );
+        __ASSERT_DEBUG( parentObject, Panic( EMmMTPDpObjectNull ) );
+
         delete iDest;
         iDest = NULL;
-        iDest = parentObjectInfo->DesC( CMTPObjectMetaData::ESuid ).AllocL();
+        iDest = parentObject->DesC( CMTPObjectMetaData::ESuid ).AllocL();
         PRINT1( _L( "MM MTP <> CMoveObject::GetParametersL iDest = %S" ), iDest );
         }
     PRINT( _L( "MM MTP <= CMoveObject::GetParametersL" ) );
@@ -375,11 +213,10 @@
 
     delete iDest;
     iDest = NULL;
-    iDest = ( iFramework.StorageMgr().StorageL( iStorageId ).DesC(
-                CMTPStorageMetaData::EStorageSuid ) ).AllocL();
-    PRINT1( _L( "MM MTP <> CMoveObject::SetDefaultParentObjectL iDest = %S" ), iDest );
+    iDest = iFramework.StorageMgr().StorageL( iStorageId ).DesC( CMTPStorageMetaData::EStorageSuid ).AllocL();
     iNewParentHandle = KMTPHandleNoParent;
-    PRINT( _L( "MM MTP <= CMoveObject::SetDefaultParentObjectL" ) );
+
+    PRINT1( _L( "MM MTP <= CMoveObject::SetDefaultParentObjectL, iDest = %S" ), iDest );
     }
 
 // -----------------------------------------------------------------------------
@@ -388,19 +225,21 @@
 // -----------------------------------------------------------------------------
 //
 TMTPResponseCode CMoveObject::CanMoveObjectL( const TDesC& aOldName,
-        const TDesC& aNewName ) const
+    const TDesC& aNewName ) const
     {
-    PRINT( _L( "MM MTP => CMoveObject::CanMoveObjectL" ) );
+    PRINT2( _L( "MM MTP => CMoveObject::CanMoveObjectL aOldName = %S, aNewName = %S" ),
+        &aOldName,
+        &aNewName );
     TMTPResponseCode result = EMTPRespCodeOK;
 
     TEntry fileEntry;
     User::LeaveIfError( iFramework.Fs().Entry( aOldName, fileEntry ) );
-    TDriveNumber drive( static_cast<TDriveNumber>( iFramework.StorageMgr().DriveNumber( iStorageId ) ) );
+    TInt drive = iFramework.StorageMgr().DriveNumber( iStorageId );
     User::LeaveIfError( drive );
     TVolumeInfo volumeInfo;
     User::LeaveIfError( iFramework.Fs().Volume( volumeInfo, drive ) );
 
-    if ( volumeInfo.iFree < fileEntry.iSize )
+    if ( volumeInfo.iFree < fileEntry.FileSize() )
         {
         result = EMTPRespCodeStoreFull;
         }
@@ -435,6 +274,36 @@
     }
 
 // -----------------------------------------------------------------------------
+// CMoveObject::MoveFileL
+// A helper function of MoveObjectL
+// -----------------------------------------------------------------------------
+//
+void CMoveObject::MoveFileL( const TDesC& aNewFileName )
+    {
+    TFileName oldFileName = iObjectInfo->DesC( CMTPObjectMetaData::ESuid );
+    PRINT2( _L( "MM MTP => CMoveObject::MoveFileL old name = %S, aNewFileName = %S" ),
+        &oldFileName,
+        &aNewFileName );
+
+    if ( iStorageId == iObjectInfo->Uint( CMTPObjectMetaData::EStorageId ) )
+        iSameStorage = ETrue;
+    else
+        iSameStorage = EFalse;
+    GetPreviousPropertiesL( *iObjectInfo );
+    SetPropertiesL( oldFileName, aNewFileName );
+
+    CFileMan* fileMan = CFileMan::NewL( iFramework.Fs() );
+    CleanupStack::PushL( fileMan );
+    User::LeaveIfError( fileMan->Move( oldFileName, aNewFileName ) );
+    CleanupStack::PopAndDestroy( fileMan );
+
+    User::LeaveIfError( iFramework.Fs().SetModified( aNewFileName,
+        iPreviousModifiedTime ) );
+
+    PRINT( _L( "MM MTP <= CMoveObject::MoveFileL" ) );
+    }
+
+// -----------------------------------------------------------------------------
 // CMoveObject::GetPreviousPropertiesL
 // Save the object properties before doing the move
 // -----------------------------------------------------------------------------
@@ -444,7 +313,6 @@
     PRINT( _L( "MM MTP => CMoveObject::GetPreviousPropertiesL" ) );
 
     const TDesC& suid( aObject.DesC( CMTPObjectMetaData::ESuid ) );
-
     User::LeaveIfError( iFramework.Fs().Modified( suid, iPreviousModifiedTime ) );
 
     // same storage, not necessary to get the properties
@@ -454,12 +322,11 @@
     TUint formatCode = aObject.Uint( CMTPObjectMetaData::EFormatCode );
     const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( formatCode );
     TInt count = properties->Count();
-    CMTPTypeString* textData = NULL;
     TInt err = KErrNone;
     TUint16 propCode;
-    TUint32 handle = aObject.Uint( CMTPObjectMetaData::EHandle ) ;
+    TUint32 handle = aObject.Uint( CMTPObjectMetaData::EHandle );
 
-    if ( iPropertyElement )
+    if ( iPropertyElement != NULL )
         {
         delete iPropertyElement;
         iPropertyElement = NULL;
@@ -467,8 +334,9 @@
 
     for ( TInt i = 0; i < count; i++ )
         {
-        propCode = (*properties)[i];
-        switch( propCode )
+        propCode = ( *properties )[i];
+
+        switch ( propCode )
             {
             case EMTPObjectPropCodeStorageID:
             case EMTPObjectPropCodeObjectFormat:
@@ -477,40 +345,44 @@
             case EMTPObjectPropCodeObjectFileName:
             case EMTPObjectPropCodeParentObject:
             case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
-            case EMTPObjectPropCodeNonConsumable:
             case EMTPObjectPropCodeDateCreated:
             case EMTPObjectPropCodeDateModified:
                 break;
 
+            case EMTPObjectPropCodeNonConsumable:
+                iPropertyElement = &( iPropertyList->ReservePropElemL( handle, propCode ) );
+                iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue,
+                    aObject.Uint( CMTPObjectMetaData::ENonConsumable ) );
+                break;
+
             case EMTPObjectPropCodeName:
             case EMTPObjectPropCodeDateAdded:
                 if ( ( propCode == EMTPObjectPropCodeName )
-                   || ( ( !MmMtpDpUtility::IsVideoL( aObject.DesC( CMTPObjectMetaData::ESuid ), iFramework ) )
+                    || ( !MmMtpDpUtility::IsVideoL( aObject.DesC( CMTPObjectMetaData::ESuid ), iFramework )
                         && ( propCode == EMTPObjectPropCodeDateAdded ) ) )
                     {
-                    textData = CMTPTypeString::NewLC(); // + textData
+                    CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData
 
                     TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( propCode,
                         *textData,
                         aObject ) );
 
-                    PRINT1( _L( "MM MTP <> CMoveObject::GetPreviousPropertiesL::ServiceSpecificObjectPropertyL err = %d" ), err );
+                    PRINT1( _L( "MM MTP <> CMoveObject::GetPreviousPropertiesL err = %d" ), err );
 
                     if ( err == KErrNone )
                         {
-                        iPropertyElement = &(iPropertyList->ReservePropElemL(handle, propCode));
-                        iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, textData->StringChars());
-//                        iPropertyElement = CMTPTypeObjectPropListElement::NewL(
-//                            handle, propCode, *textData );
+                        iPropertyElement = &( iPropertyList->ReservePropElemL( handle, propCode ) );
+                        iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue,
+                            textData->StringChars() );
                         }
                     else if ( err == KErrNotFound )
                         {
                         iPropertyElement = NULL;
                         }
                     else
-                       {
-                       User::Leave( err );
-                       }
+                        {
+                        User::Leave( err );
+                        }
 
                     CleanupStack::PopAndDestroy( textData ); // - textData
                     }
@@ -523,92 +395,40 @@
                 break;
             }
 
-        if ( iPropertyElement )
+        if ( iPropertyElement != NULL )
             {
             iPropertyList->CommitPropElemL( *iPropertyElement );
-
             iPropertyElement = NULL;
             }
-
         } // end of for loop
 
     PRINT1( _L( "MM MTP <= CMoveObject::GetPreviousPropertiesL err = %d" ), err );
     }
 
 // -----------------------------------------------------------------------------
-// CMoveObject::ServiceMetaDataToWrapper
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TMTPResponseCode CMoveObject::ServiceMetaDataToWrapper(
-    const TUint16 aPropCode,
-    MMTPType& aNewData,
-    const CMTPObjectMetaData& aObject )
-    {
-    TMTPResponseCode resCode = EMTPRespCodeOK;
-
-    TRAPD( err, iDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode,
-        aNewData,
-        aObject ) );
-
-    PRINT1( _L("MM MTP <> CMoveObject::ServiceMetaDataToWrapper err = %d"), err);
-
-    if ( err == KErrNone )
-        {
-        resCode = EMTPRespCodeOK;
-        }
-    else if ( err == KErrTooBig )
-        // according to the codes of S60
-        {
-        resCode = EMTPRespCodeInvalidDataset;
-        }
-    else if ( err == KErrPermissionDenied )
-        {
-        resCode = EMTPRespCodeAccessDenied;
-        }
-    else if ( err == KErrNotFound )
-        {
-        if ( MmMtpDpUtility::HasMetadata( aObject.Uint( CMTPObjectMetaData::EFormatCode ) ) )
-            resCode = EMTPRespCodeAccessDenied;
-        else
-            resCode = EMTPRespCodeOK;
-        }
-    else
-        {
-        resCode = EMTPRespCodeGeneralError;
-        }
-
-    PRINT1( _L("MM MTP <= CMoveObject::ServiceMetaDataToWrapper resCode = 0x%x"), resCode);
-
-    return resCode;
-    }
-
-// -----------------------------------------------------------------------------
 // CMoveObject::SetPreviousPropertiesL
 // Set the object properties after doing the move
 // -----------------------------------------------------------------------------
 //
-void CMoveObject::SetPreviousPropertiesL( const CMTPObjectMetaData& aObject )
+void CMoveObject::SetPreviousPropertiesL()
     {
     PRINT( _L( "MM MTP => CMoveObject::SetPreviousPropertiesL" ) );
-    const TInt count( iPropertyList->NumberOfElements() );
-    PRINT1( _L( "MM MTP <> CMoveObject::SetPreviousPropertiesL count = %d" ), count );
+
     TMTPResponseCode respcode = EMTPRespCodeOK;
-    CMTPTypeString* stringData = NULL;
+
     iPropertyList->ResetCursor();
-    
+    const TInt count = iPropertyList->NumberOfElements();
     for ( TInt i = 0; i < count; i++ )
         {
-        CMTPTypeObjectPropListElement& element = iPropertyList->GetNextElementL( );
+        CMTPTypeObjectPropListElement& element = iPropertyList->GetNextElementL();
 
-        TUint32 handle = element.Uint32L(
-                CMTPTypeObjectPropListElement::EObjectHandle );
-        TUint16 propertyCode = element.Uint16L(
-                CMTPTypeObjectPropListElement::EPropertyCode );
-        TUint16 dataType = element.Uint16L(
-                CMTPTypeObjectPropListElement::EDatatype );
-        PRINT3( _L( "MM MTP <> CMoveObject::SetPreviousPropertiesL = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ),
-          handle, propertyCode, dataType );
+        TUint32 handle = element.Uint32L( CMTPTypeObjectPropListElement::EObjectHandle );
+        TUint16 propertyCode = element.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode );
+        TUint16 dataType = element.Uint16L( CMTPTypeObjectPropListElement::EDatatype );
+        PRINT3( _L( "MM MTP <> CCopyObject::SetPreviousPropertiesL = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ),
+            handle,
+            propertyCode,
+            dataType );
 
         switch ( propertyCode )
             {
@@ -619,20 +439,24 @@
             case EMTPObjectPropCodeObjectFileName:
             case EMTPObjectPropCodeParentObject:
             case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
-            case EMTPObjectPropCodeNonConsumable:
             case EMTPObjectPropCodeDateCreated:
             case EMTPObjectPropCodeDateModified:
             case EMTPObjectPropCodeDateAdded:
                 break;
 
+            case EMTPObjectPropCodeNonConsumable:
+                iObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable,
+                    element.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
+                break;
+
             case EMTPObjectPropCodeName:
                 {
-                stringData = CMTPTypeString::NewLC(
-                    element.StringL(CMTPTypeObjectPropListElement::EValue)); // + stringData
+                CMTPTypeString *stringData = CMTPTypeString::NewLC( element.StringL( CMTPTypeObjectPropListElement::EValue ) ); // + stringData
 
-                respcode = ServiceMetaDataToWrapper( propertyCode,
+                respcode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapperL( iDpConfig,
+                    propertyCode,
                     *stringData,
-                    aObject );
+                    *iObjectInfo );
 
                 CleanupStack::PopAndDestroy( stringData ); // - stringData
                 }
@@ -640,18 +464,16 @@
 
             default:
                 {
-                respcode = ServiceSetSpecificObjectPropertyL( propertyCode,
-                        aObject,
-                        element );
+                respcode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig,
+                    propertyCode,
+                    *iObjectInfo,
+                    element );
                 }
                 break;
             }
         } // end of for loop
 
-    if( respcode == EMTPRespCodeOK )
-        {
-        // do nothing, ignore warning
-        }
+    // ignore errors
 
     PRINT1( _L( "MM MTP <= CMoveObject::SetPreviousPropertiesL respcode = 0x%x" ), respcode );
     }
@@ -661,189 +483,46 @@
 // Set the object properties in the object property store.
 // -----------------------------------------------------------------------------
 //
-void CMoveObject::SetPropertiesL( const TDesC& aOldFileName, const TDesC& aNewFileName,
-        const CMTPObjectMetaData& aNewObject )
+void CMoveObject::SetPropertiesL( const TDesC& aOldFileName,
+    const TDesC& aNewFileName )
     {
     PRINT2( _L( "MM MTP => CMoveObject::SetPropertiesL aOldFileName = %S, aNewFileName = %S" ),
-            &aOldFileName, &aNewFileName );
+        &aOldFileName, 
+        &aNewFileName );
+		
+    iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName );
+    iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
+    iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
 
-    TUint32 formatCode = aNewObject.Uint( CMTPObjectMetaData::EFormatCode );
-    // This is used to keep the same behavior in mass storage and device file manager.
+    TUint32 formatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatCode );
     if ( formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist )
         {
+        // This is used to keep the same behavior in mass storage and device file manager.
         PRINT( _L( "MM MTP <> CMoveObject::SetPropertiesL Playlist file do not update the MPX DB" ) );
         }
     else
         {
-        // if the two object in different stoarge, we should delete the old one and insert new one
         if ( iSameStorage )
             iDpConfig.GetWrapperL().RenameObjectL( aOldFileName, aNewFileName );
+        // if the two object in different storage, we should delete the old one and insert new one
         else
             {
             iDpConfig.GetWrapperL().DeleteObjectL( aOldFileName, formatCode );
-            iDpConfig.GetWrapperL().AddObjectL( aNewFileName );
-            SetPreviousPropertiesL( aNewObject );
+
+            TUint32 subFormatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatSubCode );
+            iDpConfig.GetWrapperL().AddObjectL( aNewFileName,
+                formatCode,
+                subFormatCode );
+
+            SetPreviousPropertiesL();
             }
         }
 
-      // Reference DB is used PUID
-//    if ( formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist
-//            || formatCode == EMTPFormatCodeM3UPlaylist )
-//        {
-//        MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr();
-//        CDesCArray* references = referenceMgr.ReferencesLC( aOldFileName ); // + references
-//        referenceMgr.SetReferencesL( aNewFileName, *references );
-//        CleanupStack::PopAndDestroy( references ); // - references
-//        // delete the old references
-//        referenceMgr.RemoveReferencesL( aOldFileName );
-//        }
+    iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
 
+    // It's not necessary to change references of playlists since Reference DB is used PUID
 
     PRINT( _L( "MM MTP <= CMoveObject::SetPropertiesL" ) );
     }
 
-// -----------------------------------------------------------------------------
-// CMoveObject::FinalPhaseMove
-// This function will actually delete the orginal folders from the file system
-// -----------------------------------------------------------------------------
-//
-TMTPResponseCode CMoveObject::FinalPhaseMove()
-    {
-    PRINT( _L( "MM MTP => CMoveObject::FinalPhaseMove" ) );
-    TMTPResponseCode ret = EMTPRespCodeOK;
-
-    TInt rel = iFileMan->RmDir( *iPathToMove );
-    PRINT1( _L( "MM MTP <> CMoveObject::FinalPhaseMove rel = %d" ), rel );
-
-    if ( rel != KErrNone )
-        {
-        ret = EMTPRespCodeGeneralError;
-        }
-
-    PRINT1( _L( "MM MTP <= CMoveObject::FinalPhaseMove ret = 0x%x" ), ret );
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CMoveObject::GenerateObjectHandleListL
-// Generate the list of handles that need to be moved to the new location
-// -----------------------------------------------------------------------------
-//
-void CMoveObject::GenerateObjectHandleListL( TUint32 aParentHandle )
-    {
-    PRINT1( _L( "MM MTP => CMoveObject::GenerateObjectHandleListL aParentHandle = 0x%x" ), aParentHandle );
-    RMTPObjectMgrQueryContext context;
-    RArray<TUint> handles;
-    TMTPObjectMgrQueryParams params( KMTPStorageAll, KMTPFormatsAll,
-            aParentHandle );
-    CleanupClosePushL( context ); // + context
-    CleanupClosePushL( handles ); // - handles
-
-    do
-        {
-        iFramework.ObjectMgr().GetObjectHandlesL( params, context, handles );
-
-        TInt numberOfObjects = handles.Count();
-        for ( TInt i = 0; i < numberOfObjects; i++ )
-            {
-            if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == iFramework.DataProviderId() )
-                {
-                iObjectHandles.AppendL( handles[i] );
-                continue;
-                }
-
-            // Folder
-            if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == 0 ) // We know that the device dp id is always 0, otherwise the whole MTP won't work.
-                {
-                GenerateObjectHandleListL( handles[i] );
-                }
-            }
-        }
-    while ( !context.QueryComplete() );
-
-    CleanupStack::PopAndDestroy( &handles ); // - handles
-    CleanupStack::PopAndDestroy( &context ); // - contect
-
-    PRINT( _L( "MM MTP <= CMoveObject::GenerateObjectHandleListL" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CMoveObject::MoveAndUpdateL
-// Move a single object and update the database
-// -----------------------------------------------------------------------------
-//
-void CMoveObject::MoveAndUpdateL( TUint32 aObjectHandle )
-    {
-    PRINT1( _L( "MM MTP => CMoveObject::MoveAndUpdateL aObjectHanlde = 0x%x" ), aObjectHandle );
-
-    CMTPObjectMetaData* objectInfo( CMTPObjectMetaData::NewLC() ); // + objectInfo
-
-    RBuf fileName;
-    fileName.CreateL( KMaxFileName );
-    fileName.CleanupClosePushL(); // + fileName
-
-    RBuf rightPartName;
-    rightPartName.CreateL( KMaxFileName );
-    rightPartName.CleanupClosePushL(); // + rightPartName
-
-    RBuf oldName;
-    oldName.CreateL( KMaxFileName );
-    oldName.CleanupClosePushL(); // + oldName
-
-    if ( iFramework.ObjectMgr().ObjectL( TMTPTypeUint32( aObjectHandle ), *objectInfo ) )
-        {
-        fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid );
-        oldName = fileName;
-
-        if ( objectInfo->Uint( CMTPObjectMetaData::EDataProviderId )
-                == iFramework.DataProviderId() )
-            {
-            rightPartName = fileName.Right( fileName.Length() - iPathToMove->Length() );
-
-            if ( ( iNewRootFolder->Length() + rightPartName.Length() ) > fileName.MaxLength() )
-                {
-                User::Leave( KErrCorrupt );
-                }
-
-            fileName.Zero();
-            fileName.Append( *iNewRootFolder );
-            fileName.Append( rightPartName );
-            PRINT1( _L( "MM MTP <> MoveAndUpdateL fileName = %S" ), &fileName );
-
-            if ( iStorageId == objectInfo->Uint( CMTPObjectMetaData::EStorageId ) )
-                iSameStorage = ETrue;
-            else
-                iSameStorage = EFalse;
-            GetPreviousPropertiesL( *objectInfo );
-            TInt err = iFileMan->Move( oldName, fileName );
-            PRINT1( _L( "MM MTP <> CMoveObject::MoveAndUpdateL Move error code = %d" ), err );
-            User::LeaveIfError( err );
-            User::LeaveIfError( iFramework.Fs().SetModified( fileName, iPreviousModifiedTime ) );
-
-            objectInfo->SetDesCL( CMTPObjectMetaData::ESuid, fileName );
-            objectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
-            TParsePtrC parentSuid( fileName );
-            TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parentSuid.DriveAndPath() );
-            objectInfo->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
-
-            //TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parentSuid.DriveAndPath() );
-            PRINT1( _L( "MM MTP <> CMoveObject::MoveAndUpdateL parentHandle = 0x%x" ), parentHandle );
-
-            iFramework.ObjectMgr().ModifyObjectL( *objectInfo );
-
-            SetPropertiesL( oldName, fileName, *objectInfo );
-            }
-        }
-    else
-        {
-        User::Leave( KErrCorrupt );
-        }
-
-    CleanupStack::PopAndDestroy( &oldName ); // - oldName
-    CleanupStack::PopAndDestroy( &rightPartName ); // - rightPartName
-    CleanupStack::PopAndDestroy( &fileName ); // - fileName
-    CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo
-    PRINT( _L( "MM MTP <= CMoveObject::MoveAndUpdateL" ) );
-    }
-
 // end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cpropertysettingutility.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <mtp/cmtptypeobjectproplist.h>
+#include <mtp/cmtptypestring.h>
+#include <mtp/cmtptypearray.h>
+#include <mtp/tmtptypeuint8.h>
+#include <mtp/tmtptypeuint16.h>
+#include <mtp/tmtptypeuint32.h>
+#include <mtp/mtpdatatypeconstants.h>
+
+#include "cpropertysettingutility.h"
+#include "cmmmtpdpmetadataaccesswrapper.h"
+#include "mmmtpdpconfig.h"
+#include "mmmtpdputility.h"
+#include "mmmtpdplogger.h"
+
+EXPORT_C CPropertySettingUtility::CPropertySettingUtility()
+    {
+    // Do nothing
+    }
+
+EXPORT_C CPropertySettingUtility::~CPropertySettingUtility()
+    {
+    // Do nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CPropertySettingUtility::SetMetaDataToWrapperL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TMTPResponseCode CPropertySettingUtility::SetMetaDataToWrapperL( MMmMtpDpConfig& aDpConfig,
+    const TUint16 aPropCode,
+    MMTPType& aNewData,
+    const CMTPObjectMetaData& aObjectMetaData )
+    {
+    TMTPResponseCode responseCode = EMTPRespCodeOK;
+    TRAPD( err, aDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode,
+            aNewData,
+            aObjectMetaData ) );
+
+    PRINT1( _L("MM MTP <> CPropertySettingUtility::SetMetaDataToWrapperL err = %d"), err);
+
+    if ( err == KErrNone )
+        responseCode = EMTPRespCodeOK;
+    else // Other errors are not SetMetaDataToWrapperL related, should be respond before this calling
+        responseCode = EMTPRespCodeGeneralError;
+
+    PRINT1( _L( "MM MTP <= CPropertySettingUtility::SetMetaDataToWrapperL resCode = 0x%x" ), responseCode );
+
+    return responseCode;
+    }
+
+// end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -34,7 +34,7 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CRenameObject* CRenameObject::NewL( MMTPDataProviderFramework& aFramework,
-        CMmMtpDpMetadataAccessWrapper& aWrapper )
+    CMmMtpDpMetadataAccessWrapper& aWrapper )
     {
     PRINT( _L( "MM MTP => CRenameObject::NewL" ) );
 
@@ -59,6 +59,7 @@
     iObjectHandles( KMmMtpRArrayGranularity ),
     iWrapper ( aWrapper )
     {
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -121,7 +122,7 @@
 //
 EXPORT_C void CRenameObject::DoCancel()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -220,8 +221,7 @@
     CleanupClosePushL( context ); // + context
     CleanupClosePushL( handles ); // + handles
 
-    TMTPObjectMgrQueryParams params( KMTPStorageAll, KMTPFormatsAll,
-            aParentHandle );
+    TMTPObjectMgrQueryParams params( KMTPStorageAll, KMTPFormatsAll, aParentHandle );
     do
         {
         iFramework.ObjectMgr().GetObjectHandlesL( params, context, handles );
@@ -232,14 +232,8 @@
             if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == iFramework.DataProviderId() )
                 {
                 iObjectHandles.AppendL( handles[i] );
-                continue;
-                }
+                // NOTE: Fw changed the mechanism of notification, no need to iterate
 
-            // Folder
-            // TODO: need to modify, should not know device dp id
-            if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == 0 ) // We know that the device dp id is always 0, otherwise the whole MTP won't work.
-                {
-                GenerateObjectHandleListL( handles[i] );
                 }
             }
         }
@@ -260,7 +254,8 @@
     const TDesC& aFolderName )
     {
     PRINT2( _L( "MM MTP => CRenameObject::GetParentSuidL aHandle(0x%x), aFolderName(%S)" ),
-        aHandle, &aFolderName );
+        aHandle,
+        &aFolderName );
     CMTPObjectMetaData* objectInfo( CMTPObjectMetaData::NewLC() ); // + objectInfo
     // get the old folder suid
     if ( iFramework .ObjectMgr().ObjectL( aHandle, *objectInfo ) )
@@ -268,15 +263,10 @@
         iNewFolderName.Zero();
         iNewFolderName = objectInfo->DesC( CMTPObjectMetaData::ESuid );
         PRINT1( _L( "MM MTP <> CRenameObject::GetParentSuidL new folder full file name(%S)" ), &iNewFolderName );
-        const TInt length = iNewFolderName.Length();
-
-        TParsePtrC parentSuid( iNewFolderName.Left( length - 1 ) );
 
         iOldFolderFullName.Zero();
-        iOldFolderFullName.Append( parentSuid.DriveAndPath() );
         iOldFolderFullName.Append( aFolderName ); // just name not suid
-        _LIT( KBackSlash, "\\" );
-        iOldFolderFullName.Append( KBackSlash );
+
         PRINT1( _L( "MM MTP <> CRenameObject::GetParentSuidL = %S" ), &iOldFolderFullName );
         }
     else
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestchecker.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestchecker.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
@@ -54,7 +54,7 @@
     iHandles( KMTPRequestCheckerHandleGranularity ),
     iObjectArray( KMTPRequestCheckerHandleGranularity )
     {
-    
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -64,7 +64,7 @@
 //
 void CRequestChecker::ConstructL()
     {
-    
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -84,8 +84,8 @@
 // -----------------------------------------------------------------------------
 //
 TMTPResponseCode CRequestChecker::VerifyRequestL( const TMTPTypeRequest& aRequest,
-        TInt aCount,
-        const TMTPRequestElementInfo* aElementInfo )
+    TInt aCount,
+    const TMTPRequestElementInfo* aElementInfo )
     {
     TMTPResponseCode result = EMTPRespCodeOK;
     iHandles.Close();
@@ -96,9 +96,11 @@
     for ( TInt i = 0; i < aCount && EMTPRespCodeOK == result; i++ )
         {
         TUint32 parameter = aRequest.Uint32( aElementInfo[i].iElementIndex );
-        PRINT3( _L( "MM MTP <> CRequestChecker parameter %d/%d = %d" ), 
-                i + 1, aCount, parameter );
-        
+        PRINT3( _L( "MM MTP <> CRequestChecker parameter %d/%d = %d" ),
+            i + 1,
+            aCount, 
+            parameter );
+
         if ( !IsSpecialValue( parameter, aElementInfo[i] ) )
             {
             switch ( aElementInfo[i].iElementType )
@@ -198,7 +200,7 @@
             ret = EMTPRespCodeSessionNotOpen;
             }
         }
-    
+
     return ret;
     }
 
@@ -224,7 +226,7 @@
         {
         ret = EMTPRespCodeInvalidParameter;
         }
-    
+
     return ret;
     }
 
@@ -252,7 +254,7 @@
         const TDesC& suid( object->DesC( CMTPObjectMetaData::ESuid ) );
         TEntry entry;
         TInt err = iFramework.Fs().Entry( suid, entry );
-        
+
         if ( object->Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeAssociation )
 //            && ( object->Uint( CMTPObjectMetaData::EFormatSubCode ) == EMTPAssociationTypeGenericFolder ) )
             {
@@ -262,7 +264,7 @@
         else
             {
             User::LeaveIfError( err );
-            
+
             if ( iFramework.ObjectMgr().ObjectOwnerId( aHandle ) != iFramework.DataProviderId() )
                 {
                 PRINT( _L(" ewrwe ret = EMTPRespCodeInvalidObjectHandle;"));
@@ -306,7 +308,7 @@
         ret = EMTPRespCodeInvalidObjectHandle;
         }
     PRINT1( _L( "MM MTP <= CRequestChecker::VerifyObjectHandleL ret = 0x%x" ), ret );
-    
+
     return ret;
     }
 
@@ -357,7 +359,7 @@
                 }
             }
        }
-    
+
     return ret;
     }
 
@@ -395,7 +397,7 @@
         }
 
     PRINT1( _L( "MM MTP => CRequestChecker::VerifyFormatCode ret = 0x%x" ), ret );
-    
+
     return ret;
     }
 
@@ -413,16 +415,16 @@
         case 1:
             result = ( aParameter == aElementInfo.iValue1 );
             break;
-            
+
         case 2:
             result = ( aParameter == aElementInfo.iValue1
                 || aParameter == aElementInfo.iValue2 );
             break;
-            
+
         default:
             break;
         }
-    
+
     return result;
     }
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -23,7 +23,7 @@
 #include <mtp/mmtpconnection.h>
 #include <mtp/mmtpobjectmgr.h>
 #include <e32property.h>
-#include <MtpPrivatePSKeys.h>
+#include <mtpprivatepskeys.h>
 
 #include "crequestprocessor.h"
 #include "crequestchecker.h"
@@ -39,13 +39,15 @@
 EXPORT_C CRequestProcessor::CRequestProcessor( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     TInt aElementCount,
-    const TMTPRequestElementInfo* aElements ):
-    CActive( EPriorityStandard ),
-    iFramework( aFramework ),
-    iConnection( aConnection ),
-    iElementCount( aElementCount ),
-    iElements( aElements )
+    const TMTPRequestElementInfo* aElements ) :
+        CActive( EPriorityStandard ),
+        iFramework( aFramework ),
+        iConnection( aConnection ),
+        iElementCount( aElementCount ),
+        iElements( aElements )
     {
+    // Note: It has been moved to specific operation handler
+    // Some operations don't need add into active scheduler
     // CActiveScheduler::Add( this );
     }
 
@@ -56,7 +58,9 @@
 //
 EXPORT_C CRequestProcessor::~CRequestProcessor()
     {
-//    Cancel();
+    // Note: It has been moved to specific operation handler
+    // Some operations don't need add into active scheduler
+    // Cancel();
     iNullBuffer.Close();
     delete iRequestChecker;
     }
@@ -390,7 +394,7 @@
 //
 EXPORT_C void CRequestProcessor::RunL()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -400,7 +404,7 @@
 //
 EXPORT_C void CRequestProcessor::DoCancel()
     {
-
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestunknown.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestunknown.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -42,7 +42,7 @@
 //
 void CRequestUnknown::ConstructL()
     {
-    
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -52,7 +52,7 @@
 //
 EXPORT_C CRequestUnknown::~CRequestUnknown()
     {
-    
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
@@ -62,7 +62,7 @@
 //
 EXPORT_C CRequestUnknown::CRequestUnknown( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection ) :
-    CRequestProcessor( aFramework, aConnection, 0, NULL )
+        CRequestProcessor( aFramework, aConnection, 0, NULL )
     {
     PRINT( _L( "Operation: Unknown" ) );
     }
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -19,7 +19,6 @@
 #include <mtp/mmtpdataproviderframework.h>
 #include <mtp/mmtpobjectmgr.h>
 #include <mtp/cmtptypestring.h>
-#include <mtp/cmtptypearray.h>
 #include <mtp/cmtptypeobjectinfo.h>
 #include <mtp/cmtptypefile.h>
 #include <mtp/mmtpstoragemgr.h>
@@ -32,6 +31,7 @@
 #include "mmmtpdputility.h"
 #include "tmmmtpdppanic.h"
 #include "mmmtpdplogger.h"
+#include "cpropertysettingutility.h"
 #include "cmmmtpdpmetadataaccesswrapper.h"
 
 // Verification data for the SendObjectInfo request
@@ -57,6 +57,24 @@
     };
 
 // -----------------------------------------------------------------------------
+// CSendObject::NewL
+// Two-phase construction method
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MMmRequestProcessor* CSendObject::NewL( MMTPDataProviderFramework& aFramework,
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig )
+    {
+    CSendObject* self = new ( ELeave ) CSendObject( aFramework, aConnection, aDpConfig );
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
 // CSendObject::~CSendObject
 // Destructor
 // -----------------------------------------------------------------------------
@@ -88,7 +106,7 @@
 // Standard C++ Constructor
 // -----------------------------------------------------------------------------
 //
-EXPORT_C CSendObject::CSendObject( MMTPDataProviderFramework& aFramework,
+CSendObject::CSendObject( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
         CRequestProcessor( aFramework, aConnection, 0, NULL),
@@ -104,7 +122,7 @@
 // 2nd Phase Constructor
 // -----------------------------------------------------------------------------
 //
-EXPORT_C void CSendObject::ConstructL()
+void CSendObject::ConstructL()
     {
     PRINT( _L( "MM MTP => CSendObject::ConstructL" ) );
 
@@ -568,12 +586,12 @@
 
     TEntry fileEntry;
     User::LeaveIfError( iFs.Entry( iFullPath, fileEntry ) );
-    if ( fileEntry.iSize != iObjectSize )
+    if ( fileEntry.FileSize() != iObjectSize )
         {
         iFs.Delete( iFullPath );
         iObjectMgr.UnreserveObjectHandleL( *iReceivedObjectInfo );
         TMTPResponseCode responseCode = EMTPRespCodeObjectTooLarge;
-        if ( fileEntry.iSize < iObjectSize )
+        if ( fileEntry.FileSize() < iObjectSize )
             {
             responseCode = EMTPRespCodeIncompleteTransfer;
             }
@@ -684,7 +702,7 @@
             }
         }
 
-    PRINT1( _L( "MM MTP <= CSendObject::VerifyObjectPropListL, responseCode = 0x%X" ), responseCode );
+    PRINT1( _L( "MM MTP <= CSendObject::VerifyObjectPropListL, responseCode = 0x%x" ), responseCode );
     return responseCode;
     }
 
@@ -703,7 +721,7 @@
     const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( iObjectFormat );
     TUint16 propCode = aElement.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode );
     TUint16 dataType = aElement.Uint16L( CMTPTypeObjectPropListElement::EDatatype );
-    PRINT2( _L( "MM MTP => CSendObject::CheckPropCodeL propCode = 0x%X, dataType = 0x%X" ), propCode, dataType );
+    PRINT2( _L( "MM MTP => CSendObject::CheckPropCodeL propCode = 0x%x, dataType = 0x%x" ), propCode, dataType );
 
     responseCode = EMTPRespCodeInvalidObjectPropCode;
     const TInt count = properties->Count();
@@ -785,7 +803,6 @@
             break;
 
         case EMTPObjectPropCodeDateCreated:
-            // TODO: this property is read-only, should response EMTPRespCodeAccessDenied or set nothing?
         case EMTPObjectPropCodeDateModified:
         case EMTPObjectPropCodeObjectFileName:
         case EMTPObjectPropCodeName:
@@ -805,11 +822,15 @@
         default:
             // check types of DP specific properties
             // TODO: Is there anything except datatype need to be checked?
-            responseCode = CheckSepecificPropType( propCode, dataType );
+            responseCode = MmMtpDpUtility::CheckPropType( propCode, dataType );
+            if ( responseCode == EMTPRespCodeAccessDenied )
+                {
+                responseCode = EMTPRespCodeOK;
+                }
             break;
         }
 
-    PRINT1( _L( "MM MTP <= CSendObject::CheckPropCode, responseCode = 0x%X" ), responseCode );
+    PRINT1( _L( "MM MTP <= CSendObject::CheckPropCode, responseCode = 0x%x" ), responseCode );
     return responseCode;
     }
 
@@ -858,7 +879,7 @@
             break;
         }
 
-    PRINT1( _L( "MM MTP <= CSendObject::ExtractPropertyL, responseCode = 0x%X" ), responseCode );
+    PRINT1( _L( "MM MTP <= CSendObject::ExtractPropertyL, responseCode = 0x%x" ), responseCode );
     return responseCode;
     }
 
@@ -888,7 +909,6 @@
             {
             case EMTPObjectPropCodeStorageID:
             case EMTPObjectPropCodeObjectFormat:
-            case EMTPObjectPropCodeProtectionStatus:
             case EMTPObjectPropCodeObjectSize:
             case EMTPObjectPropCodeParentObject:
             case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
@@ -896,6 +916,10 @@
                 break;
 
             case EMTPObjectPropCodeNonConsumable:
+                iReceivedObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable,
+                    element.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
+                break;
+
             case EMTPObjectPropCodeDateAdded:
             case EMTPObjectPropCodeDateCreated:
             case EMTPObjectPropCodeDateModified:
@@ -908,11 +932,16 @@
                  */
                 break;
 
+            case EMTPObjectPropCodeProtectionStatus:
+                SetProtectionStatusL();
+                break;
+
             case EMTPObjectPropCodeName:
                 {
                 CMTPTypeString* stringData = CMTPTypeString::NewLC( element.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
 
-                responseCode = SetMetaDataToWrapperL( propertyCode,
+                responseCode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapperL( iDpConfig,
+                    propertyCode,
                     *stringData,
                     *iReceivedObjectInfo );
 
@@ -922,7 +951,8 @@
 
             default:
                 {
-                responseCode = SetSpecificObjectPropertyL( propertyCode,
+                responseCode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig,
+                    propertyCode,
                     *iReceivedObjectInfo,
                     element );
                 }
@@ -935,53 +965,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CSendObject::SetMetaDataToWrapperL
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TMTPResponseCode CSendObject::SetMetaDataToWrapperL( const TUint16 aPropCode,
-    MMTPType& aNewData,
-    const CMTPObjectMetaData& aObjectMetaData )
-    {
-    TMTPResponseCode resCode = EMTPRespCodeOK;
-    TRAPD( err, iDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode,
-            aNewData,
-            aObjectMetaData ) );
-
-    PRINT1( _L("MM MTP <> CSendObject::SetMetaDataToWrapperL err = %d"), err);
-
-    if ( err == KErrNone )
-        {
-        resCode = EMTPRespCodeOK;
-        }
-    else if ( err == KErrTooBig )
-    // according to the codes of S60
-        {
-        resCode = EMTPRespCodeInvalidDataset;
-        }
-    else if ( err == KErrPermissionDenied )
-        {
-        resCode = EMTPRespCodeAccessDenied;
-        }
-    else if ( err == KErrNotFound )
-        {
-        if ( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) )
-            SendResponseL( EMTPRespCodeAccessDenied );
-        }
-    else
-        {
-        err = HandleSpecificWrapperError( err, aObjectMetaData );
-
-        if ( err != KErrNone )
-            resCode = EMTPRespCodeGeneralError;
-        }
-
-    PRINT1( _L( "MM MTP <= CSendObject::SetMetaDataToWrapperL resCode = 0x%x" ), resCode );
-
-    return resCode;
-    }
-
-// -----------------------------------------------------------------------------
 // CSendObject::MatchStoreAndParentL
 // -----------------------------------------------------------------------------
 //
@@ -991,14 +974,14 @@
 
     iStorageId = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
     iParentHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
-    PRINT2( _L( "MM MTP <> CSendObject::MatchStoreAndParentL, iStorageId = 0x%X, iParentHandle = 0x%X" ),
+    PRINT2( _L( "MM MTP <> CSendObject::MatchStoreAndParentL, iStorageId = 0x%x, iParentHandle = 0x%x" ),
         iStorageId,
         iParentHandle );
 
     if ( iStorageId == KMTPStorageDefault )
         {
         iStorageId = iDpConfig.GetDefaultStorageIdL();
-        PRINT1( _L( "MM MTP <> CSendObject::GetDefaultStorageIdL, iStorageId = 0x%X" ), iStorageId );
+        PRINT1( _L( "MM MTP <> CSendObject::GetDefaultStorageIdL, iStorageId = 0x%x" ), iStorageId );
         }
 
     delete iParentSuid;
@@ -1046,10 +1029,11 @@
 // @return ETrue if yes, otherwise EFalse
 // -----------------------------------------------------------------------------
 //
-TBool CSendObject::IsTooLarge( TUint32 aObjectSize ) const
+TBool CSendObject::IsTooLarge( TUint64 aObjectSize ) const
     {
-    TBool ret = ( aObjectSize > KMaxTInt );
-    PRINT2( _L( "MM MTP <> CSendObject::IsTooLarge aObjectSize = %d, ret = %d" ), aObjectSize, ret );
+    const TUint64 KMaxSupportedFileSize = 0xFFFFFFFF; //Maximal file size supported (4GB-1)
+    TBool ret = ( aObjectSize > KMaxSupportedFileSize );
+    PRINT2( _L( "MM MTP <> CSendObject::IsTooLarge aObjectSize = 0x%Lx, ret = %d" ), aObjectSize, ret );
     return ret;
     }
 
@@ -1180,6 +1164,7 @@
     if ( iObjectSize == 0 )
         {
         SaveEmptyFileL();
+        SetObjectPropListL( *iObjectPropList );
         iObjectMgr.CommitReservedObjectHandleL( *iReceivedObjectInfo );
         }
 
@@ -1211,11 +1196,11 @@
         TInt err = KErrNone;
         if ( iProtectionStatus == EMTPProtectionNoProtection )
             {
-            iFs.SetAtt( iFullPath, KEntryAttNormal, KEntryAttReadOnly );
+            err = iFs.SetAtt( iFullPath, KEntryAttNormal, KEntryAttReadOnly );
             }
         else
             {
-            iFs.SetAtt( iFullPath, KEntryAttReadOnly, KEntryAttNormal );
+            err = iFs.SetAtt( iFullPath, KEntryAttReadOnly, KEntryAttNormal );
             }
         User::LeaveIfError( err );
         }
@@ -1240,7 +1225,7 @@
     // add playlist to MPX DB
     TParsePtrC parse( iFullPath );
     iDpConfig.GetWrapperL().SetStorageRootL( parse.Drive() );
-    iDpConfig.GetWrapperL().AddObjectL( iFullPath );
+    iDpConfig.GetWrapperL().AddObjectL( iFullPath, iObjectFormat, EMTPSubFormatCodeUnknown );
 
     if ( EMTPFormatCodeAbstractAudioVideoPlaylist == iObjectFormat )
         {
@@ -1266,13 +1251,13 @@
     PRINT( _L( "MM MTP => CSendObject::AddMediaToStoreL" ) );
 
     TBool isVideo = EFalse;
+    TMmMtpSubFormatCode subFormatCode;
     switch ( iObjectFormat )
         {
         case EMTPFormatCode3GPContainer:
         case EMTPFormatCodeMP4Container:
         case EMTPFormatCodeASF:
             {
-            TMmMtpSubFormatCode subFormatCode;
 
             if ( MmMtpDpUtility::IsVideoL( iFullPath ) )
                 {
@@ -1306,7 +1291,7 @@
     PRINT1( _L( "MM MTP <> CSendObject::AddMediaToStoreL suid = %S" ), &suid );
     TParsePtrC parse( suid );
     iDpConfig.GetWrapperL().SetStorageRootL( parse.Drive() );
-    iDpConfig.GetWrapperL().AddObjectL( iFullPath, isVideo );
+    iDpConfig.GetWrapperL().AddObjectL( iFullPath, iObjectFormat, subFormatCode );
 
     if ( isVideo )
         {
@@ -1342,8 +1327,12 @@
     if ( iProgress == ESendObjectInProgress )
         {
         PRINT1( _L( "MM MTP <> CSendObject::Rollback ROLLBACK_FILE %S" ), &iFullPath );
+        // Close the interrupted transfer file by delete iFileReceived object
+        delete iFileReceived;
+        iFileReceived = NULL;
+
         iFramework.Fs().Delete( iFullPath );
-            TRAP_IGNORE( iFramework.ObjectMgr().UnreserveObjectHandleL( *iReceivedObjectInfo ) );
+        TRAP_IGNORE( iFramework.ObjectMgr().UnreserveObjectHandleL( *iReceivedObjectInfo ) );
         iProgress = EObjectNone;
         }
     }
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -27,38 +27,39 @@
 #include "mmmtpdputility.h"
 #include "mmmtpdplogger.h"
 #include "mmmtpdpconfig.h"
+#include "cpropertysettingutility.h"
 
 // -----------------------------------------------------------------------------
-// CSetObjectPropList::NewL
+// CSendObject::NewL
 // Two-phase construction method
 // -----------------------------------------------------------------------------
 //
-//EXPORT_C MMmRequestProcessor* CSetObjectPropList::NewL( MMTPDataProviderFramework& aFramework,
-//    MMTPConnection& aConnection,
-//    CMmMtpDpMetadataAccessWrapper& aWrapper )
-//    {
-//    CSetObjectPropList* self = new ( ELeave ) CSetObjectPropList( aFramework,
-//        aConnection,
-//        aWrapper );
-//    CleanupStack::PushL( self );
-//    self->ConstructL();
-//    CleanupStack::Pop( self );
-//    return self;
-//    }
+EXPORT_C MMmRequestProcessor* CSetObjectPropList::NewL( MMTPDataProviderFramework& aFramework,
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig )
+    {
+    CSetObjectPropList* self = new ( ELeave ) CSetObjectPropList( aFramework, aConnection, aDpConfig );
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
 
 // -----------------------------------------------------------------------------
 // CSetObjectPropList::CSetObjectPropList
 // Standard c++ constructor
 // -----------------------------------------------------------------------------
 //
-EXPORT_C CSetObjectPropList::CSetObjectPropList( MMTPDataProviderFramework& aFramework,
+CSetObjectPropList::CSetObjectPropList( MMTPDataProviderFramework& aFramework,
     MMTPConnection& aConnection,
     MMmMtpDpConfig& aDpConfig ) :
-    CRequestProcessor( aFramework, aConnection, 0, NULL),
-    iObjectMgr( aFramework.ObjectMgr() ),
-    iFs( aFramework.Fs() ),
-    iDpConfig( aDpConfig ),
-    iUnprocessedIndex ( 0 )
+        CRequestProcessor( aFramework, aConnection, 0, NULL),
+        iObjectMgr( aFramework.ObjectMgr() ),
+        iFs( aFramework.Fs() ),
+        iDpConfig( aDpConfig ),
+        iUnprocessedIndex ( 0 )
     {
     PRINT( _L( "Operation: SetObjectPropList(0x9806)" ) );
     }
@@ -68,7 +69,7 @@
 // 2nd Phase Constructor
 // -----------------------------------------------------------------------------
 //
-EXPORT_C void CSetObjectPropList::ConstructL()
+void CSetObjectPropList::ConstructL()
     {
     CActiveScheduler::Add( this );
 
@@ -88,6 +89,26 @@
     }
 
 // -----------------------------------------------------------------------------
+// CSetObjectPropList::CheckRequestL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TMTPResponseCode CSetObjectPropList::CheckRequestL()
+    {
+    PRINT( _L( "MM MTP => CSetObjectPropList::CheckRequestL" ) );
+
+    TMTPResponseCode result = CRequestProcessor::CheckRequestL();
+    if ( result == EMTPRespCodeObjectWriteProtected )
+        {
+        // Return AccessDenied for P4S pass rate, instead of EMTPRespCodeObjectWriteProtected
+        result = EMTPRespCodeAccessDenied;
+        }
+
+    PRINT( _L( "MM MTP <= CSetObjectPropList::CheckRequestL" ) );
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
 // CSetObjectPropList::ServiceL
 // SetObjectPropList request handler
 // -----------------------------------------------------------------------------
@@ -132,22 +153,23 @@
 // Set object proplist
 // -----------------------------------------------------------------------------
 //
-TMTPResponseCode CSetObjectPropList::SetObjectPropListL(
-        const CMTPTypeObjectPropListElement& aPropListElement )
+TMTPResponseCode CSetObjectPropList::SetObjectPropListL( const CMTPTypeObjectPropListElement& aPropListElement )
     {
     PRINT( _L( "MM MTP => CSetObjectPropList::SetObjectPropListL" ) );
 
-    TMTPTypeUint16 protectionStatus( EMTPProtectionNoProtection );
     TMTPResponseCode responseCode( EMTPRespCodeOK );
 
     TUint32 handle = aPropListElement.Uint32L( CMTPTypeObjectPropListElement::EObjectHandle );
     TUint16 propertyCode = aPropListElement.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode );
     TUint16 dataType = aPropListElement.Uint16L( CMTPTypeObjectPropListElement::EDatatype );
     PRINT3( _L( "MM MTP <> handle = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ),
-        handle, propertyCode, dataType );
+        handle,
+        propertyCode,
+        dataType );
 
     responseCode = MmMtpDpUtility::CheckPropType( propertyCode, dataType );
     PRINT1( _L( "MM MTP <> CheckPropType response code is 0x%x" ), responseCode );
+
     if( responseCode != EMTPRespCodeOK )
         return responseCode;
 
@@ -155,12 +177,16 @@
         == iFramework.DataProviderId() )
         {
         PRINT( _L( "MM MTP => CSetObjectPropList::SetObjectPropListL enter" ) );
+
         CMTPObjectMetaData* object = CMTPObjectMetaData::NewLC(); // + object
         iFramework.ObjectMgr().ObjectL( handle, *object );
 
-        if ( protectionStatus.Value() != EMTPProtectionNoProtection )
+        // Check the file attribution first. If it is Read-Only, nothing should be set into db which is inlined with P4S cases.
+        TUint16 protectionStatus = EMTPProtectionNoProtection;
+        protectionStatus = MmMtpDpUtility::GetProtectionStatusL( iFs, object->DesC( CMTPObjectMetaData::ESuid ) );
+        if ( protectionStatus != EMTPProtectionNoProtection )
             {
-            //for some reason, P4S expects Access Denied response instead of write protected
+            // NOTE: P4S expects AccessDenied response instead of ObjectWriteProtected
             return EMTPRespCodeAccessDenied; // EMTPRespCodeObjectWriteProtected;
             }
 
@@ -172,7 +198,6 @@
             case EMTPObjectPropCodeObjectSize:
             case EMTPObjectPropCodeParentObject:
             case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
-            case EMTPObjectPropCodeNonConsumable:
             case EMTPObjectPropCodeDateAdded:
             case EMTPObjectPropCodeDateCreated:
             case EMTPObjectPropCodeDateModified:
@@ -181,13 +206,22 @@
                 }
                 break;
 
+            case EMTPObjectPropCodeNonConsumable:
+                object->SetUint( CMTPObjectMetaData::ENonConsumable,
+                    aPropListElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
+                // TODO: need to reconsider,
+                // if propList comprise both non-consumable and objectFileName,
+                // ModifyObjectL would be called twice, need to investigate if it won't affect
+                // performance
+                iFramework.ObjectMgr().ModifyObjectL( *object );
+                break;
+
             case EMTPObjectPropCodeObjectFileName:
                 {
                 TPtrC suid( object->DesC( CMTPObjectMetaData::ESuid ) );
                 TBuf<KMaxFileName> newSuid( aPropListElement.StringL(
                     CMTPTypeObjectPropListElement::EValue ) );
-                TInt err = KErrNone;
-                err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(), suid, newSuid );
+                TInt err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(), suid, newSuid );
                 PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err );
                 if ( KErrOverflow == err ) // full path name is too long
                     {
@@ -200,7 +234,9 @@
                     // it is ok if file is not found in DB, following S60 solution
                     if ( KErrNotFound == err )
                         {
-                        TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid ) );
+                        TUint formatCode = object->Uint( CMTPObjectMetaData::EFormatCode );
+                        TUint subFormatCode = object->Uint( CMTPObjectMetaData::EFormatSubCode );
+                        TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid, formatCode, subFormatCode ) );
                         PRINT1( _L( "MM MTP <> Add Object err = %d" ), err );
                         }
 
@@ -220,11 +256,12 @@
             case EMTPObjectPropCodeName:
                 {
                 CMTPTypeString* stringData = CMTPTypeString::NewLC(
-                    aPropListElement.StringL(
-                        CMTPTypeObjectPropListElement::EValue ) );// + stringData
+                    aPropListElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
 
-                responseCode = ServiceMetaDataToWrapperL( propertyCode,
-                    *stringData, *object );
+                responseCode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapperL( iDpConfig,
+                    propertyCode,
+                    *stringData,
+                    *object );
 
                 CleanupStack::PopAndDestroy( stringData );// - stringData
                 }
@@ -232,15 +269,9 @@
 
             default:
                 {
-                /*// trap and handle with response code here, so correct fail index should report
-                TRAPD( err, responseCode = ServiceSpecificObjectPropertyL( propertyCode, *object, aPropListElement ) );
-                PRINT1( _L("MM MTP <> CSetObjectPropList::SetObjectPropListL, ServiceSpecificObjectPropertyL, err = %d"), err );
-
-                if ( err == KErrNotSupported )
-                    {
-                    responseCode = EMTPRespCodeAccessDenied;
-                    }*/
-                responseCode = ServiceSpecificObjectPropertyL( propertyCode, *object,
+                responseCode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig,
+                    propertyCode,
+                    *object,
                     aPropListElement );
                 }
                 break;
@@ -264,56 +295,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CSetObjectPropList::ServiceMetaDataToWrapperL
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TMTPResponseCode CSetObjectPropList::ServiceMetaDataToWrapperL(
-    const TUint16 aPropCode,
-    MMTPType& aNewData,
-    const CMTPObjectMetaData& aObjectMetaData )
-    {
-    TMTPResponseCode resCode = EMTPRespCodeOK;
-
-    TRAPD( err, iDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode,
-        aNewData,
-        aObjectMetaData ) );
-
-    PRINT1( _L("MM MTP <> CSetObjectPropList::ServiceMetaDataToWrapperL err = %d"), err);
-
-    if ( err == KErrNone )
-        {
-        resCode = EMTPRespCodeOK;
-        }
-    else if ( err == KErrTooBig )
-        // according to the codes of S60
-        {
-        resCode = EMTPRespCodeInvalidDataset;
-        }
-    else if ( err == KErrPermissionDenied )
-        {
-        resCode = EMTPRespCodeAccessDenied;
-        }
-    else if ( err == KErrNotFound )
-        {
-        if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) )
-            SendResponseL( EMTPRespCodeAccessDenied );
-        }
-    else
-        {
-        // add new virtual call to see if the above condition can be handle probably
-        err = HandleSpecificWrapperError( err, aObjectMetaData );
-
-        if ( err != KErrNone )
-            resCode = EMTPRespCodeGeneralError;
-        }
-
-    PRINT1( _L( "MM MTP <= CSetObjectPropList::ServiceMetaDataToWrapperL resCode = 0x%x" ), resCode );
-
-    return resCode;
-    }
-
-// -----------------------------------------------------------------------------
 // CSetObjectPropList::RunL
 //
 // -----------------------------------------------------------------------------
@@ -351,15 +332,8 @@
 //
 EXPORT_C TInt CSetObjectPropList::RunError( TInt aError )
     {
-    PRINT1( _L( "MM MTP <> CSetObjectPropList::RunError with error %d" ), aError );
+    PRINT1( _L( "MM MTP <> CGetObjectPropList::RunError aError = %d" ), aError );
 
-    // Reschedule ourselves
-    // TODO: go to next index or increase?
-    // iUnprocessedIndex++
-//    TRequestStatus* status = &iStatus;
-//    User::RequestComplete( status, aError );
-//    SetActive();
-    PRINT1( _L( "MM MTP <> CGetObjectPropList::RunError aError = %d" ), aError );
     TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) );
 
     return KErrNone;
@@ -372,7 +346,6 @@
 //
 EXPORT_C void CSetObjectPropList::DoCancel()
     {
-
     }
 
 // end of file
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -72,7 +72,8 @@
         sizeof(KMTPSetObjectPropValuePolicy) / sizeof(TMTPRequestElementInfo),
         KMTPSetObjectPropValuePolicy ),
     iObjectMgr( aFramework.ObjectMgr() ),
-    iDpConfig( aDpConfig )
+    iDpConfig( aDpConfig ),
+    iFs( aFramework.Fs() )
     {
     SetPSStatus();
     PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) );
@@ -107,13 +108,15 @@
         case EMTPObjectPropCodeObjectSize:
         case EMTPObjectPropCodeParentObject:
         case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
-        case EMTPObjectPropCodeNonConsumable:
         case EMTPObjectPropCodeDateAdded:
         case EMTPObjectPropCodeDateCreated:
         case EMTPObjectPropCodeDateModified:
         //case EMTPObjectPropCodeVideoBitRate:  // move to specific dp
             returnCode = ETrue;
             break;
+        case EMTPObjectPropCodeNonConsumable:
+            // It's settable, return EFalse here.
+            break;
 
         default:
             returnCode = IsSpecificPropCodeReadOnly(aPropCode);
@@ -133,43 +136,46 @@
     PRINT( _L( "MM MTP => CSetObjectPropValue::CheckRequestL" ) );
 
     TMTPResponseCode result = CRequestProcessor::CheckRequestL();
+    if ( result == EMTPRespCodeObjectWriteProtected )
+        {
+        // Return AccessDenied for P4S pass rate, instead of EMTPRespCodeObjectWriteProtected
+        result = EMTPRespCodeAccessDenied;
+        }
 
     // Check if property is supported
     if ( result == EMTPRespCodeOK )
         {
         iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
         PRINT1( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL iPropCode = 0x%x" ), iPropCode );
-        result = EMTPRespCodeInvalidObjectPropCode;
 
         TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
         CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( objectHandle );
-
-        if (!objectInfo)
+        if ( objectInfo == NULL )
             {
-            PRINT(_L("MM MTP <> CGetObjectPropValue::CheckRequestL, objectInfo is NULL"));
+            PRINT( _L("MM MTP <> CGetObjectPropValue::CheckRequestL, objectInfo is NULL" ) );
             return EMTPRespCodeInvalidObjectHandle;
             }
 
-        TFileName fileName = objectInfo->DesC(CMTPObjectMetaData::ESuid);
-        TUint32 formatCode = objectInfo->Uint(CMTPObjectMetaData::EFormatCode);
-
+        TFileName fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid );
+        TUint32 formatCode = objectInfo->Uint( CMTPObjectMetaData::EFormatCode );
         PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ),
-                objectHandle,
-                &fileName,
-                formatCode );
+            objectHandle,
+            &fileName,
+            formatCode );
         const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( formatCode );
         TInt count = properties->Count();
+
+        result = EMTPRespCodeInvalidObjectPropCode;
         for ( TInt i = 0; i < count; i++ )
             {
             // Object property code is supported, but can not be set which is read only.
-            if ( (*properties)[i] == iPropCode
-                && IsPropCodeReadonly( iPropCode ) )
+            if ( ( *properties )[i] == iPropCode && IsPropCodeReadonly( iPropCode ) )
                 {
                 result = EMTPRespCodeAccessDenied;
                 break;
                 }
             // Object property code is supported and can be set.
-            else if ( iPropCode == (*properties)[i] )
+            else if ( iPropCode == ( *properties )[i] )
                 {
                 result = EMTPRespCodeOK;
                 break;
@@ -212,13 +218,16 @@
         case EMTPObjectPropCodeDateAdded:       // 0xDC4E
         case EMTPObjectPropCodeDateCreated:     // Date Created(0xDC08)
         case EMTPObjectPropCodeDateModified:    // Modified Date(0xDC09)
-        case EMTPObjectPropCodeNonConsumable:   // Non Consumable(0xDC4F)
         case EMTPObjectPropCodeVideoBitRate: // 0xDE9C
             {
             SendResponseL( EMTPRespCodeAccessDenied );
             }
             break;
 
+        case EMTPObjectPropCodeNonConsumable:   // Non Consumable(0xDC4F)
+            ReceiveDataL( iMTPTypeUint8 );
+            break;
+
         // Get Data for String objects
         case EMTPObjectPropCodeObjectFileName:  // 0xDC07
         case EMTPObjectPropCodeName: // 0xDC44
@@ -252,6 +261,11 @@
 
     switch ( iPropCode )
         {
+        case EMTPObjectPropCodeNonConsumable:
+            iObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable, iMTPTypeUint8.Value() );
+            iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
+            break;
+
         case EMTPObjectPropCodeObjectFileName:
             {
             TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
@@ -273,7 +287,9 @@
                 // it is ok if file is not found in DB, following S60 solution
                 if ( KErrNotFound == err )
                     {
-                    TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid ) );
+                    TUint formatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatCode );
+                    TUint subFormatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatSubCode );
+                    TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid, formatCode, subFormatCode ) );
                     PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err );
                     }
 
@@ -343,12 +359,8 @@
         }
     else if ( err == KErrNotFound )
         {
-//        TMTPFormatCode formatCode =
-//            MmMtpDpUtility::FormatFromFilename( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) );
         if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) )
             SendResponseL( EMTPRespCodeAccessDenied );
-        else
-            SendDataL( aNewData );
         }
     else
         {
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -16,11 +16,12 @@
 */
 
 
+#include <mtp/mmtpdataproviderframework.h>
+#include <mtp/mmtpobjectmgr.h>
 #include <bautils.h>
 #include <e32math.h>
-#include <mtp/mmtpdataproviderframework.h>
 #include <e32property.h>
-#include <MtpPrivatePSKeys.h>
+#include <mtpprivatepskeys.h>
 
 #include "cmmmtpdpmetadataaccesswrapper.h"
 #include "cmmmtpdpmetadatampxaccess.h"
@@ -30,23 +31,23 @@
 
 const TInt KMMMTPDummyFileArrayGranularity = 5;
 
-CMmMtpDpMetadataAccessWrapper* CMmMtpDpMetadataAccessWrapper::NewL( RFs& aRfs, 
+CMmMtpDpMetadataAccessWrapper* CMmMtpDpMetadataAccessWrapper::NewL( RFs& aRfs,
     MMTPDataProviderFramework& aFramework )
     {
     CMmMtpDpMetadataAccessWrapper* me = new (ELeave) CMmMtpDpMetadataAccessWrapper( aRfs, aFramework );
     CleanupStack::PushL( me );
     me->ConstructL();
     CleanupStack::Pop( me );
-    
+
     return me;
     }
 
-CMmMtpDpMetadataAccessWrapper::CMmMtpDpMetadataAccessWrapper( RFs& aRfs, 
+CMmMtpDpMetadataAccessWrapper::CMmMtpDpMetadataAccessWrapper( RFs& aRfs,
     MMTPDataProviderFramework& aFramework ) :
     iRfs( aRfs ),
     iFramework( aFramework )
     {
-    
+    // Do nothing
     }
 
 // ---------------------------------------------------------------------------
@@ -61,16 +62,16 @@
     iMmMtpDpMetadataMpxAccess = CMmMtpDpMetadataMpxAccess::NewL( iRfs, iFramework );
 
     iMmMtpDpMetadataVideoAccess = CMmMtpDpMetadataVideoAccess::NewL( iRfs );
-    
-    iPlaylistArray = new ( ELeave ) CDesCArrayFlat( KMMMTPDummyFileArrayGranularity );
-    
+
+    iAbstractMediaArray = new ( ELeave ) CDesCArrayFlat( KMMMTPDummyFileArrayGranularity );
+
     // Create the PS key to notify subscribers that MTP mode is activated
     _LIT_SECURITY_POLICY_C1(KKeyReadPolicy, ECapabilityReadUserData);
     _LIT_SECURITY_POLICY_C1(KKeyWritePolicy, ECapabilityWriteUserData);
-    RProperty::Define( KMtpPSUid, 
-                       KMtpPSStatus, 
-                       RProperty::EInt, 
-                       KKeyReadPolicy, 
+    RProperty::Define( KMtpPSUid,
+                       KMtpPSStatus,
+                       RProperty::EInt,
+                       KKeyReadPolicy,
                        KKeyWritePolicy);
 
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::ConstructL" ) );
@@ -86,37 +87,39 @@
     PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::~CMmMtpDpMetadataAccessWrapper" ) );
     RemoveDummyFiles();
 
-    delete iPlaylistArray;
+    delete iAbstractMediaArray;
 
     delete iMmMtpDpMetadataVideoAccess;
     delete iMmMtpDpMetadataMpxAccess;
-    
+
     // unblock MPX
-    RProperty::Set( KMtpPSUid, 
-                    KMtpPSStatus, 
-                    EMtpPSStatusUninitialized);
+    RProperty::Set( KMtpPSUid,
+                    KMtpPSStatus,
+                    EMtpPSStatusUninitialized );
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::~CMmMtpDpMetadataAccessWrapper" ) );
     }
 
 // -----------------------------------------------------------------------------
-// CMmMtpDpMetadataAccessWrapper::SetPlaylist
-// Set playlist to DB
+// CMmMtpDpMetadataAccessWrapper::SetAbstractMediaL
+// Set abstract media to DB
 // -----------------------------------------------------------------------------
 //
-EXPORT_C void CMmMtpDpMetadataAccessWrapper::SetPlaylistL( const TDesC& aPlaylistFileName, CDesCArray& aRefFileArray )
+EXPORT_C void CMmMtpDpMetadataAccessWrapper::SetAbstractMediaL( const TDesC& aAbstractMediaFileName, 
+    CDesCArray& aRefFileArray, 
+    TMPXGeneralCategory aCategory )
     {
-    PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::SetPlaylistL aPlaylistFileName = %S" ), &aPlaylistFileName );
+    PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::SetAbstractMediaL aAbstractMediaFileName = %S" ), &aAbstractMediaFileName );
 
-    if ( !MmMtpDpUtility::IsVideoL( aPlaylistFileName, iFramework ) )
+    if ( !MmMtpDpUtility::IsVideoL( aAbstractMediaFileName, iFramework ) )
         {
-        iMmMtpDpMetadataMpxAccess->SetPlaylistL( aPlaylistFileName, aRefFileArray );
+        iMmMtpDpMetadataMpxAccess->SetAbstractMediaL( aAbstractMediaFileName, aRefFileArray, aCategory );
         }
 
-    PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::SetPlaylistL" ) );
+    PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::SetAbstractMediaL" ) );
     }
 
 // ---------------------------------------------------------------------------
-// CMmMtpDpMetadataAccessWrapper::AddMediaL
+// CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL
 // Gets a piece of metadata from the collection
 // ---------------------------------------------------------------------------
 //
@@ -154,8 +157,15 @@
     {
     PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::SetObjectMetadataValueL" ) );
 
-    TPtrC fullFileName( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) );
-    if ( MmMtpDpUtility::IsVideoL( fullFileName, iFramework ) )
+    // In SendObjectPropList, formatCode has already know, but object handle has not been committed into db
+    // In that case, format couldn't be get from object manager
+    TUint formatCode = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode );
+    TUint formatSubCode = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatSubCode );
+
+    TBool isVideo = EFalse;
+    isVideo = MmMtpDpUtility::IsVideoL( formatCode, formatSubCode );
+
+    if ( isVideo )
         {
         iMmMtpDpMetadataVideoAccess->SetObjectMetadataValueL( aPropCode,
             aNewData,
@@ -168,7 +178,6 @@
             aObjectMetaData );
         }
 
-
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::SetObjectMetadataValueL" ) );
     }
 
@@ -183,22 +192,19 @@
     PRINT2( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::RenameObjectL old = %S, new = %S" ),
         &aOldFileName,
         &aNewFileName );
-    
-   TMTPFormatCode formatCode = MmMtpDpUtility::FormatFromFilename( aOldFileName );
-    if ( formatCode == EMTPFormatCodeWMV )
+
+    if ( MmMtpDpUtility::IsVideoL( aOldFileName, iFramework ) )
         {
         iMmMtpDpMetadataVideoAccess->RenameRecordL( aOldFileName, aNewFileName );
         }
     else
         {
-        if ( !MmMtpDpUtility::IsVideoL( aNewFileName , iFramework ) )
-            {
-            iMmMtpDpMetadataMpxAccess->RenameObjectL( aOldFileName, aNewFileName, formatCode );
-            }
-        else
-            {
-            iMmMtpDpMetadataVideoAccess->RenameRecordL( aOldFileName, aNewFileName );
-            }
+        CMTPObjectMetaData* object = CMTPObjectMetaData::NewLC();
+        iFramework.ObjectMgr().ObjectL( aOldFileName, *object );
+        iMmMtpDpMetadataMpxAccess->RenameObjectL( aOldFileName,
+            aNewFileName,
+            object->Uint( CMTPObjectMetaData::EFormatCode ) );
+        CleanupStack::PopAndDestroy( object );
         }
 
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::RenameObjectL" ) );
@@ -215,8 +221,8 @@
     PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::DeleteObjectL" ) );
 
     TMPXGeneralCategory category = Category( aFormatCode );
-    
-    // Have to do this.  File might not be in file system anymore, have to 
+
+    // Have to do this.  File might not be in file system anymore, have to
     // reply on ObjectManager
     if ( ( aFormatCode == EMTPFormatCodeMP4Container )
         || ( aFormatCode == EMTPFormatCode3GPContainer )
@@ -231,7 +237,7 @@
             category = EMPXSong;
             }
         }
-    
+
     switch ( category )
         {
         case EMPXPlaylist:
@@ -300,7 +306,7 @@
         iMmMtpDpMetadataVideoAccess->GetImageObjPropL( aFullFileName, aWidth, aHeight );
         }
     }
-// ----------------------------------------------------------------------------- 
+// -----------------------------------------------------------------------------
 // CMmMtpDpMetadataAccessWrapper::OpenSessionL
 // Called when the MTP session is initialised
 // -----------------------------------------------------------------------------
@@ -370,79 +376,70 @@
     }
 
 // ---------------------------------------------------------------------------
-// CMmMtpDpMetadataAccessWrapper::GetAllPlaylistL
-// 
+// CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL
+//
 // ---------------------------------------------------------------------------
-EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetAllPlaylistL( const TDesC& aStoreRoot, CMPXMediaArray** aPlaylists )
+EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL( const TDesC& aStoreRoot, CMPXMediaArray** aAbstractMedias, TMPXGeneralCategory aCategory )
     {
-    iMmMtpDpMetadataMpxAccess->GetAllPlaylistL( aStoreRoot, aPlaylists );
+    iMmMtpDpMetadataMpxAccess->GetAllAbstractMediaL( aStoreRoot, aAbstractMedias, aCategory );
     }
 
 // ---------------------------------------------------------------------------
 // CMmMtpDpMetadataAccessWrapper::GetAllReferenceL
-// 
+//
 // ---------------------------------------------------------------------------
-//s
-EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL( CMPXMedia* aPlaylist, CDesCArray& aReferences )
+//
+EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL( CMPXMedia* aAbstractMedia, CDesCArray& aReferences )
     {
-    iMmMtpDpMetadataMpxAccess->GetAllReferenceL( aPlaylist, aReferences );
+    iMmMtpDpMetadataMpxAccess->GetAllReferenceL( aAbstractMedia, aReferences );
     }
 
 // ---------------------------------------------------------------------------
-// CMmMtpDpMetadataAccessWrapper::GetPlaylistNameL
-// 
+// CMmMtpDpMetadataAccessWrapper::GetAbstractMediaNameL
+//
 // ---------------------------------------------------------------------------
 //
-EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetPlaylistNameL( CMPXMedia* aPlaylist, TDes& aPlaylistName )
+EXPORT_C HBufC* CMmMtpDpMetadataAccessWrapper::GetAbstractMediaNameL( CMPXMedia* aAbstractMedia, TMPXGeneralCategory aCategory )
     {
-    iMmMtpDpMetadataMpxAccess->GetPlaylistNameL( aPlaylist, aPlaylistName );
+    return iMmMtpDpMetadataMpxAccess->GetAbstractMediaNameL( aAbstractMedia, aCategory );
     }
 
-// ----------------------------------------------------------------------------- 
+// -----------------------------------------------------------------------------
 // CMmMtpDpMetadataAccessWrapper::AddObjectL
-// Add object (music, video and playlist) info to DB
+// Add object (music, video, playlist and abstract media) info to DB
 // -----------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataAccessWrapper::AddObjectL( const TDesC& aFullFileName, TBool aIsVideo /*= EFalse */ )
+void CMmMtpDpMetadataAccessWrapper::AddObjectL( const TDesC& aFullFileName, TUint aFormatCode, TUint aSubFormatCode )
     {
     PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL aFullFileName = %S" ), &aFullFileName );
 
-    if ( aFullFileName.Length() <= 0)
+    if ( aFullFileName.Length() <= 0 )
         {
         User::Leave( KErrArgument );
         }
-    if ( aIsVideo )
+    if ( MmMtpDpUtility::IsVideoL( aFormatCode, aSubFormatCode ) )
         {
         PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL Addvideo" ) );
         iMmMtpDpMetadataVideoAccess->AddVideoL( aFullFileName );
         }
     else
         {
-        if ( MmMtpDpUtility::IsVideoL( aFullFileName, iFramework ) )
+        if ( aFormatCode == EMTPFormatCodeM3UPlaylist
+            || aFormatCode == EMTPFormatCodeMPLPlaylist
+            || aFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist
+            || aFormatCode == EMTPFormatCodeAbstractAudioPlaylist
+            || aFormatCode == EMTPFormatCodeAbstractVideoPlaylist
+            || aFormatCode == EMTPFormatCodeASXPlaylist
+            || aFormatCode == EMTPFormatCodePLSPlaylist )
             {
-            PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL Addvideo" ) );
-            iMmMtpDpMetadataVideoAccess->AddVideoL( aFullFileName );
+            PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddPlaylist" ) );
+            iMmMtpDpMetadataMpxAccess->AddAbstractMediaL( aFullFileName,
+                EMPXPlaylist );
             }
         else
             {
-            TMTPFormatCode formatCode = MmMtpDpUtility::FormatFromFilename( aFullFileName );
-
-            if ( formatCode == EMTPFormatCodeM3UPlaylist
-                || formatCode == EMTPFormatCodeMPLPlaylist
-                || formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist
-                || formatCode == EMTPFormatCodeAbstractAudioPlaylist
-                || formatCode == EMTPFormatCodeAbstractVideoPlaylist
-                || formatCode == EMTPFormatCodeASXPlaylist
-                || formatCode == EMTPFormatCodePLSPlaylist )
-                {
-                PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddPlaylist" ) );
-                iMmMtpDpMetadataMpxAccess->AddPlaylistL( aFullFileName );
-                }
-            else
-                {
-                PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddSong" ) );
-                iMmMtpDpMetadataMpxAccess->AddSongL( aFullFileName );
-                }
+            PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddSong" ) );
+            iMmMtpDpMetadataMpxAccess->AddSongL( aFullFileName );
             }
         }
 
@@ -454,8 +451,8 @@
 // Get Modified content
 // ---------------------------------------------------------------------------
 //
-EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL( const TDesC& aStorageRoot, 
-    TInt& arrayCount, 
+EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL( const TDesC& aStorageRoot,
+    TInt& arrayCount,
     CDesCArray& aModifiedcontent )
     {
     iMmMtpDpMetadataMpxAccess->SetStorageRootL( aStorageRoot );
@@ -479,7 +476,7 @@
     return iMmMtpDpMetadataMpxAccess->IsExistL( aSuid );
     }
 
-// ----------------------------------------------------------------------------- 
+// -----------------------------------------------------------------------------
 // CMmMtpDpMetadataAccessWrapper::AddDummyFile
 // Add one dummy file to dummy files array
 // -----------------------------------------------------------------------------
@@ -487,10 +484,10 @@
 EXPORT_C void CMmMtpDpMetadataAccessWrapper::AddDummyFileL( const TDesC& aDummyFileName )
     {
     PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::AddDummyFile aDummyFileName(%S)" ), &aDummyFileName );
-    iPlaylistArray->AppendL( aDummyFileName );
+    iAbstractMediaArray->AppendL( aDummyFileName );
     }
 
-// ----------------------------------------------------------------------------- 
+// -----------------------------------------------------------------------------
 // CMmMtpDpMetadataAccessWrapper::DeleteDummyFile
 // Delete one dummy file from dummy files array
 // -----------------------------------------------------------------------------
@@ -499,12 +496,12 @@
     {
     PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::DeleteDummyFile aDummyFileName(%S)" ), &aDummyFileName );
     TInt pos = 0;
-    if ( iPlaylistArray->Count() > 0 )
+    if ( iAbstractMediaArray->Count() > 0 )
         {
-        if ( 0 == iPlaylistArray->Find( aDummyFileName, pos ) )
+        if ( 0 == iAbstractMediaArray->Find( aDummyFileName, pos ) )
             {
             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::DeleteDummyFile pos = %d" ), pos );
-            iPlaylistArray->Delete( pos );
+            iAbstractMediaArray->Delete( pos );
             }
         }
     }
@@ -549,26 +546,26 @@
 void CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles()
     {
     PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles" ) );
-    
-    TInt count = iPlaylistArray->Count();
+
+    TInt count = iAbstractMediaArray->Count();
     // Check if playlist file is a dummy file or an imported file
     for ( TInt i = 0; i < count; i++ )
         {
-        if ( MmMtpDpUtility::FormatFromFilename( (*iPlaylistArray)[i] ) !=
+        if ( MmMtpDpUtility::FormatFromFilename( (*iAbstractMediaArray)[i] ) !=
             EMTPFormatCodeM3UPlaylist )
             {
             // delete the virtual playlist
             // iFramework has release don't use iFramework.FS()
-            TInt err = iRfs.Delete( (*iPlaylistArray)[i] );
+            TInt err = iRfs.Delete( ( *iAbstractMediaArray )[i] );
 
             PRINT2( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFile filename = %S, err %d" ),
-                &( (*iPlaylistArray)[i] ),
+                &( (*iAbstractMediaArray)[i] ),
                 err );
             }
         else
             {
             // leave the Imported playlist in the file system
-            PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFile, Don't delete m3u file [%S]" ), &( (*iPlaylistArray)[i] ) );
+            PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFile, Don't delete m3u file [%S]" ), &( (*iAbstractMediaArray)[i] ) );
             }
         }
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles" ) );
@@ -579,7 +576,7 @@
 // Update Music collection
 // ---------------------------------------------------------------------------
 //
-EXPORT_C void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL() 
+EXPORT_C void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL()
     {
     iMmMtpDpMetadataMpxAccess->UpdateMusicCollectionL( );
     }
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -56,6 +56,19 @@
 _LIT( KMtpDateTimeConnector, "T" );
 _LIT( KEmptyText, "" );
 
+#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
+_LIT( KMpxCollectionNewL, "MpxCollectionNewL" );
+_LIT( KMpxCollectionAddL, "MpxCollectionAddL" );
+_LIT( KMpxCollectionGetL, "MpxCollectionGetL" );
+_LIT( KMpxCollectionSetL, "MpxCollectionSetL" );
+_LIT( KMpxCollectionSetReferenceL, "MpxCollectionSetReferenceL" );
+_LIT( KMpxCollectionGetAbstractMedia, "MpxCollectionGetAbstractMedia" );
+_LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
+_LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
+_LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" );
+_LIT( KSetMetadataValue, "SetMetadataValueL" );
+#endif
+
 #ifdef  _DEBUG
 _LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
 #endif
@@ -76,7 +89,7 @@
     iRfs( aRfs ),
     iFramework( aFramework )
     {
-
+    // Do nothing
     }
 
 // ---------------------------------------------------------------------------
@@ -134,7 +147,7 @@
 
     CleanupStack::PopAndDestroy( suid ); // - suid
 
-    TMPXAttributeData attrib( MpxAttribFromPropL( media, aPropCode ) );
+    TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) );
     TBool isSupported = media.IsSupported( attrib );
     PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported);
 
@@ -346,9 +359,9 @@
     // as a General Error
     if ( iCollectionHelper == NULL )
         {
-        PERFLOGSTART(KMpxCollectionNewL);
+        PERFLOGSTART( KMpxCollectionNewL );
         iCollectionHelper = CMPXCollectionHelperFactory::NewCollectionCachedHelperL();
-        PERFLOGSTOP(KMpxCollectionNewL);
+        PERFLOGSTOP( KMpxCollectionNewL );
 
         // Do a search for a song ID that does not exist
         // This is to validate the presence of the media database.
@@ -543,9 +556,9 @@
                 KMPXMediaGeneralModified,
                 EFalse );
             // Update the song's metadata with the media object
-            PERFLOGSTART(KMpxCollectionSetL);
+            PERFLOGSTART( KMpxCollectionSetL );
             CollectionHelperL()->SetL( media );
-            PERFLOGSTOP(KMpxCollectionSetL);
+            PERFLOGSTOP( KMpxCollectionSetL );
 
             CleanupStack::PopAndDestroy( media ); // - media
             }
@@ -596,7 +609,8 @@
     TUint aFormatCode )
     {
     PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::RenameObjectL aOldFileName = %S, aNewFileName = %S" ),
-            &aOldFileName, &aNewFileName );
+            &aOldFileName,
+            &aNewFileName );
 
     TInt err = KErrNone;
 
@@ -604,10 +618,7 @@
         || ( aFormatCode == EMTPFormatCodeM3UPlaylist ) )
         {
         PRINT( _L( "MM MTP <> Playlist" ) );
-        TRAP( err, CollectionHelperL()->RenameL(
-            aOldFileName,
-            aNewFileName,
-            EMPXPlaylist ) );
+        TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, EMPXPlaylist ) );
         }
     else // Not a playlist
         {
@@ -703,14 +714,13 @@
     if ( ( format == EMTPFormatCodeAbstractAudioVideoPlaylist )
         || ( format == EMTPFormatCodeM3UPlaylist ) )
         {
-        PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL format is playlist" ) );
+        PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL format is abstract media" ) );
         contentIDs.AppendL( KMPXMediaIdGeneral );
 
         media = CMPXMedia::NewL( contentIDs.Array() );
         CleanupStack::PushL( media ); // + media
 
-        media->SetTObjectValueL<TMPXGeneralCategory>(
-            KMPXMediaGeneralCategory,
+        media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
             EMPXPlaylist );
         }
     else
@@ -739,12 +749,14 @@
     media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
     CleanupStack::PopAndDestroy( suid ); // - suid
 
+    PERFLOGSTART( KSetMetadataValue );
     SetMetadataValueL( aPropCode, aNewData, *media );
+    PERFLOGSTOP( KSetMetadataValue );
 
     // Update the song's metadata with the media object
-    PERFLOGSTART(KMpxCollectionSetL);
+    PERFLOGSTART( KMpxCollectionSetL );
     CollectionHelperL()->SetL( media );
-    PERFLOGSTOP(KMpxCollectionSetL);
+    PERFLOGSTOP( KMpxCollectionSetL );
 
     CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs
 
@@ -765,7 +777,7 @@
     TMTPTypeUint16 uint16Data;
     TMTPTypeUint32 uint32Data;
 
-    TMPXAttributeData attrib( MpxAttribFromPropL( aMediaProp, aPropCode ) );
+    TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) );
 
     switch ( aPropCode )
         {
@@ -906,7 +918,7 @@
         case EMTPObjectPropCodeDescription:
             {
 #ifdef __MUSIC_ID_SUPPORT
-            //WriteMusicIdsL(*longString);
+            // WriteMusicIdsL(*longString);
 #else
             desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData
             MMTPType::CopyL( aNewData, *desData );
@@ -970,9 +982,7 @@
     CleanupStack::PushL( searchMedia ); // + searchMedia
 
     searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
-
     searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
-
     searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
 
     RArray<TMPXAttribute> songAttributes;
@@ -981,11 +991,10 @@
 
     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL searchMedia setup with no problems" ) );
 
-    PERFLOGSTART(KMpxCollectionFindAllLBeforeAdd);
-    CMPXMedia* foundMedia = CollectionHelperL()->FindAllL(
-        *searchMedia,
+    PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd );
+    CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
         songAttributes.Array() );
-    PERFLOGSTOP(KMpxCollectionFindAllLBeforeAdd);
+    PERFLOGSTOP( KMpxCollectionFindAllLBeforeAdd );
 
     CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
     CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
@@ -1022,11 +1031,9 @@
         CleanupStack::PushL( media ); // + media
 
         // MPXMedia default types
-        media->SetTObjectValueL<TMPXGeneralType>(
-            KMPXMediaGeneralType,
+        media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
             EMPXItem );
-        media->SetTObjectValueL<TMPXGeneralCategory>(
-            KMPXMediaGeneralCategory,
+        media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
             EMPXSong );
         // File Path
         //
@@ -1050,17 +1057,17 @@
 
         if ( foundItemCount == 0 )
             {
-            PERFLOGSTART(KMpxCollectionAddL);
+            PERFLOGSTART( KMpxCollectionAddL );
             CollectionHelperL()->AddL( media );
-            PERFLOGSTOP(KMpxCollectionAddL);
+            PERFLOGSTOP( KMpxCollectionAddL );
 
             PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL Media added into collection" ) );
             }
         else
             {
-            PERFLOGSTART(KMpxCollectionSetL);
+            PERFLOGSTART( KMpxCollectionSetL );
             CollectionHelperL()->SetL( media );
-            PERFLOGSTOP(KMpxCollectionSetL);
+            PERFLOGSTOP( KMpxCollectionSetL );
 
             PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL Media metadata updated in collection" ) );
             }
@@ -1074,15 +1081,15 @@
     }
 
 // -----------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::AddPlaylistL
-// Adds Playlist to Mpx DB
+// CMmMtpDpMetadataMpxAccess::AddAbstractMediaL
+// Adds abstract media to Mpx DB
 // -----------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataMpxAccess::AddPlaylistL( const TDesC& aFullFileName )
+void CMmMtpDpMetadataMpxAccess::AddAbstractMediaL( const TDesC& aFullFileName, TMPXGeneralCategory aCategory )
     {
-    PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::AddPlaylistL aFullFileName = %S" ), &aFullFileName );
+    PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::AddAbstractMediaL aFullFileName = %S" ), &aFullFileName );
 
-    // Does a record already exist for this playlist?
+    // Does a record already exist for this AbstractMedia?
     RArray<TInt> contentIDs;
     CleanupClosePushL( contentIDs ); // + contentIDs
     contentIDs.AppendL( KMPXMediaIdGeneral );
@@ -1092,21 +1099,24 @@
     CleanupStack::PushL( searchMedia ); // + searchMedia
 
     searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
-    searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
+    searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory );
     searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
 
-    RArray<TMPXAttribute> playlistAttributes;
-    CleanupClosePushL( playlistAttributes ); // + playlistAttributes
-    playlistAttributes.AppendL( KMPXMediaGeneralId );
-    playlistAttributes.AppendL( KMPXMediaGeneralTitle );
-    playlistAttributes.AppendL( KMPXMediaGeneralUri );
+    RArray<TMPXAttribute> abstractMediaAttributes;
+    CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
+    abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
+    abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
+    if ( aCategory == EMPXPlaylist )
+        {
+        abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
+        }
 
-    PERFLOGSTART(KMpxCollectionFindAllLBeforeAdd);
+    PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd );
     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
-        playlistAttributes.Array() );
-    PERFLOGSTOP(KMpxCollectionFindAllLBeforeAdd);
+        abstractMediaAttributes.Array() );
+    PERFLOGSTOP( KMpxCollectionFindAllLBeforeAdd );
 
-    CleanupStack::PopAndDestroy( &playlistAttributes ); // - playlistAttributes
+    CleanupStack::PopAndDestroy( &abstractMediaAttributes ); // - abstractMediaAttributes
     CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
     CleanupStack::PushL( foundMedia ); // + foundMedia
 
@@ -1117,12 +1127,12 @@
 
     if ( foundItemCount != 0 )
         {
-        PRINT( _L( "MM MTP <> Playlist Media already exists in the collection" ) );
+        PRINT( _L( "MM MTP <> Abstract Media already exists in the collection" ) );
         }
     else
         {
-        // Creat media properties for the playlist
-        PRINT( _L( "MM MTP <> Create playlist media properties" ) );
+        // Creat media properties for the abstractMedia
+        PRINT( _L( "MM MTP <> Create abstract media properties" ) );
         RArray<TInt> contentIDs;
         CleanupClosePushL( contentIDs ); // + contentIDs
         contentIDs.AppendL( KMPXMediaIdGeneral );
@@ -1131,14 +1141,14 @@
         CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
         CleanupStack::PushL( media ); // + media
 
-        CMPXMediaArray* playlistArray = CMPXMediaArray::NewL();
-        CleanupStack::PushL( playlistArray ); // + playlistArray;
+        CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL();
+        CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray;
 
         // MPXMedia default types
         media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
             EMPXItem );
         media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
-            EMPXPlaylist );
+            aCategory );
         // File Path
         //
         media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
@@ -1146,37 +1156,40 @@
         TParsePtrC parse( aFullFileName );
 
         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
-        media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
+        if ( aCategory == EMPXPlaylist )
+            {
+            media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
+            }
         media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue );
-        media->SetCObjectValueL( KMPXMediaArrayContents, playlistArray );
-        media->SetTObjectValueL( KMPXMediaArrayCount, playlistArray->Count() );
+        media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
+        media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() );
 
-        PERFLOGSTART(KMpxCollectionAddL);
+        PERFLOGSTART( KMpxCollectionAddL );
         CollectionHelperL()->AddL( media );
-        PERFLOGSTOP(KMpxCollectionAddL);
+        PERFLOGSTOP( KMpxCollectionAddL );
 
         // Clear the array
-        CleanupStack::PopAndDestroy( playlistArray ); // - playlistArray
+        CleanupStack::PopAndDestroy( abstractMediaArray ); // - abstractMediaArray
 
         CleanupStack::PopAndDestroy( media ); // - media
         }
 
     CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia
 
-    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddPlaylistL" ) );
+    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddAbstractMediaL" ) );
     }
 
 // -----------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::SetPlaylistL
-// Set playlist to DB
+// CMmMtpDpMetadataMpxAccess::SetAbstractMediaL
+// Set abstract media to DB
 // -----------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataMpxAccess::SetPlaylistL( const TDesC& aPlaylistFileName,
-    CDesCArray& aRefFileArray )
+void CMmMtpDpMetadataMpxAccess::SetAbstractMediaL( const TDesC& aAbstractMediaFileName,
+    CDesCArray& aRefFileArray, TMPXGeneralCategory aCategory )
     {
-    PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetPlaylistL" ) );
-    CMPXMediaArray* playlistArray = CMPXMediaArray::NewL();
-    CleanupStack::PushL( playlistArray ); // + playlistArray
+    PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetAbstractMediaL" ) );
+    CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL();
+    CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray
 
     TUint count = aRefFileArray.Count();
     for ( TUint j = 0; j < count; j++ )
@@ -1211,7 +1224,7 @@
         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
 
         // Add media into array contents
-        playlistArray->AppendL( media );
+        abstractMediaArray->AppendL( media );
 
         CleanupStack::Pop( media ); // - media
         }
@@ -1220,35 +1233,35 @@
     CleanupClosePushL( contentIDs ); // + contentIDs
     contentIDs.AppendL( KMPXMediaIdGeneral );
 
-    CMPXMedia* playlistMedia = CMPXMedia::NewL( contentIDs.Array() );
+    CMPXMedia* abstractMedia = CMPXMedia::NewL( contentIDs.Array() );
     CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
-    CleanupStack::PushL( playlistMedia ); // + playlistMedia
+    CleanupStack::PushL( abstractMedia ); // + abstractMedia
 
-    playlistMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
+    abstractMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
 
-    playlistMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
+    abstractMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory );
 
-    playlistMedia->SetTextValueL( KMPXMediaGeneralUri, aPlaylistFileName );
+    abstractMedia->SetTextValueL( KMPXMediaGeneralUri, aAbstractMediaFileName );
 
-    TParsePtrC parse( aPlaylistFileName );
-    playlistMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
-    playlistMedia->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized,
+    TParsePtrC parse( aAbstractMediaFileName );
+    abstractMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
+    abstractMedia->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized,
         ETrue );
-    playlistMedia->SetCObjectValueL( KMPXMediaArrayContents, playlistArray );
-    playlistMedia->SetTObjectValueL( KMPXMediaArrayCount,
-        playlistArray->Count() );
+    abstractMedia->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
+    abstractMedia->SetTObjectValueL( KMPXMediaArrayCount,
+        abstractMediaArray->Count() );
 
-    // Update the duplicate playlist(s) with the new playlist array
-    PERFLOGSTART(KMpxCollectionSetL);
-    CollectionHelperL()->SetL( playlistMedia );
-    PERFLOGSTOP(KMpxCollectionSetL);
+    // Update the duplicate abstractMedia(s) with the new abstractMedia array
+    PERFLOGSTART( KMpxCollectionSetReferenceL );
+    CollectionHelperL()->SetL( abstractMedia );
+    PERFLOGSTOP( KMpxCollectionSetReferenceL );
 
-    CleanupStack::PopAndDestroy( playlistMedia ); // - playlistMedia
+    CleanupStack::PopAndDestroy( abstractMedia ); // - abstractMedia
 
     // Clear the array
-    CleanupStack::PopAndDestroy( playlistArray ); // - playlistArray
+    CleanupStack::PopAndDestroy( abstractMediaArray ); // - abstractMediaArray
 
-    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetPlaylistL" ) );
+    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetAbstractMediaL" ) );
     }
 
 // ---------------------------------------------------------------------------
@@ -1303,32 +1316,50 @@
     aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtFileName, KNullDesC );
     // URL
     aMediaProp.SetTextValueL( KMPXMediaMusicURL, KNullDesC );
+
+    // add below for P4S failed case, that get metadata from cached CMPXMedia object
+    // DateAdded
+    TTime time;
+    time.HomeTime();
+    aMediaProp.SetTObjectValueL( KMPXMediaGeneralDate, time.Int64() );
+    // SampleRate
+    aMediaProp.SetTObjectValueL<TUint32>( KMPXMediaAudioSamplerate, 0 );
+    // AudioBitrate
+    aMediaProp.SetTObjectValueL<TUint32>( KMPXMediaAudioBitrate, 0 );
+    // Duration
+    aMediaProp.SetTObjectValueL<TInt>( KMPXMediaGeneralDuration, 0 );
+    // DrmStatus
+    aMediaProp.SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, 0 );
+    // NumberOfChannels
+    aMediaProp.SetTObjectValueL<TUint32>( KMPXMediaAudioNumberOfChannels, 0 );
+    // AudioCodec
+    aMediaProp.SetTObjectValueL<TUint32>( KMPXMediaAudioAudioCodec, 0 );
+
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetDefaultL" ) );
     }
 
-TMPXAttributeData CMmMtpDpMetadataMpxAccess::MpxAttribFromPropL( const CMPXMedia& aMedia,
-    const TUint16 aPropCode )
+TMPXAttributeData CMmMtpDpMetadataMpxAccess::MpxAttribFromPropL( const TUint16 aPropCode )
     {
     const TMetadataTable KMetadataTable[] =
-    {
-        { EMTPObjectPropCodeName,                    KMPXMediaGeneralTitle },
-        { EMTPObjectPropCodeArtist,                  KMPXMediaMusicArtist },
-        { EMTPObjectPropCodeAlbumName,               KMPXMediaMusicAlbum },
-        { EMTPObjectPropCodeDateModified,            KMPXMediaGeneralDate },
-        { EMTPObjectPropCodeDateAdded,               KMPXMediaGeneralDate },
-        { EMTPObjectPropCodeDuration,                KMPXMediaGeneralDuration },
-        { EMTPObjectPropCodeTrack,                   KMPXMediaMusicAlbumTrack },
-        { EMTPObjectPropCodeComposer,                KMPXMediaMusicComposer },
-        { EMTPObjectPropCodeOriginalReleaseDate,     KMPXMediaMusicYear },
-        { EMTPObjectPropCodeGenre,                   KMPXMediaMusicGenre },
-        { EMTPObjectPropCodeDRMStatus,               KMPXMediaMTPDrmStatus },
-        { EMTPObjectPropCodeDescription,             KMPXMediaGeneralComment },
-        { EMTPObjectPropCodeNumberOfChannels,        KMPXMediaAudioNumberOfChannels },
-        { EMTPObjectPropCodeAudioBitRate,            KMPXMediaAudioBitrate },
-        { EMTPObjectPropCodeSampleRate,              KMPXMediaAudioSamplerate },
-        { EMTPObjectPropCodeAudioWAVECodec,          KMPXMediaAudioAudioCodec },
-        { EMTPObjectPropCodeAlbumArtist,             KMPXMediaMusicArtist }
-    };
+        {
+            { EMTPObjectPropCodeName,                    KMPXMediaGeneralTitle },
+            { EMTPObjectPropCodeArtist,                  KMPXMediaMusicArtist },
+            { EMTPObjectPropCodeAlbumName,               KMPXMediaMusicAlbum },
+            { EMTPObjectPropCodeDateModified,            KMPXMediaGeneralDate },
+            { EMTPObjectPropCodeDateAdded,               KMPXMediaGeneralDate },
+            { EMTPObjectPropCodeDuration,                KMPXMediaGeneralDuration },
+            { EMTPObjectPropCodeTrack,                   KMPXMediaMusicAlbumTrack },
+            { EMTPObjectPropCodeComposer,                KMPXMediaMusicComposer },
+            { EMTPObjectPropCodeOriginalReleaseDate,     KMPXMediaMusicYear },
+            { EMTPObjectPropCodeGenre,                   KMPXMediaMusicGenre },
+            { EMTPObjectPropCodeDRMStatus,               KMPXMediaMTPDrmStatus },
+            { EMTPObjectPropCodeDescription,             KMPXMediaGeneralComment },
+            { EMTPObjectPropCodeNumberOfChannels,        KMPXMediaAudioNumberOfChannels },
+            { EMTPObjectPropCodeAudioBitRate,            KMPXMediaAudioBitrate },
+            { EMTPObjectPropCodeSampleRate,              KMPXMediaAudioSamplerate },
+            { EMTPObjectPropCodeAudioWAVECodec,          KMPXMediaAudioAudioCodec },
+            { EMTPObjectPropCodeAlbumArtist,             KMPXMediaMusicArtist }
+        };
 
     TInt i = 0;
     TInt count = sizeof( KMetadataTable ) / sizeof( KMetadataTable[0] );
@@ -1349,14 +1380,14 @@
     }
 
 // ---------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::GetAllPlaylistL
-// Get all playlists from MPX database in the assigned store
+// CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL
+// Get all abstract medias from MPX database in the assigned store
 // ---------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataMpxAccess::GetAllPlaylistL( const TDesC& aStoreRoot,
-        CMPXMediaArray** aPlaylists )
+void CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL( const TDesC& aStoreRoot,
+        CMPXMediaArray** aAbstractMedias, TMPXGeneralCategory aCategory )
     {
-    PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllPlaylistL" ) );
+    PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) );
 
     SetStorageRootL( aStoreRoot );
 
@@ -1369,21 +1400,24 @@
     CleanupStack::PushL( searchMedia ); // + searchMedia
 
     searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
-    searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
+    searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory );
     searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
 
-    RArray<TMPXAttribute> playlistAttributes;
-    CleanupClosePushL( playlistAttributes ); // + playlistAttributes
-    playlistAttributes.AppendL( KMPXMediaGeneralId );
-    playlistAttributes.AppendL( KMPXMediaGeneralTitle );
-    playlistAttributes.AppendL( KMPXMediaGeneralUri );
+    RArray<TMPXAttribute> abstractMediaAttributes;
+    CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
+    abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
+    abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
+    if ( aCategory == EMPXPlaylist )
+        {
+        abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
+        }
 
-    PERFLOGSTART(KMpxCollectionGetPlaylist);
+    PERFLOGSTART( KMpxCollectionGetAbstractMedia );
     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
-        playlistAttributes.Array() );
-    PERFLOGSTOP(KMpxCollectionGetPlaylist);
+        abstractMediaAttributes.Array() );
+    PERFLOGSTOP( KMpxCollectionGetAbstractMedia );
 
-    CleanupStack::PopAndDestroy( &playlistAttributes ); // - playlistAttributes
+    CleanupStack::PopAndDestroy( &abstractMediaAttributes ); // - abstractMediaAttributes
     CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
     CleanupStack::PushL( foundMedia ); // + foundMedia
 
@@ -1392,9 +1426,9 @@
         User::Leave( KErrNotSupported );
         }
 
-    TInt count = *foundMedia->Value<TInt> ( KMPXMediaArrayCount );
+    TInt count = *foundMedia->Value<TInt>( KMPXMediaArrayCount );
 
-    PRINT1( _L("MM MTP <> CMmMtpDpMetadataMpxAccess::GetAllPlaylistL [%d] playlists found in Playlist Database"), count );
+    PRINT1( _L("MM MTP <> CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL [%d] abstractMedias found in Database"), count );
 
     if ( count > 0 )
         {
@@ -1403,13 +1437,13 @@
             User::Leave( KErrNotSupported );
             }
 
-        *aPlaylists = CMPXMediaArray::NewL( *( foundMedia->Value<CMPXMediaArray> (
-                KMPXMediaArrayContents ) ) );
+        *aAbstractMedias =
+            CMPXMediaArray::NewL( *( foundMedia->Value<CMPXMediaArray> ( KMPXMediaArrayContents ) ) );
         }
 
     CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia
 
-    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAllPlaylistL" ) );
+    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) );
     }
 
 // ---------------------------------------------------------------------------
@@ -1417,15 +1451,15 @@
 // Get all references of specified playlist
 // ---------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataMpxAccess::GetAllReferenceL( CMPXMedia* aPlaylist,
-        CDesCArray& aReferences )
+void CMmMtpDpMetadataMpxAccess::GetAllReferenceL( CMPXMedia* aAbstractMedia,
+    CDesCArray& aReferences )
     {
     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllReferenceL" ) );
 
-    __ASSERT_DEBUG( aPlaylist, User::Panic( KMtpMpxPanic, KErrArgument ) );
+    __ASSERT_DEBUG( aAbstractMedia, User::Panic( KMtpMpxPanic, KErrArgument ) );
 
     // Extract the playlist id from the found object
-    TUint32 playlistId = *(*aPlaylist).Value<TMPXItemId> ( KMPXMediaGeneralId );
+    TUint32 abstractMediaId = *( *aAbstractMedia ).Value<TMPXItemId>( KMPXMediaGeneralId );
 
     // find the media object that contains a list of songs in the playlist
     RArray<TInt> contentIDs;
@@ -1438,17 +1472,17 @@
 
     searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup );
     searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
-    searchMedia->SetTObjectValueL<TMPXItemId> ( KMPXMediaGeneralId, playlistId );
+    searchMedia->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, abstractMediaId );
 
     RArray<TMPXAttribute> songAttributes;
     CleanupClosePushL( songAttributes ); // + songAttributes
     songAttributes.AppendL( KMPXMediaGeneralId );
     songAttributes.AppendL( KMPXMediaGeneralUri );
 
-    PERFLOGSTART(KMpxCollectionGetReference);
+    PERFLOGSTART( KMpxCollectionGetReference );
     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
         songAttributes.Array() );
-    PERFLOGSTOP(KMpxCollectionGetReference);
+    PERFLOGSTOP( KMpxCollectionGetReference );
 
     CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
     CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
@@ -1498,23 +1532,30 @@
     }
 
 // ---------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::GetPlaylistNameL
+// CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL
 //
 // ---------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataMpxAccess::GetPlaylistNameL( CMPXMedia* aPlaylist,
-    TDes& aPlaylistName )
+HBufC* CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL( CMPXMedia* aAbstractMedia,
+    TMPXGeneralCategory aCategory )
     {
-    PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetPlaylistNameL" ) );
-
-    if ( !aPlaylist->IsSupported( KMPXMediaGeneralUri ) )
+    PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
+    HBufC* name = NULL;
+    if ( aCategory == EMPXPlaylist )
+        {
+        if( !aAbstractMedia->IsSupported( KMPXMediaGeneralUri ) )
+            {
+            User::Leave( KErrNotSupported );
+            }
+        name = aAbstractMedia->ValueText( KMPXMediaGeneralUri ).AllocL();
+        }
+    else
         {
         User::Leave( KErrNotSupported );
         }
 
-    aPlaylistName.Copy( aPlaylist->ValueText( KMPXMediaGeneralUri ) );
-
-    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetPlaylistNameL" ) );
+    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
+    return name;
     }
 
 // ---------------------------------------------------------------------------
@@ -1523,7 +1564,7 @@
 // ---------------------------------------------------------------------------
 //
 void CMmMtpDpMetadataMpxAccess::GetModifiedContentL( TInt& arrayCount,
-        CDesCArray& aModifiedcontent )
+    CDesCArray& aModifiedcontent )
     {
     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetModifiedContentL" ) );
     CMPXMedia* foundMedia;
--- a/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -36,6 +36,7 @@
 
 #include "mmmtpdputility.h"
 #include "mmmtpdpfiledefs.h"
+#include "tobjectdescription.h"
 #include "mmmtpdplogger.h"
 
 using namespace ContentAccess;
@@ -68,23 +69,26 @@
     if ( file.Ext().CompareF( KTxtExtensionWMA ) == 0 )
             return EMTPFormatCodeWMA;
 #endif // __WINDOWS_MEDIA
-    
-    if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) )
+
+    if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 )
+        || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) )
         return EMTPFormatCodeMP4Container;
 
-    if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) )
+    if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 )
+        || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 )
+        || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) )
         return EMTPFormatCode3GPContainer;
 
     if ( file.Ext().CompareF( KTxtExtensionAAC ) == 0 )
         return EMTPFormatCodeAAC;
-    
+
     if ( file.Ext().CompareF( KTxtExtensionWAV ) == 0 )
         return EMTPFormatCodeWAV;
-    
+
 #ifdef __WINDOWS_MEDIA
     if ( file.Ext().CompareF( KTxtExtensionWMV ) == 0 )
         return EMTPFormatCodeWMV;
-    
+
     if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 )
         return EMTPFormatCodeASF;
 
@@ -144,6 +148,21 @@
     }
 
 // -----------------------------------------------------------------------------
+// MmMtpDpUtility::HasReference
+// Utility function to decide if there is any reference
+// -----------------------------------------------------------------------------
+//
+TBool MmMtpDpUtility::HasReference( TUint16 aObjFormatCode )
+    {
+    if ( aObjFormatCode == EMTPFormatCodeAbstractAudioAlbum
+        || aObjFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist
+        || aObjFormatCode == EMTPFormatCodeM3UPlaylist )
+        return ETrue;
+    else
+        return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
 // MmMtpDpUtility::IsVideoL (Slow Version)
 // Utility function to determine whether a format is Video or not
 // -----------------------------------------------------------------------------
@@ -170,28 +189,28 @@
         }
     else if ( ext.CompareF( KTxtExtensionMP4 ) == 0
         || ext.CompareF( KTxtExtension3GP ) == 0
-        || ext.CompareF( KTxtExtensionODF ) == 0 
+        || ext.CompareF( KTxtExtensionODF ) == 0
         || ext.CompareF( KTxtExtensionASF ) == 0 )
-            {
-            HBufC8* mimetype = ContainerMimeType( aFullFileName );
-            User::LeaveIfNull( mimetype );
+        {
+        HBufC8* mimetype = ContainerMimeType( aFullFileName );
+        User::LeaveIfNull( mimetype );
 
-            CleanupStack::PushL( mimetype ); // + mimetype
+        CleanupStack::PushL( mimetype ); // + mimetype
 
-            TMmMtpSubFormatCode subFormatCode;
+        TMmMtpSubFormatCode subFormatCode;
 
-            User::LeaveIfError( SubFormatCodeFromMime( *mimetype, subFormatCode ) );
-            CleanupStack::PopAndDestroy( mimetype ); // - mimetype
+        User::LeaveIfError( SubFormatCodeFromMime( *mimetype, subFormatCode ) );
+        CleanupStack::PopAndDestroy( mimetype ); // - mimetype
 
-            if ( subFormatCode == EMTPSubFormatCodeVideo )
-                {
-                return ETrue;
-                }
-            else
-                {
-                return EFalse;
-                }
+        if ( subFormatCode == EMTPSubFormatCodeVideo )
+            {
+            return ETrue;
             }
+        else
+            {
+            return EFalse;
+            }
+        }
     else if ( ext.CompareF( KTxtExtensionO4V ) == 0 )
         return ETrue;
 
@@ -204,11 +223,11 @@
 // Utility function to determine whether a format is Video or not
 // -----------------------------------------------------------------------------
 //
-TBool MmMtpDpUtility::IsVideoL( const TDesC& aFullFileName, 
+TBool MmMtpDpUtility::IsVideoL( const TDesC& aFullFileName,
     const MMTPDataProviderFramework& aFramework )
     {
     PRINT1( _L( "MM MTP => MmMtpDpUtility::IsVideoL (Fast Version) aFullFileName = %S" ), &aFullFileName );
-    
+
     CMTPObjectMetaData* info = CMTPObjectMetaData::NewLC(); // + info
     aFramework.ObjectMgr().ObjectL( aFullFileName, *info );
 
@@ -216,20 +235,33 @@
     TUint subFormatCode = info->Uint( CMTPObjectMetaData::EFormatSubCode );
 
     CleanupStack::PopAndDestroy( info ); // - info
-    
-    if ( formatCode == EMTPFormatCodeWMV )
+
+    return MmMtpDpUtility::IsVideoL( formatCode, subFormatCode );
+    }
+
+// -----------------------------------------------------------------------------
+// MmMtpDpUtility::IsVideoL (Fast Version)
+// Utility function to determine whether a format is Video or not
+// -----------------------------------------------------------------------------
+//
+TBool MmMtpDpUtility::IsVideoL( TUint aFormatCode, TUint aSubFormatCode )
+    {
+    if ( aFormatCode == KMTPFormatsAll )
+        User::Leave( KErrArgument );
+
+    if ( aFormatCode == EMTPFormatCodeWMV )
         {
         return ETrue;
         }
-    else if ( ( formatCode == EMTPFormatCodeMP4Container )
-        || ( formatCode == EMTPFormatCode3GPContainer )
-        || ( formatCode == EMTPFormatCodeASF ) )
+    else if ( ( aFormatCode == EMTPFormatCodeMP4Container )
+        || ( aFormatCode == EMTPFormatCode3GPContainer )
+        || ( aFormatCode == EMTPFormatCodeASF ) )
         {
-        if ( subFormatCode == EMTPSubFormatCodeAudio )
+        if ( aSubFormatCode == EMTPSubFormatCodeAudio )
             {
             return EFalse;
             }
-        else if ( subFormatCode == EMTPSubFormatCodeVideo )
+        else if ( aSubFormatCode == EMTPSubFormatCodeVideo )
             {
             return ETrue;
             }
@@ -269,7 +301,7 @@
     TEntry fileInfo;
     // Shouldn't leave
     User::LeaveIfError( aFs.Entry( aFileName, fileInfo ) );
-    return fileInfo.iSize;
+    return fileInfo.FileSize();
     }
 
 // -----------------------------------------------------------------------------
@@ -306,6 +338,10 @@
         protectionStatus = EMTPProtectionReadOnly;
         }
 
+    PRINT2( _L( "MM MTP <> MmMtpDpUtility::GetProtectionStatusL aFullFileName = %S, protectionStatus = 0x%x" ),
+        &aFullFileName,
+        protectionStatus );
+
     return protectionStatus;
     }
 
@@ -316,8 +352,8 @@
 //
 TMTPResponseCode MmMtpDpUtility::CheckPropType(TUint16 aPropertyCode, TUint16 aDataType)
     {
-    PRINT2( _L( "MM MTP => MmMtpDpUtility::CheckPropCode aPropertyCode = 0x%x, aDataType = 0x%x" ), 
-        aPropertyCode, 
+    PRINT2( _L( "MM MTP => MmMtpDpUtility::CheckPropCode aPropertyCode = 0x%x, aDataType = 0x%x" ),
+        aPropertyCode,
         aDataType );
 
     TMTPResponseCode responseCode = EMTPRespCodeOK;
@@ -333,7 +369,6 @@
         case EMTPObjectPropCodeDateCreated:
         case EMTPObjectPropCodeDateModified:
         case EMTPObjectPropCodeDateAdded:
-        case EMTPObjectPropCodeNonConsumable:
         case EMTPObjectPropCodeVideoBitRate:
             {
             responseCode = EMTPRespCodeAccessDenied;
@@ -399,13 +434,24 @@
             }
             break;
 
+        // Uint8 properties
+        case EMTPObjectPropCodeNonConsumable:
+        case EMTPExtObjectPropCodeOmaDrmStatus: // 0xDB01
+            {
+            if ( aDataType != EMTPTypeUINT8 )
+                {
+                responseCode = EMTPRespCodeInvalidObjectPropFormat;
+                }
+            }
+            break;
+
         default:
             {
             responseCode = EMTPRespCodeInvalidObjectPropCode;
             }
             break;
         }
-    PRINT1( _L( "MM MTP <= MmMtpDpUtility::CheckPropCode responseCode = 0x%x" ), 
+    PRINT1( _L( "MM MTP <= MmMtpDpUtility::CheckPropCode responseCode = 0x%x" ),
         responseCode );
     return responseCode;
     }
@@ -435,7 +481,7 @@
 
     return aFs.Rename( aFullFileName, aNewName );
     }
-    
+
 // -----------------------------------------------------------------------------
 // MetadataAccessWrapper::ContainerMimeType
 // Get mime type from file
@@ -484,7 +530,7 @@
         PRINT1( _L("MM MTP <> MmMtpDpUtility::ContainerMimeType, AsfMimeTypeL err = %d"), err );
         }
 #endif
-    
+
     PRINT( _L( "MM MTP <= MmMtpDpUtility::ContainerMimeType" ) );
     return mimebuf;
     }
@@ -499,7 +545,7 @@
     PRINT( _L( "MM MTP => MmMtpDpUtility::Mp4MimeTypeL" ) );
     HBufC8* mimebuf = NULL;
     TParsePtrC file( aFullPath );
-    
+
     if ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0
         || file.Ext().CompareF( KTxtExtension3GP ) == 0 )
         {
@@ -573,7 +619,7 @@
         {
         User::Leave( KErrNotSupported );
         }
-    
+
     if ( mimebuf == NULL )
         {
         User::Leave( KErrNotFound );
@@ -591,38 +637,38 @@
     {
     PRINT( _L( "MM MTP => MmMtpDpUtility::OdfMimeTypeL" ) );
     HBufC8* mimebuf = NULL;
-    
+
     TParsePtrC file( aFullPath );
-        
+
     if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 )
-        {    
+        {
         CContent* content = CContent::NewL( aFullPath );
         CleanupStack::PushL( content ); // + content
-        
+
         HBufC* buffer = HBufC::NewL( KMimeTypeMaxLength );
         CleanupStack::PushL( buffer ); // + buffer
-        
+
         TPtr data = buffer->Des();
         TInt err = content->GetStringAttribute( EMimeType, data );
-                
+
         if ( err == KErrNone )
             {
             mimebuf = HBufC8::New( buffer->Length() );
-    
+
             if (mimebuf == NULL)
                 {
                 User::LeaveIfError( KErrNotFound );
                 }
-            
+
             mimebuf->Des().Copy( *buffer );
             }
-        
+
         // leave if NULL
         if ( mimebuf == NULL )
             {
             User::Leave( KErrNotFound );
             }
-        
+
         CleanupStack::PopAndDestroy( buffer ); // - buffer
         CleanupStack::PopAndDestroy( content ); // - content
         }
@@ -630,7 +676,7 @@
         {
         User::Leave( KErrNotSupported );
         }
-    
+
     PRINT( _L( "MM MTP <= MmMtpDpUtility::OdfMimeTypeL" ) );
     return mimebuf;
     }
@@ -643,32 +689,32 @@
 HBufC8* MmMtpDpUtility::AsfMimeTypeL( const TDesC& aFullPath )
     {
     PRINT( _L( "MM MTP => MmMtpDpUtility::AsfMimeTypeL" ) );
-    
+
     HBufC8* mimebuf = NULL;
-    
+
 #ifdef __WINDOWS_MEDIA
     TParsePtrC file( aFullPath );
-    
+
     if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 )
         {
         CHXMetaDataUtility *hxUtility = CHXMetaDataUtility::NewL();
         CleanupStack::PushL( hxUtility );
-    
+
         hxUtility->OpenFileL( aFullPath );
-        
+
         HXMetaDataKeys::EHXMetaDataId id;
         TUint count = 0;
         TBool isAudio = EFalse;
         hxUtility->GetMetaDataCount( count );
         for ( TUint i = 0; i < count; i++ )
-            {    
+            {
             HBufC* buf = NULL;
-            hxUtility->GetMetaDataAt( i, id, buf ); 
+            hxUtility->GetMetaDataAt( i, id, buf );
 
             if ( id == HXMetaDataKeys::EHXMimeType )
                 {
                 TPtr des = buf->Des();
-                
+
                 if ( des.Find( KHxMimeTypeWma() ) != KErrNotFound )
                     {
                     isAudio = ETrue;
@@ -695,7 +741,7 @@
             }
 
         hxUtility->ResetL();
-        CleanupStack::PopAndDestroy( hxUtility );        
+        CleanupStack::PopAndDestroy( hxUtility );
         }
     else
         {
@@ -705,7 +751,7 @@
 #else
     User::Leave( KErrNotSupported );
 #endif
-    
+
     PRINT( _L( "MM MTP <= MmMtpDpUtility::AsfMimeTypeL" ) );
     return mimebuf;
     }
@@ -715,7 +761,7 @@
 // Get subformat code from mime string
 // -----------------------------------------------------------------------------
 //
-TInt MmMtpDpUtility::SubFormatCodeFromMime( const TDesC8& aMimeType, 
+TInt MmMtpDpUtility::SubFormatCodeFromMime( const TDesC8& aMimeType,
     TMmMtpSubFormatCode& aSubFormatCode )
     {
     PRINT( _L( "MM MTP => MmMtpDpUtility::SubFormatCodeFromMime" ) );
@@ -791,8 +837,8 @@
         }
 
     PRINT1( _L( "MM MTP <= MmMtpDpUtility::GetDrmStatus, drmStatus: %d" ), drmStatus );
-    
+
     return drmStatus;
     }
 
-//end of file
+// end of file
--- a/mmappcomponents/playbackhelper/group/playbackhelper.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/playbackhelper/group/playbackhelper.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,9 +15,7 @@
 *
 */
 
-// Version : %version:  5 %
-
-
+// Version : %version:  6 %
 
 
 #include <data_caging_paths.hrh>
@@ -47,16 +45,15 @@
 LIBRARY         apmime.lib
 LIBRARY         charconv.lib
 LIBRARY         mmfcontrollerframework.lib
-LIBRARY         flogger.lib
-LIBRARY         mmfdevsound.lib 
+LIBRARY         mmfdevsound.lib
 
 #ifdef __WINDOWS_MEDIA
 LIBRARY         asxparser.lib
 #endif
 
 #if defined(ARMCC)
-deffile ../eabi/ 
+deffile ../eabi/
 #elif defined(WINSCW)
-deffile ../bwinscw/ 
+deffile ../bwinscw/
 #endif
 
--- a/mmappcomponents/playbackhelper/inc/playbackhelper_log.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/playbackhelper/inc/playbackhelper_log.h	Fri Feb 26 18:11:38 2010 +0000
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,9 +15,7 @@
 *
 */
 
-// Version : %version: 4 %
-
-
+// Version : %version: 5 %
 
 
 #ifndef PLAYBACKHELPER_LOG_H
@@ -26,21 +24,6 @@
 // INCLUDES
 #include <e32svr.h>
 #include <e32def.h>
-#include <flogger.h>
-
-
-
-// #define _PLAYBACKHELPER_FILE_LOGGING_
-
-#ifdef _DEBUG
-    #define PLAYBACKHELPER_DEBUG RDebug::Print
-#else
-    #ifdef _PLAYBACKHELPER_FILE_LOGGING_
-        #define PLAYBACKHELPER_DEBUG PlaybackHelperDebug::FileLog
-    #else
-        #define PLAYBACKHELPER_DEBUG RDebug::Print
-    #endif
-#endif 
 
 
 class PlaybackHelperDebug
@@ -49,18 +32,15 @@
         inline static void NullLog( TRefByValue<const TDesC16> /*aFmt*/, ... )
         {
         }
+};
 
-        inline static void FileLog( TRefByValue<const TDesC16> aFmt, ... )
-        {
-            VA_LIST list;
-            VA_START(list,aFmt);
-            RFileLogger::WriteFormat( _L("PlaybackHelper"), 
-                                      _L("playbackhelper.log"),
-                                      EFileLoggingModeAppend,
-                                      aFmt,
-                                      list );
-        }
-};
+
+#ifdef _DEBUG
+    #define PLAYBACKHELPER_DEBUG RDebug::Print
+#else
+    #define PLAYBACKHELPER_DEBUG PlaybackHelperDebug::NullLog
+#endif
+
 
 #endif  // PLAYBACKHELPER_LOG_H
 
--- a/mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,9 +15,7 @@
 *
 */
 
-// Version : %version: 3 %
-
-
+// Version : %version: 4 %
 
 
 #include <data_caging_paths.hrh>
@@ -43,8 +41,7 @@
 LIBRARY         sysutil.lib
 LIBRARY         apmime.lib
 LIBRARY         charconv.lib
-LIBRARY         flogger.lib
-LIBRARY	        playbackhelper.lib
+LIBRARY         playbackhelper.lib
 LIBRARY         mpxcommon.lib
 LIBRARY         estor.lib
 
--- a/mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h	Fri Feb 26 18:11:38 2010 +0000
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,130 +15,106 @@
 *
 */
 
-// Version : %version: 2 %
-
-
+// Version : %version: 3 %
 
 
 #ifndef VIDEOPLAYLISTUTILITY_LOG_H
 #define VIDEOPLAYLISTUTILITY_LOG_H
 
+
 // INCLUDES
 #include <e32std.h>
 #include <e32svr.h>
 #include <e32des16.h>
 #include <e32property.h>
-#include <flogger.h>
 #include <e32def.h>
 
 
-
-// #define _VPU_FILE_LOGGING_
-
+//
+//  MACROS
+//
 #ifdef _DEBUG
-    #define VPU_DEBUG RDebug::Print
+    #define VIDEOPLAYLISTUTILITY_DEBUG        TVideoPlaylistUtilityLog::VideoPlaylistUtilityLog
+    #define VIDEOPLAYLISTUTILITY_ENTER_EXIT   TEnterExitLog _s
 #else
-    #ifdef _VPU_FILE_LOGGING_
-        #define VPU_DEBUG VideoPlaylistUtilityDebug::FileLog
-    #else
-        #define VPU_DEBUG RDebug::Print
-    #endif
-#endif 
+    #define VIDEOPLAYLISTUTILITY_DEBUG        TVideoPlaylistUtilityLog::NullLog
+    #define VIDEOPLAYLISTUTILITY_ENTER_EXIT   TVideoPlaylistUtilityLog::NullLog
+#endif
 
 
-class VideoPlaylistUtilityDebug
+class TVideoPlaylistUtilityLog : public TDes16Overflow
 {
     public:
+
         inline static void NullLog( TRefByValue<const TDesC16> /*aFmt*/, ... )
         {
         }
 
-        inline static void FileLog( TRefByValue<const TDesC16> aFmt, ... )
-        {
-            VA_LIST list;
-            VA_START(list,aFmt);
-            RFileLogger::WriteFormat( _L("VideoPlaylistUtility"), 
-                                      _L("videoplaylistutility.log"),
-                                      EFileLoggingModeAppend,
-                                      aFmt,
-                                      list );
-        }
-};
-
-
-
-// MACROS
-#define VIDEOPLAYLISTUTILITY_DEBUG             TVideoPlaylistUtilityLog::VideoPlaylistUtilityLog
-#define VIDEOPLAYLISTUTILITY_ENTER_EXIT        TEnterExitLog _s
-
-class TVideoPlaylistUtilityLog : public TDes16Overflow
-{
-    public:
-        
         inline static void VideoPlaylistUtilityLog( TRefByValue<const TDesC16> aFmt, ... )
         {
             TBuf< 512 > buffer;
-            
+
             VA_LIST list;
             VA_START( list, aFmt );
             buffer.AppendFormatList( aFmt, list );
             VA_END(list);
-            
-            VPU_DEBUG(_L("#VideoPlaylistUtility# %S"), &buffer );
+
+            RDebug::Print(_L("#VideoPlaylistUtility# %S"), &buffer );
         }
 };
 
 class TEnterExitLog : public TDes16Overflow
 {
     public:
-        
+
         void Overflow(TDes16& /*aDes*/)
         {
-            VPU_DEBUG(_L("%S Logging Overflow"), &iFunctionName);
+            RDebug::Print(_L("%S Logging Overflow"), &iFunctionName);
         }
 
         TEnterExitLog( TRefByValue<const TDesC> aFunctionName,
                        TRefByValue<const TDesC> aFmt, ... )
         {
             iFunctionName = HBufC::New( TDesC(aFunctionName).Length() );
-            
+
             if ( iFunctionName )
             {
                 iFunctionName->Des().Copy(aFunctionName);
             }
-            
+
             TBuf< 512 > buffer;
-            
+
             VA_LIST list;
             VA_START( list, aFmt );
             buffer.AppendFormatList( aFmt, list, this );
             VA_END(list);
-            
-            VPU_DEBUG(_L("#VideoPlaylistUtility# --> %S %S"), iFunctionName, &buffer );
+
+            RDebug::Print(_L("#VideoPlaylistUtility# --> %S %S"), iFunctionName, &buffer );
         }
-        
+
         TEnterExitLog( TRefByValue<const TDesC> aFunctionName )
         {
             iFunctionName = HBufC::New( TDesC(aFunctionName).Length() );
-            
+
             if ( iFunctionName )
             {
                 iFunctionName->Des().Copy(aFunctionName);
             }
-            
-            VPU_DEBUG(_L("#VideoPlaylistUtility# --> %S"), iFunctionName );
+
+            RDebug::Print(_L("#VideoPlaylistUtility# --> %S"), iFunctionName );
         }
-        
+
         ~TEnterExitLog()
         {
-            VPU_DEBUG(_L("#VideoPlaylistUtility# <-- %S"), iFunctionName );
+            RDebug::Print(_L("#VideoPlaylistUtility# <-- %S"), iFunctionName );
             delete iFunctionName;
         }
-        
+
     private:
         HBufC*    iFunctionName;
 };
 
+
 _LIT(_KVPUErrorInfo, "#VideoPlaylistUtility# Error : error %d file %s line %d");
 
 #define VIDEOPLAYLISTUTILITY_S(a) _S(a)
--- a/mmappfw_plat/group/bld.inf	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/group/bld.inf	Fri Feb 26 18:11:38 2010 +0000
@@ -13,7 +13,7 @@
 *
 * Description:  Includes all the Domain API specific bld.inf files, which 
 *                export files.
-*  Version     : %version: 1.1.4.1.3.3.4 %
+*  Version     : %version: da1ido#1.1.4.1.3.3.5 %
 *
 */
 
@@ -27,6 +27,7 @@
 #include "../harvester_server_api/group/bld.inf"
 #include "../harvester_utility_api/group/bld.inf"
 #include "../playlist_engine_api/group/bld.inf"
+#include "../mtp_keys_api/group/bld.inf"
 #include "../mpx_collection_common_definition_api/group/bld.inf"
 #include "../mpx_collection_utility_api/group/bld.inf"
 #include "../mpx_common_api/group/bld.inf"
--- a/mmappfw_plat/harvester_server_api/group/bld.inf	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/harvester_server_api/group/bld.inf	Fri Feb 26 18:11:38 2010 +0000
@@ -26,3 +26,4 @@
           
 ../inc/mpxharvestercommon.h                      MW_LAYER_PLATFORM_EXPORT_PATH(mpxharvestercommon.h)                            
 ../inc/mpxharvesterserverdefs.h                  MW_LAYER_PLATFORM_EXPORT_PATH(mpxharvesterserverdefs.h)                      
+../inc/mpxharvestercrkeys.h                      MW_LAYER_PLATFORM_EXPORT_PATH(mpxharvestercrkeys.h)                      
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/harvester_server_api/inc/mpxharvestercrkeys.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  MPX Harvester CenRep keys.
+*
+*/
+
+
+#ifndef MPXHARVESTERCRKEYS_H
+#define MPXHARVESTERCRKEYS_H
+
+
+// MPX Harvester Features Uid
+const TUid KCRUIDMpxHarvesterFeatures = { 0x101FFCD2 };
+
+// List of scan paths for the harvester
+const TInt KMpxHarvesterScanPathKey = 1;
+
+// List of blocked paths for the harvester
+const TInt KMpxHarvesterBlockPathKey = 2;
+
+// List of container types
+const TInt KMpxHarvesterContainerKey = 3;
+
+// List of folders to monitor for file changes
+const TInt KMpxHarvesterAutoScanDirectoryKey = 4;
+
+// Disable the podcasting feature in harvester 1=disabled 0=enabled
+const TInt KMpxHarvesterDisablePodcasting = 5;
+
+// Enable the Ram Drive feature.
+const TInt KMpxHarvesterEnableRamDisk = 6;
+
+// Minimum disk space in Mb on Ram Drive to allow copying of Harvester databases to the Ram Disk.
+const TInt KMpxHarvesterMaxAllowedRamDiskSpace = 7;
+
+#endif  // MPXHARVESTERCRKEYS_H
+
+// End of file
--- a/mmappfw_plat/mpx_common_api/inc/mpxclientlist.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/mpx_common_api/inc/mpxclientlist.h	Fri Feb 26 18:11:38 2010 +0000
@@ -258,6 +258,26 @@
     */
     inline void SendMsgL(TInt aIndex, const TMPXMessage& aMsg);
 
+    
+    /**
+    * Sets the primary client
+    *
+    * @since S60 9.2
+    * @return system error
+    */        
+    IMPORT_C TInt SetPrimaryClient(CMPXMessageQueue& aMsgQueue);
+        
+
+
+    /**
+    * Send a sync message to the primary client
+    *
+    * @since S60 9.2
+    * @return system error
+    */    
+    IMPORT_C TInt SendSyncMsg(const CMPXMessage* aMsg);
+
+    
 private:
     /**
     *  Encapsulates a client: all the information associated with a client of
@@ -433,6 +453,7 @@
     RPointerArray<CClientId> iClients;
     RArray<TProcessId> iClientProcesses;
     MMPXClientlistObserver* iObserver;
+    CMPXMessageQueue* iPrimaryClient;
     };
 
 #include "mpxclientlist.inl"
--- a/mmappfw_plat/mpx_common_api/inc/mpxmessagequeue.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/mpx_common_api/inc/mpxmessagequeue.h	Fri Feb 26 18:11:38 2010 +0000
@@ -73,6 +73,14 @@
      */
     IMPORT_C void Reset();
 
+    /**
+     * Adds a message into the top of the queue and sends the message if slot is available.
+     *
+     * @since S60 9.2
+     * @param aMessage message object, ownership not transferred.
+     * @return system error
+     */    
+    IMPORT_C TInt AddFirst(const CMPXMessage* aMessage, TInt aError);
 private:
     /**
      * C++ constructor.
--- a/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackcommanddefs.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackcommanddefs.h	Fri Feb 26 18:11:38 2010 +0000
@@ -99,6 +99,7 @@
     EPbCmdDisableEffect,
     EPbCmdSetVolume,             // 25 Set volume to the value specified by aData
     EPbCmdSetAutoResume,         // 26 Set autoresume value (true/false)
+    EPbCmdSyncMsgComplete,      //27 Synchronous message is complete  
     EPbCmdEnd                    // Mark for the end of command
     };
 
--- a/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackframeworkdefs.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackframeworkdefs.h	Fri Feb 26 18:11:38 2010 +0000
@@ -247,6 +247,7 @@
     EPbsInitFromFile64,             // 42
     EPbsInitStreamingFromFile64,    // 43
     EPbsGetFile64,                  // 44
+    EPbsSetPrimaryClient,            //45 set primary client
     EPbsServerOpEnd                 // End of operation     
     };
 
--- a/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginobserver.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginobserver.h	Fri Feb 26 18:11:38 2010 +0000
@@ -110,6 +110,18 @@
      */
     virtual void HandlePlaybackMessage(CMPXMessage* /*aMsg*/, 
                                        TInt /*aErr*/) {}
+    
+    
+    /** 
+     * Handle message from plug-in.
+     *
+     * @since S60 9.2
+     * @param aMsg message from the plug-in
+     * @return system error
+    */
+    virtual TInt HandlePlaybackSyncMessage (const CMPXMessage& /*aMsg*/) {return KErrNotSupported;}
+
+    
     };
 
 #endif      // MMPXMPLAYBACKPLUGINOBSERVER_H
--- a/mmappfw_plat/mpx_playback_utility_api/inc/mpxplaybackutility.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/inc/mpxplaybackutility.h	Fri Feb 26 18:11:38 2010 +0000
@@ -413,6 +413,16 @@
      */ 
     virtual void InitStreaming64L(RFile64& /*aShareableFile*/, const TInt /*aAccessPoint*/) {};
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    
+    /** 
+     *  Sets the primary client 
+     * 
+     *  @since S60 9.2
+     *  @return system error 
+     */     
+    virtual TInt SetPrimaryClientL() {return KErrNotSupported; };
+
+    
     };
 
 /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mtp_keys_api/group/bld.inf	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   File that exports the files belonging to 
+:                MTP Keys API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../inc/MtpPrivatePSKeys.h     MW_LAYER_PLATFORM_EXPORT_PATH(MtpPrivatePSKeys.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mtp_keys_api/inc/MtpPrivatePSKeys.h	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Header Information for MTP Private Publish & Subsribe Keys
+*
+*/
+
+
+#ifndef MTPPRIVATEPSKEYS_H
+#define MTPPRIVATEPSKEYS_H
+
+// Security Code UI Originator API
+const TUid KMtpPSUid = {0x101FFC51};    // Mtp Key UID
+const TInt KMtpPSStatus = 1;            // Mtp UID
+
+enum TMtpPSStatus
+    {
+    EMtpPSStatusUninitialized = 0, 
+    EMtpPSStatusActive, 
+    EMtpPSStatusReadyToSync
+    };
+
+#endif // MTPPRIVATEPSKEYS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mtp_keys_api/mtp_keys_api.metaxml	Fri Feb 26 18:11:38 2010 +0000
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<api id="eba779447f4b459225cbd374f504d422" dataversion="2.0">
+  <name>MTP Keys API</name>
+  <description>This API defines the Central Repository and Publish &amp; Subscribe keys defined by MTP.</description>
+  <type>c++</type>
+  <collection>mtp</collection>
+  <libs>
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- a/mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp	Fri Feb 26 18:11:38 2010 +0000
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 2 %
+// Version : %version: 3 %
 
 
 #include <platform_paths.hrh>
@@ -49,7 +49,6 @@
 LIBRARY         libglib.lib
 LIBRARY         libpthread.lib
 LIBRARY         efsrv.lib
-LIBRARY         flogger.lib
 LIBRARY         ServiceHandler.lib
 LIBRARY         ecom.lib
 LIBRARY         estor.lib
Binary file mpx/Conf/mpx.confml has changed
Binary file mpx/Conf/mpx_101FFCD2.crml has changed
Binary file mpx/cenrep/101FFCD2.txt has changed
--- a/mpx/commonframework/common/bwinscw/mpxcommonU.DEF	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/commonframework/common/bwinscw/mpxcommonU.DEF	Fri Feb 26 18:11:38 2010 +0000
@@ -284,4 +284,7 @@
 	?AddClientL@CMPXClientList@@QAEXVTThreadId@@HPAVCMPXMessageQueue@@H@Z @ 283 NONAME ; void CMPXClientList::AddClientL(class TThreadId, int, class CMPXMessageQueue *, int)
 	?ClientCategory@CMPXClientList@@QBEHH@Z @ 284 NONAME ; int CMPXClientList::ClientCategory(int) const
 	?SelectPlugin64L@CMPXPluginHandlerBase@@UAEXABVRFile64@@@Z @ 285 NONAME ; void CMPXPluginHandlerBase::SelectPlugin64L(class RFile64 const &)
+	?SendSyncMsg@CMPXClientList@@QAEHPBVCMPXMedia@@@Z @ 286 NONAME ; int CMPXClientList::SendSyncMsg(class CMPXMedia const *)
+	?AddFirst@CMPXMessageQueue@@QAEHPBVCMPXMedia@@H@Z @ 287 NONAME ; int CMPXMessageQueue::AddFirst(class CMPXMedia const *, int)
+	?SetPrimaryClient@CMPXClientList@@QAEHAAVCMPXMessageQueue@@@Z @ 288 NONAME ; int CMPXClientList::SetPrimaryClient(class CMPXMessageQueue &)
 
--- a/mpx/commonframework/common/eabi/mpxcommonU.DEF	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/commonframework/common/eabi/mpxcommonU.DEF	Fri Feb 26 18:11:38 2010 +0000
@@ -361,4 +361,7 @@
 	_ZN14CMPXClientList10AddClientLE9TThreadIdiP16CMPXMessageQueuei @ 360 NONAME
 	_ZNK14CMPXClientList14ClientCategoryEi @ 361 NONAME
 	_ZN21CMPXPluginHandlerBase15SelectPlugin64LERK7RFile64 @ 362 NONAME
+	_ZN14CMPXClientList11SendSyncMsgEPK9CMPXMedia @ 363 NONAME
+	_ZN14CMPXClientList16SetPrimaryClientER16CMPXMessageQueue @ 364 NONAME
+	_ZN16CMPXMessageQueue8AddFirstEPK9CMPXMediai @ 365 NONAME
 
--- a/mpx/commonframework/common/src/mpxclientlist.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/commonframework/common/src/mpxclientlist.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -46,7 +46,8 @@
 //
 CMPXClientList::CMPXClientList(MMPXClientlistObserver* aObserver)
     : iIdentity(CMPXClientList::ClientsMatch),
-    iObserver(aObserver)
+    iObserver(aObserver), 
+    iPrimaryClient(NULL)
     {}
 
 // ----------------------------------------------------------------------------
@@ -155,7 +156,15 @@
     CClientId* id( iClients[aIndex] );
     iClients.Remove(aIndex);
 
-    CClientId removeId( id->iPid );
+    //set primary client to NULL if primary client is removed
+  	if (iPrimaryClient != NULL)
+    {
+		if (aIndex == Find(*iPrimaryClient))
+        	{
+        	iPrimaryClient = NULL;
+        	}
+	}    
+	CClientId removeId( id->iPid );
     if ( iClients.Find( &removeId, iIdentity ) == KErrNotFound )
         //
         // There's no other client from the same process, so
@@ -601,4 +610,46 @@
     iSubscriptions.ResetAndDestroy();
     }
 
+// -----------------------------------------------------------------------------
+// CMPClientList::SetPrimaryClient
+// Set the primary client
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMPXClientList::SetPrimaryClient(CMPXMessageQueue& aMsgQueue)
+    {
+    MPX_FUNC("CMPXClientList::SetPrimaryClient");
+    TInt index = Find(aMsgQueue);
+    MPX_DEBUG2("CMPXClientList::SetPrimaryClient, index = %d", index);
+    if (index >= 0)
+        {
+        iPrimaryClient = &aMsgQueue;
+        return KErrNone;
+        }
+    return index;
+    }
+// -----------------------------------------------------------------------------
+// CMPClientList::SendSyncMsg
+// Send a sync message to the primary client
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMPXClientList::SendSyncMsg(const CMPXMessage* aMsg)
+    {
+    MPX_FUNC("CMPXClientList::SendSyncMsg");
+    TInt err = KErrNone;
+    if (iPrimaryClient == NULL)
+        {
+        return KErrNotFound;
+        }
+    TInt index = Find(*iPrimaryClient);
+    MPX_DEBUG2("CMPXClientList::SendSyncMsg, index = %d", index);
+    if (index >= 0)
+        {
+        err = iClients[index]->iMsgQueue->AddFirst(aMsg, KErrNone);
+        }
+    else
+        {
+        err = KErrNotFound;
+        }
+    return err;
+    }
 // End of File
--- a/mpx/commonframework/common/src/mpxmessagequeue.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/commonframework/common/src/mpxmessagequeue.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -302,4 +302,36 @@
                this, data, err, ret);
     }
 
+// ----------------------------------------------------------------------------
+// Adds a message into the top of the queue and sends the message if slot is available
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMPXMessageQueue::AddFirst(const CMPXMessage* aMessage, TInt aError)
+    {
+    // aMessage should not be NULL and aError is KErrNone
+    MPX_ASSERT(aMessage || aError);
+    MPX_FUNC_EX("CMPXMessageQueue::AddFirst()");
+    CMPXMessageItem* item(NULL);
+    TRAPD(err, item = CMPXMessageItem::NewL(aMessage, aError));
+    if (KErrNone==err)
+        {
+        iMsgs.AddFirst(*item);
+#ifdef _DEBUG
+        MPX_DEBUG3("CMPXMessageQueue::AddFirst 0x%08x, items %d", this, ++iCount);
+#endif
+        }//else failed to create message item.
+    else
+        {
+        MPX_DEBUG2("CMPXMessageQueue::AddFirst Failed to create message item %d", err);
+        }
+    if (KErrNone!=err && KErrNone==iFailure)
+        { // Set the failure code
+        iFailure = err;
+        }
+    if (!iMsgRequest.IsNull())
+        { // outstanding request
+        Send();
+        } // else client has not finished current message yet
+    return err;
+    }
 // End of file
--- a/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h	Fri Feb 26 18:11:38 2010 +0000
@@ -924,6 +924,34 @@
     */
     void Init64L(RFile64* aFile, TInt aAccessPoint=0);
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    /**
+    *  Callback for sync message timer
+    *
+    *  @since 9.2    
+    *  @param this
+    *  @return systme error
+    */         
+    static TInt SyncMsgTimerCallback(TAny* aPtr);
+    /**
+    *  Cancel the sync message timer
+    *
+    *  @since 9.2    
+    */    
+    void CancelSyncMsgTimer();    
+    /**
+    *  Stop the wait loop
+    *
+    *  @since 9.2    
+    */    
+    void StopWaitLoop();
+    /**
+     * Handle a synchronous message
+     * 
+     * @since 9.2
+     * @param aMsg, message
+     * @return system error
+     */
+    TInt HandlePlaybackSyncMessage (const CMPXMessage& aMsg);
     
 private:
     friend class TCallbackReflector;
@@ -992,6 +1020,8 @@
     TBool iInitVolume;  // Initialize volume on first creation
     // the index which be firstly saved when request media
     TInt iFirstRequestMediaIndex; 
+    CPeriodic* iSyncMsgTimer;  //timer for sync message
+    CActiveSchedulerWait* iSyncMsgWait;  // wait loop use to sync message    
 #if defined(__HIGH_RESOLUTION_VOLUME)
     // flag to indicate whether the volume setting has been rounded up last
     // used to adjust volume up button setting 
--- a/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -47,6 +47,7 @@
 const TInt KMPXSmallVolumeIncrement = 5;
 const TInt KMPXLargeVolumeIncrement = 10;
 const TInt KPercentMultiplier = 100;
+const TInt KMPXSyncMsgTimer = 3000000; // 3 seconds
 _LIT(KWmaExtension, ".wma");
 _LIT(KRaExtension, ".ra");
 
@@ -186,6 +187,8 @@
     iVolRoundedUp = EFalse;
 #endif
     iPluginHandler->Plugin()->PropertyL( EPbPropertyVolume );
+    iSyncMsgTimer = CPeriodic::NewL( CActive::EPriorityIdle ); 
+    iSyncMsgWait = new (ELeave) CActiveSchedulerWait; 
     }
 
 // ----------------------------------------------------------------------------
@@ -232,6 +235,12 @@
 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     iFile64.Close();
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    delete iSyncMsgTimer;
+    if (iSyncMsgWait && iSyncMsgWait->IsStarted() )
+            {
+            iSyncMsgWait->AsyncStop();
+            }
+    delete iSyncMsgWait; 
     }
 
 // ----------------------------------------------------------------------------
@@ -2175,6 +2184,11 @@
             iAutoResumeHandler->SetAutoResume( aData );
             break;
             }
+        case EPbCmdSyncMsgComplete:
+            {
+            StopWaitLoop();
+            break;
+            }
         default:
             ASSERT(0);
         }
@@ -3859,4 +3873,71 @@
     }
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
 
+// ----------------------------------------------------------------------------
+// Cancel timer. 
+// ----------------------------------------------------------------------------
+void CMPXPlaybackEngine::CancelSyncMsgTimer()
+    {
+    MPX_FUNC("CMPXPlaybackEngine::CancelSyncMsgTimer()");
+    // Cancel timer.
+    if ( iSyncMsgTimer && iSyncMsgTimer->IsActive() )
+        {
+        MPX_DEBUG1("CMPXPlaybackEngine::CancelSyncMsgTimer(): Timer active, cancelling");
+        iSyncMsgTimer->Cancel();
+        }
+    }
+// ----------------------------------------------------------------------------
+// Callback for timer.
+// ----------------------------------------------------------------------------
+TInt CMPXPlaybackEngine::SyncMsgTimerCallback(TAny* aPtr)
+    {
+    MPX_FUNC("CMPXPlaybackEngine::SyncMsgTimerCallback()");
+    CMPXPlaybackEngine* ptr =
+        static_cast<CMPXPlaybackEngine*>(aPtr);
+    ptr->StopWaitLoop();
+    return KErrNone;
+    }
+// ----------------------------------------------------------------------------
+// Handle a synchronous message
+// ----------------------------------------------------------------------------
+//
+TInt CMPXPlaybackEngine::HandlePlaybackSyncMessage (const CMPXMessage& aMsg)
+    {    
+    MPX_FUNC("CMPXPlaybackEngine::HandlePlaybackSyncMessage()");    
+    TInt err = iClientList->SendSyncMsg(&aMsg);
+    if (err != KErrNone)
+        {
+        return err;
+        }
+    // Cancel timer.
+    CancelSyncMsgTimer();
+    // Start timer in case there is no callback from primary client. 
+    iSyncMsgTimer->Start(
+        KMPXSyncMsgTimer,
+        KMPXSyncMsgTimer,
+        TCallBack(SyncMsgTimerCallback, this ));
+            
+    // Start wait loop until we get a callback from primary client
+    if ( !iSyncMsgWait->IsStarted() )
+        {
+        iSyncMsgWait->Start();
+        }
+    return KErrNone;
+    }
+// ----------------------------------------------------------------------------
+// Stop the wait loop.
+// ----------------------------------------------------------------------------
+void CMPXPlaybackEngine::StopWaitLoop()
+    {
+    MPX_FUNC("CMPXPlaybackEngine::StopWaitLoop()");
+    // Cancel timer
+    CancelSyncMsgTimer();
+    
+    // Stop wait loop to unblock.
+    if ( iSyncMsgWait->IsStarted() )
+        {
+        MPX_DEBUG1("CMPXPlaybackEngine::StopWaitLoop(): Stopping the wait loop.");
+        iSyncMsgWait->AsyncStop();
+        }
+    }
 // End of file
--- a/mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -515,6 +515,13 @@
             break;
             }
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+        case EPbsSetPrimaryClient:
+            {
+            TInt error = iPlayer->ClientList()->SetPrimaryClient(*iMessageQueue);
+            TPckgC<TInt> handle(error);
+            aMessage.Write(0, handle);            
+            break;
+            }
         default:
             {
             PanicClient(aMessage,KErrNotSupported);
--- a/mpx/playbackframework/playbackutility/inc/mpxplaybackutilityimpl.h	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/playbackframework/playbackutility/inc/mpxplaybackutilityimpl.h	Fri Feb 26 18:11:38 2010 +0000
@@ -583,6 +583,13 @@
     virtual void InitStreaming64L(RFile64& aShareableFile, const TInt aAccessPoint);
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     
+    /** 
+     *  Sets the primary client 
+     * 
+     *  @since S60 9.2
+     *  @return system error 
+     */     
+     TInt SetPrimaryClientL();
 private:
 
 
--- a/mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp	Fri Feb 19 16:32:39 2010 +0000
+++ b/mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp	Fri Feb 26 18:11:38 2010 +0000
@@ -1337,4 +1337,13 @@
 
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
 
+// ----------------------------------------------------------------------------
+// Set primary client
+// ----------------------------------------------------------------------------
+//
+TInt CMPXPlaybackUtility::SetPrimaryClientL()
+    {
+    MPX_FUNC("CMPXPlaybackUtility::SetPrimaryClientL");
+    return iPbs.SendReceiveL(EPbsSetPrimaryClient);
+    }
 // End of file