Revision: 201017
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 14 May 2010 16:21:14 +0300
changeset 27 cbb1bfb7ebfb
parent 25 d881023c13eb
child 32 edd273b3192a
child 33 ea313fc15a81
Revision: 201017 Kit: 201019
layers.sysdef.xml
mmappcomponents/asxparser/group/asxparser.mmp
mmappcomponents/asxparser/inc/AsxParser_debug.h
mmappcomponents/asxparser/src/asxparser.cpp
mmappcomponents/asxparser/test/test.cpp
mmappcomponents/asxparser/test/test.mmp
mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp
mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp
mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp
mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp
mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h
mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h
mmappcomponents/harvester/filehandler/inc/mpxmetadatascanner.h
mmappcomponents/harvester/filehandler/src/mpxfoldermonitor.cpp
mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp
mmappcomponents/harvester/filehandler/src/mpxharvesterdb.cpp
mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp
mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp
mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp
mmappcomponents/harvester/metadataextractor/bwinscw/mpxmetadataextractorU.DEF
mmappcomponents/harvester/metadataextractor/eabi/mpxmetadataextractorU.DEF
mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp
mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp
mmappcomponents/harvester/server/group/mpxharvester.mmp
mmappcomponents/harvester/server/inc/mpxharvesterengine.h
mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h
mmappcomponents/harvester/server/inc/mpxmmcejectmonitor.h
mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp
mmappcomponents/harvester/server/src/mpxharvesterengine.cpp
mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp
mmappcomponents/harvester/server/src/mpxmmcejectmonitor.cpp
mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp
mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp
mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h
mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatampxaccess.h
mmappcomponents/mmmtpdataprovider/inc/mmmtpdpfiledefs.h
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovider.h
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovider.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdescriptionutility.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp
mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp
mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp
mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp
mmappcomponents/playbackhelper/group/playbackhelper.mmp
mmappcomponents/playbackhelper/inc/playbackhelper_log.h
mmappcomponents/playlistengine/group/bld.inf
mmappcomponents/playlistengine/inc/mpxplaylistrecognizer.h
mmappcomponents/playlistengine/src/mpxplaylistengine.cpp
mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp
mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h
mmappfw_plat/group/bld.inf
mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp
mmappfw_plat/harvester_metadata_extractor_api/group/bld.inf
mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractor.h
mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractorobserver.h
mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h
mmappfw_plat/mpx_common_api/inc/mpxmediamtpdefs.h
mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h
mmappfw_plat/mpx_common_definition_api/group/bld.inf
mmappfw_plat/qt_telephony_multimedia_service_api/group/bld.inf
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtms.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsamrformat.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsbuffer.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmscall.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsink.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsource.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsdtmf.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmseffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsfactory.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsformat.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg711format.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg729format.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsgaineffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalgaineffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalrouting.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalvoleffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsilbcformat.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsinbandtone.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmicsource.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsink.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsource.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmspcmformat.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsringtone.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssink.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssource.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsspeakersink.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsstream.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsvolumeeffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmswrapperexport.h
mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp
mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h
mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp
mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp
mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp
mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp
mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp
qtms/SIS/QTMS_udeb_STUB_SIS.bat
qtms/SIS/qtms.pkg
qtms/bwins/qtmsu.def
qtms/data/create_qtms_stub_sis.bat
qtms/data/qtmsapi_stub.pkg
qtms/data/qtmsapi_stub.sis
qtms/eabi/qtmsu.def
qtms/inc/qtmsamrimpl.h
qtms/inc/qtmsbufferimpl.h
qtms/inc/qtmscallimpl.h
qtms/inc/qtmsclientsinkimpl.h
qtms/inc/qtmsclientsourceimpl.h
qtms/inc/qtmsdtmfimpl.h
qtms/inc/qtmsfactoryimpl.h
qtms/inc/qtmsg711impl.h
qtms/inc/qtmsg729impl.h
qtms/inc/qtmsgaineffectimpl.h
qtms/inc/qtmsglobalgaineffectimpl.h
qtms/inc/qtmsglobalroutingimpl.h
qtms/inc/qtmsglobalvoleffectimpl.h
qtms/inc/qtmsilbcimpl.h
qtms/inc/qtmsinbandtoneimpl.h
qtms/inc/qtmsmembuffer.h
qtms/inc/qtmsmicsourceimpl.h
qtms/inc/qtmsmodemsinkimpl.h
qtms/inc/qtmsmodemsourceimpl.h
qtms/inc/qtmspcmimpl.h
qtms/inc/qtmsringtoneimpl.h
qtms/inc/qtmssinkimpl.h
qtms/inc/qtmssourceimpl.h
qtms/inc/qtmsspeakersinkimpl.h
qtms/inc/qtmsstreamimpl.h
qtms/inc/qtmsvolumeeffectimpl.h
qtms/inc/qtmswrapperexport.h
qtms/inc/tmsutility.h
qtms/qtmsapi.pro
qtms/rom/qtms.iby
qtms/src/qtmsamr.cpp
qtms/src/qtmsamrimpl.cpp
qtms/src/qtmsbufferimpl.cpp
qtms/src/qtmscall.cpp
qtms/src/qtmscallimpl.cpp
qtms/src/qtmsclientsink.cpp
qtms/src/qtmsclientsinkimpl.cpp
qtms/src/qtmsclientsource.cpp
qtms/src/qtmsclientsourceimpl.cpp
qtms/src/qtmsdtmf.cpp
qtms/src/qtmsdtmfimpl.cpp
qtms/src/qtmseffect.cpp
qtms/src/qtmsfactory.cpp
qtms/src/qtmsfactoryimpl.cpp
qtms/src/qtmsformat.cpp
qtms/src/qtmsg711.cpp
qtms/src/qtmsg711impl.cpp
qtms/src/qtmsg729.cpp
qtms/src/qtmsg729impl.cpp
qtms/src/qtmsgaineffect.cpp
qtms/src/qtmsgaineffectimpl.cpp
qtms/src/qtmsglobalgaineffect.cpp
qtms/src/qtmsglobalgaineffectimpl.cpp
qtms/src/qtmsglobalrouting.cpp
qtms/src/qtmsglobalroutingimpl.cpp
qtms/src/qtmsglobalvoleffect.cpp
qtms/src/qtmsglobalvoleffectimpl.cpp
qtms/src/qtmsilbc.cpp
qtms/src/qtmsilbcimpl.cpp
qtms/src/qtmsinbandtone.cpp
qtms/src/qtmsinbandtoneimpl.cpp
qtms/src/qtmsipcallbodyimpl.cpp
qtms/src/qtmsmembuffer.cpp
qtms/src/qtmsmicsource.cpp
qtms/src/qtmsmicsourceimpl.cpp
qtms/src/qtmsmodemsink.cpp
qtms/src/qtmsmodemsinkimpl.cpp
qtms/src/qtmsmodemsource.cpp
qtms/src/qtmsmodemsourceimpl.cpp
qtms/src/qtmspcm.cpp
qtms/src/qtmspcmimpl.cpp
qtms/src/qtmsringtone.cpp
qtms/src/qtmsringtoneimpl.cpp
qtms/src/qtmssinkimpl.cpp
qtms/src/qtmssourceimpl.cpp
qtms/src/qtmsspeakersink.cpp
qtms/src/qtmsspeakersinkimpl.cpp
qtms/src/qtmsstream.cpp
qtms/src/qtmsstreamimpl.cpp
qtms/src/qtmsvolumeeffect.cpp
qtms/src/qtmsvolumeeffectimpl.cpp
sysdef_1_4_0.dtd
--- a/layers.sysdef.xml	Mon May 03 12:58:40 2010 +0300
+++ b/layers.sysdef.xml	Fri May 14 16:21:14 2010 +0300
@@ -10,6 +10,7 @@
 			<module name="mmappfw">
 				<unit unitID="mmappfw" mrp="" bldFile="&layer_real_source_path;/group" name="mmappfw" />
 				<unit unitID="mpxviewframeworkqt" name="mpxviewframeworkqt" bldFile="&layer_real_source_path;/mpx/mpxviewframeworkqt" proFile="mpxviewframeworkqt.pro" qmakeArgs="-r -config rom" mrp=""/>
+				<unit unitID="qtms" name="qtms" bldFile="&layer_real_source_path;/qtms" proFile="qtmsapi.pro" qmakeArgs="-r -config rom" mrp=""/>
 			</module>
     </layer>   
     
@@ -29,6 +30,7 @@
 			<module name="mmappfw_group">
 				<unit unitID="mmappfw_group" mrp="" bldFile="&layer_real_source_path;/group" name="mmappfw_group" />
         <unit unitID="mpxviewframeworkqt_group" name="mpxviewframeworkqt_group" bldFile="&layer_real_source_path;/mpx/mpxviewframeworkqt" proFile="mpxviewframeworkqt.pro" qmakeArgs="-r -config rom" mrp=""/>
+        <unit unitID="qtms_group" name="qtms_group" bldFile="&layer_real_source_path;/qtms" proFile="qtmsapi.pro" qmakeArgs="-r -config rom" mrp=""/>
 			</module>
     </layer>
 
--- a/mmappcomponents/asxparser/group/asxparser.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/asxparser/group/asxparser.mmp	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
  *
 */
 
-// Version : %version: 9.1.4 %
+// Version : %version: 9.1.5 %
 
 
 #include <platform_paths.hrh>
--- a/mmappcomponents/asxparser/inc/AsxParser_debug.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/asxparser/inc/AsxParser_debug.h	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 4.1.3 %
+// Version : %version: 4.1.4 %
 
 
 #ifndef __MP_DEBUG_H__
--- a/mmappcomponents/asxparser/src/asxparser.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/asxparser/src/asxparser.cpp	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 10.1.5.1.1 %
+// Version : %version: 10.1.5.1.2 %
 
 
 
--- a/mmappcomponents/asxparser/test/test.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/asxparser/test/test.cpp	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 8 %
+// Version : %version: 9 %
 
 #include <e32base.h>
 #include <e32cons.h>
--- a/mmappcomponents/asxparser/test/test.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/asxparser/test/test.mmp	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
  *
 */
 
-// Version : %version: 11 %
+// Version : %version: 12 %
 
 
 
--- a/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Fri May 14 16:21:14 2010 +0300
@@ -196,7 +196,7 @@
         case EAknSoftkeySelect :
             {       
             TInt index = CurrentItemListIndex();
-            TBuf<128> fileName;
+            TFileName fileName;
             
             iFileHandler->GetAttribute( index, CAudioFetcherFileHandler::EAttrFullName, fileName, 0 );
             iSelectedFiles.AppendL( fileName );
@@ -928,7 +928,7 @@
     TBool closeDialog = EFalse;
     
     TInt index = CurrentItemListIndex();
-    TBuf<128> fileName;
+    TFileName fileName;
     
     iFileHandler->GetAttribute( index, CAudioFetcherFileHandler::EAttrFullName, fileName, 0 );
     iSelectedFiles.AppendL( fileName );
--- a/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp	Fri May 14 16:21:14 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Extended collection helper with an internal caching array
-*  Version     : %version: da1mmcf#27.1.12.3.1 % 
+*  Version     : %version: da1mmcf#27.1.12.3.2 % 
 *
 */
 
--- a/mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp	Fri May 14 16:21:14 2010 +0300
@@ -407,7 +407,7 @@
     MPX_FUNC("CMPXCollectionHelperImp::RenameL");
     MPX_DEBUG3("aOldUri = %S, aNewUri = %S", &aOldUri, &aNewUri);
 
-    if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist)
+    if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist && aItemCat != EMPXAbstractAlbum)
         {
         User::Leave(KErrArgument);
         }
--- a/mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp	Fri May 14 16:21:14 2010 +0300
@@ -69,9 +69,7 @@
 LIBRARY                 mpxmetadataextractor.lib
 LIBRARY	                caf.lib
 LIBRARY                 DrmServerInterfaces.lib
-#ifdef RD_MULTIPLE_DRIVE
 LIBRARY                 PlatformEnv.lib
-#endif //RD_MULTIPLE_DRIVE
 
 #if defined(ARMCC)
 deffile ../eabi/ 
--- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h	Fri May 14 16:21:14 2010 +0300
@@ -54,8 +54,7 @@
     TInt OpenAllDatabasesL();
 
     /**
-    * Reopen a particular database
-    * (For MMC events)
+    * Open a particular database
     * @param TDriveNumber aDrive
     */
     void OpenDatabaseL( TDriveNumber aDrive );
@@ -63,26 +62,38 @@
     /**
     * Close all databases
     */
-    void CloseAllDatabase();
+    void CloseAllDatabases();
+    
+    /**
+    * Close all databases on mass storage drives
+    */
+    void CloseMassStorageDatabases();
 
     /**
     * Close a particular DB
-    * (For MMC events)
     * @param TDriveNumber the Drive
     */
     void CloseDatabase( TDriveNumber aDrive );
+    
 
     /**
     * Get a particular database
     * @param TDriveNumber the Drive
     */
     CMPXHarvesterDB& GetDatabaseL( TDriveNumber aDrive );
-
+	
+	/**
+    * Abruptly close a particular DB without trying to access it
+    * To be used when drive is no more accessible
+    * @param TDriveNumber the Drive
+    */
+    void DropDatabase( TDriveNumber aDrive );
+    
     /**
-     * Remove a particular database from the array
-     * @param TDriveNumber the Drive
+     * Return whether database is open on the specified drive
      */
-    void RemoveDatabaseL( TDriveNumber aDrive );
+    TBool DatabaseIsOpen( TDriveNumber aDrive );
+
 
     /**
     * Return the number of databases
@@ -152,6 +163,18 @@
 #endif //__RAMDISK_PERF_ENABLE
 
 private: // new functions
+	
+	 /**
+	  * Find database index in the internal table
+	  * Return KErrNotFound if not found
+	  */
+   TInt FindDatabaseIndex ( TDriveNumber aDrive );
+   
+	 /**
+	  * Return whether drive exists and is local
+	  */
+   TBool IsLocalDrive( TDriveNumber aDrive );
+
     
 #ifdef __RAMDISK_PERF_ENABLE
     /**
@@ -174,7 +197,7 @@
     /**
     * Copy database from RAM disk
     */
-    void DoCopyDBFromRamL(TDriveUnit aDriveUnit); 
+    TInt DoCopyDBFromRam(TDriveUnit aDriveUnit); 
 
     /**
     * To block a disk space so that it can gurantee for a write back from RAM disk
@@ -193,9 +216,9 @@
     /**
     * Remove dummy file
     *
-    * @return TInt index to the database handler
+    * @param aDrive Drive
     */
-    void RemoveDummyFile( TInt aIndex );
+    void RemoveDummyFile( TDriveNumber aDrive );
     
     /**
      * Update the database from ram drive.
--- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h	Fri May 14 16:21:14 2010 +0300
@@ -274,6 +274,13 @@
     * for a list of folders to automatically scan
     */
     void ParseAutoScanL();
+    
+    /**
+     * Refreshes scan drives so that non-existing 
+     * drives are not scanned.
+	 * Used add back drives that were take out because of dismount
+     */
+    void RefreshScanDrivesL();
 
     /***
     * Resets the current scan directory and frees memory
@@ -350,13 +357,6 @@
      */
     RPointerArray<CMPXHarvesterDbItem>* GetDrmFilesL();
 
-    /**
-     * Verifies if aDrive is ready.
-     * @param aDrive, certain drive name, such as EDRIVEE
-     * @return TBool ETrue if aDrive is ready,otherwise EFalse
-     */
-    TBool IsDriveReady( TDriveNumber aDrive );
-
 public:
 
     /**
@@ -392,13 +392,12 @@
     RPointerArray<CMPXFolderMonitor>  iFolderMonitors;  // Multiple drives
     RPointerArray<CMPXCollectionType> iSupportedTypes;
     CDesCArray*                       iContainerTypes;
+    RArray<TPath>                     iConfiguredDrivesToScan;
     RArray<TPath>                     iDrivesToScan;
     RArray<TPath>                     iFilteredDrivesToScan;
     RArray<TPath>                     iPathsToBlock;
     TBool                             iOutOfDisk;
-#ifdef RD_MULTIPLE_DRIVE
-    TInt                              iRemovedDrive;
-#endif // RD_MULTIPLE_DRIVE
+    TBool                             iFilteredOutOfDisk;
 
     // Metadata related
     CMPXMetadataScanner*              iMetadataScanner;
--- a/mmappcomponents/harvester/filehandler/inc/mpxmetadatascanner.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/inc/mpxmetadatascanner.h	Fri May 14 16:21:14 2010 +0300
@@ -20,6 +20,7 @@
 #define CMPXMETADATASCANNER_H
 
 #include <e32base.h>
+#include <mpxmetadataextractorobserver.h>
 
 class CMPXMedia;
 class CMPXMediaArray;
@@ -33,7 +34,8 @@
     ENewFiles = 0,
     EModFiles = 1,
     EMaxFile  = 2
-    };   
+    };
+
 /**
  *  CMPXMetadataScanner
  *
@@ -42,7 +44,8 @@
  *  @lib mpxfilehandler.lib
  *  @since S60 3.0
  */
-NONSHARABLE_CLASS( CMPXMetadataScanner ): public CActive
+NONSHARABLE_CLASS( CMPXMetadataScanner ): public CActive,
+                                          public MMPXMetadataExtractorObserver
     {
 public:
 
@@ -128,15 +131,43 @@
     * From CActive
     */
     void RunL();
+    
+    /**
+     * From MMPXMetadataExtractorObserver
+     */
+    void HandleCreateMediaComplete( CMPXMedia* aMedia, TInt aError );
 
 private: // New Functions
     
     /**
     * Extract metadata from a few files
-    * @return ETrue if there are no more files to extract
-    *         EFalse otherwise
     */
-    TBool DoExtractL(); 
+    void DoExtractL();
+    
+    /**
+     * Get source array
+     */
+    RPointerArray<HBufC>* GetSource();
+    
+    /**
+     * Is metadata scanner done
+     */
+    TBool IsDone();
+    
+    /**
+     * Run again
+     */
+    void RunAgain();
+    
+    /**
+     * Add metadata to collection
+     */
+    void AddToCollectionL();
+    
+    /**
+     * Complete metadata scanner
+     */
+    void MetadataScannerComplete( TInt aError );
         
 private:
 
@@ -160,8 +191,7 @@
     RPointerArray<HBufC>  iNewFiles;
     RPointerArray<HBufC>  iModifiedFiles;
  
-    CMPXMediaArray* iNewFileProps;
-    CMPXMediaArray* iModifiedFileProps;
+    CMPXMediaArray* iTargetProps;
     
     TBool iExtracting;          // Are we extracting
     TInt  iExtractType; // What are we extracting
@@ -170,7 +200,7 @@
     CMPXMetadataExtractor* iExtractor;  // Metadata Utilities wrapper
     
     MMPXMetadataScanObserver& iObserver;
-    MMPXFileScanStateObserver& iStateObserver;   
+    MMPXFileScanStateObserver& iStateObserver;
     };
 
 #endif // CMPXMETADATASCANNER_H
--- a/mmappcomponents/harvester/filehandler/src/mpxfoldermonitor.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxfoldermonitor.cpp	Fri May 14 16:21:14 2010 +0300
@@ -17,22 +17,15 @@
 
 
 #include <e32base.h>
-#ifdef RD_MULTIPLE_DRIVE
 #include <pathinfo.h>
 #include <driveinfo.h>
-#endif //RD_MULTIPLE_DRIVE
 #include <mpxlog.h>
 #include "mpxfoldermonitor.h"
 #include "mpxfileadditionobserver.h"
 #include "mpxfoldermonitorobserver.h"
 
 // CONSTANTS
-#ifdef RD_MULTIPLE_DRIVE
 _LIT( KMPXMusicPath, "\\Music\\");
-#else
-_LIT( KMPXMusicPath, "\\Music\\");
-_LIT( KMPXDataPath, "\\Data\\");
-#endif //RD_MULTIPLE_DRIVE
 
 
 // ---------------------------------------------------------------------------
@@ -94,7 +87,6 @@
     delete iFolderName;
     iFolderName = NULL;
 
-#ifdef RD_MULTIPLE_DRIVE
     switch( aDrive )
         {
         case EDriveC:
@@ -135,46 +127,6 @@
             }
         }
     MPX_DEBUG2("CMPXFolderMonitor::Start: Use %S path", iFolderName);
-#else
-    switch( aDrive )
-        {
-        case EDriveC:
-            {
-            TDriveName driveName = TDriveUnit( aDrive ).Name();
-            TInt length = KMPXDataPath().Length() + driveName.Length();
-
-            iFolderName = HBufC::NewL(length);
-
-            TPtr folderPtr( iFolderName->Des() );
-            folderPtr.Append( driveName );
-            folderPtr.Append( KMPXDataPath );
-
-            break;
-            }
-        case EDriveE:
-        // deliberate fall through, same actions for E & F drive
-
-        case EDriveF:
-            {
-
-            TDriveName driveName = TDriveUnit( aDrive ).Name();
-            TInt length = KMPXMusicPath().Length() + driveName.Length();
-
-            iFolderName = HBufC::NewL(length);
-
-            TPtr folderPtr( iFolderName->Des() );
-            folderPtr.Append( driveName );
-            folderPtr.Append( KMPXMusicPath );
-
-            break;
-            }
-
-        default:
-            {
-            User::Leave( KErrNotSupported );
-            }
-        }
-#endif // RD_MULTIPLE_DRIVE
 
     // Start listening
     //
--- a/mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp	Fri May 14 16:21:14 2010 +0300
@@ -244,9 +244,9 @@
             TInt err(KErrNone);
             do
                 {
-                MPX_DEBUG1("CMPXFolderScanner::SetupNextDriveToScanL iDirScan->NexL()");
+                MPX_DEBUG1("CMPXFolderScanner::SetupNextDriveToScanL iDirScan->NextL()");
                 TRAP(err, iDirScan->NextL(iDir));
-                MPX_DEBUG1("CMPXFolderScanner::SetupNextDriveToScanL path blocked?");
+                MPX_DEBUG2("CMPXFolderScanner::SetupNextDriveToScanL path %S", &iDirScan->FullPath());
                 blocked = iObserver.IsPathBlockedL( iDirScan->FullPath() );
                 MPX_DEBUG2("CMPXFolderScanner::SetupNextDriveToScanL path blocked %i", blocked);
                 if( blocked )
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdb.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdb.cpp	Fri May 14 16:21:14 2010 +0300
@@ -79,11 +79,12 @@
 //
 TInt CMPXHarvesterDB::OpenL()
     {
-    MPX_FUNC("CMPXHarvesterDB::OpenL");
+    MPX_DEBUG1("-->CMPXHarvesterDB::OpenL");
 
     // There is no need to re-open if it was already open
     if( iDBOpen )
         {
+        MPX_DEBUG1("<--CMPXHarvesterDB::OpenL rtn=0 (already open)");
         return KErrNone;
         }
 
@@ -131,6 +132,7 @@
     if( idErr != KErrNone )
         {
         // Delete the database because this is not readable
+        MPX_DEBUG2("CMPXHarvesterDB::OpenL -- Deleting unreadable DB %i", idErr);
         Close();
         User::LeaveIfError(DeleteDatabase());
         rtn = KErrCorrupt;
@@ -144,7 +146,8 @@
         User::LeaveIfError(DeleteDatabase());
         rtn = OpenL();
         }
-
+    
+    MPX_DEBUG2("<--CMPXHarvesterDB::OpenL rtn=%d", rtn);
     return rtn;
     }
 
@@ -294,6 +297,7 @@
         TRAPD(err, iDatabase->OpenL( iStore, iStore->Root() ) );
         if( err != KErrNone )
             {
+            MPX_DEBUG2("CMPXHarvesterDB::OpenDBL RDbStoreDatabase::OpenL error %d", err);
             delete iDatabase;
             iDatabase = NULL;
             CreateDBL();
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Fri May 14 16:21:14 2010 +0300
@@ -17,10 +17,8 @@
 
 
 #include <e32base.h>
-#ifdef RD_MULTIPLE_DRIVE
 #include <pathinfo.h>
 #include <driveinfo.h>
-#endif //RD_MULTIPLE_DRIVE
 
 #ifdef __RAMDISK_PERF_ENABLE
 #include <centralrepository.h>
@@ -129,7 +127,7 @@
     TInt count(iDatabases.Count());
     for (TInt i = 0; i < count; ++i)
         {
-        RemoveDummyFile(i);
+        RemoveDummyFile(iDatabases[i]->GetDbDrive());
         }
 #endif // __RAMDISK_PERF_ENABLE
     iDatabases.ResetAndDestroy();
@@ -149,25 +147,20 @@
 
     // Open drives we are interested in.
     //
-#ifdef RD_MULTIPLE_DRIVE
     TDriveList driveList;
     TInt driveCount(0);
     User::LeaveIfError( DriveInfo::GetUserVisibleDrives(
            iFs, driveList, driveCount ) );
 
-    TInt check(KErrNone);
     for( TInt driveNum = EDriveA; driveNum <= EDriveZ; driveNum++ )
         {
-        if (driveList[driveNum] && !IsRemoteDrive(static_cast<TDriveNumber>(driveNum)))
+        if (driveList[driveNum] && IsLocalDrive(static_cast<TDriveNumber>(driveNum)))
             {
-            TFileName drivePath;
-            User::LeaveIfError(
-                PathInfo::GetRootPath( drivePath, driveNum ) );
-            MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening database in %S drive",
-                &drivePath);
-            TRAP( check, GetDatabaseL(static_cast<TDriveNumber>(driveNum)) );
-            if( check == KErrNotFound )
+            MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening database in drive %d", driveNum);
+            TInt index = FindDatabaseIndex ( (TDriveNumber) driveNum );
+            if ( index == KErrNotFound )
                 {
+                MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: re-creating database");
                 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL(
                     static_cast<TDriveNumber>(driveNum), iFs );
                 CleanupStack::PushL( dB );
@@ -179,64 +172,23 @@
                     }
                 else
                     {
+                    MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError);
                     CleanupStack::PopAndDestroy( dB );
                     }
                 }
-            else if( check == KErrNone )
+            else
                 {
-                TRAPD(openError, GetDatabaseL(static_cast<TDriveNumber>(driveNum)).OpenL() );
+                CMPXHarvesterDB* dB = iDatabases[index];
+                TRAPD(openError, rtn |= dB->OpenL() );   //lint !e665
                 if(openError != KErrNone)
                     {
-                    TRAP_IGNORE( RemoveDatabaseL(static_cast<TDriveNumber>(driveNum)));
+                    MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError);
+                    iDatabases.Remove ( index );
+                    delete dB;
                     }
                 }
             }
         }
-#else
-    TInt check(KErrNone);
-    TRAP( check, GetDatabaseL(EDriveC) );
-    if( check == KErrNotFound )
-        {
-        CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( EDriveC, iFs );
-        CleanupStack::PushL( dB );
-        iDatabases.AppendL( dB );
-        CleanupStack::Pop( dB );
-        TRAP_IGNORE( rtn = dB->OpenL() ); //lint !e665
-        }
-    else if( check == KErrNone )
-        {
-        TRAPD(openError, GetDatabaseL(EDriveC).OpenL() );
-        if(openError != KErrNone)
-            {
-            TRAP_IGNORE( RemoveDatabaseL(EDriveC));
-            }
-        }
-    TRAP( check, GetDatabaseL(EDriveE) );  //lint !e961
-    if( check == KErrNotFound )
-        {
-        CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( EDriveE, iFs );
-        CleanupStack::PushL( dB );
-        TRAPD(openError, rtn |= dB->OpenL() );  //lint !e665
-        if(openError == KErrNone)
-            {
-             iDatabases.AppendL( dB );
-             CleanupStack::Pop( dB );
-            }
-        else
-            {
-            CleanupStack::PopAndDestroy( dB );
-            }
-        }
-    else if( check == KErrNone )
-        {
-        TRAPD(openError,GetDatabaseL(EDriveE).OpenL() );
-        if(openError != KErrNone)
-            {
-            TRAP_IGNORE( RemoveDatabaseL(EDriveE));
-            }
-        }
-#endif // RD_MULTIPLE_DRIVE
-
     MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL --->");  //lint !e961
     return rtn;
     }
@@ -247,57 +199,172 @@
 //
 void CMPXHarvesterDatabaseManager::OpenDatabaseL( TDriveNumber aDrive )
     {
-    MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL <---");
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenDatabaseL %d <---", aDrive);
 
-    // Re-open a specific database
-    //
-    if (!IsRemoteDrive(aDrive))
+    if ( ! IsLocalDrive( aDrive ) )
+        {
+        MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL drive not available -->");
+        return;
+        }
+
+    CMPXHarvesterDB * db = NULL;
+    TInt index = FindDatabaseIndex ( aDrive );
+    if ( index == KErrNotFound )
         {
-        TInt count( iDatabases.Count() );
-        for( TInt i=0; i<count; ++i )
-            {
-            CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i];
-            if( db->GetDbDrive() == aDrive )
-                {
-                db->OpenL();
-                break;
-                }
-            }
+        db = CMPXHarvesterDB::NewL( aDrive, iFs );
+        CleanupStack::PushL( db );
+        iDatabases.AppendL( db );
+        CleanupStack::Pop( db );
+        }
+    else
+        {
+        db = iDatabases[index];
+        }
+
+    // TRAPD(openError, rtn |= dB->OpenL() );  //lint !e665
+    TRAPD( openError, db->OpenL() );
+    if( openError != KErrNone )
+        {
+        MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d", openError);
+        iDatabases.Remove(index);
+        delete db;
         }
     MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL --->");
     }
 
 // ---------------------------------------------------------------------------
-// CMPXHarvesterDatabaseManager::CloseAllDatabase
+// CMPXHarvesterDatabaseManager::CloseAllDatabases
 // ---------------------------------------------------------------------------
 //
-void CMPXHarvesterDatabaseManager::CloseAllDatabase()
+void CMPXHarvesterDatabaseManager::CloseAllDatabases()
     {
     // Close all databases for shutdown
     iDatabases.ResetAndDestroy();
     }
 
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::CloseMassStorageDatabases
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::CloseMassStorageDatabases()
+    {
+    MPX_FUNC("CMPXHarvesterDatabaseManager::CloseMassStorageDatabases");
+    for (TInt i = 0; i < iDatabases.Count();)
+        {
+        CMPXHarvesterDB * db =iDatabases [i];
+        TDriveNumber drive = db->GetDbDrive();
+        if ( drive != EDriveC )
+            {
+            MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseMassStorageDatabases closing DB on drive %d", drive);
+        	  db->Close();
+#ifdef __RAMDISK_PERF_ENABLE                
+            if( iRAMDiskPerfEnabled && db->IsUseRamDrive() )
+                {
+                MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM");
+                db->SetRamDriveInfo( iRAMDrive, EFalse ); 
+                TInt err = DoCopyDBFromRam (drive);
+                if ( err )
+                    {
+                    MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err);                
+                    RemoveDummyFile( drive );
+                    }
+                }
+#endif
+            delete db;
+            iDatabases.Remove(i);
+            }
+        else
+            {
+            ++i;
+            }
+        }
+    }
+
 // ---------------------------------------------------------------------------
 // CMPXHarvesterDatabaseManager::CloseDatabase
 // ---------------------------------------------------------------------------
 //
 void CMPXHarvesterDatabaseManager::CloseDatabase( TDriveNumber aDrive )
     {
-     if (!IsRemoteDrive(aDrive))
+    MPX_DEBUG2("-->CMPXHarvesterDatabaseManager::CloseDatabase drive %d", aDrive );
+    TInt index = FindDatabaseIndex( aDrive );
+    if ( index != KErrNotFound )
         {
-        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase drive %d <---", aDrive );
-        TInt count = iDatabases.Count();
-        for ( TInt i=0; i<count; ++i)
+        CMPXHarvesterDB * db =iDatabases[index];
+        db->Close();
+#ifdef __RAMDISK_PERF_ENABLE                
+        if( iRAMDiskPerfEnabled && db->IsUseRamDrive() )
             {
-            CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i];
-            if ( db->GetDbDrive() == aDrive)
+            MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM");
+            db->SetRamDriveInfo( iRAMDrive, EFalse ); 
+            TInt err = DoCopyDBFromRam(aDrive);
+            if ( err )
                 {
-                db->Close();
-                break;
+                MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err);                
+                RemoveDummyFile( aDrive );
                 }
             }
+#endif
+        delete db;
+        iDatabases.Remove(index);
         }
-    MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase --->");
+    MPX_DEBUG1("<--CMPXHarvesterDatabaseManager::CloseDatabase");
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::DropDatabase
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterDatabaseManager::DropDatabase( TDriveNumber aDrive )
+    {
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::DropDatabase drive %d <---", aDrive );
+    TInt index = FindDatabaseIndex( aDrive );
+    if ( index != KErrNotFound )
+        {
+        CMPXHarvesterDB * db =iDatabases[index];
+#ifdef __RAMDISK_PERF_ENABLE                
+        if( iRAMDiskPerfEnabled && db->IsUseRamDrive() )
+            {
+            MPX_DEBUG1("CMPXHarvesterDatabaseManager::DropDatabase DB is on RAM");
+            db->Close();
+            // delete db on ram drive.
+            TFileName src = GenerateHarvesterDbName( TDriveUnit(aDrive), ETrue );
+            BaflUtils::DeleteFile(iFs, src);
+            }
+#endif
+        delete db;
+        iDatabases.Remove(index);
+        }
+    MPX_DEBUG1("CMPXHarvesterDatabaseManager::DropDatabase --->");
+    }
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::FindDatabaseIndex
+// ---------------------------------------------------------------------------
+//
+TInt CMPXHarvesterDatabaseManager::FindDatabaseIndex ( TDriveNumber aDrive )
+    {
+    TInt count = iDatabases.Count();
+    for( TInt i=0; i<count; ++i )
+        {
+        CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i];
+        if( db->GetDbDrive() == aDrive )
+            {
+            MPX_DEBUG3("CMPXHarvesterDatabaseManager::FindDatabaseIndex drive=%d returns index %d ", aDrive, i);
+            return i;
+            }
+        }
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::FindDatabaseIndex drive=%d returns KErrNotFound", aDrive);
+    return KErrNotFound;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::DataaseIsOpen
+// ---------------------------------------------------------------------------
+//
+TBool CMPXHarvesterDatabaseManager::DatabaseIsOpen( TDriveNumber aDrive )
+    {
+    return FindDatabaseIndex( aDrive ) != KErrNotFound;
     }
 
 // ---------------------------------------------------------------------------
@@ -306,54 +373,9 @@
 //
 CMPXHarvesterDB& CMPXHarvesterDatabaseManager::GetDatabaseL( TDriveNumber aDrive )
     {
-    CMPXHarvesterDB* db( NULL );
-
-    // Find the database
-    TInt count = iDatabases.Count();
-    for( TInt i=0; i<count; ++i )
-        {
-        CMPXHarvesterDB* tmp = (CMPXHarvesterDB*) iDatabases[i];
-        if( tmp->GetDbDrive() == aDrive )
-            {
-            db = tmp;
-            break;
-            }
-        }
-
-    // Not found, so we leave
-    if( db == NULL )
-        {
-        User::Leave( KErrNotFound );
-        }
-    return *db;
-    }
-
-// ---------------------------------------------------------------------------
-// CMPXHarvesterDatabaseManager::RemoveDatabase
-// ---------------------------------------------------------------------------
-//
-void CMPXHarvesterDatabaseManager::RemoveDatabaseL( TDriveNumber aDrive )
-    {
-
-    TBool bFound(EFalse);
-    // Find the database
-    TInt count = iDatabases.Count();
-    for(TInt index=0; index<count; ++index )
-        {
-        if((iDatabases[index]!=NULL) && ( iDatabases[index]->GetDbDrive() == aDrive ))
-            {
-            bFound = ETrue;
-            delete iDatabases[index];
-            iDatabases.Remove(index);
-            break;
-            }
-        }
-
-    // Not found, so we leave
-    if( !bFound )
-        {
-        User::Leave( KErrNotFound );
-        }
+    TInt index = FindDatabaseIndex( aDrive );
+    User::LeaveIfError (index); // Not found, so we leave
+    return *iDatabases[index];
     }
 
 // ---------------------------------------------------------------------------
@@ -386,17 +408,27 @@
     {
     MPX_DEBUG1("CMPXHarvesterDatabaseManager::RecreateDatabases <--");
     TInt count( iDatabases.Count() );
-    for( TInt i=0; i<count; ++i )
+    for( TInt i=0; i<count; )
         {
         // Close db, delete and recreate
         //
         MPX_DEBUG2("RecreateDatabasesL() -- %i", i);
-        CMPXHarvesterDB* cur = (CMPXHarvesterDB*)iDatabases[i];
+        CMPXHarvesterDB* cur = iDatabases[i];
         cur->Close();
         cur->DeleteDatabase();
         // trap leave just in case 1 db had err
         //
-        TRAP_IGNORE( cur->OpenL() );
+        TRAPD( openError, cur->OpenL() );
+        if( openError != KErrNone )
+            {
+            MPX_DEBUG2("CMPXHarvesterDatabaseManager::RecreateDatabases: opening failed, error=%d", openError);
+            iDatabases.Remove(i);
+            delete cur;
+            }
+        else 
+            {
+            ++i;
+            }
         }
     }
 
@@ -417,6 +449,18 @@
     }
 
 // ---------------------------------------------------------------------------
+// CMPXHarvesterDatabaseManager::IsLocalDrive
+// ---------------------------------------------------------------------------
+//
+TBool CMPXHarvesterDatabaseManager::IsLocalDrive( TDriveNumber aDrive )
+    {
+    TDriveInfo driveInfo;
+    return (iFs.Drive ( driveInfo, aDrive) == KErrNone )
+           && driveInfo.iType != EMediaNotPresent 
+           && ! (driveInfo.iDriveAtt & KDriveAttRemote);
+    }
+
+// ---------------------------------------------------------------------------
 // CMPXHarvesterDatabaseManager::BeginL
 // ---------------------------------------------------------------------------
 // 
@@ -535,7 +579,7 @@
                 {
                 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsToRamL error=%d", err);
                 // delete dummy file
-                RemoveDummyFile(i);
+                RemoveDummyFile( (TDriveNumber)(TInt)drive );
                 
                 // delete db in ram drive
                 TFileName ramDb = GenerateHarvesterDbName( drive, ETrue );
@@ -589,6 +633,8 @@
 
     if( iRAMDiskPerfEnabled )
        {
+        // Should not leave until all the databases have been copied from RAM drive. 
+        TInt leaveError = KErrNone;
         TInt count(iDatabases.Count());
         for (TInt i = 0; i < count; ++i)
             {
@@ -605,57 +651,71 @@
             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) );
+            TRAP( err, iDatabases[i]->SetDbStateL(EDbClose) );
+            if ( err == KErrNone )
+                {
+                err = DoCopyDBFromRam(drive);
+                }
+            else
+                {
+                // Error closing db on RAM drive, try to delete it.
+                TFileName ramDB;
+                ramDB = GenerateHarvesterDbName( drive, ETrue );
+                BaflUtils::DeleteFile(iFs, ramDB);
+                }
+            
             if ( err )
                 {
                 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err);                
                 //anyting wrong, delete the temp file.
-                RemoveDummyFile(i);
+                RemoveDummyFile( (TDriveNumber)(TInt)drive );
                 }
 
             // Restore the db state.
-            iDatabases[i]->SetDbStateL( dbState );
+            TRAPD( error, iDatabases[i]->SetDbStateL( dbState ) );
+            if ( error && !leaveError )
+                {
+                leaveError = error;
+                }
             }
+        User::LeaveIfError( leaveError );
         }
     }
 
 // ---------------------------------------------------------------------------
-// CMPXHarvesterDatabaseManager::DoCopyDBFromRamL
+// CMPXHarvesterDatabaseManager::DoCopyDBFromRam
 // ---------------------------------------------------------------------------
 //
-void CMPXHarvesterDatabaseManager::DoCopyDBFromRamL(TDriveUnit aDriveUnit)
+TInt CMPXHarvesterDatabaseManager::DoCopyDBFromRam(TDriveUnit aDriveUnit)
     {
-    MPX_FUNC("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL");
+    MPX_FUNC("CMPXHarvesterDatabaseManager::DoCopyDBFromRam");
     TFileName dst;
     TFileName src;
     TInt err = KErrNone;
     
     dst = GenerateHarvesterDbName( aDriveUnit );
     src = GenerateHarvesterDbName( aDriveUnit, ETrue );
-    MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst );
+    MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRam 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);
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRam database copied from ram drive err=%d.", err);
     
-    // delete db in ram drive.
+    // delete db on ram drive.
     TInt delErr = BaflUtils::DeleteFile(iFs, src);
-    MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr);
+    MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRam db on ram drive deleted file=%S, err=%d", &src, delErr);
 
-    // Make sure we del db from ram drive before leaving.
-    User::LeaveIfError( err );
+    // Make sure we del db from ram drive before returning.
+    if (err != KErrNone)
+        {
+        return 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.");
+    err = iFs.Replace(dummyDbFileName, dst);
+    MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRam dummy file replaced, err=%d.", err);
+    return err;
     }
 
 // ---------------------------------------------------------------------------
@@ -839,12 +899,11 @@
 // CMPXHarvesterDatabaseManager::RemoveDummyFile
 // ---------------------------------------------------------------------------
 //
-void CMPXHarvesterDatabaseManager::RemoveDummyFile( TInt aIndex )
+void CMPXHarvesterDatabaseManager::RemoveDummyFile( TDriveNumber aDrive )
     {
     MPX_FUNC("CMPXHarvesterDatabaseManager::RemoveDummyFile");
     
-    TDriveUnit driveUnit(iDatabases[aIndex]->GetDbDrive());
-    TFileName file = GenerateDummyDbName(driveUnit);
+    TFileName file = GenerateDummyDbName(TDriveUnit(aDrive));
     
     if ( (file.Length() > 0) &&
          (BaflUtils::FileExists(iFs, file)) )
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Fri May 14 16:21:14 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Handles all file related activities
-*  Version     : %version: da1mmcf#72.1.14.2.4.1.4.1.2.5.1 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#72.1.14.2.4.1.4.1.2.5.2 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -20,10 +20,8 @@
 #include <e32base.h>
 #include <f32file.h>
 #include <centralrepository.h>
-#ifdef RD_MULTIPLE_DRIVE
 #include <pathinfo.h>
 #include <driveinfo.h>
-#endif //RD_MULTIPLE_DRIVE
 
 #include <mpxlog.h>
 #include <mpxharvestercommon.h>
@@ -124,7 +122,6 @@
     
     // List of watchers for different drives
     //
-#ifdef RD_MULTIPLE_DRIVE
     TDriveList driveList;
     TInt driveCount(0);
     User::LeaveIfError( DriveInfo::GetUserVisibleDrives(
@@ -141,17 +138,6 @@
             CleanupStack::Pop( dw );
             }
         }
-#else
-    CMPXDiskSpaceWatcher* dw_e = CMPXDiskSpaceWatcher::NewL( iFs, EDriveE, *this );
-    CleanupStack::PushL( dw_e );
-    iDiskMonitors.AppendL( dw_e );
-    CleanupStack::Pop( dw_e );
-    CMPXDiskSpaceWatcher* dw_c = CMPXDiskSpaceWatcher::NewL( iFs, EDriveC, *this );
-    CleanupStack::PushL( dw_c );
-    iDiskMonitors.AppendL( dw_c );
-    CleanupStack::Pop( dw_c );
-#endif // RD_MULTIPLE_DRIVE
-   
 
     TInt openerr = iDBManager->OpenAllDatabasesL();
     
@@ -187,6 +173,7 @@
     // Get the scan drives from cenrep.
     //
     ParseScanPathL();
+    RefreshScanDrivesL();
 
     // Get the list of container types
     iContainerTypes = new(ELeave) CDesCArrayFlat(2);  // granularity
@@ -214,13 +201,6 @@
     iDbSynchronizer = CMPXDbSynchronizer::NewL(*this,*iDBManager,iMusicCollectionId,
                                                iPodcastCollectionId,iFs, iDisablePodcasting);
 
-#ifdef RD_MULTIPLE_DRIVE
-    // Use default MMC drive as the Removable drive
-    User::LeaveIfError( DriveInfo::GetDefaultDrive(
-        DriveInfo::EDefaultRemovableMassStorage,
-        iRemovedDrive ) );
-#endif
-
     // Create DRM Notifier and register for AddRemove event
     iDrmNotifier = CDRMNotifier::NewL();
     iDrmNotifier->RegisterEventObserverL( *this, KEventAddRemove );
@@ -270,11 +250,9 @@
         }
     delete iContainerTypes;
 
-    iFilteredDrivesToScan.Reset();
     iFilteredDrivesToScan.Close();
-    iDrivesToScan.Reset();
     iDrivesToScan.Close();
-    iPathsToBlock.Reset();
+    iConfiguredDrivesToScan.Close();
     iPathsToBlock.Close();
 
     // Cleans up the scanning tables and arrays
@@ -337,14 +315,12 @@
    
     iCollectionUtil->Collection().NotifyL( EMcMsgRefreshStart, KErrNone );
 
-    // Reopen databases
-    iDBManager->OpenAllDatabasesL();
-
     // Begin transaction on databases
     iDBManager->BeginL();
     
     //Remove out of disk space drives from scanned drives list
     iFilteredDrivesToScan.Reset();
+    iFilteredOutOfDisk = EFalse;
     CopyArrayL(iDrivesToScan.Array(),iFilteredDrivesToScan);
 
     iOutOfDisk = EFalse;
@@ -371,6 +347,7 @@
                 if (currentDriveNumber == driveNumber)
                     {
                     iFilteredDrivesToScan.Remove(index);
+                    iFilteredOutOfDisk = ETrue;
                     count--;
                     }
                 else
@@ -378,7 +355,7 @@
                     index++;
                     }
                 }
-            TRAP_IGNORE(iDBManager->RemoveDatabaseL(static_cast<TDriveNumber>(currentDriveNumber)));
+            iDBManager->CloseDatabase(static_cast<TDriveNumber>(currentDriveNumber));
             }
         }
 
@@ -438,8 +415,8 @@
     // 4: USB end we re-open all db and scan for new files
     // 5: MTP start we stop monitoring for new files (no dismount)
     // 6: MTP end we re-open all db, files added already, restart monitor
+    // 7: Disk dismount: stop scanning, close the dismounting DB
     //
-#ifdef RD_MULTIPLE_DRIVE
     // Get all visible drives
     TDriveList driveList;
     TInt driveCount(0);
@@ -472,127 +449,64 @@
                 (driveStatus&DriveInfo::EDriveFormatted)?&driveFormatted:&driveNotFormatted);
             }
         }
-#endif //RD_MULTIPLE_DRIVE
+
     switch( aEvent )
         {
         case EFormatStartEvent:
             {
-            MPX_DEBUG1("Disk Format start event");
+            MPX_DEBUG2("Disk Format start event, drive %d", aData);
+            iIdle->Cancel();
             CancelScan();
             iDBManager->CloseDatabase( (TDriveNumber) aData );
+            RefreshScanDrivesL();
             break;
             }
         case EDiskRemovedEvent:
             {
-            MPX_DEBUG1("Disk Removed event");
+            MPX_DEBUG2("Disk Removed event, drive %d", aData);
             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))))
-                    {
-                    TUint driveStatus(0);
-                    User::LeaveIfError( DriveInfo::GetDriveStatus(
-                        iFs, driveNum, driveStatus ) );
-                    if (!(driveStatus & DriveInfo::EDrivePresent ))
-                        {
-                        // Close database for non-present drive
-                        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
+            iDBManager->DropDatabase ( TDriveNumber( aData ) );
+            RefreshScanDrivesL();
             break;
             }
         case EFormatEndEvent:
             {
-            MPX_DEBUG1("Disk Format end event");
+            MPX_DEBUG2("Disk Format end event, drive %d", aData);
             CancelScan();
             iDBManager->OpenDatabaseL( (TDriveNumber) aData );
+            RefreshScanDrivesL();
             break;
             }
         case EDiskInsertedEvent:
             {
-            MPX_DEBUG1("Disk Insert event");
+            MPX_DEBUG2("Disk Insert event %d", aData);
             CancelScan();
-#ifdef RD_MULTIPLE_DRIVE
-            iDBManager->OpenDatabaseL( (TDriveNumber) iRemovedDrive );
-#else
             iDBManager->OpenDatabaseL( (TDriveNumber) aData );
-#endif // RD_MULTIPLE_DRIVE
+            RefreshScanDrivesL();
             break;
             }
         case EUSBMassStorageStartEvent:
             {
             if (iCurUSBEvent == EUSBMassStorageStartEvent)
-            	{
-            	break;
-            	}            
+                {
+                break;
+                }            
             iIdle->Cancel();
+            iDBManager->CloseMassStorageDatabases();
+            RefreshScanDrivesL();
             CancelScan();
-#ifdef RD_MULTIPLE_DRIVE
-            // Close all databases other than the phone memory database
-            for( TInt driveNum = EDriveA; driveNum <= EDriveZ; driveNum++ )
-                {
-                if (driveList[driveNum]  && (!iDBManager->IsRemoteDrive(static_cast<TDriveNumber>(driveNum))))
-                    {
-                    if ( driveNum != EDriveC )
-                        {
-                        iDBManager->CloseDatabase( (TDriveNumber) driveNum );
-                        }
-                    }
-                }
-#else
-            iDBManager->CloseDatabase( (TDriveNumber) aData );
-#endif // RD_MULTIPLE_DRIVE
             iCurUSBEvent = EUSBMassStorageStartEvent;
             break;
             }
         case EUSBMassStorageEndEvent:
             {
-#ifdef RD_MULTIPLE_DRIVE
-            // Open all databases other than the phone memory
-            for( TInt driveNum = EDriveA; driveNum <= EDriveZ; driveNum++ )
-                {
-                if (driveList[driveNum] && (!iDBManager->IsRemoteDrive(static_cast<TDriveNumber>(driveNum))))
-                    {
-                    if ( driveNum != EDriveC )
-                        {
-                        iDBManager->OpenDatabaseL( (TDriveNumber) driveNum );
-                        }
-                    }
-                }
-#else
-            iDBManager->OpenDatabaseL( (TDriveNumber) aData );
-#endif // RD_MULTIPLE_DRIVE
+            iDBManager->OpenAllDatabasesL();
+            RefreshScanDrivesL();
             iCurUSBEvent = EUSBMassStorageEndEvent;
             break;
             }
-        case EUSBMTPNotActiveEvent: // deliberate fall through
+        case EUSBMTPNotActiveEvent:
             {
             if (iCurUSBEvent == EUSBMTPNotActiveEvent)
             	{
@@ -611,29 +525,33 @@
             {
             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);
-                }
+            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:
+        case EDiskDismountEvent:
             {
+            MPX_DEBUG2("Disk dismount notification, drive %d", aData);
+            iIdle->Cancel();
+            if ( aData < 0 )
+                {
+                iDBManager->CloseMassStorageDatabases();
+                }
+            else
+                {
+                iDBManager->CloseDatabase( (TDriveNumber) aData );
+                }
+            RefreshScanDrivesL();
             CancelScan();
             break;
             }
@@ -927,9 +845,10 @@
 //
 void CMPXHarvesterFileHandlerImp::RecreateDatabases()
     {
-    MPX_DEBUG1("CMPXHarvesterFileHandlerImp::RecreateDatabasesL <--");
+    MPX_DEBUG1("CMPXHarvesterFileHandlerImp::RecreateDatabases <--");
     iDBManager->RecreateDatabases();
-    MPX_DEBUG1("CMPXHarvesterFileHandlerImp::RecreateDatabasesL -->");
+    TRAP_IGNORE(RefreshScanDrivesL());
+    MPX_DEBUG1("CMPXHarvesterFileHandlerImp::RecreateDatabases -->");
     }
 
 // ---------------------------------------------------------------------------
@@ -1256,18 +1175,24 @@
 //
 void CMPXHarvesterFileHandlerImp::HandleDirectoryChangedL( const TDesC& aPath )
     {
+    MPX_DEBUG2("--->CMPXHarvesterFileHandlerImp::HandleDirectoryChangedL path=%S", &aPath);
     // Delay the scanning for a few seconds so the files are finished
     // copying. If already active, means we just append onto the list
-    //
-    iAutoScanPaths.AppendL( aPath );
-    if( !iIdle->IsActive() )
+    // But don't scan if there is no DB == drive does not exist any more
+    TParsePtrC parse( aPath );
+    TDriveUnit drive ( parse.Drive() );
+    if ( iDBManager->DatabaseIsOpen ((TDriveNumber) (TInt) drive) )
         {
-        TCallBack cb( Callback, this );
-        iIdle->Start( TTimeIntervalMicroSeconds32( KAutoScanDelay ),
-                      TTimeIntervalMicroSeconds32( KAutoScanAfter ),
-                      cb );
+        MPX_DEBUG1("CMPXHarvesterFileHandlerImp::HandleDirectoryChangedL adding in iAutoScanPaths");
+        iAutoScanPaths.AppendL( aPath );
+        if( !iIdle->IsActive() )
+            {
+            TCallBack cb( Callback, this );
+            iIdle->Start( TTimeIntervalMicroSeconds32( KAutoScanDelay ),
+                          TTimeIntervalMicroSeconds32( KAutoScanAfter ),
+                          cb );
+            }
         }
-
     }
 
 // ---------------------------------------------------------------------------
@@ -1277,6 +1202,7 @@
 void CMPXHarvesterFileHandlerImp::HandleOpenDriveL( TDriveNumber aDrive,
                                                     const TDesC& aFolder )
     {
+    MPX_DEBUG3("--->CMPXHarvesterFileHandlerImp::HandleOpenDriveL drive=%d, folder=%S", aDrive, &aFolder);
 #ifdef __PRINTDB__
     if( iCurTable )
         iCurTable->PrintItemsInTableL();
@@ -1291,13 +1217,7 @@
     // 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 )
-        {
-        iDBManager->OpenAllDatabasesL();
-        iCurDB = &iDBManager->GetDatabaseL( aDrive );
-        }
-    
+    iCurDB = &iDBManager->GetDatabaseL( aDrive );
     if( iDrivesToScan.Find( aFolder ) != KErrNotFound )
         {
         iCurTable = iCurDB->OpenAllFilesTableL();
@@ -1307,6 +1227,7 @@
         iCurTable = iCurDB->OpenDirectoryL( aFolder );
         }
     iCurList = iCurTable->CreateTableRepresentationL();
+    MPX_DEBUG1("<--CMPXHarvesterFileHandlerImp::HandleOpenDriveL");
     }
 
 // ---------------------------------------------------------------------------
@@ -1831,7 +1752,7 @@
 
     MPX_DEBUG2("ParseScanPathL scanPaths: %S", &scanPath);
     MPX_DEBUG2("ParseScanPathL blockPaths: %S", &blockPath);
-    ::ExtractTokensL( scanPath, iDrivesToScan );
+    ::ExtractTokensL( scanPath, iConfiguredDrivesToScan );
     ::ExtractTokensL( blockPath, iPathsToBlock );
     }
 
@@ -1899,6 +1820,25 @@
     }
 
 // ---------------------------------------------------------------------------
+// Refreshes scan drives
+// ---------------------------------------------------------------------------
+//
+void CMPXHarvesterFileHandlerImp::RefreshScanDrivesL()
+    {
+    iDrivesToScan.Reset();
+    for (TInt i = 0; i < iConfiguredDrivesToScan.Count(); ++i)
+        {
+        const TDesC& path = iConfiguredDrivesToScan[i];
+        TParsePtrC parse(path);
+        TDriveUnit drive(parse.Drive());
+        if ( iDBManager->DatabaseIsOpen( (TDriveNumber)(TInt) drive) )
+            {
+            iDrivesToScan.AppendL(path);
+            }
+        }
+    }
+    
+// ---------------------------------------------------------------------------
 // Resets the scanning table and array
 // ---------------------------------------------------------------------------
 //
@@ -2015,10 +1955,7 @@
     // If no error or cancel, return the final number of items added
     MPX_DEBUG2("Scan error %i", aErr );
     
-    // Reopen databases (in case we removed them for out of disk drives before scan)
-    iDBManager->OpenAllDatabasesL();
-    
-    if( aErr == KErrNone )
+    if( aErr == KErrNone || aErr == KErrCancel )
         {
         // Commit the changes on databases in transaction
         iDBManager->CommitL();
@@ -2034,12 +1971,27 @@
     iDBManager->CopyDBsFromRamL();
 #endif //__RAMDISK_PERF_ENABLE
 
+    // Reopen databases (in case we removed them for out of disk drives before scan)
+    for (TInt i = 0, j = 0; i < iDrivesToScan.Count(); ++i)
+        {
+        if ( j < iFilteredDrivesToScan.Count() && ! iDrivesToScan[i].Compare( iFilteredDrivesToScan[j] ) )
+            {
+             ++j;
+            }
+        else
+            {
+            TParsePtrC fileNameParser ( iDrivesToScan[i] );
+            TDriveUnit drive ( fileNameParser.Drive() );
+            TRAP_IGNORE( iDBManager->OpenDatabaseL( TDriveNumber ( (TInt) drive ) ) );
+            }
+        }
+
     if( aErr == KErrNone || aErr == KErrCancel )
         {
         aErr = iAddedCount;
         }
     
-    if (iFilteredDrivesToScan.Count() != iDrivesToScan.Count())
+    if ( iFilteredOutOfDisk )
         {
         aErr = KErrDiskFull; 
         }
@@ -2191,7 +2143,24 @@
         iRefreshCount++;
         CancelScan();
         Reset();
-        iFolderScanner->ScanL( iAutoScanPaths );
+        // ensure you don't try to scan paths that are on closed drives
+        for (TInt i = 0; i < iAutoScanPaths.Count(); )
+            {
+            TParsePtr parse(iAutoScanPaths[i]);
+            TDriveUnit drive(parse.Drive());
+            if ( iDBManager->DatabaseIsOpen( (TDriveNumber) (TInt) drive ) )
+                {
+                ++i;
+                }
+            else
+                {
+                iAutoScanPaths.Remove(i);
+                }
+            }
+        if ( iAutoScanPaths.Count() )
+            {
+            iFolderScanner->ScanL( iAutoScanPaths );
+            }
 
         // Cleanup
         iAutoScanPaths.Reset();
@@ -2313,7 +2282,6 @@
     
     CleanupStack::PushL( drmFileList );
 
-#ifdef RD_MULTIPLE_DRIVE
     TDriveList driveList;
     TInt driveCount(0);
 
@@ -2344,81 +2312,9 @@
                 }
             }
     	}
-#else
-    //ensure drive E is ready
-    //otherwise GetDataBaseL will leave if MMC is removed
-    if ( IsDriveReady( EDriveE ) )
-        {
-        // Get DRM files from database in E drive
-        db = &iDBManager->GetDatabaseL( EDriveE );
-        table = db->OpenDrmFileL(); 
-        CleanupStack::PushL( table );
-        tempList = table->CreateTableRepresentationL();
-        CleanupStack::PushL( tempList );
-        // copy content to drm file list
-        for ( TInt i=0; i<tempList->Count(); i++ )
-            {
-            drmFileList->AppendL( (*tempList)[i] );
-            }
-        // reset
-        tempList->Reset();
-        CleanupStack::PopAndDestroy( tempList );
-        CleanupStack::PopAndDestroy( table );
-        }
-
-    // Get DRM files from database in C drive
-    db = &iDBManager->GetDatabaseL( EDriveC );
-    table = db->OpenDrmFileL(); 
-    CleanupStack::PushL( table );
-    tempList = table->CreateTableRepresentationL();
-    CleanupStack::PushL( tempList );
-    // copy content to iCurList
-    for ( TInt i=0; i<tempList->Count(); i++ )
-        {
-        drmFileList->AppendL( (*tempList)[i] );
-        }
-    tempList->Reset();
-    CleanupStack::PopAndDestroy( tempList );
-    CleanupStack::PopAndDestroy( table );
-#endif
     CleanupStack::Pop( drmFileList );
     MPX_DEBUG1("CMPXHarvesterFileHandlerImp::GetDrmFiles --->");
     return drmFileList;
     }
 
-// ---------------------------------------------------------------------------
-// Verifies if aDrive is ready.
-// ---------------------------------------------------------------------------
-//
-TBool CMPXHarvesterFileHandlerImp::IsDriveReady( TDriveNumber aDrive )
-    {
-    MPX_DEBUG1("CMPXHarvesterFileHandlerImp::IsDriveReady <---");
-
-    TDriveInfo driveInfo;
-    TInt error = iFs.Drive( driveInfo, aDrive );
-    TBool ready = ETrue;
-    if ( error != KErrNone )
-        {
-        ready = EFalse;
-        }
-    else if ( driveInfo.iDriveAtt == static_cast<TUint>( KDriveAbsent ) )
-        {
-        //aDrive is absent
-        ready = EFalse;
-        }
-    else
-        {
-        TVolumeInfo volumeInfo;
-        TInt errCode = iFs.Volume( volumeInfo, aDrive );
-        if( errCode != KErrNone )
-            {
-            //aDrive is ready for use
-            ready = EFalse;
-            }
-        }
-
-    MPX_DEBUG1("CMPXHarvesterFileHandlerImp::IsDriveReady --->");
-    return ready;
-    }
-
 // END OF FILE
--- a/mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp	Fri May 14 16:21:14 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Active object to extract metadata 
-*  Version     : %version: da1mmcf#16.2.3.1.5 % 
+*  Version     : %version: da1mmcf#16.2.3.1.5.2.1 % 
 *
 */
 
@@ -44,8 +44,9 @@
 CMPXMetadataScanner::CMPXMetadataScanner( MMPXMetadataScanObserver& aObs,
                                           MMPXFileScanStateObserver& aStateObs )
                                       : CActive( EPriorityNull ),
+                                        iExtractType( EMaxFile ),
                                         iObserver( aObs ),
-                                        iStateObserver( aStateObs ) 
+                                        iStateObserver( aStateObs )
     {
     CActiveScheduler::Add( this );
     }
@@ -60,8 +61,7 @@
                                       RPointerArray<CMPXCollectionType>& aTypesAry )
     {
     iExtractor = CMPXMetadataExtractor::NewL( aFs, aAppArc, aTypesAry );
-    iNewFileProps = CMPXMediaArray::NewL();
-    iModifiedFileProps = CMPXMediaArray::NewL();
+    iTargetProps = CMPXMediaArray::NewL();
     }
 
 
@@ -114,8 +114,7 @@
     iNewFiles.Close();
     iModifiedFiles.Close();
     
-    delete iNewFileProps;
-    delete iModifiedFileProps;
+    delete iTargetProps;
    
     delete iExtractor;
     }
@@ -128,14 +127,7 @@
     {
     iNewFiles.ResetAndDestroy();
     iModifiedFiles.ResetAndDestroy();
-    if(iNewFileProps)
-        {
-    iNewFileProps->Reset();
-        }
-    if(iModifiedFileProps)
-        {
-    iModifiedFileProps->Reset();
-        }
+    iTargetProps->Reset();
     }
 
 // ---------------------------------------------------------------------------
@@ -144,20 +136,20 @@
 //    
 void CMPXMetadataScanner::Start()
     {
-    MPX_DEBUG1("MPXMetadataScanner::StartL <---");
+    MPX_FUNC("MPXMetadataScanner::StartL()");
     if( !IsActive() )
         {
         // Setup
         iAryPos = 0;
         iExtractType = ENewFiles;
         iExtracting = ETrue;        
-        
+        iTargetProps->Reset();
+                
         // Set Active
         iStatus = KRequestPending;
         SetActive();
         TRequestStatus* status = &iStatus;
         User::RequestComplete( status, KErrNone );    
-        MPX_DEBUG1("MPXMetadataScanner::StartL --->");
         }
     }
 // ---------------------------------------------------------------------------
@@ -166,9 +158,8 @@
 //
 void CMPXMetadataScanner::Stop()
     {
-    MPX_DEBUG1("MPXMetadataScanner::Stop <---");
+    MPX_FUNC("MPXMetadataScanner::Stop()");
     DoCancel();
-    MPX_DEBUG1("MPXMetadataScanner::Stop --->");
     }
 
 // ---------------------------------------------------------------------------
@@ -177,6 +168,7 @@
 //  
 void CMPXMetadataScanner::AddNewFileToScanL( const TDesC& aFile )
     {
+    MPX_FUNC("MPXMetadataScanner::AddNewFileToScanL()");
     HBufC* file = aFile.AllocLC();
     iNewFiles.AppendL( file );
     CleanupStack::Pop( file );
@@ -188,6 +180,7 @@
 //      
 void CMPXMetadataScanner::AddModifiedFileToScanL( const TDesC& aFile )
     {
+    MPX_FUNC("MPXMetadataScanner::AddModifiedFileToScanL()");
     HBufC* file = aFile.AllocLC();
     iModifiedFiles.AppendL( file );
     CleanupStack::Pop( file );
@@ -199,6 +192,7 @@
 //
 CMPXMedia* CMPXMetadataScanner::ExtractFileL( const TDesC& aFile )
     {
+    MPX_FUNC("MPXMetadataScanner::ExtractFileL()");
     CMPXMedia* media;
     iExtractor->CreateMediaL( aFile, media );
     return media;
@@ -210,10 +204,12 @@
 //   
 void CMPXMetadataScanner::DoCancel()
     {
+    MPX_FUNC("MPXMetadataScanner::DoCancel()");
     if( iExtracting )
         {
-        // Callback to observer 
+        iExtractor->CancelRequest();
         Reset();
+        // Callback to observer
         TRAP_IGNORE( iStateObserver.HandleScanStateCompleteL( MMPXFileScanStateObserver::EScanMetadata,
                                                               KErrCancel ) );
         iExtracting = EFalse;
@@ -226,29 +222,13 @@
 //   
 void CMPXMetadataScanner::RunL()
     {
+    MPX_FUNC("CMPXMetadataScanner::RunL()");
     if ( iExtracting )
         {
-        TBool done(EFalse);
-        TRAPD( err, done = DoExtractL() );
-        if ( !iExtracting )
-            {
-            // If DoCancel() was called during DoExtractL(), do nothing.
-            MPX_DEBUG1("CMPXMetadataScanner::RunL - Cancel during RunL");
-            }
-        else if( KErrNone != err || done )
+        TRAPD( err, DoExtractL() );
+        if ( err )
             {
-            // Callback to observer 
-            TRAP_IGNORE( iStateObserver.HandleScanStateCompleteL( MMPXFileScanStateObserver::EScanMetadata,
-                                                              err ) );
-            iExtracting = EFalse;
-            }
-        else
-            {
-            MPX_DEBUG1("CMPXMetadataScanner::RunL -- Run again");
-            iStatus = KRequestPending;
-            SetActive();
-            TRequestStatus* status = &iStatus;
-            User::RequestComplete( status, KErrNone );    
+            MetadataScannerComplete( err );
             }
         }
     }
@@ -257,98 +237,185 @@
 // Extract metadata
 // ---------------------------------------------------------------------------
 //   
-TBool CMPXMetadataScanner::DoExtractL()
+void CMPXMetadataScanner::DoExtractL()
+    {
+    MPX_FUNC("CMPXMetadataScanner::DoExtractL()");
+    
+    RPointerArray<HBufC>* source = GetSource();
+    if ( source->Count() )
+        {
+        // Call asynchronous CreateMedia to get metadata.
+        iExtractor->CreateMediaAsyncL( *(*source)[iAryPos], this );
+        }
+    else
+        {
+        // Source array is empty, go to next array.
+        MPX_DEBUG2("CMPXMetadataScanner::DoExtractL Source array is empty ExtractType = %d.", iExtractType);
+        iAryPos = 0;
+        iExtractType++;
+        RunAgain();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Callback for CreateMediaAsyncL
+// ---------------------------------------------------------------------------
+//   
+void CMPXMetadataScanner::HandleCreateMediaComplete( CMPXMedia* aMedia, TInt aError )
     {
-    MPX_DEBUG1("CMPXMetadataScanner::DoExtractL <---");
-    TBool done(EFalse);
+    MPX_FUNC("CMPXMetadataScanner::HandleCreateMediaComplete()");
+    MPX_DEBUG2("CMPXMetadataScanner::HandleCreateMediaComplete error = %d", aError);
+    TInt err = KErrNone;
+    
+    // Scanning cancelled
+    if ( !iExtracting )
+        {
+        delete aMedia;
+        return;
+        }
+    
+    // Add media to target array.
+    if ( ( aError == KErrNone ) && 
+         ( aMedia != NULL ) )
+        {
+        TRAP( err, iTargetProps->AppendL( aMedia ) );
+        if ( err )
+            {
+            delete aMedia;
+            }
+        }
+    
+    iAryPos++;
+    if( iAryPos >= GetSource()->Count() )
+        {
+        // Finished with this array, go to the next array.
+        iAryPos = 0;
+        TRAP( err, AddToCollectionL() );
+        if ( err )
+            {
+            MetadataScannerComplete( err );
+            }
+        iExtractType++;
+        }
+    else
+        {
+        // Batch update collection DBs.
+        if ( iTargetProps->Count() >= KLoopCount )
+            {
+            TRAP( err, AddToCollectionL() );
+            if ( err )
+                {
+                MetadataScannerComplete( err );
+                }
+            }
+        }
+    
+    RunAgain();
+    }    
+
+// ---------------------------------------------------------------------------
+// Get source array
+// ---------------------------------------------------------------------------
+//   
+RPointerArray<HBufC>* CMPXMetadataScanner::GetSource()
+    {
+    MPX_FUNC("CMPXMetadataScanner::GetSource()");
     TExtractType curType = (TExtractType) iExtractType;
-    
-    // Pointer re-direction to generalize extraction
-    RPointerArray<HBufC>* source;
-    CMPXMediaArray* mptarget;
+
     if( curType == ENewFiles )
         {
-        source = &iNewFiles;
-        mptarget = iNewFileProps;
+        return &iNewFiles;
         }
     else if( curType == EModFiles )
         {
-        source = &iModifiedFiles;
-        mptarget = iModifiedFileProps;
+        return &iModifiedFiles;
         }
-    else // All done!
-        {
-        return ETrue;    
-        }
-    
-    // Process at most KLoopCount number of files 
-    //
-    mptarget->Reset();
-    if( source->Count() != 0 )
+    else
+        return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// Is metadata scanner done
+// ---------------------------------------------------------------------------
+//   
+TBool CMPXMetadataScanner::IsDone()
+    {
+    MPX_FUNC("CMPXMetadataScanner::IsDone()");
+    TExtractType curType = (TExtractType) iExtractType;
+
+    TBool done = EFalse;
+    if ( curType >= EMaxFile )
         {
-        for( TInt i=0; i<KLoopCount; ++i )
-            {
-            CMPXMedia* media(NULL);
-            
-            // TRAP to keep scanning if 1 file fails 
-            TRAPD( err, iExtractor->CreateMediaL( *(*source)[iAryPos], media ) );
-            if ( !iExtracting )
-                {
-                // In case DoCancel() was called while processing iExtractor->CreateMediaL
-                MPX_DEBUG1("CMPXMetadataScanner::DoExtractL - Cancel during CreateMediaL");
-                delete media;
-                return ETrue;
-                }
-            
-            if( err == KErrNone )
-                {
-                CleanupStack::PushL( media );
-                mptarget->AppendL( media );
-                CleanupStack::Pop( media );
-                }
-            
-            iAryPos++;
-            if( iAryPos == source->Count() )
-                {
-                iAryPos = 0;
-                iExtractType++;
-                break;
-                }
-            }    
+        done = ETrue;
+        }
+    return done;
+    }
+
+// ---------------------------------------------------------------------------
+// Run Active Object again
+// ---------------------------------------------------------------------------
+//   
+void CMPXMetadataScanner::RunAgain()
+    {
+    MPX_FUNC("CMPXMetadataScanner::RunAgain()");
+    if ( IsDone() )
+        {
+        MetadataScannerComplete( KErrNone );
         }
-    else // No item in the array
+    else
         {
-        iAryPos = 0;
-        iExtractType++;    
+        MPX_DEBUG1("CMPXMetadataScanner::RunAgain -- Run again");
+        iStatus = KRequestPending;
+        SetActive();
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete( status, KErrNone );    
         }
+    }
+
+// ---------------------------------------------------------------------------
+// Add metadata to collection
+// ---------------------------------------------------------------------------
+//   
+void CMPXMetadataScanner::AddToCollectionL()
+    {
+    MPX_FUNC("CMPXMetadataScanner::AddToCollectionL()");
+    TExtractType curType = (TExtractType) iExtractType;
     
-    // After extraction, get observer to add files to the collection
-    //
     switch( curType )
         {
         case ENewFiles:
             {
-            if( iNewFileProps->Count() )
+            if( iTargetProps->Count() )
                 {
-                iObserver.AddFilesToCollectionL( *iNewFileProps );
+                iObserver.AddFilesToCollectionL( *iTargetProps );
                 }
             break;
             }
         case EModFiles:
             {
-            if( iModifiedFileProps->Count() )
+            if( iTargetProps->Count() )
                 {
-                iObserver.UpdatesFilesInCollectionL( *iModifiedFileProps );
+                iObserver.UpdatesFilesInCollectionL( *iTargetProps );
                 }
             break;
             }
-        case EMaxFile:  // All done.
-            done = ETrue;
-            break;
         default:
             ASSERT(0); 
         }
-        
-    MPX_DEBUG1("CMPXMetadataScanner::DoExtractL --->");    
-    return done; 
+    iTargetProps->Reset();
     }
+
+// ---------------------------------------------------------------------------
+// Complete metadata scanner
+// ---------------------------------------------------------------------------
+//   
+void CMPXMetadataScanner::MetadataScannerComplete( TInt aError )
+    {
+    MPX_FUNC("CMPXMetadataScanner::MetadataScannerCompleteL()");
+    MPX_DEBUG2("CMPXMetadataScanner::MetadataScannerCompleteL error = %d", aError);    
+
+    // Callback to observer 
+    TRAP_IGNORE( iStateObserver.HandleScanStateCompleteL( MMPXFileScanStateObserver::EScanMetadata, aError ) );
+    iExtracting = EFalse;
+    Reset();
+    }
--- a/mmappcomponents/harvester/metadataextractor/bwinscw/mpxmetadataextractorU.DEF	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/bwinscw/mpxmetadataextractorU.DEF	Fri May 14 16:21:14 2010 +0300
@@ -2,4 +2,6 @@
 	?CreateMediaL@CMPXMetadataExtractor@@QAEXABVTDesC16@@AAPAVCMPXMedia@@H@Z @ 1 NONAME ; void CMPXMetadataExtractor::CreateMediaL(class TDesC16 const &, class CMPXMedia * &, int)
 	?NewL@CMPXMetadataExtractor@@SAPAV1@AAVRFs@@AAVRApaLsSession@@AAV?$RPointerArray@VCMPXCollectionType@@@@@Z @ 2 NONAME ; class CMPXMetadataExtractor * CMPXMetadataExtractor::NewL(class RFs &, class RApaLsSession &, class RPointerArray<class CMPXCollectionType> &)
 	?ExtractAlbumArtL@CMPXMetadataExtractor@@QAEHPAVCMPXMedia@@@Z @ 3 NONAME ; int CMPXMetadataExtractor::ExtractAlbumArtL(class CMPXMedia *)
+	?CancelRequest@CMPXMetadataExtractor@@QAEXXZ @ 4 NONAME ; void CMPXMetadataExtractor::CancelRequest(void)
+	?CreateMediaAsyncL@CMPXMetadataExtractor@@QAEXABVTDesC16@@PAVMMPXMetadataExtractorObserver@@H@Z @ 5 NONAME ; void CMPXMetadataExtractor::CreateMediaAsyncL(class TDesC16 const &, class MMPXMetadataExtractorObserver *, int)
 
--- a/mmappcomponents/harvester/metadataextractor/eabi/mpxmetadataextractorU.DEF	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/eabi/mpxmetadataextractorU.DEF	Fri May 14 16:21:14 2010 +0300
@@ -6,4 +6,6 @@
 	_ZTV19CMPXFileInfoUtility @ 5 NONAME ; #<VT>#
 	_ZTV21CMPXMetadataExtractor @ 6 NONAME ; #<VT>#
 	_ZN21CMPXMetadataExtractor16ExtractAlbumArtLEP9CMPXMedia @ 7 NONAME
+	_ZN21CMPXMetadataExtractor13CancelRequestEv @ 8 NONAME
+	_ZN21CMPXMetadataExtractor17CreateMediaAsyncLERK7TDesC16P29MMPXMetadataExtractorObserveri @ 9 NONAME
 
--- a/mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp	Fri May 14 16:21:14 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  This class is responsible for reading file info
-*  Version     : %version: da1mmcf#5.1.3.1.6 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#5.1.3.1.6.2.1 % << Don't touch! Updated by Synergy at check-out.
 *
 *  Copyright © 2005 Nokia. All rights reserved.
 */
@@ -65,6 +65,8 @@
 // Destructor
 CMPXFileInfoUtility::~CMPXFileInfoUtility()
     {
+    MPX_DEBUG1("CMPXFileInfoUtility::~CMPXFileInfoUtility()<---");
+    
     iAudioControllers.ResetAndDestroy();
     //Reset();
     // Close all MMF controllers in the cache
@@ -88,6 +90,9 @@
         }
     
     REComSession::FinalClose();
+    
+    MPX_DEBUG1("CMPXFileInfoUtility::~CMPXFileInfoUtility()--->");
+    
     }
 
 // ----------------------------------------------------------------------------
@@ -106,7 +111,7 @@
 void CMPXFileInfoUtility::OpenFileL(RFile& aFile,
                                     const TDesC& aMimeType /*= KNullDesC*/)
     {
-    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()");
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()<---");
     Reset();
 
     HBufC* fileNameBuf = HBufC::NewLC(KMaxFileName);
@@ -125,10 +130,8 @@
     TBool enableUI = EFalse;
 
     //Code taken from TMMFileHandleSource
-
-
-    //{//build custom mmf message packet
-     //based on CMMFileSourceSink::DoCreateFileHandleSourceConfigDataL()
+    //build custom mmf message packet
+    //based on CMMFileSourceSink::DoCreateFileHandleSourceConfigDataL()
     CBufFlat* buf = CBufFlat::NewL(KMCExpandSize);
     CleanupStack::PushL(buf);
     RBufWriteStream stream;
@@ -152,22 +155,21 @@
 
     stream.CommitL();
     CleanupStack::PopAndDestroy(&stream);
-    //iSourceSinkData = buf->Ptr(0).AllocL();
 
-    //CleanupStack::PopAndDestroy(buf);
-    //}
-
-    // User::LeaveIfError(iController->Reset());
+    // Add new data source
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()- AddDataSource()");
     
-   
-   // Add new data source
     User::LeaveIfError(iController->AddDataSource(KUidMmfFileSource,
                                                  buf->Ptr(0),
                                                  dataSource));
     
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()- AddDataSink()");
     User::LeaveIfError(iController->AddDataSink(KUidMmfAudioOutput,
                                                KNullDesC8));
     CleanupStack::PopAndDestroy(buf);
+    
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()--->");
+    
     }
 
 // ----------------------------------------------------------------------------
@@ -176,21 +178,25 @@
 //
 void CMPXFileInfoUtility::Reset()
     {
-    // Reset the controller
+    MPX_DEBUG1("CMPXFileInfoUtility::Reset()<---");
+    
     if(iController)
         {
-        if(iCurrentControllerUid == 0x101FAFB1 || iCurrentControllerUid == 0x10283351
-            || iCurrentControllerUid == 0x10207B65 )
+        // This is just for RA, WMA does not use controller 
+        if( iCurrentControllerUid == 0x10207B65 )  // Helix Controller UID
             {
+            MPX_DEBUG1("CMPXFileInfoUtility::Reset(), Close Controller - only for RA ");
             iController->Close();
             delete iController;
             iController = NULL;
             }
         else
             {
-           	iController->Reset();
+            MPX_DEBUG1("CMPXFileInfoUtility::Reset(), Reset Controller ");
+            iController->Reset();
             }
-    	}
+        }
+    MPX_DEBUG1("CMPXFileInfoUtility::Reset()--->");
     
     }
 
@@ -200,13 +206,15 @@
 //
 TTimeIntervalMicroSeconds CMPXFileInfoUtility::Duration()
     {
-    MPX_DEBUG1("CMPXFileInfoUtility::Duration()");
+    MPX_DEBUG1("CMPXFileInfoUtility::Duration()<---");
     TTimeIntervalMicroSeconds duration;
     TInt err = iController->GetDuration(duration);
     if(err != KErrNone)
         {
         duration = TInt64(0);
         }
+    MPX_DEBUG2("CMPXFileInfoUtility::Duration(), duration = %ld --->", duration );
+
     return duration;
     }
 
@@ -216,11 +224,16 @@
 //
 TUint CMPXFileInfoUtility::BitRate()
     {
+    MPX_DEBUG1("CMPXFileInfoUtility::BitRate()<---");
+
     RMMFAudioControllerCustomCommands customCommands(*iController);
 
     TUint bitRate(0);
     //Ignore return value, bitRate remain 0 if error
     customCommands.GetSourceBitRate(bitRate);
+    
+    MPX_DEBUG2("CMPXFileInfoUtility::BitRate(), bit rate = %d --->", bitRate);
+
     return bitRate;
     }
 
@@ -230,11 +243,16 @@
 //
 TUint CMPXFileInfoUtility::SampleRate()
     {
+    MPX_DEBUG1("CMPXFileInfoUtility::SampleRate()<---");
+    
     RMMFAudioControllerCustomCommands  customCommands(*iController);
 
     TUint sampleRate(0) ;
     //Ignore return value, sampleRate remain 0 if error
     customCommands.GetSourceSampleRate(sampleRate);
+    
+    MPX_DEBUG2("CMPXFileInfoUtility::SampleRate(), sample rate = %d --->", sampleRate);
+    
     return sampleRate;
     }
 
@@ -245,7 +263,8 @@
                                          const TDesC& aMimeType,
                                          TUid& aUid)
     {
-    MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()");
+    MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()<---");
+    
     TBool found(EFalse);
     TInt i(0);
     TInt j(0);
@@ -292,6 +311,9 @@
                 }
             }
         }
+    
+    MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()--->");
+    
     }
 
 // ----------------------------------------------------------------------------
@@ -302,11 +324,10 @@
 // ----------------------------------------------------------------------------
 void CMPXFileInfoUtility::OpenControllerL(const TUid& aUid)
     {
-    MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()");
-    
-    // 3gp and helix (wma) do not allow controller caching
-    if(aUid.iUid == 0x101FAFB1 || aUid.iUid == 0x10283351
-        || aUid.iUid == 0x10207B65 )
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()<---");
+
+    // RA does not allow controller caching
+    if( aUid.iUid == 0x10207B65 )  // RA Controller Uid
         {
          iCurrentControllerUid = aUid.iUid;
          TMMFPrioritySettings prioritySettings;
@@ -319,9 +340,11 @@
          User::LeaveIfError(iController->Open(aUid, prioritySettings));  
 
          iCurrentControllerUid = aUid.iUid;
+         MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL(), RA Controller open --->");
+         
          return;
         }
-    
+     
     // check if we already have controller open for this UID in the cache
      RMMFController* controller = const_cast<RMMFController*>(iMMFControllers.Find(aUid.iUid));
 
@@ -335,10 +358,11 @@
     	
     	TUint32* key = new (ELeave) TUint32(aUid.iUid);
     	CleanupStack::PushL(key);
-    // Now instantiate the first controller in the array
-    TMMFPrioritySettings prioritySettings;
-    prioritySettings.iPriority = EMdaPriorityNormal;
-    prioritySettings.iPref = EMdaPriorityPreferenceTimeAndQuality;
+    	
+        // Now instantiate the first controller in the array
+        TMMFPrioritySettings prioritySettings;
+        prioritySettings.iPriority = EMdaPriorityNormal;
+        prioritySettings.iPref = EMdaPriorityPreferenceTimeAndQuality;
 
 	    // Try to open controller
 	    User::LeaveIfError(controller->Open(aUid,
@@ -353,7 +377,9 @@
 	
 	iController = controller;
 	iCurrentControllerUid = aUid.iUid;
-                       
+
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()--->");
+
     }
 
 // -----------------------------------------------------------------------------
@@ -362,6 +388,8 @@
 //
 void CMPXFileInfoUtility::CreateAudioFormatsArrayL()
     {
+    MPX_DEBUG1("CMPXFileInfoUtility::CreateAudioFormatsArrayL()<---");
+    
     CMMFControllerPluginSelectionParameters* cSelect =
             CMMFControllerPluginSelectionParameters::NewLC();
     CMMFFormatSelectionParameters* fSelect =
@@ -381,6 +409,9 @@
     cSelect->ListImplementationsL(iAudioControllers);
     // Clean up
     CleanupStack::PopAndDestroy(3); //fSelect, cSelect, mediaIds
+    
+    MPX_DEBUG1("CMPXFileInfoUtility::CreateAudioFormatsArrayL()--->");
+    
     }
 
 // End of File
--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Fri May 14 16:21:14 2010 +0300
@@ -12,11 +12,10 @@
 * Contributors:
 *
 * Description:  Extracts metadata from a file
-*  Version     : %version: da1mmcf#38.1.4.2.6.1.5.3.1 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#38.1.4.2.6.1.5.3.2 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
-
 #include <e32base.h>
 #include <badesca.h>
 #include <apgcli.h>
@@ -42,13 +41,18 @@
 #include <mpxmediaaudiodefs.h>
 #include <mpxmediadrmdefs.h>
 #include <mpxmediamtpdefs.h>
+#include <mpxmetadataextractorobserver.h>
 
 #include "mpxmetadataextractor.h"
 #include "mpxfileinfoutility.h"
+
+_LIT( KWmaMimeType, "audio/x-ms-wma" );
+_LIT( KWmaCafMimeType, "x-caf-audio/x-ms-wma" );
+
 #ifdef RD_MPX_TNM_INTEGRATION
 _LIT( KImageFileType, "image/jpeg" );
 const TInt KMPXTimeoutTimer = 3000000; // 3 seconds
-const TInt KMPXMaxThumbnailRequest = 5; 
+const TInt KMPXMaxThumbnailRequest = 2; 
 #endif //RD_MPX_TNM_INTEGRATION
 
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
@@ -79,8 +83,11 @@
                                   : iFs( aFs ),
                                     iAppArc( aAppArc ),
                                     iSupportedTypes( aTypes ),
-                                    iOutstandingThumbnailRequest(0),
-                                    iTNMBlockCount(0)
+                                    iCancelled( EFalse ),
+                                    iObs( NULL ),
+                                    iMedia( NULL ),
+                                    iMetadataOnly( EFalse ),
+                                    iFileOpenError( KErrNone )
     {
 
     }
@@ -95,6 +102,7 @@
     iMetadataUtility = CMetaDataUtility::NewL();
     iDrmMediaUtility = CMPXDrmMediaUtility::NewL();
     iFileInfoUtil    = CMPXFileInfoUtility::NewL();
+    iTaskTimer = CPeriodic::NewL( CActive::EPriorityIdle );
 
 #ifdef RD_MPX_TNM_INTEGRATION
     // Create Thumbnail Manager instance. This object is the observer.
@@ -104,6 +112,8 @@
     // create wait loop
     iTNSyncWait = new (ELeave) CActiveSchedulerWait;
     iTimer = CPeriodic::NewL( CActive::EPriorityIdle );
+    iArrayTNRequestId.Reset();
+    iArrayTasks.Reset();
 #endif //RD_MPX_TNM_INTEGRATION
     }
 
@@ -135,6 +145,8 @@
     delete iMetadataUtility;
     delete iFileInfoUtil;
     delete iDrmMediaUtility;
+    delete iTaskTimer;
+    iFile.Close();
 #ifdef RD_MPX_TNM_INTEGRATION
     delete iTNManager;
     if (iTNSyncWait && iTNSyncWait->IsStarted() )
@@ -143,149 +155,64 @@
         }
     delete iTNSyncWait;
     delete iTimer;
+    iArrayTNRequestId.Close();
+    iArrayTasks.Close();
 #endif //RD_MPX_TNM_INTEGRATION
-    
-    MPX_DEBUG2("CMPXMetadataExtractor: TNM Block Count: %d ", iTNMBlockCount );
     }
 
 // ---------------------------------------------------------------------------
-// Constructs a media properties object
+// Constructs a media properties object : synchronous function
 // ---------------------------------------------------------------------------
 //
 EXPORT_C void CMPXMetadataExtractor::CreateMediaL( const TDesC& aFile,
                                                    CMPXMedia*& aNewProperty,
                                                    TBool aMetadataOnly )
     {
-    // make a copy of aFile
-    HBufC* fileName = HBufC::NewL(KMaxFileName);
-    CleanupStack::PushL( fileName );
-    fileName->Des().Append( aFile );
-    MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL %S <---", fileName );
-
-    RArray<TInt> contentIDs;
-    contentIDs.AppendL( KMPXMediaIdGeneral );
-    contentIDs.AppendL( KMPXMediaIdAudio );
-    contentIDs.AppendL( KMPXMediaIdMusic );
-    contentIDs.AppendL( KMPXMediaIdDrm );
-    contentIDs.AppendL( KMPXMediaIdMTP );
-    aNewProperty = NULL;
-    CMPXMedia* media = CMPXMedia::NewL( contentIDs.Array() );
-    CleanupStack::PushL( media );
-    contentIDs.Close();
-
-    // CMPXMedia default types
-
-    media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
-                                              EMPXItem );
-    media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
-                                                  EMPXSong );
-
-    TParsePtrC parse( *fileName );
-
-    // Title, default is file name
-    media->SetTextValueL( KMPXMediaGeneralTitle,
-                          parse.Name() );
-
-    // Default album track
-    media->SetTextValueL( KMPXMediaMusicAlbumTrack,
-                          KNullDesC );
-
-    // Set the Mime Type and collection UID
-    //
-    if( !aMetadataOnly )
+    MPX_FUNC("CMPXMetadataExtractor::CreateMediaL()");
+    // check if we are still processing a request.
+    if ( iArrayTasks.Count() )
         {
-        TInt index(KErrNotFound);
-        TInt count( iSupportedTypes.Count() );
-        for (TInt i=0; i <count; ++i)
-            {
-            TInt index2(KErrNotFound);
-            const CDesCArray& exts = iSupportedTypes[i]->Extensions();
-            const TDesC& ext = parse.Ext();
-            if (!exts.FindIsq(ext, index2))
-                { // found
-                index = i;
-                break;
-                }
-            }
-        if( KErrNotFound != index )
-            {
-            MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaPropertiesL apparc <---" );
-            TInt mimeIndex = SupportedContainerTypeL( *fileName, index );
-            User::LeaveIfError( mimeIndex );
-            MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaPropertiesL apparc --->" );
+        MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaL Request ongoing. Abort!" );
+        User::Leave( KErrAbort );
+        }
 
-            media->SetTextValueL( KMPXMediaGeneralMimeType,
-                                  iSupportedTypes[index]->Mimetypes()[mimeIndex] );
-
-            media->SetTObjectValueL( KMPXMediaGeneralCollectionId,
-                                     iSupportedTypes[index]->Uid() );
-            }
-        else
-            {
-            User::Leave(KErrNotSupported);
-            }
-        }
-    else // other case use apparc to fetch and set mimetype
-        {
-        TDataType dataType;
-        TUid dummyUid(KNullUid);
-        iAppArc.AppForDocument(*fileName, dummyUid, dataType);
-        media->SetTextValueL( KMPXMediaGeneralMimeType,dataType.Des() );
-        }
-        
-    // Use file handle here
-    //
-    RFile file;
-    TInt err = file.Open( iFs, *fileName, EFileRead | EFileShareReadersOrWriters );
-    CleanupClosePushL(file);
+    iCancelled = EFalse;
+    iFileOpenError = KErrNone;
+    iObs = NULL;
+    aNewProperty = NULL;
+    iFileName = aFile;
+    iMetadataOnly = aMetadataOnly;
     
-    // Metadata related
-    //
-    if( err == KErrNone )
+    // populate the task array
+    AddTasksL();
+    
+    // execute all tasks in the array
+    while ( iArrayTasks.Count() )
         {
-        const TDesC& mimeType = media->ValueText( KMPXMediaGeneralMimeType );
-        HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
-        mimeType8->Des().Append( mimeType );
-        TRAPD( metadataerror, iMetadataUtility->OpenFileL( file, *mimeType8 ) );
-        CleanupStack::PopAndDestroy( mimeType8 );
-
-        // No problem
-        if( KErrNone == metadataerror )
+        // execute task at index 0
+        TRAPD( error, ExecuteTaskL() );
+        if ( error || iCancelled )
             {
-            // Add TRAPD to capture exception KErrNoMemory.
-            //If album art size is too large, trap this exception and SetDefaultL.
-            //Fix EYLU-7ESE5L
-            TRAPD( err, SetMediaPropertiesL( *media, *fileName ) );
-            if ( KErrNoMemory == err )
+            // cleanup
+            if ( iMedia != NULL )
                 {
-                SetDefaultL( *media );
+                delete iMedia;
+                iMedia = NULL;
                 }
-            }
-        else  // Error, Set defaults
-            {
-            SetDefaultL( *media );
+            iArrayTasks.Reset();
+            if ( error )
+                {
+                CleanUp();
+                User::LeaveIfError( error );
+                }
+            break;
             }
-
-        // Reset the utility
-        iMetadataUtility->ResetL();
-        }
-    else // Error, Set defaults
-        {
-        SetDefaultL( *media );
+        
+        iArrayTasks.Remove( 0 );
         }
     
-    // Common properties that we can extract
-    //
-    SetExtMediaPropertiesL( *media, *fileName, aMetadataOnly, file, err );
-    CleanupStack::PopAndDestroy(&file);
-
-    // Set the pointers now that the object is ready
-    //
-    CleanupStack::Pop( media );
-    aNewProperty = media;
-
-    CleanupStack::PopAndDestroy( fileName );
-    MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaPropertiesL --->");
+    aNewProperty = iMedia;
+    CleanUp();
     }
 
 // ---------------------------------------------------------------------------
@@ -294,6 +221,7 @@
 //
 void CMPXMetadataExtractor::SetDefaultL( CMPXMedia& aMediaProp )
     {
+    MPX_FUNC("CMPXMetadataExtractor::SetDefaultL()");
     // Comment
     aMediaProp.SetTextValueL( KMPXMediaGeneralComment,
                               KNullDesC );
@@ -327,13 +255,21 @@
 // Sets media object attributes from metadata utilities
 // ---------------------------------------------------------------------------
 //
-void CMPXMetadataExtractor::SetMediaPropertiesL( CMPXMedia& aMedia,
-                                                 const TDesC& aFile )
+void CMPXMetadataExtractor::SetMediaPropertiesL()
     {
-    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL <---" );
+    MPX_FUNC("CMPXMetadataExtractor::SetMediaPropertiesL()");
 
-    const CMetaDataFieldContainer& metaCont =
-                                          iMetadataUtility->MetaDataFieldsL();
+    const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
+    HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
+    mimeType8->Des().Append( mimeType );
+    
+    // Continue to extract metadata even if fail.
+    TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) );
+    MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL, error %d parsing metadata", 
+        metadataerror );
+    CleanupStack::PopAndDestroy( mimeType8 );
+    
+    const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
     TInt count( metaCont.Count() );
     for( TInt i=0; i<count; ++i )
         {
@@ -346,13 +282,12 @@
         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;
                }     
+           CleanupStack::PushL( value );
            }
         
         switch( fieldType )
@@ -365,7 +300,7 @@
                 if (vallen>0)
                     {
                     FindAndReplaceForbiddenChars(valptr, vallen);
-                    aMedia.SetTextValueL(KMPXMediaGeneralTitle, *value);
+                    iMedia->SetTextValueL(KMPXMediaGeneralTitle, *value);
                     }
                 break;
                 }
@@ -377,7 +312,7 @@
                 if (vallen>0)
                     {
                     FindAndReplaceForbiddenChars(valptr, vallen);
-                    aMedia.SetTextValueL(KMPXMediaMusicArtist, *value);
+                    iMedia->SetTextValueL(KMPXMediaMusicArtist, *value);
                     }
                 break;
                 }
@@ -389,7 +324,7 @@
                 if (vallen>0)
                     {
                     FindAndReplaceForbiddenChars(valptr, vallen);
-                    aMedia.SetTextValueL(KMPXMediaMusicAlbum, *value );
+                    iMedia->SetTextValueL(KMPXMediaMusicAlbum, *value );
                     }
                 break;
                 }
@@ -404,19 +339,19 @@
                 TDateTime dt;
                 dt.SetYear( year );
                 TTime time( dt );
-                aMedia.SetTObjectValueL<TInt64>( KMPXMediaMusicYear,
+                iMedia->SetTObjectValueL<TInt64>( KMPXMediaMusicYear,
                                                  time.Int64() );
                 break;
                 }
             case EMetaDataComment:
                 {
-                aMedia.SetTextValueL( KMPXMediaGeneralComment,
+                iMedia->SetTextValueL( KMPXMediaGeneralComment,
                                       *value );
                 break;
                 }
             case EMetaDataAlbumTrack:
                 {
-                aMedia.SetTextValueL( KMPXMediaMusicAlbumTrack,
+                iMedia->SetTextValueL( KMPXMediaMusicAlbumTrack,
                                       *value );
                 break;
                 }
@@ -428,7 +363,7 @@
                 if (vallen>0)
                     {
                     FindAndReplaceForbiddenChars(valptr, vallen);
-                    aMedia.SetTextValueL(KMPXMediaMusicGenre, *value);
+                    iMedia->SetTextValueL(KMPXMediaMusicGenre, *value);
                     }
                 break;
                 }
@@ -440,50 +375,55 @@
                 if (vallen>0)
                     {
                     FindAndReplaceForbiddenChars(valptr, vallen);
-                    aMedia.SetTextValueL(KMPXMediaMusicComposer, *value);
+                    iMedia->SetTextValueL(KMPXMediaMusicComposer, *value);
                     }
                 break;
                 }
             case EMetaDataUrl:
             case EMetaDataUserUrl:  // fall through
                 {
-                aMedia.SetTextValueL( KMPXMediaMusicURL,
+                iMedia->SetTextValueL( KMPXMediaMusicURL,
                                       *value );
                 break;
                 }
             case EMetaDataJpeg:
                 {
-#ifdef RD_MPX_TNM_INTEGRATION
-                MPX_PERF_START(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
-                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);
-                MPX_PERF_END(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
-#else //RD_MPX_TNM_INTEGRATION
-                aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName,
-                                      aFile );
-#endif //RD_MPX_TNM_INTEGRATION
+                // Album art handled in AddMediaAlbumArtL()
                 break;
                 }
             case EMetaDataCopyright:
                 {
-                aMedia.SetTextValueL( KMPXMediaGeneralCopyright,
+                iMedia->SetTextValueL( KMPXMediaGeneralCopyright,
                                       *value );
                 break;
                 }
+            case EMetaDataDuration:     
+                {                  
+                const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
+                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
+                
+                // Verify if WMA, get the duration
+                if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
+                    {
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
+
+                    // Perform the duration conversion
+                    TLex lexer( *value );
+                    TInt32 duration ( 0 );
+                    lexer.Val( duration );   // [second]      
+                    duration *= 1000;        // [msec]
+                
+                    iMedia->SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
+                                                duration );      
+                
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);  
+                    }
+                break;
+                }
             case EMetaDataOriginalArtist:  // fall through
             case EMetaDataVendor:          // fall through
             case EMetaDataRating:          // fall through
             case EMetaDataUniqueFileIdentifier:  // fall through
-            case EMetaDataDuration:        // fall through
             case EMetaDataDate:            // fall through
                 {
                 // not used
@@ -500,21 +440,15 @@
             CleanupStack::PopAndDestroy( value );       
             }
         }
-
-    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL --->" );
     }
 
 // ---------------------------------------------------------------------------
 // Sets extra media properties not returned by metadata utilities
 // ---------------------------------------------------------------------------
 //
-void CMPXMetadataExtractor::SetExtMediaPropertiesL( CMPXMedia& aProp, 
-                                                    const TDesC& aFile,
-                                                    TBool aMetadataOnly,
-                                                    RFile& aFileHandle,
-                                                    TInt aFileErr )
+void CMPXMetadataExtractor::SetExtMediaPropertiesL()
     {
-    MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL <---");
+    MPX_FUNC("CMPXMetadataExtractor::SetExtMediaPropertiesL()");
 
     // DB Flags to set
     //
@@ -522,18 +456,16 @@
 
     // File Path
     //
-    TParsePtrC parse( aFile );
-    aProp.SetTextValueL( KMPXMediaGeneralUri,
-                         aFile );
-    aProp.SetTextValueL( KMPXMediaGeneralDrive,
-                         parse.Drive() );
+    TParsePtrC parse( iFileName );
+    iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName );
+    iMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
 
     // DRM Rights
     //
     CMPXMedia* drm = NULL;
-    TRAPD( drmError, iDrmMediaUtility->InitL( aFile );
-                     drm = CMPXMedia::NewL( *iDrmMediaUtility->GetMediaL( KMPXMediaDrmProtected.iAttributeId |
-                                                                          KMPXMediaDrmRightsStatus.iAttributeId ) );
+    TRAPD( drmError, iDrmMediaUtility->InitL( iFileName );
+           drm = CMPXMedia::NewL( *iDrmMediaUtility->GetMediaL( KMPXMediaDrmProtected.iAttributeId |
+                                                                KMPXMediaDrmRightsStatus.iAttributeId ) );
          );
 
     TBool prot(EFalse);
@@ -551,7 +483,7 @@
         if( drm->IsSupported( KMPXMediaDrmRightsStatus ) )
             {
             status = drm->ValueTObjectL<TMPXMediaDrmRightsStatus>(KMPXMediaDrmRightsStatus);
-            aProp.SetTObjectValueL<TInt>(KMPXMediaDrmRightsStatus, status );
+            iMedia->SetTObjectValueL<TInt>(KMPXMediaDrmRightsStatus, status );
             MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- status %i", status);
             }
 
@@ -575,53 +507,65 @@
         User::LeaveIfError( drmError );
         }
 
-    aProp.SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
-    aProp.SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
+    iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
+    iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
     
     iDrmMediaUtility->Close();
     
-    // File Size
+    //
+    // File Size --- The following needs MMF support
     //
     TInt size( 0 );
-    if( aFileErr == KErrNone )
+    if( iFileOpenError == KErrNone )
         {
-        aFileHandle.Size( size );
-        aProp.SetTObjectValueL<TInt>( KMPXMediaGeneralSize,
-                                      size );
-
-        // Duration, bitrate, samplerate, etc
-        //
-        if( !aMetadataOnly )
+        const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
+        MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
+        
+        // Verify if WMA, skip getting info from MMF
+        if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
+            {
+            // No need to get MMF support
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");   
+            }
+        else
             {
-            TRAPD(err2, iFileInfoUtil->OpenFileL(
-                          aFileHandle, 
-                          aProp.ValueText(KMPXMediaGeneralMimeType)));
-            MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
-            if( KErrNone == err2 )
-                {
-                aProp.SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
-                                               iFileInfoUtil->BitRate() );
-                aProp.SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
-                                               iFileInfoUtil->SampleRate() );
-                TInt64 duration = (TInt64) iFileInfoUtil->Duration().Int64() / 1000; // ms
-                aProp.SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
-                                              duration );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");   
+            iFile.Size( size );
+            iMedia->SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size );
+
+            // Duration, bitrate, samplerate, etc
+            //
+            if( !iMetadataOnly )
+            {
+                TRAPD(err2, iFileInfoUtil->OpenFileL(
+                          iFile, 
+                          iMedia->ValueText(KMPXMediaGeneralMimeType)));
+                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
+                if( KErrNone == err2 )
+                    {
+                    iMedia->SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
+                                                   iFileInfoUtil->BitRate() );
+                    iMedia->SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
+                                                   iFileInfoUtil->SampleRate() );
+                    TInt64 duration = (TInt64) iFileInfoUtil->Duration().Int64() / 1000; // ms
+                    iMedia->SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
+                                                    duration );
+
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
+                    }
+                
+                iFileInfoUtil->Reset();
                 }
             }
         }
-    else if( aFileErr == KErrNotFound || aFileErr == KErrPathNotFound )
+    else if( iFileOpenError == KErrNotFound || iFileOpenError == KErrPathNotFound )
         {
         dbFlags |= KMPXMediaGeneralFlagsIsInvalid;
         }
     // Finally set the db flag
     //
-    aProp.SetTObjectValueL( KMPXMediaGeneralFlags,
+    iMedia->SetTObjectValueL( KMPXMediaGeneralFlags,
                             dbFlags );
-
-    iFileInfoUtil->Reset();
-    
-    MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL --->");
     }
 
 // ---------------------------------------------------------------------------
@@ -631,6 +575,7 @@
 TInt CMPXMetadataExtractor::SupportedContainerTypeL( const TDesC& aFile,
                                                      TInt aIndex )
     {
+    MPX_FUNC("CMPXMetadataExtractor::SupportedContainerTypeL()");
     TInt index(KErrNotFound);
 
     TDataType dataType;
@@ -664,11 +609,20 @@
 // Callback but not used here
 // ---------------------------------------------------------------------------
 void CMPXMetadataExtractor::ThumbnailReady( TInt /*aError*/, 
-        MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
+        MThumbnailData& /*aThumbnail*/, TThumbnailRequestId aId )
     {
     MPX_FUNC("CMPXMetadataExtractor::ThumbnailReady()");
-    iOutstandingThumbnailRequest--;
-    if ( iOutstandingThumbnailRequest <= KMPXMaxThumbnailRequest )
+    
+    // Remove thumbnail id from array.
+    TInt index = iArrayTNRequestId.Find( aId );
+    if ( index >= 0 )
+        {
+        iArrayTNRequestId.Remove( index );
+        }
+    MPX_DEBUG2("CMPXMetadataExtractor::ThumbnailReady(): Outstanding Thumbnail Request = %d",
+            iArrayTNRequestId.Count());
+
+    if ( iArrayTNRequestId.Count() < KMPXMaxThumbnailRequest )
         {
         StopWaitLoop();
         }
@@ -727,7 +681,8 @@
 EXPORT_C TInt CMPXMetadataExtractor::ExtractAlbumArtL( CMPXMedia* aMedia )
     {
     MPX_FUNC("CMPXMetadataExtractor::ExtractAlbumArtL()");
-    TInt err = KErrNone; 
+    TInt err = KErrNone;
+    iCancelled = EFalse;
     
     if ( !aMedia->IsSupported(KMPXMediaGeneralUri) )
         {
@@ -742,26 +697,41 @@
     TPtrC ext( parse.Ext() );
     if (ext.CompareF(KNonEmbeddedArtExt)== 0)
         {
-		#ifdef RD_MPX_TNM_INTEGRATION
+#ifdef RD_MPX_TNM_INTEGRATION
 
         //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
         CheckBeforeSendRequest();
 
-        CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
-           path, KImageFileType  );
-          
-       
-
-        iTNManager->CreateThumbnails( *source );
-        
-        iOutstandingThumbnailRequest++;
-        CleanupStack::PopAndDestroy( source );
-
-        #endif
+        CThumbnailObjectSource* source( NULL );
+        if (aMedia->IsSupported(KMPXMediaMTPSampleData))
+            {
+            TBuf<20> mimeType(KImageFileType);
+            TInt sampleData = aMedia->ValueTObjectL<TInt>(KMPXMediaMTPSampleData);
+            HBufC8* value8 = ((HBufC8*)sampleData)->Des().AllocLC();   // make a local copy of sampleData
+            source = CThumbnailObjectSource::NewLC(
+                value8, mimeType, path );    // give up ownership of value8
+            
+            MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from buffer");
+            TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
+            iArrayTNRequestId.Append( tnId );
+            CleanupStack::PopAndDestroy( source );
+            CleanupStack::Pop( value8 );
+            }
+        else
+            {
+            source = CThumbnailObjectSource::NewLC(
+                path, KImageFileType  );
+            
+            MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from path");
+            TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
+            iArrayTNRequestId.Append( tnId );
+            CleanupStack::PopAndDestroy( source );
+            }
+#endif // RD_MPX_TNM_INTEGRATION
         }
     else
         {
-#endif
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
     // create wanted fields array
     RArray<TMetaDataFieldId> wantedFields;
     CleanupClosePushL( wantedFields );
@@ -785,54 +755,16 @@
     
     if ( !err )
         {
-        TRAP( err, GetMediaAlbumArtL( *aMedia, path ));
+        //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
+        CheckBeforeSendRequest();
+        TRAP( err, AddMediaAlbumArtL( *aMedia, path ));
         }
 
     // Reset the utility
     iMetadataUtility->ResetL();
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       }
-#endif
-    return err;
-    }
-
-// ----------------------------------------------------------------------------
-// Set album art.
-// ----------------------------------------------------------------------------
-TInt CMPXMetadataExtractor::GetMediaAlbumArtL( CMPXMedia& aMedia, 
-                                               const TDesC& aFile )
-    {
-    MPX_FUNC("CMPXMetadataExtractor::GetMediaAlbumArtL()");
-    TInt err = KErrNone;
-    // get metadata container.
-    const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
-
-    TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg );
-    
-    if ( data8.Length() )
-        {
-        MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
-
-#ifdef RD_MPX_TNM_INTEGRATION
-        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);
-#else // RD_MPX_TNM_INTEGRATION
-        aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
-#endif // RD_MPX_TNM_INTEGRATION          
-        }
-    else
-        {
-        err = KErrNotFound;
-        }
-    
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
     return err;
     }
 
@@ -840,38 +772,53 @@
 // Add album art to media object.
 // ----------------------------------------------------------------------------
 void CMPXMetadataExtractor::AddMediaAlbumArtL( CMPXMedia& aMedia, 
-                                               const TDesC& aFile,
-                                               TDesC8& aValue )
+                                               const TDesC& aFile )
     {
     MPX_FUNC("CMPXMetadataExtractor::AddMediaAlbumArtL()");
-#ifdef RD_MPX_TNM_INTEGRATION
-    
-    //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
-    CheckBeforeSendRequest();
-
-    aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
     
-    TBuf<256> mimeType;
-    mimeType.Copy( KImageFileType );
-    CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
-        &aValue, mimeType, aFile );
-    iTNManager->CreateThumbnails( *source );
-    CleanupStack::PopAndDestroy( source );
-    aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile );
-    iOutstandingThumbnailRequest++;
+    // get metadata container.
+    const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
+    TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg );
+   
+    if ( data8.Length() )
+        {
+        MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
+#ifdef RD_MPX_TNM_INTEGRATION
+        HBufC8* value8 = NULL; 
+        TRAPD( err, value8 = data8.AllocL() );
+        if ( KErrNone != err )
+            {
+            MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);
+            return;
+            }              
+        CleanupStack::PushL( value8 );
     
+        TBuf<256> mimeType;
+        mimeType.Copy( KImageFileType );
+        CThumbnailObjectSource* source = CThumbnailObjectSource::NewL(
+                value8, mimeType, aFile );
+        TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
+        iArrayTNRequestId.Append( tnId ); // add thumbnail id to array
+        CleanupStack::Pop( value8 );
+        aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile );
 #endif // RD_MPX_TNM_INTEGRATION          
+        aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
+        }
     }
 
+// ----------------------------------------------------------------------------
+// Check if can send request to TNM or not.
+// ----------------------------------------------------------------------------
 void CMPXMetadataExtractor::CheckBeforeSendRequest()
      {
      MPX_FUNC("CMPXMetadataExtractor::CheckBeforeSendRequest()");
 #ifdef RD_MPX_TNM_INTEGRATION
+    MPX_DEBUG2("CMPXMetadataExtractor::CheckBeforeSendRequest(): Outstanding Thumbnail Request = %d",
+            iArrayTNRequestId.Count());
 	// If thumbnail creation is ongoing, wait til it is done
-    if ( iOutstandingThumbnailRequest > KMPXMaxThumbnailRequest )
+    if ( iArrayTNRequestId.Count() >= KMPXMaxThumbnailRequest )
         {
         MPX_DEBUG1("CMPXMetadataExtractor::CheckBeforeSendRequest(): Thumbnail creation ongoing!");
-        iTNMBlockCount++;
         // Cancel timer.
         CancelTimeoutTimer();
         // Start timer in case there is no callback from ThumbNail Manager.
@@ -888,3 +835,292 @@
         }
 #endif // RD_MPX_TNM_INTEGRATION
      }
+
+// ----------------------------------------------------------------------------
+// Cancel request. This will empty the task array and stop the wait loop. This
+//                 will cause the CreateMediaL() to finish more quickly.
+// ----------------------------------------------------------------------------
+EXPORT_C void CMPXMetadataExtractor::CancelRequest()
+    {
+    MPX_FUNC("CMPXMetadataExtractor::CancelRequest()");
+    iCancelled = ETrue;
+    // Cancel all tasks
+    iArrayTasks.Reset();
+    // Cancel all thumbnail request
+    CancelAllThumbnailRequests();
+    StopWaitLoop();
+    }
+
+// ----------------------------------------------------------------------------
+// Cancel all outstanding thumbnail requests.
+// ----------------------------------------------------------------------------
+void CMPXMetadataExtractor::CancelAllThumbnailRequests()
+    {
+    MPX_FUNC("CMPXMetadataExtractor::CancelAllThumbnailRequests()");
+#ifdef RD_MPX_TNM_INTEGRATION
+    // TODO: remove comments when TNM make CancelRequest asynchronous.
+    /*TInt count = iArrayTNRequestId.Count();
+    for ( TInt i=0; i<count; i++ )
+        {
+        iTNManager->CancelRequest( iArrayTNRequestId[i] );
+        }
+    */
+    iArrayTNRequestId.Reset();
+#endif // RD_MPX_TNM_INTEGRATION
+    }
+
+// ----------------------------------------------------------------------------
+// Create media and set default data and mimetype.
+// ----------------------------------------------------------------------------
+void CMPXMetadataExtractor::DoCreateMediaL()
+    {
+    MPX_FUNC("CMPXMetadataExtractor::DoCreateMediaL()");
+    RArray<TInt> contentIDs;
+    contentIDs.AppendL( KMPXMediaIdGeneral );
+    contentIDs.AppendL( KMPXMediaIdAudio );
+    contentIDs.AppendL( KMPXMediaIdMusic );
+    contentIDs.AppendL( KMPXMediaIdDrm );
+    contentIDs.AppendL( KMPXMediaIdMTP );
+    iMedia = CMPXMedia::NewL( contentIDs.Array() );
+    contentIDs.Close();
+
+    // CMPXMedia default types
+    iMedia->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
+                                              EMPXItem );
+    iMedia->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
+                                                  EMPXSong );
+
+    TParsePtrC parse( iFileName );
+    // Title, default is file name
+    iMedia->SetTextValueL( KMPXMediaGeneralTitle,
+                          parse.Name() );
+    // Default album track
+    iMedia->SetTextValueL( KMPXMediaMusicAlbumTrack,
+                          KNullDesC );
+
+    // Set the Mime Type and collection UID
+    //
+    if( !iMetadataOnly )
+        {
+        TInt index(KErrNotFound);
+        TInt count( iSupportedTypes.Count() );
+        for (TInt i=0; i <count; ++i)
+            {
+            TInt index2(KErrNotFound);
+            const CDesCArray& exts = iSupportedTypes[i]->Extensions();
+            const TDesC& ext = parse.Ext();
+            if (!exts.FindIsq(ext, index2))
+                { // found
+                index = i;
+                break;
+                }
+            }
+        if( KErrNotFound != index )
+            {
+            MPX_DEBUG1("CMPXMetadataExtractor::DoCreateMediaL apparc <---" );
+            TInt mimeIndex = SupportedContainerTypeL( iFileName, index );
+            User::LeaveIfError( mimeIndex );
+            MPX_DEBUG1("CMPXMetadataExtractor::DoCreateMediaL apparc --->" );
+
+            iMedia->SetTextValueL( KMPXMediaGeneralMimeType,
+                                  iSupportedTypes[index]->Mimetypes()[mimeIndex] );
+
+            iMedia->SetTObjectValueL( KMPXMediaGeneralCollectionId,
+                                     iSupportedTypes[index]->Uid() );
+            }
+        else
+            {
+            User::Leave(KErrNotSupported);
+            }
+        }
+    else // other case use apparc to fetch and set mimetype
+        {
+        TDataType dataType;
+        TUid dummyUid(KNullUid);
+        iAppArc.AppForDocument(iFileName, dummyUid, dataType);
+        iMedia->SetTextValueL( KMPXMediaGeneralMimeType,dataType.Des() );
+        }
+        
+    // Initially set default tags.
+    SetDefaultL( *iMedia );
+    }
+
+// ----------------------------------------------------------------------------
+// Execute task at index 0.
+// ----------------------------------------------------------------------------
+void CMPXMetadataExtractor::ExecuteTaskL()
+    {
+    MPX_FUNC("CMPXMetadataExtractor::ExecuteTasksL()");
+
+    if ( iArrayTasks.Count() )
+        {
+        switch ( iArrayTasks[0] )
+            {
+            case ETaskCreateMedia:
+                DoCreateMediaL();
+                break;
+            case ETaskAddMetadata:
+                SetMediaPropertiesL();
+                break;
+            case ETaskAddExtMetadata:
+                SetExtMediaPropertiesL();
+                break;
+            case ETaskAddAlbumArt:
+                AddMediaAlbumArtL( *iMedia, iFileName );
+                break;
+            case ETaskCheckBeforeSend:
+                CheckBeforeSendRequest();
+                break;
+            default:
+                MPX_ASSERT(0); // Should never get here
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Constructs a media properties object : asynchronous funcion
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMPXMetadataExtractor::CreateMediaAsyncL( const TDesC& aFile,
+                                                        MMPXMetadataExtractorObserver* aObs,
+                                                        TBool aMetadataOnly )
+    {
+    MPX_FUNC("CMPXMetadataExtractor::CreateMediaAsyncL()");
+    // check if we are still processing a request.
+    if ( iArrayTasks.Count() )
+        {
+        MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaAsyncL Request ongoing. Abort!" );
+        User::Leave( KErrAbort );
+        }
+    
+    iCancelled = EFalse;
+    iFileOpenError = KErrNone;
+    iFileName = aFile;
+    iObs = aObs;
+    iMetadataOnly = aMetadataOnly;
+    
+    // populate the task array
+    AddTasksL();
+    
+    // Start task timer to execute task
+    if ( iArrayTasks.Count() )
+        {
+        if ( iTaskTimer->IsActive() )
+            {
+            iTaskTimer->Cancel();
+            }   
+        iTaskTimer->Start( 0, 0, TCallBack(TaskTimerCallback, this ));
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Opens the file
+// ---------------------------------------------------------------------------
+//
+TInt CMPXMetadataExtractor::OpenFile()
+    {
+    MPX_FUNC("CMPXMetadataExtractor::OpenFile()");
+    
+    // Open the file
+    iFile.Close();
+    TInt error = iFile.Open( iFs, iFileName, EFileRead | EFileShareReadersOrWriters );
+    MPX_DEBUG2("CMPXMetadataExtractor::OpenFile open error = %d", error );
+    return error;
+    }
+
+// ---------------------------------------------------------------------------
+// Populat task array
+// ---------------------------------------------------------------------------
+//
+void CMPXMetadataExtractor::AddTasksL()
+    {
+    MPX_FUNC("CMPXMetadataExtractor::AddTasks()");
+    iFileOpenError = OpenFile();
+    
+    // Do not change the order of the task below.
+    iArrayTasks.Reset();
+    if ( iFileOpenError == KErrNone )
+        {
+        iArrayTasks.AppendL(ETaskCreateMedia);
+        iArrayTasks.AppendL(ETaskAddMetadata);
+        iArrayTasks.AppendL(ETaskCheckBeforeSend);
+        iArrayTasks.AppendL(ETaskAddAlbumArt);
+        iArrayTasks.AppendL(ETaskAddExtMetadata);
+        }
+    else
+        {
+        iArrayTasks.AppendL(ETaskCreateMedia);
+        iArrayTasks.AppendL(ETaskAddExtMetadata);
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// Callback for timer.
+// ----------------------------------------------------------------------------
+TInt CMPXMetadataExtractor::TaskTimerCallback(TAny* aPtr)
+    {
+    MPX_FUNC("CMPXMetadataExtractor::TaskTimerCallback()");
+
+    CMPXMetadataExtractor* ptr =
+        static_cast<CMPXMetadataExtractor*>(aPtr);
+
+    ptr->HandleTaskTimerExpired();
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// Handle task timer expired
+// ----------------------------------------------------------------------------
+void CMPXMetadataExtractor::HandleTaskTimerExpired()
+    {
+    MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()");
+    
+    iTaskTimer->Cancel();
+    // execute task at index 0
+    TRAPD( error, ExecuteTaskL() );
+    if ( error || iCancelled )
+        {
+        // cleanup
+        if ( iMedia != NULL )
+            {
+            delete iMedia;
+            iMedia = NULL;
+            }
+        iArrayTasks.Reset();
+        }
+    
+    // Remove task at index 0.
+    if ( iArrayTasks.Count() )
+        {
+        iArrayTasks.Remove( 0 );
+        }
+    
+    // check if we have any more task to run
+    if ( iArrayTasks.Count() )
+        {
+        // start task timer
+        iTaskTimer->Start( 0, 0, TCallBack(TaskTimerCallback, this ));
+        }
+    else
+        {
+        // done
+        if ( iObs && !iCancelled )
+            {
+            iObs->HandleCreateMediaComplete( iMedia, error );
+            }
+        
+        CleanUp();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// Callback for timer.
+// ----------------------------------------------------------------------------
+void CMPXMetadataExtractor::CleanUp()
+    {
+    MPX_FUNC("CMPXMetadataExtractor::CleanUp()");
+    // Reset the utility
+    TRAP_IGNORE( iMetadataUtility->ResetL() );
+    iFile.Close();
+    }
+
--- a/mmappcomponents/harvester/server/group/mpxharvester.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/server/group/mpxharvester.mmp	Fri May 14 16:21:14 2010 +0300
@@ -23,8 +23,12 @@
 TARGET                  mpxharvesterserver.exe
 TARGETTYPE              exe
 UID                     0 0x101FFCA9
+#ifdef WINSCW
 EPOCHEAPSIZE            0x1000 0x500000
-EPOCSTACKSIZE 0X5000
+#else
+EPOCHEAPSIZE            0x1000 0x800000
+#endif
+EPOCSTACKSIZE           0x5000
 
 CAPABILITY              CAP_SERVER DRM AllFiles
 VENDORID                VID_DEFAULT
@@ -40,7 +44,6 @@
 SOURCE                  mpxfsformatmonitor.cpp
 SOURCE                  mpxmediaremovalmonitor.cpp
 SOURCE                  mpxusbeventhandler.cpp
-SOURCE                  mpxmmcejectmonitor.cpp
 
 USERINCLUDE             ../inc
 USERINCLUDE             ../../inc
@@ -57,6 +60,5 @@
 LIBRARY                 mpxplaylistengine.lib
 LIBRARY                 mpxplaybackutility.lib
 LIBRARY                 usbman.lib
-#ifdef RD_MULTIPLE_DRIVE
 LIBRARY                 PlatformEnv.lib
-#endif //RD_MULTIPLE_DRIVE
+LIBRARY                 disknotifyhandler.lib
--- a/mmappcomponents/harvester/server/inc/mpxharvesterengine.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/server/inc/mpxharvesterengine.h	Fri May 14 16:21:14 2010 +0300
@@ -32,7 +32,6 @@
 class CMPXFsFormatMonitor;
 class CMPXMediaRemovalMonitor;
 class CMPXUsbEventHandler;
-class CMPXMMCEjectMonitor;
 class CMPXMedia;
 class CMPXActiveTaskQueue;
 class CMPXPlaylistEngine;
@@ -306,7 +305,6 @@
     CMPXFsFormatMonitor*      iFormatMonitor;
     CMPXMediaRemovalMonitor*  iMediaRemovalMonitor;
     CMPXUsbEventHandler*      iUSBMonitor;
-    CMPXMMCEjectMonitor*      iMMCMonitor;
 
     // Internal task queue for async operations
     CMPXActiveTaskQueue*      iTaskQueue;
--- a/mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h	Fri May 14 16:21:14 2010 +0300
@@ -20,21 +20,35 @@
 #define CMPXMEDIAREMOVALMONITOR_H
 
 #include <e32base.h>
+#include <disknotifyhandler.h>
 #include "mpxsystemeventobserver.h"
 
 /**
  *  Class to monitors for File System dismount events
+ * 
+ *  The monitor emits events to MMPXSystemEventObserver
+ * 
+ *     EDiskDismountEvent whenever a drive is about to be dismounted (see RFs::NotifyDismount).
+ *     EDiskRemovedEvent  whenever a specified drive has been dismounted or removed
+ *     EDiskInsertedEvent whenever a specified drive has been inserted
+ *
+ *  The observer is expected to prepare the drive for dismounting during the EDiskDismountEvent.
+ *
+ *  Dismount monitoring is automatically subscribed for all non-remote drives.
+ *  Inserted/Removed monitor is subscribed only for the drive given in the constructor.
+ *
  *  @lib Harvester
  *  @since S60 3.0
  */
-class CMPXMediaRemovalMonitor : public CActive
+class CMPXMediaRemovalMonitor : public CBase, 
+                                public MDiskNotifyHandlerCallback
     {
 
 public:
 
     /**
     * Two-phase constructor
-    * @param aDrive drive to monitor
+    * @param aDrive drive to monitor for insertions and removals
     * @param aFs file server session
     * @param aObserver observer to the event
     */
@@ -55,24 +69,24 @@
     * Virtual destructor
     */
     virtual ~CMPXMediaRemovalMonitor();
-
-protected: // From base class 
     
-    /*
-    * From CActive
+    /**
+    * Check the status of the monitored disks
+    *
+    * This check should be done whenever there is a risk that we got
+    * a NotifyDismount even though the drives actually weren't dismounted.
+    * 
     */
-    void RunL();
-    
-    /*
-    * From CActive
-    */
-    void DoCancel();
+    void CheckDriveStatus();
+
+protected: // From Base Class
 
     /**
-    *  From CActive
+    * From MDiskNotifyHandlerCallback
     */
-    TInt RunError(TInt aError);    
-        
+    void HandleNotifyDismount( TInt aError, const TDismountEvent& aEvent );
+    void HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent );
+
 private:
 
     /**
@@ -89,6 +103,7 @@
 
 private: // data
     
+    CDiskNotifyHandler*  iDiskNotifyHandler;  // Disk notification handler
     TInt iDrive;        // Drive that is being monitored
     RFs& iFs;           // File Session, not owned
     TBool iDiskRemoved; // Is the disk inserted
--- a/mmappcomponents/harvester/server/inc/mpxmmcejectmonitor.h	Mon May 03 12:58:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
-* Copyright (c) 2007 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:  MMC Eject monitor
-*
-*/
-
-
-#ifndef C_MPXMMCEJECTMONITOR_H
-#define C_MPXMMCEJECTMONITOR_H
-
-#include <mpxpskeyobserver.h>
-#include "mpxsystemeventobserver.h"
-
-// FORWARD DECLARATIONS
-class CMPXPSKeyWatcher;
-
-/**
- *  Monitors a SysAp cenrep key for the "eject" mmc menu option
- *
- *  @lib mpxharvester.exe
- *  @since S60 3.1
- */
-NONSHARABLE_CLASS( CMPXMMCEjectMonitor ) : public CBase,
-                                           public MMPXPSKeyObserver
-    {
-
-public:
-
-    /**
-    * Two-phased constructor
-    */
-    static CMPXMMCEjectMonitor* NewL( MMPXSystemEventObserver& aObserver );
-
-    /**
-    * Destructor
-    */
-    virtual ~CMPXMMCEjectMonitor();
-
-protected: // From Base Class
-
-    /**
-    * From MMPXPSKeyObserver
-    */
-    void HandlePSEvent( TUid aUid, TInt aKey );
-
-private:
-    
-    /**
-    * 2nd phase constructor
-    */
-    void ConstructL();
-    
-    /**
-    * Private Constructor
-    */
-    CMPXMMCEjectMonitor( MMPXSystemEventObserver& aObserver );
-    
-private: // data
-
-    CMPXPSKeyWatcher*  iPSKeyWatcher;  // PS key watcher for USB PS key
-   
-    /*
-    * Observer interface to callback to an observer
-    */
-    MMPXSystemEventObserver& iObserver; // Not owned
-    };
-
-#endif // C_MPXMMCEJECTMONITOR_H
--- a/mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp	Fri May 14 16:21:14 2010 +0300
@@ -18,17 +18,11 @@
 
 #include <e32base.h>
 #include <f32file.h>
-#ifdef RD_MULTIPLE_DRIVE
 #include <driveinfo.h>
-#endif //RD_MULTIPLE_DRIVE
 #include <mpxlog.h>
 #include "mpxfsformatmonitor.h"
 
-#ifdef RD_MULTIPLE_DRIVE
-    static const TInt KDriveCount = 2;
-#else
-    static const TInt KDriveCount = 1;
-#endif
+static const TInt KDriveCount = 2;
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -142,6 +136,12 @@
         }
     else  // TOperationType::EEnd or TOperationType::EAbort
         {
+        //Ignore if formatting is ongoing
+        TBool formatting = iBackupSession->IsBackupOperationRunning();
+        if ( formatting )
+        	{
+            return;
+        	}
         for(TInt i=0; i<KDriveCount; ++i)
             {
             iObserver.HandleSystemEventL(EFormatEndEvent, iBackupDrives[i]);
--- a/mmappcomponents/harvester/server/src/mpxharvesterengine.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/server/src/mpxharvesterengine.cpp	Fri May 14 16:21:14 2010 +0300
@@ -17,9 +17,7 @@
 
 
 #include <e32std.h>
-#ifdef RD_MULTIPLE_DRIVE
 #include <driveinfo.h>
-#endif //RD_MULTIPLE_DRIVE
 #include <mpxlog.h>
 #include <mpxmedia.h>
 #include <mpxcollectionutility.h>
@@ -38,7 +36,6 @@
 #include "mpxfsformatmonitor.h"
 #include "mpxmediaremovalmonitor.h"
 #include "mpxusbeventhandler.h"
-#include "mpxmmcejectmonitor.h"
 #include "mpxharvesterfilehandler.h"
 #include "mpxharvesterengineobserver.h"
 #include "mpxhvsmsg.h"
@@ -64,7 +61,6 @@
     delete iFormatMonitor;
     delete iMediaRemovalMonitor;
     delete iUSBMonitor;
-    delete iMMCMonitor;
 
     delete iFileHandler;
     iFsSession.Close();
@@ -99,19 +95,15 @@
 
     // MMC Removal monitor for Removable Drive
     TInt removableDrive( EDriveE );
-#ifdef RD_MULTIPLE_DRIVE
     User::LeaveIfError( DriveInfo::GetDefaultDrive(
         DriveInfo::EDefaultRemovableMassStorage,
         removableDrive ) );
-#endif // RD_MULTIPLE_DRIVE
     iMediaRemovalMonitor = CMPXMediaRemovalMonitor::NewL(
         removableDrive, iFsSession, *this );
 
     // USB Event monitor
     iUSBMonitor = CMPXUsbEventHandler::NewL( *this );
 
-    // MMC Event handling
-    iMMCMonitor = CMPXMMCEjectMonitor::NewL( *this );
 
     // File handler to handle file related events
     iFileHandler = CMPXHarvesterFileHandler::NewL( iFsSession );
@@ -445,6 +437,26 @@
                                               TInt aData )
     {
     MPX_DEBUG2("CMPXHarvesterEngine::HandleSystemEventL %i <---", aEvent);
+    
+    if( !iTempCollectionUtil )
+        {
+        iTempCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMcModeDefault );
+        }
+        
+    // Must close collections ASAP in case drives may dismount soon       
+    TRAP_IGNORE( 
+        if (aEvent == EUSBMassStorageStartEvent)
+            {
+            DoStopPlaybackL();
+            iTempCollectionUtil->Collection().CommandL ( EMcCloseCollection, -1 ); 
+            iFileHandler->HandleSystemEventL ( EDiskDismountEvent, -1 );
+            }
+        else if ( aEvent == EDiskDismountEvent )
+            {
+            DoStopPlaybackL();
+            iTempCollectionUtil->Collection().CommandL ( EMcCloseCollection, aData );
+            }
+        );
 
     // The engine is a delegator, it sends the events to
     // different classes to do the actual work
@@ -455,14 +467,17 @@
     TBool notify(ETrue);
     switch( aEvent )
         {
-        case EPowerKeyEjectEvent:
+        case EDiskDismountEvent:
             {
             notify=EFalse;
-            TRAP_IGNORE( DoStopPlaybackL() );
             break;
             }
+        case EUSBMassStorageStartEvent:
+            {
+            iDiskOpActive = ETrue;
+            }
+            break;
         case EFormatStartEvent:
-        case EUSBMassStorageStartEvent:   // deliberate fall through
         case EUSBMTPStartEvent:           // deliberate fall through
         case EDiskInsertedEvent:          // deliberate fall through
         case EDiskRemovedEvent:           // deliberate fall through
@@ -470,11 +485,6 @@
             iDiskOpActive = ETrue;
             TRAP_IGNORE( DoStopPlaybackL() );
             }
-        default: //lint !e616 !e825
-            if( !iTempCollectionUtil )
-                {
-                iTempCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMcModeDefault );
-                }
             break;
         }
 
@@ -514,6 +524,15 @@
                 iTempCollectionUtil = NULL;
                 }
         }
+        
+    if ( aEvent == EUSBMassStorageEndEvent )
+        {
+        // In some cases visit to USB Mass Storage mode can be so brief
+        // that drives are actually not dismounted at all even though we
+        // get a NotifyDismount event. In such cases we need to re-issue
+        // the NotifyDismount requests.
+        iMediaRemovalMonitor->CheckDriveStatus();
+        }
     }
 
 // ---------------------------------------------------------------------------
--- a/mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp	Fri May 14 16:21:14 2010 +0300
@@ -18,6 +18,7 @@
 
 #include <e32base.h>
 #include <f32file.h>
+#include <driveinfo.h>
 #include <mpxlog.h>
 #include "mpxmediaremovalmonitor.h"
 
@@ -27,14 +28,12 @@
 //
 CMPXMediaRemovalMonitor::CMPXMediaRemovalMonitor
                   ( TInt aDrive, RFs& aFs, MMPXSystemEventObserver& aObserver ) 
-                                                       : CActive(EPriorityHigh),
-                                                         iDrive( aDrive ),
+                                                       : iDrive( aDrive ),
                                                          iFs( aFs ),
                                                          iDiskRemoved( EFalse ),
                                                          iObserver( aObserver )
                                                          
     {
-    CActiveScheduler::Add(this);
     }
 
 
@@ -44,19 +43,11 @@
 //
 void CMPXMediaRemovalMonitor::ConstructL()
     {
-    MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::ConstructL <---"));
+    MPX_FUNC("CMPXMediaRemovalMonitor::ConstructL");    	
+    iDiskNotifyHandler = CDiskNotifyHandler::NewL(*this, iFs);
+    CheckDriveStatus();
     
-    // Initial state
-    TDriveInfo drive;
-	User::LeaveIfError(iFs.Drive(drive, TInt(iDrive)));
-   	iDiskRemoved = (drive.iType == EMediaNotPresent);
-
-    // Start listening
-    TNotifyType notType(ENotifyDisk);
-    iFs.NotifyChange( notType, iStatus );
-    SetActive();
-    
-    MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::ConstructL --->"));
+    iDiskNotifyHandler->NotifyDisk();
     }
 
 
@@ -99,74 +90,95 @@
 //
 CMPXMediaRemovalMonitor::~CMPXMediaRemovalMonitor()
     {
-    Cancel();
+    delete iDiskNotifyHandler;
+    }
+    
+void CMPXMediaRemovalMonitor::CheckDriveStatus()
+    {
+    TDriveList driveList;
+    TInt driveCount(0);
+    TInt error = DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount );
+    if ( error != KErrNone )
+        {
+        MPX_DEBUG2("CMPXMediaRemovalMonitor::CheckDriveStatus GetUserVisibleDrives failed, error %d", error);
+        return;
+        }
+    for( TInt driveNum = EDriveA; driveNum < EDriveZ; driveNum++ )
+        {
+        if ( driveNum != EDriveC && driveList[driveNum] )
+            {
+            TDriveInfo driveInfo;
+            if (iFs.Drive(driveInfo, driveNum) == KErrNone)
+               {
+               if ( (driveInfo.iType != EMediaNotPresent) && ! (driveInfo.iDriveAtt & KDriveAttRemote) )
+                   {
+                   TInt error = iDiskNotifyHandler->NotifyDismount( driveNum );
+                   MPX_DEBUG3("CMPXMediaRemovalMonitor::CheckDriveStatus monitoring drive %d for dismounts, error %d", driveNum, error);
+                   }
+                }
+            if ( driveNum == iDrive )
+                {
+                iDiskRemoved = driveInfo.iType == EMediaNotPresent;
+                }
+            }
+        }
     }
 
-    
 // ---------------------------------------------------------------------------
-// Service the request
+// Callback when disk state has changed
 // ---------------------------------------------------------------------------
 //
-void CMPXMediaRemovalMonitor::RunL()
+void CMPXMediaRemovalMonitor::HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent )
     {
-    MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::RunL <---"));
-    
-    // Re-subscribe to event.
-    TNotifyType notType(ENotifyDisk);
-    iFs.NotifyChange( notType, iStatus );
-    SetActive();
-    
-    // Check state
-    TDriveInfo drive;
-	User::LeaveIfError(iFs.Drive(drive, TInt(iDrive)));
-	
-	// Notify Observer
-    switch(drive.iType)
-        {
-        case EMediaNotPresent:
-            {
-            if (!iDiskRemoved)
+    MPX_DEBUG4("-->CMPXMediaRemovalMonitor::HandleNotifyDisk aError=%d event=%d drive=%d", aError, aEvent.iType, aEvent.iDrive);
+	  if ( aError == KErrNone )
+	      {
+	      if ( aEvent.iType == EDiskRemoved
+             || aEvent.iType == EDiskStatusChanged && aEvent.iInfo.iType == EMediaNotPresent )
+	          {
+	          if ( aEvent.iDrive == iDrive && !iDiskRemoved )
                 {
                 iObserver.HandleSystemEventL( EDiskRemovedEvent, iDrive );
+                iDiskRemoved = ETrue;
                 }
-            iDiskRemoved = ETrue;
-            break;
-            }
-        default:
-            {
-            if ( iDiskRemoved &&
-        		 ( drive.iMediaAtt & ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) != 
- 				 ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) 
+        
+	          }
+	      else if ( ( aEvent.iType == EDiskAdded || aEvent.iType == EDiskStatusChanged ) 
+                  && aEvent.iInfo.iType != EMediaNotPresent )
+	          {
+            if ( aEvent.iDrive == iDrive 
+            	   && iDiskRemoved 
+                 && ( aEvent.iInfo.iMediaAtt & ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) 
+                    != ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) )
                 {
                 iObserver.HandleSystemEventL( EDiskInsertedEvent, iDrive );
                 iDiskRemoved = EFalse;
                 }
-            break;
-            }
+                
+            if ( !( aEvent.iInfo.iDriveAtt & KDriveAttRemote ) ) 
+                {
+                TInt error = iDiskNotifyHandler->NotifyDismount( aEvent.iDrive );
+                MPX_DEBUG3("CMPXMediaRemovalMonitor::HandleNotifyDisk monitoring drive %d for dismounts, error %d", aEvent.iDrive, error);
+                }
+	          }
         }
-    
+            
+    MPX_DEBUG1("<--CMPXMediaRemovalMonitor::HandleNotifyDisk");
+    }   
 
-    MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::RunL --->"));
-    }
     
 // ---------------------------------------------------------------------------
-// Cancel NotifyChange request from file system
+// Callback when disk is about to be dismounted
 // ---------------------------------------------------------------------------
 //
-void CMPXMediaRemovalMonitor::DoCancel()
+void CMPXMediaRemovalMonitor::HandleNotifyDismount( TInt aError, const TDismountEvent& aEvent )
     {
-    iFs.NotifyChangeCancel();
+    MPX_DEBUG3("-->CMPXMediaRemovalMonitor::HandleNotifyDismount aError=%d drive=%d", aError, aEvent.iDrive);
+    if (aError == KErrNone)
+        {
+        TRAP_IGNORE( iObserver.HandleSystemEventL( EDiskDismountEvent, aEvent.iDrive ) );
+        TInt error = iDiskNotifyHandler->AllowDismount( aEvent.iDrive );
+        MPX_DEBUG3("CMPXMediaRemovalMonitor::HandleNotifyDismount allowed dismount of drive %d, error %d", aEvent.iDrive, error);
+        }
+    MPX_DEBUG1("<--CMPXMediaRemovalMonitor::HandleNotifyDismount");
     }
-    
-// ----------------------------------------------------------------------------
-// Handles a leave occurring in the request completion event handler RunL()
-// Don't care if client has a User::Leave() in RunL(), keep monitoring for events
-// ----------------------------------------------------------------------------
-//
-TInt CMPXMediaRemovalMonitor::RunError(TInt aError)
-    {
-    MPX_DEBUG2("CMPXMediaRemovalMonitor::RunError(%d)", aError );
-    (void) aError;  // avoid compile warning in urel
-    
-    return KErrNone;
-    }           
--- a/mmappcomponents/harvester/server/src/mpxmmcejectmonitor.cpp	Mon May 03 12:58:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
-* Copyright (c) 2007 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:  Monitor for PS Key changes from SysAp ( ME specific )
-*
-*/
-
-
-#include <e32base.h>
-#include <e32property.h>
-#include <mpxpskeywatcher.h>
-#include <mpxlog.h>
-#include "mpxmmcejectmonitor.h"
-
-// CONSTANTS
-const TUid  KMmcEjectAppUid = { 0x101FFAFC };
-const TUint KKeyMmcEjectOperation = 10;
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// Constructor
-// ---------------------------------------------------------------------------
-//
-CMPXMMCEjectMonitor::CMPXMMCEjectMonitor( MMPXSystemEventObserver& aObserver ) :
-                                        iObserver( aObserver )
-    {
-    
-    }
-
-
-// ---------------------------------------------------------------------------
-// 2nd phased Constructor
-// ---------------------------------------------------------------------------
-//
-void CMPXMMCEjectMonitor::ConstructL()
-    {
-    MPX_DEBUG1(_L("CMPXMMCEjectMonitor::ConstructL <---"));
-    
-    iPSKeyWatcher = CMPXPSKeyWatcher::NewL( KMmcEjectAppUid, 
-                                            KKeyMmcEjectOperation,
-                                            this );
-    MPX_DEBUG1(_L("CMPXMMCEjectMonitor::ConstructL --->"));
-    }
-
-
-// ---------------------------------------------------------------------------
-// Two-Phase Constructor
-// ---------------------------------------------------------------------------
-//
-CMPXMMCEjectMonitor* CMPXMMCEjectMonitor::NewL( MMPXSystemEventObserver& aObserver )
-    {
-    CMPXMMCEjectMonitor* self = new( ELeave ) CMPXMMCEjectMonitor( aObserver );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CMPXMMCEjectMonitor::~CMPXMMCEjectMonitor()
-    {
-    delete iPSKeyWatcher;
-    }
-
-// ---------------------------------------------------------------------------
-// Callback when a cenrep key is modified
-// ---------------------------------------------------------------------------
-//
-void CMPXMMCEjectMonitor::HandlePSEvent( TUid /*aUid*/, TInt /*aKey*/ )
-    {
-    MPX_DEBUG1(_L("CMPXMMCEjectMonitor::HandlePSEvent <---"));
-    TInt value;
-    iPSKeyWatcher->GetValue( value );
-    
-    // MMC About to be ejected from power key menu
-    //
-    if( value == 1 )
-        {
-        TRAP_IGNORE( iObserver.HandleSystemEventL( EPowerKeyEjectEvent, 0 ) );
-        }
-    MPX_DEBUG1(_L("CMPXMMCEjectMonitor::HandlePSEvent --->"));
-    }
-
-// END OF FILE
--- a/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp	Fri May 14 16:21:14 2010 +0300
@@ -19,14 +19,12 @@
 #include <e32base.h>
 #include <f32file.h>
 #include <e32property.h>
-#ifdef RD_MULTIPLE_DRIVE
 #include <driveinfo.h>
-#endif //RD_MULTIPLE_DRIVE
 #include <mpxpskeywatcher.h>
 #include <coreapplicationuisdomainpskeys.h>
 #include <UsbWatcherInternalPSKeys.h>
 #include <usbpersonalityids.h>
-#include <MtpPrivatePSKeys.h>
+#include <mtpprivatepskeys.h>
 #include <mpxlog.h>
 #include "mpxusbeventhandler.h"
 
@@ -151,11 +149,9 @@
     
     // Use the default MMC drive
     TInt removableDrive( EDriveE );
-#ifdef RD_MULTIPLE_DRIVE
     User::LeaveIfError( DriveInfo::GetDefaultDrive(
         DriveInfo::EDefaultRemovableMassStorage,
         removableDrive ) );
-#endif // RD_MULTIPLE_DRIVE
 
     // Handle the Key event
     TInt value;
@@ -176,9 +172,7 @@
             iObserver.HandleSystemEventL( EUSBMTPEndEvent, removableDrive );
             }
         MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - USB Start");
-#ifdef RD_MULTIPLE_DRIVE
         removableDrive = -1;
-#endif // RD_MULTIPLE_DRIVE
 
         // Notify the state change (may happen more than once)
         iObserver.HandleSystemEventL( EUSBMassStorageStartEvent, removableDrive );
@@ -197,7 +191,7 @@
 		
         if (value == EMtpPSStatusActive)
             {
-        	MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP Start");
+            MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP Start");
             iObserver.HandleSystemEventL( EUSBMTPStartEvent, removableDrive );
             iState = KUsbPersonalityIdMTP;
             }
--- a/mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 4.1.4 %
+// Version : %version: 4.1.5 %
 
 
 
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h	Fri May 14 16:21:14 2010 +0300
@@ -75,7 +75,7 @@
     * @param aFullFileName, full file name of file
     * @return void
     */
-    void AddObjectL( const CMTPObjectMetaData& aObject );
+    IMPORT_C void AddObjectL( const CMTPObjectMetaData& aObject );
 
     /**
     * Set abstract media to DB
@@ -124,7 +124,7 @@
     * Deletes metadata information associated with the object
     * @param aObject, the object need to be deleted
     */
-    void DeleteObjectL( const CMTPObjectMetaData& aObject );
+    IMPORT_C void DeleteObjectL( const CMTPObjectMetaData& aObject );
 
     /**
     * Set current  drive info
@@ -215,7 +215,7 @@
 
     void ConstructL();
 
-    TMPXGeneralCategory ContainerCategory( const TDesC& aFullFileName );
+    TMPXGeneralCategory ContainerCategoryL( const TDesC& aFullFileName );
 
     /**
     * Remove all dummy file of which format is "pla", and leave the "m3u"
@@ -225,10 +225,11 @@
 private:
     CMmMtpDpMetadataMpxAccess* iMmMtpDpMetadataMpxAccess;
     CMmMtpDpMetadataVideoAccess* iMmMtpDpMetadataVideoAccess;
-    TBool iOpenSession;
 
     MMTPDataProviderFramework& iFramework;
-    RFs& iFs;	// should not remove this member data!!!
+    RFs& iFs;    // should not remove this member data!!!
+
+    TInt iOpenCount;	// introduce to fix CollectionHelper Flush problem
 
     CDesCArray* iAbstractMediaArray;
 
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatampxaccess.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatampxaccess.h	Fri May 14 16:21:14 2010 +0300
@@ -56,6 +56,16 @@
 
 public:
     /**
+     * OpenSession, introduce to fix CollectionHelper Flush problem
+     */
+    void OpenSession();
+
+    /**
+     * CloseSession, introduce to fix CollectionHelper Flush problem
+     */
+    void CloseSession();
+
+    /**
      * 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
@@ -203,6 +213,7 @@
     TBuf<KStorageRootMaxLength> iStoreRoot;
 
     MMPXCollectionHelper* iCollectionHelper;
+    HBufC8* iSampleData;
 
 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
     CMmMtpDpPerfLog* iPerfLog;
--- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdpfiledefs.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdpfiledefs.h	Fri May 14 16:21:14 2010 +0300
@@ -59,9 +59,7 @@
 
 //ODF container
 _LIT(KFormatExtensionODFAudio3GPP, "0xB984:ODF:audio/3gpp");
-_LIT(KFormatExtensionODFAudioMP4, "0xB982:ODF:audio/mp4");
 _LIT(KFormatExtensionODFVideo3GPP, "0xB984:ODF:video/3gpp");
-_LIT(KFormatExtensionODFVideoMP4, "0xB982:ODF:video/mp4");
 
 _LIT(KFormatExtensionM4A, "0xB982:m4a");
 _LIT(KFormatExtensionO4A, "0xB984:o4a");
@@ -100,7 +98,7 @@
     EMTPSubFormatCodeUnknown,
     EMTPSubFormatCodeAudio,
     EMTPSubFormatCodeVideo,
-    EMTPSubFormatCodeUndefine
+    EMTPSubFormatCodeUndefined
     };
 
 #endif // MMMTPDPFILEDEFS_H
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h	Fri May 14 16:21:14 2010 +0300
@@ -99,10 +99,6 @@
         TInt aError = KErrNone );
 
     void InitStorageL( );
-
-    /**
-    * Scan next storage
-    */
     void ScanNextL();
 
     /**
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp	Fri May 14 16:21:14 2010 +0300
@@ -118,7 +118,7 @@
     iSupportedPropPlaylist.Close();
     iSupportedPropAll.Close();
 
-    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProvider::~CAbstractMediaMtpDataProvider" ) );
+    PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProvider::~CAbstractMediaMtpDataProvider" ) );
     }
 
 void CAbstractMediaMtpDataProvider::Cancel()
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp	Fri May 14 16:21:14 2010 +0300
@@ -269,7 +269,7 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::ScanNextL()
     {
-    while (iStorages.Count() > 0)
+    while ( iStorages.Count() > 0 )
         {
         while ( iEnumState < EEnumCount )
             {
@@ -284,14 +284,15 @@
                 return;
                 }
             ++iEnumState;
-            if (iEnumState == EEnumCount)
+            if ( iEnumState == EEnumCount )
                 {
                 break;
                 }
             InitStorageL();
             }
+
         iStorages.Remove( 0 );
-        if (iStorages.Count() == 0)
+        if ( iStorages.Count() == 0 )
             {
             break;
             }
@@ -313,8 +314,6 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::RunL()
     {
-    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::RunL" ) );
-
     // insert all abstract medias into handle db of framework
     CMPXMedia* media = ( *iAbstractMedias )[iCurrentIndex];
     
@@ -411,21 +410,39 @@
     TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parser.DriveAndPath() );
     PERFLOGSTOP( KObjectManagerObjectUid );
 
-    object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
-
-    PERFLOGSTART( KObjectManagerInsert );
-    iObjectMgr.InsertObjectL( *object );
-    PERFLOGSTOP( KObjectManagerInsert );
-
-    CleanupStack::PopAndDestroy( object );// - object
+    // MTP FW returns KMTPHandleNone for parentHandle in two situations:
+    // 1. The path doesn't exist
+    // 2. The object is under root directory
+    if ( parentHandle == KMTPHandleNone )
+        {
+        if ( BaflUtils::PathExists( iFramework.Fs(), parser.DriveAndPath() ) )
+            {
+            parentHandle = KMTPHandleNoParent;
+            }
+        else
+            {
+            iDataProvider.GetWrapperL().DeleteObjectL( *object );
+            }
+        }
 
-    //Only remember the playlist file for clean up
-    if( iEnumState == EEnumPlaylist )
+    if ( parentHandle != KMTPHandleNone )
         {
-        iDataProvider.GetWrapperL().CreateDummyFile( aSuid );
+        object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
+
+        PERFLOGSTART( KObjectManagerInsert );
+        iObjectMgr.InsertObjectL( *object );
+        PERFLOGSTOP( KObjectManagerInsert );
+
+        CleanupStack::PopAndDestroy( object );// - object
 
-        // remember the abstract media file for clean up
-        iDataProvider.GetWrapperL().AddDummyFileL( aSuid );
+        //Only remember the playlist file for clean up
+        if( iEnumState == EEnumPlaylist )
+            {
+            iDataProvider.GetWrapperL().CreateDummyFile( aSuid );
+
+            // remember the abstract media file for clean up
+            iDataProvider.GetWrapperL().AddDummyFileL( aSuid );
+            }
         }
 
     PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::AddEntryL" ) );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp	Fri May 14 16:21:14 2010 +0300
@@ -89,14 +89,12 @@
         iWrapper.AddDummyFileL( iFileName );
         // Do not update MPX db to keep the same behavior in mass storage and device file manager.
         }
-    else
-        {
-        TRAPD( err, iWrapper.RenameObjectL( *iObjectInfo, iFileName ) );
+
+     TRAPD( err, iWrapper.RenameObjectL( *iObjectInfo, iFileName ) );
 
-         // should not fail for 1 file, keep it going, as folder already renamed
-         if ( err != KErrNone )
-             PRINT1( _L( "MM MTP <> CRenameObject::PerformAdditionalActionL err = %d" ), err );
-        }
+     // should not fail for 1 file, keep it going, as folder already renamed
+     if ( err != KErrNone )
+         PRINT1( _L( "MM MTP <> CRenameObject::PerformAdditionalActionL err = %d" ), err );
 
     // the reference DB use PUID
     // so we needn't to update the reference DB
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovider.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovider.h	Fri May 14 16:21:14 2010 +0300
@@ -113,6 +113,12 @@
     */
     void RenameObjectL( const TMTPNotificationParamsHandle& aObject );
 
+    /**
+    * Notify the data provider that the object has been added
+    * @param aObjectHandle    the added object handle
+    */
+    void ObjectAddedL( TUint32 aObjectHandle );
+
     void StartObjectEnumerationL( TUint32 aStorageId );
 
     void StartStorageEnumerationL();
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h	Fri May 14 16:21:14 2010 +0300
@@ -111,7 +111,7 @@
 enum TMmMtpFramesPerThousandSecondsRange
     {
     EMTPMinFramesPerThousandSeconds  = 0x00000000,
-    EMTPMaxFramesPerThousandSeconds  = 0x00007530,  // 30000 frame per ms (30 frame/s), standard for progressive content
+    EMTPMaxFramesPerThousandSeconds  = 0x00007530,  // 30000 frame per thousand seconds (30 frame/s), standard for progressive content
     EMTPStepFramesPerThousandSeconds = 0x00000001
     };
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovider.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovider.cpp	Fri May 14 16:21:14 2010 +0300
@@ -179,9 +179,11 @@
             break;
 
         case EMTPStorageAdded:
+            PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPStorageAdded event recvd" ) );
             break;
 
         case EMTPStorageRemoved:
+            PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPStorageRemoved event recvd" ) );
             break;
 
         case EMTPRenameObject:
@@ -189,6 +191,11 @@
             RenameObjectL( *reinterpret_cast<const TMTPNotificationParamsHandle*> ( aParams ) );
             break;
 
+        case EMTPObjectAdded:
+            PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPObjectAdded event recvd" ) );
+            ObjectAddedL(*reinterpret_cast<const TUint32*>(aParams));
+            break;
+
         default:
             PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL default" ) );
             // Ignore all other notifications.
@@ -271,6 +278,8 @@
 
     // introduce to cleanup DBs at each close session
     iMediaEnumerator->SessionClosedL();
+    CMmMtpDpAccessSingleton::CloseSessionL();
+
     PRINT( _L( "MM MTP <= CMediaMtpDataProvider::SessionClosedL" ) );
     }
 
@@ -305,6 +314,27 @@
     }
 
 // -----------------------------------------------------------------------------
+// CMediaMtpDataProvider::ObjectAddedL
+// Process the added object
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProvider::ObjectAddedL( TUint32 aObjectHandle )
+    {
+    PRINT1( _L( "MM MTP => CMediaMtpDataProvider::ObjectAddedL aHandle=0x%x" ), aObjectHandle );
+
+    CMTPObjectMetaData* object(CMTPObjectMetaData::NewLC());
+    Framework().ObjectMgr().ObjectL( aObjectHandle, *object );
+
+    //Since the object's processor is not route to media dp, its format code should be reset
+    TUint formatCode = MmMtpDpUtility::FormatFromFilename( object->DesC( CMTPObjectMetaData::ESuid ) );
+    object->SetUint( CMTPObjectMetaData::EFormatCode, formatCode );
+    GetWrapperL().AddObjectL( *object );
+    PRINT2( _L( "MM MTP => CMediaMtpDataProvider::ObjectAddedL formatCode=0x%x Suid=%S" ), formatCode, &(object->DesC( CMTPObjectMetaData::ESuid ) ) );
+    CleanupStack::PopAndDestroy( object );
+    PRINT( _L( "MM MTP <= CMediaMtpDataProvider::ObjectAddedL" ) );
+    }
+
+// -----------------------------------------------------------------------------
 // CMediaMtpDataProvider::StartObjectEnumerationL
 // Start object enumeration
 // -----------------------------------------------------------------------------
@@ -435,9 +465,7 @@
         #endif
         //ODF container
         aStrings.AppendL(KFormatExtensionODFAudio3GPP);
-        aStrings.AppendL(KFormatExtensionODFAudioMP4);
         aStrings.AppendL(KFormatExtensionODFVideo3GPP);
-        aStrings.AppendL(KFormatExtensionODFVideoMP4);
 
         aStrings.AppendL(KFormatExtensionO4A);
         aStrings.AppendL(KFormatExtensionO4V);
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def	Fri May 14 16:21:14 2010 +0300
@@ -4,156 +4,157 @@
 	?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 &)
 	??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)
-	?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 &)
-	?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 &)
-	?Release@CMmMtpDpAccessSingleton@@SAXXZ @ 22 NONAME ; void CMmMtpDpAccessSingleton::Release(void)
-	?UsbDisconnect@CSendObject@@MAEXXZ @ 23 NONAME ; void CSendObject::UsbDisconnect(void)
-	?ServiceL@CGetFormatCapabilities@@MAEXXZ @ 24 NONAME ; void CGetFormatCapabilities::ServiceL(void)
-	?GetAllReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVCDesC16Array@@@Z @ 25 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL(class CMPXMedia *, class CDesC16Array &)
-	??1CSetObjectPropList@@UAE@XZ @ 26 NONAME ; CSetObjectPropList::~CSetObjectPropList(void)
-	?ServiceL@CSetObjectPropList@@MAEXXZ @ 27 NONAME ; void CSetObjectPropList::ServiceL(void)
-	??0CMoveObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 28 NONAME ; CMoveObject::CMoveObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??0CRequestUnknown@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 29 NONAME ; CRequestUnknown::CRequestUnknown(class MMTPDataProviderFramework &, class MMTPConnection &)
-	?ConstructL@CGetObjectPropList@@IAEXXZ @ 30 NONAME ; void CGetObjectPropList::ConstructL(void)
-	??1CSendObject@@UAE@XZ @ 31 NONAME ; CSendObject::~CSendObject(void)
-	?ServiceMetaDataFromWrapperL@CGetObjectPropValue@@IAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 32 NONAME ; void CGetObjectPropValue::ServiceMetaDataFromWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?NewL@CGetObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 33 NONAME ; class MMmRequestProcessor * CGetObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectPropValue@@UAE@XZ @ 34 NONAME ; CGetObjectPropValue::~CGetObjectPropValue(void)
-	?CreateL@CMmMtpDpAccessSingleton@@SAXAAVMMTPDataProviderFramework@@@Z @ 35 NONAME ; void CMmMtpDpAccessSingleton::CreateL(class MMTPDataProviderFramework &)
-	??1CGetFormatCapabilities@@UAE@XZ @ 36 NONAME ; CGetFormatCapabilities::~CGetFormatCapabilities(void)
-	?ServiceL@CSetObjectReferences@@EAEXXZ @ 37 NONAME ; void CSetObjectReferences::ServiceL(void)
-	?DoHandleDataIToRPhaseL@CRequestProcessor@@MAEHXZ @ 38 NONAME ; int CRequestProcessor::DoHandleDataIToRPhaseL(void)
-	??0CGetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 39 NONAME ; CGetObjectPropList::CGetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ConstructL@CCopyObject@@IAEXXZ @ 40 NONAME ; void CCopyObject::ConstructL(void)
-	?SetMetaDataToWrapper@CPropertySettingUtility@@QAE?AW4TMTPResponseCode@@AAVMMmMtpDpConfig@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 41 NONAME ; enum TMTPResponseCode CPropertySettingUtility::SetMetaDataToWrapper(class MMmMtpDpConfig &, unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?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
-	?DoCancel@CRequestProcessor@@MAEXXZ @ 52 NONAME ; void CRequestProcessor::DoCancel(void)
-	?CheckRequestL@CGetPartialObject@@MAE?AW4TMTPResponseCode@@XZ @ 53 NONAME ; enum TMTPResponseCode CGetPartialObject::CheckRequestL(void)
-	?NewL@CRequestUnknown@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 54 NONAME ; class MMmRequestProcessor * CRequestUnknown::NewL(class MMTPDataProviderFramework &, class MMTPConnection &)
-	??0CGetFormatCapabilities@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 55 NONAME ; CGetFormatCapabilities::CGetFormatCapabilities(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ConstructL@CGetObjectInfo@@AAEXXZ @ 56 NONAME ; void CGetObjectInfo::ConstructL(void)
-	?UsbDisconnect@CRequestProcessor@@MAEXXZ @ 57 NONAME ; void CRequestProcessor::UsbDisconnect(void)
-	?UpdateMusicCollectionL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 58 NONAME ; void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL(void)
-	??1CMoveObject@@UAE@XZ @ 59 NONAME ; CMoveObject::~CMoveObject(void)
-	?CheckRequestL@CSendObject@@MAE?AW4TMTPResponseCode@@XZ @ 60 NONAME ; enum TMTPResponseCode CSendObject::CheckRequestL(void)
-	??1CRequestProcessor@@MAE@XZ @ 61 NONAME ; CRequestProcessor::~CRequestProcessor(void)
-	?DoCancel@CDeleteObject@@MAEXXZ @ 62 NONAME ; void CDeleteObject::DoCancel(void)
-	??1CGetObject@@UAE@XZ @ 63 NONAME ; CGetObject::~CGetObject(void)
-	?NewL@CGetInterdependentPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 64 NONAME ; class MMmRequestProcessor * CGetInterdependentPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?DoHandleResponsePhaseL@CSetObjectReferences@@EAEHXZ @ 65 NONAME ; int CSetObjectReferences::DoHandleResponsePhaseL(void)
-	?GetAccessWrapperL@CMmMtpDpAccessSingleton@@SAAAVCMmMtpDpMetadataAccessWrapper@@XZ @ 66 NONAME ; class CMmMtpDpMetadataAccessWrapper & CMmMtpDpAccessSingleton::GetAccessWrapperL(void)
-	??1CGetObjectPropsSupported@@UAE@XZ @ 67 NONAME ; CGetObjectPropsSupported::~CGetObjectPropsSupported(void)
-	?CheckRequestL@CGetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 68 NONAME ; enum TMTPResponseCode CGetObjectPropList::CheckRequestL(void)
-	?HasDataphase@CRequestProcessor@@MBEHXZ @ 69 NONAME ; int CRequestProcessor::HasDataphase(void) const
-	?NewL@CGetObjectPropsSupported@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 70 NONAME ; class MMmRequestProcessor * CGetObjectPropsSupported::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?Connection@CRequestProcessor@@MBEAAVMMTPConnection@@XZ @ 71 NONAME ; class MMTPConnection & CRequestProcessor::Connection(void) const
-	?ConstructL@CGetFormatCapabilities@@AAEXXZ @ 72 NONAME ; void CGetFormatCapabilities::ConstructL(void)
-	??1CPropertySettingUtility@@UAE@XZ @ 73 NONAME ; CPropertySettingUtility::~CPropertySettingUtility(void)
-	??1CGetPartialObject@@UAE@XZ @ 74 NONAME ; CGetPartialObject::~CGetPartialObject(void)
-	?NewL@CGetObjectInfo@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 75 NONAME ; class MMmRequestProcessor * CGetObjectInfo::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?RunError@CSetObjectPropList@@MAEHH@Z @ 76 NONAME ; int CSetObjectPropList::RunError(int)
-	?CheckRequestL@CGetInterdependentPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 77 NONAME ; enum TMTPResponseCode CGetInterdependentPropDesc::CheckRequestL(void)
-	?Match@CRequestUnknown@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 78 NONAME ; int CRequestUnknown::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
-	?ServiceL@CMoveObject@@MAEXXZ @ 79 NONAME ; void CMoveObject::ServiceL(void)
-	?CreateDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 80 NONAME ; void CMmMtpDpMetadataAccessWrapper::CreateDummyFile(class TDesC16 const &)
-	?CheckRequestL@CGetObjectPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 81 NONAME ; enum TMTPResponseCode CGetObjectPropDesc::CheckRequestL(void)
-	?DoHandleRToIPhaseL@CRequestProcessor@@MAEHXZ @ 82 NONAME ; int CRequestProcessor::DoHandleRToIPhaseL(void)
-	?ServiceMetaDataToWrapperL@CSetObjectPropValue@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 83 NONAME ; enum TMTPResponseCode CSetObjectPropValue::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?NewCommonObjectPropertyL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@G@Z @ 84 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewCommonObjectPropertyL(unsigned short)
-	?FormatFromFilename@MmMtpDpUtility@@SA?AW4TMTPFormatCode@@ABVTDesC16@@@Z @ 85 NONAME ; enum TMTPFormatCode MmMtpDpUtility::FormatFromFilename(class TDesC16 const &)
-	?CheckRequestL@CSetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 86 NONAME ; enum TMTPResponseCode CSetObjectPropValue::CheckRequestL(void)
-	??0CPropertySettingUtility@@IAE@XZ @ 87 NONAME ; CPropertySettingUtility::CPropertySettingUtility(void)
-	?Match@CRequestProcessor@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 88 NONAME ; int CRequestProcessor::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
-	??0CCopyObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 89 NONAME ; CCopyObject::CCopyObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?CheckRequestL@CRequestProcessor@@MAE?AW4TMTPResponseCode@@XZ @ 90 NONAME ; enum TMTPResponseCode CRequestProcessor::CheckRequestL(void)
-	?SendResponseL@CRequestProcessor@@IAEXW4TMTPResponseCode@@HPAK@Z @ 91 NONAME ; void CRequestProcessor::SendResponseL(enum TMTPResponseCode, int, unsigned long *)
-	??0CGetPartialObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 92 NONAME ; CGetPartialObject::CGetPartialObject(class MMTPDataProviderFramework &, class MMTPConnection &)
-	?DoHandleCompletingPhaseL@CRequestProcessor@@MAEHXZ @ 93 NONAME ; int CRequestProcessor::DoHandleCompletingPhaseL(void)
-	?DeleteDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 94 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteDummyFile(class TDesC16 const &)
-	?DoSetObjectReferencesL@CSetObjectReferences@@IAEXABVCMTPObjectMetaData@@@Z @ 95 NONAME ; void CSetObjectReferences::DoSetObjectReferencesL(class CMTPObjectMetaData const &)
-	??1CGetObjectInfo@@UAE@XZ @ 96 NONAME ; CGetObjectInfo::~CGetObjectInfo(void)
-	?ServiceL@CRequestUnknown@@MAEXXZ @ 97 NONAME ; void CRequestUnknown::ServiceL(void)
-	?HasDataphase@CSetObjectPropList@@MBEHXZ @ 98 NONAME ; int CSetObjectPropList::HasDataphase(void) const
-	?NewL@CGetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 99 NONAME ; class MMmRequestProcessor * CGetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?DoCancel@CRenameObject@@MAEXXZ @ 100 NONAME ; void CRenameObject::DoCancel(void)
-	??1CSetObjectReferences@@UAE@XZ @ 101 NONAME ; CSetObjectReferences::~CSetObjectReferences(void)
-	?Match@CSendObject@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 102 NONAME ; int CSendObject::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
-	?NewL@CSetObjectPropList@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 103 NONAME ; class MMmRequestProcessor * CSetObjectPropList::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?GetAllAbstractMediaL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@PAPAVCMPXMediaArray@@W4TMPXGeneralCategory@@@Z @ 104 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL(class TDesC16 const &, class CMPXMediaArray * *, enum TMPXGeneralCategory)
-	??1CCopyObject@@UAE@XZ @ 105 NONAME ; CCopyObject::~CCopyObject(void)
-	?GetModifiedContentL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAHAAVCDesC16Array@@@Z @ 106 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL(class TDesC16 const &, int &, class CDesC16Array &)
+	?DeleteObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@@Z @ 6 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteObjectL(class CMTPObjectMetaData const &)
+	?Release@CRequestProcessor@@MAEXXZ @ 7 NONAME ; void CRequestProcessor::Release(void)
+	?HandleRequestL@CRequestProcessor@@MAEHABVTMTPTypeRequest@@W4TMTPTransactionPhase@@@Z @ 8 NONAME ; int CRequestProcessor::HandleRequestL(class TMTPTypeRequest const &, enum TMTPTransactionPhase)
+	??1CGetInterdependentPropDesc@@UAE@XZ @ 9 NONAME ; CGetInterdependentPropDesc::~CGetInterdependentPropDesc(void)
+	?OpenSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 10 NONAME ; void CMmMtpDpAccessSingleton::OpenSessionL(void)
+	?ServiceL@CGetPartialObject@@MAEXXZ @ 11 NONAME ; void CGetPartialObject::ServiceL(void)
+	??0CGetObjectInfo@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 12 NONAME ; CGetObjectInfo::CGetObjectInfo(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?DoHandleResponsePhaseL@CRequestProcessor@@MAEHXZ @ 13 NONAME ; int CRequestProcessor::DoHandleResponsePhaseL(void)
+	?NewL@CGetObjectPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 14 NONAME ; class MMmRequestProcessor * CGetObjectPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CGetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 15 NONAME ; CGetObjectPropValue::CGetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?CheckRequestL@CSetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 16 NONAME ; enum TMTPResponseCode CSetObjectPropList::CheckRequestL(void)
+	?RunL@CRequestProcessor@@MAEXXZ @ 17 NONAME ; void CRequestProcessor::RunL(void)
+	?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)
+	?ServiceL@CGetFormatCapabilities@@MAEXXZ @ 25 NONAME ; void CGetFormatCapabilities::ServiceL(void)
+	?GetAllReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVCDesC16Array@@@Z @ 26 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL(class CMPXMedia *, class CDesC16Array &)
+	??1CSetObjectPropList@@UAE@XZ @ 27 NONAME ; CSetObjectPropList::~CSetObjectPropList(void)
+	?ServiceL@CSetObjectPropList@@MAEXXZ @ 28 NONAME ; void CSetObjectPropList::ServiceL(void)
+	??0CMoveObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 29 NONAME ; CMoveObject::CMoveObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CRequestUnknown@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 30 NONAME ; CRequestUnknown::CRequestUnknown(class MMTPDataProviderFramework &, class MMTPConnection &)
+	?ConstructL@CGetObjectPropList@@IAEXXZ @ 31 NONAME ; void CGetObjectPropList::ConstructL(void)
+	??1CSendObject@@UAE@XZ @ 32 NONAME ; CSendObject::~CSendObject(void)
+	?ServiceMetaDataFromWrapperL@CGetObjectPropValue@@IAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 33 NONAME ; void CGetObjectPropValue::ServiceMetaDataFromWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?NewL@CGetObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 34 NONAME ; class MMmRequestProcessor * CGetObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectPropValue@@UAE@XZ @ 35 NONAME ; CGetObjectPropValue::~CGetObjectPropValue(void)
+	?CreateL@CMmMtpDpAccessSingleton@@SAXAAVMMTPDataProviderFramework@@@Z @ 36 NONAME ; void CMmMtpDpAccessSingleton::CreateL(class MMTPDataProviderFramework &)
+	??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)
+	?SetMetaDataToWrapper@CPropertySettingUtility@@QAE?AW4TMTPResponseCode@@AAVMMmMtpDpConfig@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 42 NONAME ; enum TMTPResponseCode CPropertySettingUtility::SetMetaDataToWrapper(class MMmMtpDpConfig &, unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?ServiceL@CGetObjectPropValue@@MAEXXZ @ 43 NONAME ; void CGetObjectPropValue::ServiceL(void)
+	??1CRenameObject@@UAE@XZ @ 44 NONAME ; CRenameObject::~CRenameObject(void)
+	?Match@CRequestProcessor@@MBEHABVTMTPTypeEvent@@AAVMMTPConnection@@@Z @ 45 NONAME ; int CRequestProcessor::Match(class TMTPTypeEvent const &, class MMTPConnection &) const
+	?DoHandleCompletingPhaseL@CSendObject@@MAEHXZ @ 46 NONAME ; int CSendObject::DoHandleCompletingPhaseL(void)
+	?GetDrmStatus@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 47 NONAME ; int MmMtpDpUtility::GetDrmStatus(class TDesC16 const &)
+	?RunL@CRenameObject@@MAEXXZ @ 48 NONAME ; void CRenameObject::RunL(void)
+	??0CSetObjectReferences@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 49 NONAME ; CSetObjectReferences::CSetObjectReferences(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CRequestProcessor@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@HPBUTMTPRequestElementInfo@@@Z @ 50 NONAME ; CRequestProcessor::CRequestProcessor(class MMTPDataProviderFramework &, class MMTPConnection &, int, struct TMTPRequestElementInfo const *)
+	?ServiceL@CSendObject@@MAEXXZ @ 51 NONAME ; void CSendObject::ServiceL(void)
+	?Request@CRequestProcessor@@MBEABVTMTPTypeRequest@@XZ @ 52 NONAME ; class TMTPTypeRequest const & CRequestProcessor::Request(void) const
+	?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)
+	?DoCancel@CDeleteObject@@MAEXXZ @ 63 NONAME ; void CDeleteObject::DoCancel(void)
+	??1CGetObject@@UAE@XZ @ 64 NONAME ; CGetObject::~CGetObject(void)
+	?NewL@CGetInterdependentPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 65 NONAME ; class MMmRequestProcessor * CGetInterdependentPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?AddObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@@Z @ 66 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddObjectL(class CMTPObjectMetaData const &)
+	?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 &)
+	?FormatFromFilename@MmMtpDpUtility@@SA?AW4TMTPFormatCode@@ABVTDesC16@@@Z @ 86 NONAME ; enum TMTPFormatCode MmMtpDpUtility::FormatFromFilename(class TDesC16 const &)
+	?CheckRequestL@CSetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 87 NONAME ; enum TMTPResponseCode CSetObjectPropValue::CheckRequestL(void)
+	??0CPropertySettingUtility@@IAE@XZ @ 88 NONAME ; CPropertySettingUtility::CPropertySettingUtility(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)
+	?DeleteDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 95 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteDummyFile(class TDesC16 const &)
+	?DoSetObjectReferencesL@CSetObjectReferences@@IAEXABVCMTPObjectMetaData@@@Z @ 96 NONAME ; void CSetObjectReferences::DoSetObjectReferencesL(class CMTPObjectMetaData const &)
+	??1CGetObjectInfo@@UAE@XZ @ 97 NONAME ; CGetObjectInfo::~CGetObjectInfo(void)
+	?ServiceL@CRequestUnknown@@MAEXXZ @ 98 NONAME ; void CRequestUnknown::ServiceL(void)
+	?HasDataphase@CSetObjectPropList@@MBEHXZ @ 99 NONAME ; int CSetObjectPropList::HasDataphase(void) const
+	?NewL@CGetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 100 NONAME ; class MMmRequestProcessor * CGetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?DoCancel@CRenameObject@@MAEXXZ @ 101 NONAME ; void CRenameObject::DoCancel(void)
+	??1CSetObjectReferences@@UAE@XZ @ 102 NONAME ; CSetObjectReferences::~CSetObjectReferences(void)
+	?Match@CSendObject@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 103 NONAME ; int CSendObject::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
+	?NewL@CSetObjectPropList@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 104 NONAME ; class MMmRequestProcessor * CSetObjectPropList::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?GetAllAbstractMediaL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@PAPAVCMPXMediaArray@@W4TMPXGeneralCategory@@@Z @ 105 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL(class TDesC16 const &, class CMPXMediaArray * *, enum TMPXGeneralCategory)
+	??1CCopyObject@@UAE@XZ @ 106 NONAME ; CCopyObject::~CCopyObject(void)
 	?RunL@CGetObjectPropList@@MAEXXZ @ 107 NONAME ; void CGetObjectPropList::RunL(void)
-	?NewRangeFormDescriptionL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@GKKKH@Z @ 108 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewRangeFormDescriptionL(unsigned short, unsigned long, unsigned long, unsigned long, int)
-	?RunError@CRequestProcessor@@MAEHH@Z @ 109 NONAME ; int CRequestProcessor::RunError(int)
-	?SessionId@CRequestProcessor@@MAEKXZ @ 110 NONAME ; unsigned long CRequestProcessor::SessionId(void)
-	??0CDescriptionUtility@@IAE@XZ @ 111 NONAME ; CDescriptionUtility::CDescriptionUtility(void)
-	?HandleEventL@CRequestProcessor@@MAEXABVTMTPTypeEvent@@@Z @ 112 NONAME ; void CRequestProcessor::HandleEventL(class TMTPTypeEvent const &)
-	?NewL@CGetPartialObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 113 NONAME ; class MMmRequestProcessor * CGetPartialObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?HasDataphase@CSetObjectReferences@@EBEHXZ @ 114 NONAME ; int CSetObjectReferences::HasDataphase(void) const
-	?ConstructL@CGetInterdependentPropDesc@@IAEXXZ @ 115 NONAME ; void CGetInterdependentPropDesc::ConstructL(void)
-	?RunError@CGetObjectPropList@@MAEHH@Z @ 116 NONAME ; int CGetObjectPropList::RunError(int)
-	?DoHandleResponsePhaseL@CSetObjectPropList@@MAEHXZ @ 117 NONAME ; int CSetObjectPropList::DoHandleResponsePhaseL(void)
-	??0CDeleteObject@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 118 NONAME ; CDeleteObject::CDeleteObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?NewL@CRenameObject@@SAPAV1@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 119 NONAME ; class CRenameObject * CRenameObject::NewL(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
-	?RenameObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@ABVTDesC16@@@Z @ 120 NONAME ; void CMmMtpDpMetadataAccessWrapper::RenameObjectL(class CMTPObjectMetaData const &, class TDesC16 const &)
-	?GetObjectMetadataValueL@CMmMtpDpMetadataAccessWrapper@@QAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 121 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?AddDummyFileL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 122 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddDummyFileL(class TDesC16 const &)
-	??0CGetObjectPropDesc@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 123 NONAME ; CGetObjectPropDesc::CGetObjectPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ConstructL@CGetObjectPropDesc@@AAEXXZ @ 124 NONAME ; void CGetObjectPropDesc::ConstructL(void)
-	??0CGetInterdependentPropDesc@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 125 NONAME ; CGetInterdependentPropDesc::CGetInterdependentPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectPropDesc@@UAE@XZ @ 126 NONAME ; CGetObjectPropDesc::~CGetObjectPropDesc(void)
-	?ServiceL@CGetObjectPropDesc@@MAEXXZ @ 127 NONAME ; void CGetObjectPropDesc::ServiceL(void)
-	?HasDataphase@CSetObjectPropValue@@MBEHXZ @ 128 NONAME ; int CSetObjectPropValue::HasDataphase(void) const
-	?ServiceL@CCopyObject@@MAEXXZ @ 129 NONAME ; void CCopyObject::ServiceL(void)
-	?CheckRequestL@CGetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 130 NONAME ; enum TMTPResponseCode CGetObjectPropValue::CheckRequestL(void)
-	?CloseSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 131 NONAME ; void CMmMtpDpAccessSingleton::CloseSessionL(void)
-	?NewL@CGetFormatCapabilities@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 132 NONAME ; class MMmRequestProcessor * CGetFormatCapabilities::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ReceiveDataL@CRequestProcessor@@IAEXAAVMMTPType@@@Z @ 133 NONAME ; void CRequestProcessor::ReceiveDataL(class MMTPType &)
-	??1CDescriptionUtility@@UAE@XZ @ 134 NONAME ; CDescriptionUtility::~CDescriptionUtility(void)
-	?RunL@CSetObjectPropList@@MAEXXZ @ 135 NONAME ; void CSetObjectPropList::RunL(void)
-	?ConstructL@CMoveObject@@IAEXXZ @ 136 NONAME ; void CMoveObject::ConstructL(void)
-	?NewL@CSendObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 137 NONAME ; class MMmRequestProcessor * CSendObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectReferences@@UAE@XZ @ 138 NONAME ; CGetObjectReferences::~CGetObjectReferences(void)
-	?HasDataphase@CSendObject@@MBEHXZ @ 139 NONAME ; int CSendObject::HasDataphase(void) const
-	??1CSetObjectPropValue@@UAE@XZ @ 140 NONAME ; CSetObjectPropValue::~CSetObjectPropValue(void)
-	?ConstructL@CRenameObject@@IAEXXZ @ 141 NONAME ; void CRenameObject::ConstructL(void)
-	?SendDataL@CRequestProcessor@@IAEXABVMMTPType@@@Z @ 142 NONAME ; void CRequestProcessor::SendDataL(class MMTPType const &)
-	?DoHandleResponsePhaseL@CSendObject@@MAEHXZ @ 143 NONAME ; int CSendObject::DoHandleResponsePhaseL(void)
-	?SetReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@AAVCDesC16Array@@@Z @ 144 NONAME ; void CMmMtpDpMetadataAccessWrapper::SetReferenceL(class CMTPObjectMetaData const &, class CDesC16Array &)
-	?DoCancel@CGetObjectPropList@@MAEXXZ @ 145 NONAME ; void CGetObjectPropList::DoCancel(void)
-	?ServiceL@CGetInterdependentPropDesc@@MAEXXZ @ 146 NONAME ; void CGetInterdependentPropDesc::ServiceL(void)
-	?DoHandleRequestPhaseL@CRequestProcessor@@MAEHXZ @ 147 NONAME ; int CRequestProcessor::DoHandleRequestPhaseL(void)
-	?GetAbstractMediaNameL@CMmMtpDpMetadataAccessWrapper@@QAEPAVHBufC16@@PAVCMPXMedia@@W4TMPXGeneralCategory@@@Z @ 148 NONAME ; class HBufC16 * CMmMtpDpMetadataAccessWrapper::GetAbstractMediaNameL(class CMPXMedia *, enum TMPXGeneralCategory)
-	?ServiceL@CSetObjectPropValue@@MAEXXZ @ 149 NONAME ; void CSetObjectPropValue::ServiceL(void)
-	?RunError@CRenameObject@@MAEHH@Z @ 150 NONAME ; int CRenameObject::RunError(int)
-	??1CDeleteObject@@UAE@XZ @ 151 NONAME ; CDeleteObject::~CDeleteObject(void)
-	?DoHandleResponsePhaseL@CGetPartialObject@@MAEHXZ @ 152 NONAME ; int CGetPartialObject::DoHandleResponsePhaseL(void)
-	?CheckRequestL@CGetFormatCapabilities@@MAE?AW4TMTPResponseCode@@XZ @ 153 NONAME ; enum TMTPResponseCode CGetFormatCapabilities::CheckRequestL(void)
-	??0CSetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 154 NONAME ; CSetObjectPropValue::CSetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectPropList@@UAE@XZ @ 155 NONAME ; CGetObjectPropList::~CGetObjectPropList(void)
-	?ServiceL@CGetObjectPropList@@MAEXXZ @ 156 NONAME ; void CGetObjectPropList::ServiceL(void)
-	??0CRenameObject@@IAE@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 157 NONAME ; CRenameObject::CRenameObject(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
+	?GetModifiedContentL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAHAAVCDesC16Array@@@Z @ 108 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL(class TDesC16 const &, int &, class CDesC16Array &)
+	?NewRangeFormDescriptionL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@GKKKH@Z @ 109 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewRangeFormDescriptionL(unsigned short, unsigned long, unsigned long, unsigned long, int)
+	?RunError@CRequestProcessor@@MAEHH@Z @ 110 NONAME ; int CRequestProcessor::RunError(int)
+	?SessionId@CRequestProcessor@@MAEKXZ @ 111 NONAME ; unsigned long CRequestProcessor::SessionId(void)
+	??0CDescriptionUtility@@IAE@XZ @ 112 NONAME ; CDescriptionUtility::CDescriptionUtility(void)
+	?HandleEventL@CRequestProcessor@@MAEXABVTMTPTypeEvent@@@Z @ 113 NONAME ; void CRequestProcessor::HandleEventL(class TMTPTypeEvent const &)
+	?NewL@CGetPartialObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 114 NONAME ; class MMmRequestProcessor * CGetPartialObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?HasDataphase@CSetObjectReferences@@EBEHXZ @ 115 NONAME ; int CSetObjectReferences::HasDataphase(void) const
+	?ConstructL@CGetInterdependentPropDesc@@IAEXXZ @ 116 NONAME ; void CGetInterdependentPropDesc::ConstructL(void)
+	?RunError@CGetObjectPropList@@MAEHH@Z @ 117 NONAME ; int CGetObjectPropList::RunError(int)
+	?DoHandleResponsePhaseL@CSetObjectPropList@@MAEHXZ @ 118 NONAME ; int CSetObjectPropList::DoHandleResponsePhaseL(void)
+	??0CDeleteObject@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 119 NONAME ; CDeleteObject::CDeleteObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?NewL@CRenameObject@@SAPAV1@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 120 NONAME ; class CRenameObject * CRenameObject::NewL(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
+	?RenameObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@ABVTDesC16@@@Z @ 121 NONAME ; void CMmMtpDpMetadataAccessWrapper::RenameObjectL(class CMTPObjectMetaData const &, class TDesC16 const &)
+	?GetObjectMetadataValueL@CMmMtpDpMetadataAccessWrapper@@QAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 122 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?AddDummyFileL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 123 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddDummyFileL(class TDesC16 const &)
+	??0CGetObjectPropDesc@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 124 NONAME ; CGetObjectPropDesc::CGetObjectPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ConstructL@CGetObjectPropDesc@@AAEXXZ @ 125 NONAME ; void CGetObjectPropDesc::ConstructL(void)
+	??0CGetInterdependentPropDesc@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 126 NONAME ; CGetInterdependentPropDesc::CGetInterdependentPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??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)
+	?NewL@CGetFormatCapabilities@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 133 NONAME ; class MMmRequestProcessor * CGetFormatCapabilities::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ReceiveDataL@CRequestProcessor@@IAEXAAVMMTPType@@@Z @ 134 NONAME ; void CRequestProcessor::ReceiveDataL(class MMTPType &)
+	??1CDescriptionUtility@@UAE@XZ @ 135 NONAME ; CDescriptionUtility::~CDescriptionUtility(void)
+	?RunL@CSetObjectPropList@@MAEXXZ @ 136 NONAME ; void CSetObjectPropList::RunL(void)
+	?ConstructL@CMoveObject@@IAEXXZ @ 137 NONAME ; void CMoveObject::ConstructL(void)
+	?NewL@CSendObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 138 NONAME ; class MMmRequestProcessor * CSendObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectReferences@@UAE@XZ @ 139 NONAME ; CGetObjectReferences::~CGetObjectReferences(void)
+	?HasDataphase@CSendObject@@MBEHXZ @ 140 NONAME ; int CSendObject::HasDataphase(void) const
+	??1CSetObjectPropValue@@UAE@XZ @ 141 NONAME ; CSetObjectPropValue::~CSetObjectPropValue(void)
+	?ConstructL@CRenameObject@@IAEXXZ @ 142 NONAME ; void CRenameObject::ConstructL(void)
+	?SendDataL@CRequestProcessor@@IAEXABVMMTPType@@@Z @ 143 NONAME ; void CRequestProcessor::SendDataL(class MMTPType const &)
+	?DoHandleResponsePhaseL@CSendObject@@MAEHXZ @ 144 NONAME ; int CSendObject::DoHandleResponsePhaseL(void)
+	?SetReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@AAVCDesC16Array@@@Z @ 145 NONAME ; void CMmMtpDpMetadataAccessWrapper::SetReferenceL(class CMTPObjectMetaData const &, class CDesC16Array &)
+	?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	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def	Fri May 14 16:21:14 2010 +0300
@@ -115,164 +115,165 @@
 	_ZN18CSetObjectPropListD0Ev @ 114 NONAME
 	_ZN18CSetObjectPropListD1Ev @ 115 NONAME
 	_ZN18CSetObjectPropListD2Ev @ 116 NONAME
-	_ZN19CDescriptionUtility24NewCommonObjectPropertyLEt @ 117 NONAME
-	_ZN19CDescriptionUtility24NewRangeFormDescriptionLEtmmmi @ 118 NONAME
-	_ZN19CDescriptionUtilityC2Ev @ 119 NONAME
-	_ZN19CDescriptionUtilityD0Ev @ 120 NONAME
-	_ZN19CDescriptionUtilityD1Ev @ 121 NONAME
-	_ZN19CDescriptionUtilityD2Ev @ 122 NONAME
-	_ZN19CGetObjectPropValue13CheckRequestLEv @ 123 NONAME
-	_ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 124 NONAME
-	_ZN19CGetObjectPropValue8ServiceLEv @ 125 NONAME
-	_ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 126 NONAME
-	_ZN19CGetObjectPropValueD0Ev @ 127 NONAME
-	_ZN19CGetObjectPropValueD1Ev @ 128 NONAME
-	_ZN19CGetObjectPropValueD2Ev @ 129 NONAME
-	_ZN19CSetObjectPropValue13CheckRequestLEv @ 130 NONAME
-	_ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 131 NONAME
-	_ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 132 NONAME
-	_ZN19CSetObjectPropValue8ServiceLEv @ 133 NONAME
-	_ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 134 NONAME
-	_ZN19CSetObjectPropValueD0Ev @ 135 NONAME
-	_ZN19CSetObjectPropValueD1Ev @ 136 NONAME
-	_ZN19CSetObjectPropValueD2Ev @ 137 NONAME
-	_ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 138 NONAME
-	_ZN20CGetObjectReferencesD0Ev @ 139 NONAME
-	_ZN20CGetObjectReferencesD1Ev @ 140 NONAME
-	_ZN20CGetObjectReferencesD2Ev @ 141 NONAME
-	_ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 142 NONAME
-	_ZN20CSetObjectReferences22DoSetObjectReferencesLERK18CMTPObjectMetaData @ 143 NONAME
-	_ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 144 NONAME
-	_ZN20CSetObjectReferences8ServiceLEv @ 145 NONAME
-	_ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 146 NONAME
-	_ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 147 NONAME
-	_ZN20CSetObjectReferencesD0Ev @ 148 NONAME
-	_ZN20CSetObjectReferencesD1Ev @ 149 NONAME
-	_ZN20CSetObjectReferencesD2Ev @ 150 NONAME
-	_ZN22CGetFormatCapabilities10ConstructLEv @ 151 NONAME
-	_ZN22CGetFormatCapabilities13CheckRequestLEv @ 152 NONAME
-	_ZN22CGetFormatCapabilities4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 153 NONAME
-	_ZN22CGetFormatCapabilities8ServiceLEv @ 154 NONAME
-	_ZN22CGetFormatCapabilitiesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 155 NONAME
-	_ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 156 NONAME
-	_ZN22CGetFormatCapabilitiesD0Ev @ 157 NONAME
-	_ZN22CGetFormatCapabilitiesD1Ev @ 158 NONAME
-	_ZN22CGetFormatCapabilitiesD2Ev @ 159 NONAME
-	_ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 160 NONAME
-	_ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 161 NONAME
-	_ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 162 NONAME
-	_ZN23CMmMtpDpAccessSingleton7CreateLER25MMTPDataProviderFramework @ 163 NONAME
-	_ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 164 NONAME
-	_ZN23CPropertySettingUtility20SetMetaDataToWrapperER14MMmMtpDpConfigtR8MMTPTypeRK18CMTPObjectMetaData @ 165 NONAME
-	_ZN23CPropertySettingUtilityC2Ev @ 166 NONAME
-	_ZN23CPropertySettingUtilityD0Ev @ 167 NONAME
-	_ZN23CPropertySettingUtilityD1Ev @ 168 NONAME
-	_ZN23CPropertySettingUtilityD2Ev @ 169 NONAME
-	_ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 170 NONAME
-	_ZN24CGetObjectPropsSupported8ServiceLEv @ 171 NONAME
-	_ZN24CGetObjectPropsSupportedD0Ev @ 172 NONAME
-	_ZN24CGetObjectPropsSupportedD1Ev @ 173 NONAME
-	_ZN24CGetObjectPropsSupportedD2Ev @ 174 NONAME
-	_ZN26CGetInterdependentPropDesc10ConstructLEv @ 175 NONAME
-	_ZN26CGetInterdependentPropDesc13CheckRequestLEv @ 176 NONAME
-	_ZN26CGetInterdependentPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 177 NONAME
-	_ZN26CGetInterdependentPropDesc8ServiceLEv @ 178 NONAME
-	_ZN26CGetInterdependentPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 179 NONAME
-	_ZN26CGetInterdependentPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 180 NONAME
-	_ZN26CGetInterdependentPropDescD0Ev @ 181 NONAME
-	_ZN26CGetInterdependentPropDescD1Ev @ 182 NONAME
-	_ZN26CGetInterdependentPropDescD2Ev @ 183 NONAME
+	_ZN19CDescriptionUtility24NewRangeFormDescriptionLEtmmmi @ 117 NONAME
+	_ZN19CDescriptionUtilityC2Ev @ 118 NONAME
+	_ZN19CDescriptionUtilityD0Ev @ 119 NONAME
+	_ZN19CDescriptionUtilityD1Ev @ 120 NONAME
+	_ZN19CDescriptionUtilityD2Ev @ 121 NONAME
+	_ZN19CGetObjectPropValue13CheckRequestLEv @ 122 NONAME
+	_ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 123 NONAME
+	_ZN19CGetObjectPropValue8ServiceLEv @ 124 NONAME
+	_ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 125 NONAME
+	_ZN19CGetObjectPropValueD0Ev @ 126 NONAME
+	_ZN19CGetObjectPropValueD1Ev @ 127 NONAME
+	_ZN19CGetObjectPropValueD2Ev @ 128 NONAME
+	_ZN19CSetObjectPropValue13CheckRequestLEv @ 129 NONAME
+	_ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 130 NONAME
+	_ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 131 NONAME
+	_ZN19CSetObjectPropValue8ServiceLEv @ 132 NONAME
+	_ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 133 NONAME
+	_ZN19CSetObjectPropValueD0Ev @ 134 NONAME
+	_ZN19CSetObjectPropValueD1Ev @ 135 NONAME
+	_ZN19CSetObjectPropValueD2Ev @ 136 NONAME
+	_ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 137 NONAME
+	_ZN20CGetObjectReferencesD0Ev @ 138 NONAME
+	_ZN20CGetObjectReferencesD1Ev @ 139 NONAME
+	_ZN20CGetObjectReferencesD2Ev @ 140 NONAME
+	_ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 141 NONAME
+	_ZN20CSetObjectReferences22DoSetObjectReferencesLERK18CMTPObjectMetaData @ 142 NONAME
+	_ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 143 NONAME
+	_ZN20CSetObjectReferences8ServiceLEv @ 144 NONAME
+	_ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 145 NONAME
+	_ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 146 NONAME
+	_ZN20CSetObjectReferencesD0Ev @ 147 NONAME
+	_ZN20CSetObjectReferencesD1Ev @ 148 NONAME
+	_ZN20CSetObjectReferencesD2Ev @ 149 NONAME
+	_ZN22CGetFormatCapabilities10ConstructLEv @ 150 NONAME
+	_ZN22CGetFormatCapabilities13CheckRequestLEv @ 151 NONAME
+	_ZN22CGetFormatCapabilities4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 152 NONAME
+	_ZN22CGetFormatCapabilities8ServiceLEv @ 153 NONAME
+	_ZN22CGetFormatCapabilitiesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 154 NONAME
+	_ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 155 NONAME
+	_ZN22CGetFormatCapabilitiesD0Ev @ 156 NONAME
+	_ZN22CGetFormatCapabilitiesD1Ev @ 157 NONAME
+	_ZN22CGetFormatCapabilitiesD2Ev @ 158 NONAME
+	_ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 159 NONAME
+	_ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 160 NONAME
+	_ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 161 NONAME
+	_ZN23CMmMtpDpAccessSingleton7CreateLER25MMTPDataProviderFramework @ 162 NONAME
+	_ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 163 NONAME
+	_ZN23CPropertySettingUtility20SetMetaDataToWrapperER14MMmMtpDpConfigtR8MMTPTypeRK18CMTPObjectMetaData @ 164 NONAME
+	_ZN23CPropertySettingUtilityC2Ev @ 165 NONAME
+	_ZN23CPropertySettingUtilityD0Ev @ 166 NONAME
+	_ZN23CPropertySettingUtilityD1Ev @ 167 NONAME
+	_ZN23CPropertySettingUtilityD2Ev @ 168 NONAME
+	_ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 169 NONAME
+	_ZN24CGetObjectPropsSupported8ServiceLEv @ 170 NONAME
+	_ZN24CGetObjectPropsSupportedD0Ev @ 171 NONAME
+	_ZN24CGetObjectPropsSupportedD1Ev @ 172 NONAME
+	_ZN24CGetObjectPropsSupportedD2Ev @ 173 NONAME
+	_ZN26CGetInterdependentPropDesc10ConstructLEv @ 174 NONAME
+	_ZN26CGetInterdependentPropDesc13CheckRequestLEv @ 175 NONAME
+	_ZN26CGetInterdependentPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 176 NONAME
+	_ZN26CGetInterdependentPropDesc8ServiceLEv @ 177 NONAME
+	_ZN26CGetInterdependentPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 178 NONAME
+	_ZN26CGetInterdependentPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 179 NONAME
+	_ZN26CGetInterdependentPropDescD0Ev @ 180 NONAME
+	_ZN26CGetInterdependentPropDescD1Ev @ 181 NONAME
+	_ZN26CGetInterdependentPropDescD2Ev @ 182 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper10AddObjectLERK18CMTPObjectMetaData @ 183 NONAME
 	_ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 184 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK18CMTPObjectMetaDataRK7TDesC16 @ 185 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13SetReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 186 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 187 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 188 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 189 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 190 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 191 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper20GetAllAbstractMediaLERK7TDesC16PP14CMPXMediaArray19TMPXGeneralCategory @ 192 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper21GetAbstractMediaNameLEP9CMPXMedia19TMPXGeneralCategory @ 193 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLEv @ 194 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 195 NONAME
-	_ZNK11CSendObject12HasDataphaseEv @ 196 NONAME
-	_ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 197 NONAME
-	_ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 198 NONAME
-	_ZNK17CRequestProcessor10ConnectionEv @ 199 NONAME
-	_ZNK17CRequestProcessor12HasDataphaseEv @ 200 NONAME
-	_ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 201 NONAME
-	_ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 202 NONAME
-	_ZNK17CRequestProcessor7RequestEv @ 203 NONAME
-	_ZNK18CSetObjectPropList12HasDataphaseEv @ 204 NONAME
-	_ZNK19CSetObjectPropValue12HasDataphaseEv @ 205 NONAME
-	_ZNK20CSetObjectReferences12HasDataphaseEv @ 206 NONAME
-	_ZTI10CGetObject @ 207 NONAME
-	_ZTI11CCopyObject @ 208 NONAME
-	_ZTI11CMoveObject @ 209 NONAME
-	_ZTI11CSendObject @ 210 NONAME
-	_ZTI13CDeleteObject @ 211 NONAME
-	_ZTI13CRenameObject @ 212 NONAME
-	_ZTI14CGetObjectInfo @ 213 NONAME
-	_ZTI15CRequestChecker @ 214 NONAME
-	_ZTI15CRequestUnknown @ 215 NONAME
-	_ZTI15TMTPTypeFlatBuf @ 216 NONAME
-	_ZTI17CGetPartialObject @ 217 NONAME
-	_ZTI17CRequestProcessor @ 218 NONAME
-	_ZTI18CGetObjectPropDesc @ 219 NONAME
-	_ZTI18CGetObjectPropList @ 220 NONAME
-	_ZTI18CHXMetaDataUtility @ 221 NONAME
-	_ZTI18CSetObjectPropList @ 222 NONAME
-	_ZTI19CDescriptionUtility @ 223 NONAME
-	_ZTI19CGetObjectPropValue @ 224 NONAME
-	_ZTI19CSetObjectPropValue @ 225 NONAME
-	_ZTI20CGetObjectReferences @ 226 NONAME
-	_ZTI20CSetObjectReferences @ 227 NONAME
-	_ZTI22CGetFormatCapabilities @ 228 NONAME
-	_ZTI23CMmMtpDpAccessSingleton @ 229 NONAME
-	_ZTI23CPropertySettingUtility @ 230 NONAME
-	_ZTI24CGetObjectPropsSupported @ 231 NONAME
-	_ZTI25CMmMtpDpMetadataMpxAccess @ 232 NONAME
-	_ZTI26CGetInterdependentPropDesc @ 233 NONAME
-	_ZTI27CMmMtpDpMetadataVideoAccess @ 234 NONAME
-	_ZTI29CMmMtpDpMetadataAccessWrapper @ 235 NONAME
-	_ZTV10CGetObject @ 236 NONAME
-	_ZTV11CCopyObject @ 237 NONAME
-	_ZTV11CMoveObject @ 238 NONAME
-	_ZTV11CSendObject @ 239 NONAME
-	_ZTV13CDeleteObject @ 240 NONAME
-	_ZTV13CRenameObject @ 241 NONAME
-	_ZTV14CGetObjectInfo @ 242 NONAME
-	_ZTV15CRequestChecker @ 243 NONAME
-	_ZTV15CRequestUnknown @ 244 NONAME
-	_ZTV15TMTPTypeFlatBuf @ 245 NONAME
-	_ZTV17CGetPartialObject @ 246 NONAME
-	_ZTV17CRequestProcessor @ 247 NONAME
-	_ZTV18CGetObjectPropDesc @ 248 NONAME
-	_ZTV18CGetObjectPropList @ 249 NONAME
-	_ZTV18CHXMetaDataUtility @ 250 NONAME
-	_ZTV18CSetObjectPropList @ 251 NONAME
-	_ZTV19CDescriptionUtility @ 252 NONAME
-	_ZTV19CGetObjectPropValue @ 253 NONAME
-	_ZTV19CSetObjectPropValue @ 254 NONAME
-	_ZTV20CGetObjectReferences @ 255 NONAME
-	_ZTV20CSetObjectReferences @ 256 NONAME
-	_ZTV22CGetFormatCapabilities @ 257 NONAME
-	_ZTV23CMmMtpDpAccessSingleton @ 258 NONAME
-	_ZTV23CPropertySettingUtility @ 259 NONAME
-	_ZTV24CGetObjectPropsSupported @ 260 NONAME
-	_ZTV25CMmMtpDpMetadataMpxAccess @ 261 NONAME
-	_ZTV26CGetInterdependentPropDesc @ 262 NONAME
-	_ZTV27CMmMtpDpMetadataVideoAccess @ 263 NONAME
-	_ZTV29CMmMtpDpMetadataAccessWrapper @ 264 NONAME
-	_ZThn28_N11CSendObject13UsbDisconnectEv @ 265 NONAME
-	_ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 266 NONAME
-	_ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 267 NONAME
-	_ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 268 NONAME
-	_ZThn28_N17CRequestProcessor7ReleaseEv @ 269 NONAME
-	_ZThn28_N17CRequestProcessor9SessionIdEv @ 270 NONAME
-	_ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 271 NONAME
-	_ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 272 NONAME
-	_ZThn28_NK17CRequestProcessor10ConnectionEv @ 273 NONAME
-	_ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 274 NONAME
-	_ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 275 NONAME
-	_ZThn28_NK17CRequestProcessor7RequestEv @ 276 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13DeleteObjectLERK18CMTPObjectMetaData @ 185 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK18CMTPObjectMetaDataRK7TDesC16 @ 186 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13SetReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 187 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 188 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 189 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 190 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 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/src/cdeleteobject.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp	Fri May 14 16:21:14 2010 +0300
@@ -315,10 +315,14 @@
         {
         SendResponseL( EMTPRespCodePartialDeletion );
         }
-    else if( !iIsMultiDelete && iDeleteError == KErrAccessDenied )
+    else if ( !iIsMultiDelete && iDeleteError == KErrAccessDenied )
         {
         SendResponseL( EMTPRespCodeObjectWriteProtected );
         }
+    else if ( iDeleteError == KErrInUse )
+        {
+        SendResponseL( EMTPRespCodeDeviceBusy );
+        }
     else
         {
         SendResponseL( EMTPRespCodeAccessDenied );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdescriptionutility.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdescriptionutility.cpp	Fri May 14 16:21:14 2010 +0300
@@ -39,7 +39,7 @@
     // Do nothing
     }
 
-EXPORT_C CMTPTypeObjectPropDesc* CDescriptionUtility::NewCommonObjectPropertyL( TUint16 aPropCode )
+CMTPTypeObjectPropDesc* CDescriptionUtility::NewCommonObjectPropertyL( TUint16 aPropCode )
     {
     CMTPTypeObjectPropDesc* propertyDesc = NULL;
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Fri May 14 16:21:14 2010 +0300
@@ -22,6 +22,7 @@
 #include <mtp/cmtptypearray.h>
 #include <mtp/cmtptypestring.h>
 #include <mtp/cmtptypeobjectproplist.h>
+#include <mtp/mmtpreferencemgr.h>
 
 #include "cmoveobject.h"
 #include "mmmtpdplogger.h"
@@ -141,7 +142,7 @@
     newObjectName.CleanupClosePushL(); // + newObjectName
     newObjectName = *iDest;
 
-    const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
+    TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
     TParsePtrC fileNameParser( suid );
     if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() )
         <= newObjectName.MaxLength() )
@@ -419,7 +420,7 @@
         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" ),
+        PRINT3( _L( "MM MTP <> CMoveObject::SetPreviousPropertiesL = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ),
             handle,
             propertyCode,
             dataType );
@@ -492,32 +493,45 @@
         {
         // 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
-        // TODO: Need rollback mechanism for consistant with image dp in fw.
-        // Not sure if it should be trap if something wrong with MPX db.
-        {
-        if ( iSameStorage )
-            {
-            iDpConfig.GetWrapperL().RenameObjectL( *iObjectInfo, aNewFileName );
-            }
-        else    // if the two object in different storage, we should delete the old one and insert new one
-            {
-            iDpConfig.GetWrapperL().DeleteObjectL( *iObjectInfo );
-            iDpConfig.GetWrapperL().AddObjectL( *iObjectInfo );
-
-            // Only leave when getting proplist element from data received by fw.       
-            // It should not happen after ReceiveDataL in which construction of proplist already succeed.
-            SetPreviousPropertiesL();
-            }
+        iDpConfig.GetWrapperL().DeleteDummyFile( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
+        iDpConfig.GetWrapperL().AddDummyFileL( aNewFileName );
         }
 
-    iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName );
-    iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
-    iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
-    iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
+    if (iSameStorage)
+        {
+        iDpConfig.GetWrapperL().RenameObjectL( *iObjectInfo, aNewFileName );
+        iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName );
+        iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
+        iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
+        iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
+        }
+    else // if the two object in different storage, we should delete the old one and insert new one
+        {
+        iDpConfig.GetWrapperL().DeleteObjectL( *iObjectInfo );
+
+        HBufC* oldFileName = iObjectInfo->DesC(CMTPObjectMetaData::ESuid).AllocLC(); // + oldFileName
+        iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName );
+        iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
+        iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
+        iFramework.ObjectMgr().ModifyObjectL(*iObjectInfo);
 
-    // It's not necessary to change references of playlists since Reference DB is used PUID
+        iDpConfig.GetWrapperL().SetStorageRootL( aNewFileName );
+        iDpConfig.GetWrapperL().AddObjectL( *iObjectInfo );
+
+        if ( formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist
+            || formatCode == EMTPFormatCodeAbstractAudioAlbum )
+            {
+            MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr();
+            CDesCArray* references = referenceMgr.ReferencesLC( aNewFileName ); // + references
+            iDpConfig.GetWrapperL().SetReferenceL( *iObjectInfo, *references );
+            CleanupStack::PopAndDestroy( references ); // - references
+            }
+        CleanupStack::PopAndDestroy( oldFileName );     // - oldFileName
+
+        // Only leave when getting proplist element from data received by fw.
+        // It should not happen after ReceiveDataL in which construction of proplist already succeed.
+        SetPreviousPropertiesL();
+        }
 
     PRINT( _L( "MM MTP <= CMoveObject::SetPropertiesL" ) );
     }
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp	Fri May 14 16:21:14 2010 +0300
@@ -145,12 +145,13 @@
 
             if ( iNewFolderName.Length() + iRightPartName.Length() <= KMaxFileName )
                 {
-                PerformAdditionalActionL();
-
                 iFileName.Zero();
                 iFileName.Append( iNewFolderName );
                 iFileName.Append( iRightPartName );
                 PRINT1( _L( "MM MTP <> CRenameObject::RunL new file name(%S)" ), &iFileName );
+
+                PerformAdditionalActionL();
+
                 // update framework metadata DB
                 iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, iFileName );
                 iObjectInfo->SetUint( CMTPObjectMetaData::EObjectMetaDataUpdate, 1 );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp	Fri May 14 16:21:14 2010 +0300
@@ -1108,8 +1108,18 @@
 
     if ( result && ( iObjectFormat != MmMtpDpUtility::FormatFromFilename( iFullPath ) ) )
         {
-        PRINT2( _L( "MM MTP <> %S does not match 0x%x" ), &iFullPath, iObjectFormat );
-        result = EFalse;
+        TParsePtrC file( aFileName );
+        if ( ( iObjectFormat == EMTPFormatCode3GPContainer ) && (file.Ext().CompareF( KTxtExtensionODF ) == 0))
+            {
+            PRINT( _L( "MM MTP <> might happen if function is called before physical file arrives" ) );
+            // might happen if function is called before physical file arrives
+            // do nothing
+            }
+        else
+            {
+            PRINT2( _L( "MM MTP <> %S does not match 0x%x" ), &iFullPath, iObjectFormat );
+            result = EFalse;
+            }
         }
 
     PRINT1( _L( "MM MTP <= CSendObject::GetFullPathNameL result = %d" ), result );
@@ -1322,9 +1332,9 @@
 void CSendObject::Rollback()
     {
     // Delete this object from file system.
-    if ( iProgress == ESendObjectInProgress 
-            || iProgress == EObjectInfoSucceed 
-            ||iProgress == EObjectInfoFail )
+    if ( iProgress == ESendObjectInProgress )
+            // || iProgress == EObjectInfoSucceed   // this line is to be commented out until SetSize is done in SendObjectInfo/SendObjectPropList
+            //||iProgress == EObjectInfoFail )
         {
         PRINT1( _L( "MM MTP <> CSendObject::Rollback ROLLBACK_FILE %S" ), &iFullPath );
         // Close the interrupted transfer file by delete iFileReceived object
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp	Fri May 14 16:21:14 2010 +0300
@@ -245,6 +245,10 @@
                         object->SetDesCL( CMTPObjectMetaData::ESuid, newSuid );
                         iFramework.ObjectMgr().ModifyObjectL( *object );
                         }
+                    else if ( KErrInUse == err ) // object file is being used by other program
+                        {
+                        responseCode = EMTPRespCodeDeviceBusy;
+                        }
                     else
                         {
                         responseCode = EMTPRespCodeGeneralError;
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp	Fri May 14 16:21:14 2010 +0300
@@ -300,6 +300,10 @@
                     iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, newSuid );
                     iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
                     }
+                else if ( KErrInUse == err ) // object file is being used by other program
+                    {
+                    responseCode = EMTPRespCodeDeviceBusy;
+                    }
                 else
                     {
                     responseCode = EMTPRespCodeGeneralError;
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp	Fri May 14 16:21:14 2010 +0300
@@ -154,7 +154,7 @@
         {
         MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr();
         TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
-        PRINT1( _L( "MM MTP <>CSetObjectReferences::DoHandleResponsePhaseL objectHandle = 0x%x" ), objectHandle );
+        PRINT1( _L( "MM MTP <> CSetObjectReferences::DoHandleResponsePhaseL objectHandle = 0x%x" ), objectHandle );
         referenceMgr.SetReferencesL( TMTPTypeUint32( objectHandle ),
             *iReferences );
 
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp	Fri May 14 16:21:14 2010 +0300
@@ -46,7 +46,8 @@
 
 CMmMtpDpMetadataAccessWrapper::CMmMtpDpMetadataAccessWrapper( MMTPDataProviderFramework& aFramework ) :
     iFramework( aFramework ),
-    iFs( aFramework.Fs() )
+    iFs( aFramework.Fs() ),
+    iOpenCount( 0 )
     {
     // Do nothing
     }
@@ -259,7 +260,7 @@
 // Deletes metadata information associated with the object
 // ---------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataAccessWrapper::DeleteObjectL( const CMTPObjectMetaData& aObject )
+EXPORT_C void CMmMtpDpMetadataAccessWrapper::DeleteObjectL( const CMTPObjectMetaData& aObject )
     {
     TPtrC fileName( aObject.DesC( CMTPObjectMetaData::ESuid ) );
     PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::DeleteObjectL name = %S" ), &fileName );
@@ -350,7 +351,7 @@
 //
 void CMmMtpDpMetadataAccessWrapper::OpenSessionL()
     {
-    iOpenSession = ETrue;
+    iOpenCount++;
     }
 
 // -----------------------------------------------------------------------------
@@ -360,15 +361,22 @@
 //
 void CMmMtpDpMetadataAccessWrapper::CloseSessionL()
     {
-    if ( iOpenSession )
+    PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL count = %d" ), iOpenCount );
+
+    if ( iOpenCount >= 1 )
         {
-        PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL close" ) );
-        iMmMtpDpMetadataVideoAccess->CloseSessionL();
-        iOpenSession = EFalse;
+        iOpenCount--;
+
+        if ( iOpenCount == 0 )
+            {
+            PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL close" ) );
+            iMmMtpDpMetadataMpxAccess->CloseSession();
+            iMmMtpDpMetadataVideoAccess->CloseSessionL();
+            }
         }
     else
         {
-        PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL alreay close" ) );
+        PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL already close" ) );
         }
     }
 
@@ -390,13 +398,13 @@
             TUint aSubFormatCode = aObject.Uint( CMTPObjectMetaData::EFormatSubCode );
             if ( aSubFormatCode == EMTPSubFormatCodeUnknown )
                 {
-                category = ContainerCategory( aObject.DesC( CMTPObjectMetaData::ESuid ) );
+                TRAP_IGNORE( category = ContainerCategoryL( aObject.DesC( CMTPObjectMetaData::ESuid ) ) );
                 if ( category == EMPXSong )
                     aSubFormatCode = EMTPSubFormatCodeAudio;
                 else if ( category == EMPXVideo )
                     aSubFormatCode = EMTPSubFormatCodeVideo;
                 else
-                    aSubFormatCode = EMTPSubFormatCodeUndefine;
+                    aSubFormatCode = EMTPSubFormatCodeUndefined;
                 const_cast<CMTPObjectMetaData&>(aObject).SetUint( CMTPObjectMetaData::EFormatSubCode, aSubFormatCode );
                 // If object doesn't exist, do nothing
                 TRAP_IGNORE( iFramework.ObjectMgr().ModifyObjectL( aObject ) );
@@ -405,7 +413,7 @@
                 category = EMPXSong;
             else if ( aSubFormatCode == EMTPSubFormatCodeVideo )
                 category = EMPXVideo;
-            else if( aSubFormatCode == EMTPSubFormatCodeUndefine )
+            else if( aSubFormatCode == EMTPSubFormatCodeUndefined )
                 category = EMPXOther;
             }
             break;
@@ -445,9 +453,9 @@
     return category;
     }
 
-TMPXGeneralCategory CMmMtpDpMetadataAccessWrapper::ContainerCategory( const TDesC& aFullFileName )
+TMPXGeneralCategory CMmMtpDpMetadataAccessWrapper::ContainerCategoryL( const TDesC& aFullFileName )
     {
-    PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::ContainerCategory aFullFileName = %S" ), &aFullFileName );
+    PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::ContainerCategoryL aFullFileName = %S" ), &aFullFileName );
 
     TMPXGeneralCategory category = EMPXNoCategory;
     TParsePtrC pathParser( aFullFileName );
@@ -455,17 +463,27 @@
 
     if ( ext.Length() <= 0 )
         category = EMPXOther;
+    else if ( ext.CompareF( KTxtExtensionO4A ) == 0
+        || ext.CompareF( KTxtExtensionM4A ) == 0 )
+        category = EMPXSong;
+    else if ( ext.CompareF( KTxtExtensionO4V ) == 0 )
+        category = EMPXVideo;
+    else
+        {
+        HBufC8* mimetype = NULL;
 
-    if ( ext.CompareF( KTxtExtensionMP4 ) == 0
-        || ext.CompareF( KTxtExtension3GP ) == 0
-        || ext.CompareF( KTxtExtension3G2 ) == 0
-        || ext.CompareF( KTxtExtensionODF ) == 0
-        || ext.CompareF( KTxtExtensionASF ) == 0 )
-        {
-        HBufC8* mimetype = MmMtpDpUtility::ContainerMimeType( aFullFileName );
+        if ( ext.CompareF( KTxtExtensionMP4 ) == 0
+            || ext.CompareF( KTxtExtension3GP ) == 0
+            || ext.CompareF( KTxtExtension3G2 ) == 0 )
+            mimetype = MmMtpDpUtility::Mp4MimeTypeL( aFullFileName );
+        else if ( ext.CompareF( KTxtExtensionODF ) == 0 )
+            mimetype = MmMtpDpUtility::OdfMimeTypeL( aFullFileName );
+        else if ( ext.CompareF( KTxtExtensionASF ) == 0 )
+            mimetype = MmMtpDpUtility::AsfMimeTypeL( aFullFileName );
         if ( mimetype != NULL )
             {
-            TMmMtpSubFormatCode subFormatCode = MmMtpDpUtility::SubFormatCodeFromMime( *mimetype );
+            TMmMtpSubFormatCode subFormatCode =
+                MmMtpDpUtility::SubFormatCodeFromMime( *mimetype );
 
             if ( subFormatCode == EMTPSubFormatCodeVideo )
                 category = EMPXVideo;
@@ -475,12 +493,8 @@
                 category = EMPXOther;
             }
         }
-    else if ( ext.CompareF( KTxtExtensionO4V ) == 0 )
-        category = EMPXVideo;
-    else
-        category = EMPXOther;
 
-    PRINT1( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::ContainerCategory, category = %d" ), category );
+    PRINT1( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::ContainerCategoryL, category = %d" ), category );
     return category;
     }
 
@@ -518,7 +532,7 @@
 // Add object (music, video, playlist and abstract media) info to DB
 // -----------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataAccessWrapper::AddObjectL( const CMTPObjectMetaData& aObject )
+EXPORT_C void CMmMtpDpMetadataAccessWrapper::AddObjectL( const CMTPObjectMetaData& aObject )
     {
     PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL" ) );
     TMPXGeneralCategory category = Category( aObject );
@@ -531,7 +545,7 @@
         }
     else if ( category == EMPXPlaylist || category == EMPXAbstractAlbum )
         {
-        PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddPlaylist" ) );
+        PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddPlaylist/AbstractAlbum" ) );
         iMmMtpDpMetadataMpxAccess->AddAbstractMediaL( fullFileName,
             category );
         }
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp	Fri May 14 16:21:14 2010 +0300
@@ -62,6 +62,8 @@
 _LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
 _LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
 _LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" );
+_LIT( KMpxCollectionFindAllLModified, "MpxCollectionFindAllLModified" );
+_LIT( KMpxCollectionCleanupDeletedMediasL, "KMpxCollectionCleanupDeletedMediasL" );
 _LIT( KSetMetadataValue, "SetMetadataValueL" );
 #endif
 
@@ -80,7 +82,8 @@
     }
 
 CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
-    iRfs( aRfs )
+    iRfs( aRfs ),
+    iSampleData( NULL )
     {
     // Do nothing
     }
@@ -105,12 +108,14 @@
 //
 CMmMtpDpMetadataMpxAccess::~CMmMtpDpMetadataMpxAccess()
     {
-    if ( iCollectionHelper )
+    if ( iCollectionHelper != NULL )
         {
         iCollectionHelper->Close();
         iCollectionHelper = NULL;
         }
 
+    delete iSampleData;
+
     // for performance measurement purpose
 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
     delete iPerfLog;
@@ -118,6 +123,36 @@
     }
 
 // ---------------------------------------------------------------------------
+// CMmMtpDpMetadataMpxAccess::OpenSession
+// This is introduced to fix CollectionHelper Flush problem
+// ---------------------------------------------------------------------------
+//
+void CMmMtpDpMetadataMpxAccess::OpenSession()
+    {
+    // do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// CMmMtpDpMetadataMpxAccess::CloseSession
+// This is introduced to fix CollectionHelper Flush problem
+// ---------------------------------------------------------------------------
+//
+void CMmMtpDpMetadataMpxAccess::CloseSession()
+    {
+    PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::CloseSession" ) );
+
+    // flush cache
+    if ( iCollectionHelper != NULL )
+        {
+        PRINT( _L( "MM MTP <> Delete & Close CollectionHelper" ) );
+        iCollectionHelper->Close();
+        iCollectionHelper = NULL;
+        }
+
+    PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::CloseSession" ) );
+    }
+
+// ---------------------------------------------------------------------------
 // CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL
 // Gets a piece of metadata from the collection
 // ---------------------------------------------------------------------------
@@ -425,8 +460,10 @@
 
     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC searchMedia setup with no problems" ) );
 
+    PERFLOGSTART(KMpxCollectionFindAllLModified);
     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
         songAttributes.Array() );
+    PERFLOGSTOP(KMpxCollectionFindAllLModified);
     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC foundMedia assigned from FindAllL" ) );
 
     CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
@@ -557,7 +594,9 @@
     // as there is NOT a separate database for deleted files.
     PRINT( _L( "MM MTP <> Deleting metadata for deleted files" ) );
 
+    PERFLOGSTART( KMpxCollectionCleanupDeletedMediasL );
     CollectionHelperL()->CleanupDeletedMediasL();
+    PERFLOGSTOP( KMpxCollectionCleanupDeletedMediasL );
 
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::UpdateMusicCollectionL" ) );
     }
@@ -644,6 +683,7 @@
     TParsePtrC parse( aFullFileName );
     media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
     media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
+    media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
 
     PERFLOGSTART( KSetMetadataValue );
     SetMetadataValueL( aPropCode, aNewData, *media );
@@ -654,6 +694,9 @@
     CollectionHelperL()->SetL( media );
     PERFLOGSTOP( KMpxCollectionSetL );
 
+    delete iSampleData;
+    iSampleData = NULL;
+
     CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs
 
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) );
@@ -668,7 +711,6 @@
     CMPXMedia& aMediaProp )
     {
     PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetMetadataValueL aPropCode = 0x%x" ), aPropCode );
-    CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData
     CMTPTypeArray* desData = NULL;
     TMTPTypeUint16 uint16Data;
     TMTPTypeUint32 uint32Data;
@@ -684,13 +726,12 @@
         case EMTPObjectPropCodeComposer:
         case EMTPObjectPropCodeAlbumArtist:
             {
-            PRINT1( _L( "MM MTP <> SetMetadataValueL Before Copy, string length = %d" ), aNewData.Size() );
-            MMTPType::CopyL( aNewData, *textData );
-            HBufC* string = textData->StringChars().AllocLC();
-            PRINT1( _L( "MM MTP <> SetMetadataValueL string length = %d" ), string->Des().Length() );
+            const CMTPTypeString& textData = static_cast<const CMTPTypeString&>( aNewData );
+            HBufC* string = textData.StringChars().AllocLC();    // + string
+            PRINT2( _L( "MM MTP <> SetMetadataValueL des.ptr() = 0x%x, string length = %d" ),string->Des().Ptr(), string->Des().Length() );
+            PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string );
             aMediaProp.SetTextValueL( attrib, string->Des() );
-            PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string );
-            CleanupStack::PopAndDestroy(string);
+            CleanupStack::PopAndDestroy( string );               // - string
             }
             break;
 
@@ -734,10 +775,10 @@
 
         case EMTPObjectPropCodeOriginalReleaseDate:
             {
-            MMTPType::CopyL( aNewData, *textData );
+            const CMTPTypeString& textData = static_cast<const CMTPTypeString&>( aNewData );
 
             TBuf<KMtpMaxStringLength> data;
-            data.Copy( textData->StringChars().Left( KMtpMaxDateTimeStringLength ) );
+            data.Copy( textData.StringChars().Left( KMtpMaxDateTimeStringLength ) );
             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date = %S" ),
                 &data );
             if ( data.Length() < KMtpMaxDateTimeStringLength )
@@ -852,16 +893,19 @@
             const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri );
             PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid );
 
-            HBufC8* sampleData = HBufC8::NewLC( numElements * sizeof( TUint8 ) );
-            TPtr8 samplePtr = sampleData->Des();
+            delete iSampleData;
+            iSampleData = NULL;
+
+            iSampleData = HBufC8::NewL( numElements * sizeof( TUint8 ) );
+            TPtr8 samplePtr = iSampleData->Des();
             mtpTypeArray.ToDes( samplePtr );
             RFile sampleFile;
             CleanupClosePushL( sampleFile );
             User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) );
             User::LeaveIfError( sampleFile.Write( samplePtr ) );
+            aMediaProp.SetTObjectValueL<TInt>( KMPXMediaMTPSampleData, (TInt)iSampleData );
+            aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
             CleanupStack::PopAndDestroy( &sampleFile );
-            CleanupStack::PopAndDestroy( sampleData );
-            aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 );
             }
             break;
@@ -873,7 +917,6 @@
             break;
         }
 
-    CleanupStack::PopAndDestroy( textData ); // - textData
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetMetadataValueL" ) );
     }
 
@@ -1021,10 +1064,7 @@
     CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
     abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
     abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
-    if ( aCategory == EMPXPlaylist )
-        {
-        abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
-        }
+    abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
 
     PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd );
     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
@@ -1069,12 +1109,8 @@
         media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
 
         TParsePtrC parse( aFullFileName );
-
         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
-        if ( ( aCategory == EMPXPlaylist ) || ( aCategory == EMPXAbstractAlbum ) )
-            {
-            media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
-            }
+        media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
         media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue );
         media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
         media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() );
@@ -1136,7 +1172,8 @@
         // TODO: need to confirm that should set drive letter or storage root path.
         TParsePtrC parse( aRefFileArray[j] );
         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
-
+        media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
+  
         // Add media into array contents
         abstractMediaArray->AppendL( media );
 
@@ -1317,10 +1354,8 @@
     CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
     abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
     abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
-    if ( aCategory == EMPXPlaylist )
-        {
-        abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
-        }
+
+    abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
 
     PERFLOGSTART( KMpxCollectionGetAbstractMedia );
     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
@@ -1451,7 +1486,7 @@
     {
     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
     HBufC* name = NULL;
-    if ( aCategory == EMPXPlaylist )
+    if ( aCategory == EMPXPlaylist || aCategory == EMPXAbstractAlbum )
         {
         if( !aAbstractMedia->IsSupported( KMPXMediaGeneralUri ) )
             {
@@ -1459,14 +1494,6 @@
             }
         name = aAbstractMedia->ValueText( KMPXMediaGeneralUri ).AllocL();
         }
-    else if ( aCategory == EMPXAbstractAlbum )
-        {
-        if ( !aAbstractMedia->IsSupported( KMPXMediaGeneralTitle ) )
-            {
-            User::Leave( KErrNotSupported );
-            }
-        name = aAbstractMedia->ValueText( KMPXMediaGeneralTitle ).AllocL();
-        }
     else
         {
         User::Leave( KErrNotSupported );
--- a/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp	Fri May 14 16:21:14 2010 +0300
@@ -38,6 +38,7 @@
 #include "mmmtpdpfiledefs.h"
 #include "tobjectdescription.h"
 #include "mmmtpdplogger.h"
+#include "mmmtpdp_variant.hrh"
 
 using namespace ContentAccess;
 
@@ -57,82 +58,77 @@
 //
 EXPORT_C TMTPFormatCode MmMtpDpUtility::FormatFromFilename( const TDesC& aFullFileName )
     {
+    TMTPFormatCode format = EMTPFormatCodeUndefined;
+
     if ( aFullFileName.Right( 1 ).CompareF( KTxtBackSlash ) == 0 ) // We have a directory name
         {
-        return EMTPFormatCodeAssociation;
+        format = EMTPFormatCodeAssociation;
         }
-
-    TParsePtrC file( aFullFileName );
-
-    if ( !file.ExtPresent() )
-        return EMTPFormatCodeUndefined;
-
-    // need to do it in popularity of format, to optmize performance
-    if ( file.Ext().CompareF( KTxtExtensionMP3 ) == 0 )
-            return EMTPFormatCodeMP3;
-
-#ifdef __WINDOWS_MEDIA
-    if ( file.Ext().CompareF( KTxtExtensionWMA ) == 0 )
-            return EMTPFormatCodeWMA;
-#endif // __WINDOWS_MEDIA
-
-    if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 )
-        || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) )
-        return EMTPFormatCodeMP4Container;
-
-    if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 )
-        || ( file.Ext().CompareF( KTxtExtension3G2 ) == 0 )
-        || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 )
-        || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) )
-        return EMTPFormatCode3GPContainer;
-
-    if ( file.Ext().CompareF( KTxtExtensionAAC ) == 0 )
-        return EMTPFormatCodeAAC;
+    else 
+        {
+        TParsePtrC file( aFullFileName );
 
-    if ( file.Ext().CompareF( KTxtExtensionWAV ) == 0 )
-        return EMTPFormatCodeWAV;
-
+        if ( file.ExtPresent() )
+            {
+            // need to do it in popularity of format, to optmize performance
+            if ( file.Ext().CompareF( KTxtExtensionMP3 ) == 0 )
+                format = EMTPFormatCodeMP3;
 #ifdef __WINDOWS_MEDIA
-    if ( file.Ext().CompareF( KTxtExtensionWMV ) == 0 )
-        return EMTPFormatCodeWMV;
-
-    if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 )
-        return EMTPFormatCodeASF;
-
+            else if ( file.Ext().CompareF( KTxtExtensionWMA ) == 0 )
+                format = EMTPFormatCodeWMA;
 #endif // __WINDOWS_MEDIA
+            else if (( file.Ext().CompareF( KTxtExtensionPLA ) == 0 ) 
+                || ( file.Ext().CompareF( KTxtExtensionVIR ) == 0 ) )
+                format = EMTPFormatCodeAbstractAudioVideoPlaylist;
+            else if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 )
+                || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) )
+                format = EMTPFormatCodeMP4Container;
+            else if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 )
+                || ( file.Ext().CompareF( KTxtExtension3G2 ) == 0 )
+                || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 )
+                || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) )
+                format = EMTPFormatCode3GPContainer;
+            else if ( file.Ext().CompareF( KTxtExtensionAAC ) == 0 )
+                format = EMTPFormatCodeAAC;
+            else if ( file.Ext().CompareF( KTxtExtensionWAV ) == 0 )
+                format = EMTPFormatCodeWAV;
+#ifdef __WINDOWS_MEDIA
+            else if ( file.Ext().CompareF( KTxtExtensionWMV ) == 0 )
+                format = EMTPFormatCodeWMV;
+            else if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 )
+                format = EMTPFormatCodeASF;
+#endif // __WINDOWS_MEDIA
+            else if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 )
+                {
+                HBufC8* mime = MmMtpDpUtility::OdfMimeTypeL( file.FullName() );
+                if ( mime != NULL )
+                    {
+                    // 3GP
+                    if ( mime->CompareF( KMimeTypeAudio3gpp ) == 0
+                        || mime->CompareF( KMimeTypeVideo3gpp ) == 0 )
+                        {
+                        delete mime;
+                        mime = NULL;
+                        format = EMTPFormatCode3GPContainer;
+                        }
+                    }
 
-    if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 )
-        {
-        HBufC8* mime = MmMtpDpUtility::ContainerMimeType( file.FullName() );
-        if ( mime != NULL )
-            {
-            // 3GP
-            if ( mime->CompareF( KMimeTypeAudio3gpp ) == 0
-                || mime->CompareF( KMimeTypeVideo3gpp ) == 0 )
-                {
-                delete mime;
-                mime = NULL;
-                return EMTPFormatCode3GPContainer;
+                if ( mime != NULL )
+                    {
+                    delete mime;
+                    mime = NULL;
+                    }
                 }
-            }
-
-        if ( mime != NULL )
-            {
-            delete mime;
-            mime = NULL;
+#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT
+            else if ( file.Ext().CompareF( KTxtExtensionALB ) == 0 )
+                format = EMTPFormatCodeAbstractAudioAlbum;
+#endif // MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT
+            else if ( file.Ext().CompareF( KTxtExtensionM3U ) == 0 )
+                format = EMTPFormatCodeM3UPlaylist;
             }
         }
 
-    if ( file.Ext().CompareF( KTxtExtensionALB ) == 0 )
-        return EMTPFormatCodeAbstractAudioAlbum;
-
-    if (( file.Ext().CompareF( KTxtExtensionPLA ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionVIR ) == 0 ) )
-        return EMTPFormatCodeAbstractAudioVideoPlaylist;
-
-    if ( file.Ext().CompareF( KTxtExtensionM3U ) == 0 )
-        return EMTPFormatCodeM3UPlaylist;
-
-    return EMTPFormatCodeUndefined;
+    return format;
     }
 
 // -----------------------------------------------------------------------------
@@ -413,54 +409,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// MetadataAccessWrapper::ContainerMimeType
-// Get mime type from file
-// -----------------------------------------------------------------------------
-//
-HBufC8* MmMtpDpUtility::ContainerMimeType( const TDesC& aFullPath )
-    {
-    PRINT( _L( "MM MTP => MmMtpDpUtility::ContainerMimeType" ) );
-
-    // parse the file path
-    TParsePtrC pathParser( aFullPath );
-
-    // get the extension of file
-    TPtrC ext( pathParser.Ext() );
-    if ( ext.Length() <= 0 )
-        {
-        PRINT( _L( "MM MTP <> MmMtpDpUtility::ContainerMimeType file ext len == 0" ) );
-        return NULL;
-        }
-
-    HBufC8* mimebuf = NULL;
-    TInt err = KErrNone;
-
-    // MP4/3GP
-    if ( ext.CompareF( KTxtExtensionMP4 ) == 0
-        || ext.CompareF( KTxtExtension3GP ) == 0
-        || ext.CompareF( KTxtExtension3G2 ) == 0 )
-        {
-        TRAP( err, mimebuf = Mp4MimeTypeL( aFullPath ) );
-        PRINT1( _L("MM MTP <> MmMtpDpUtility::ContainerMimeType, Mp4MimeTypeL err = %d"), err );
-        }
-    else if ( ext.CompareF( KTxtExtensionODF ) == 0 )
-        {
-        TRAP( err, mimebuf = OdfMimeTypeL( aFullPath ) );
-        PRINT1( _L("MM MTP <> MmMtpDpUtility::ContainerMimeType, OdfMimeTypeL err = %d"), err );
-        }
-#ifdef __WINDOWS_MEDIA
-    else if ( ext.CompareF( KTxtExtensionASF ) == 0 )
-        {
-        TRAP( err, mimebuf = AsfMimeTypeL( aFullPath ) );
-        PRINT1( _L("MM MTP <> MmMtpDpUtility::ContainerMimeType, AsfMimeTypeL err = %d"), err );
-        }
-#endif
-
-    PRINT( _L( "MM MTP <= MmMtpDpUtility::ContainerMimeType" ) );
-    return mimebuf;
-    }
-
-// -----------------------------------------------------------------------------
 // MetadataAccessWrapper::Mp4MimeTypeL
 // Get mime type from mp4 file
 // -----------------------------------------------------------------------------
@@ -523,7 +471,7 @@
             // is video file
             else if ( mp4err == MP4_OK )
                 {
-                if ( file.Ext().CompareF( KTxtExtension3GP ) == 0 
+                if ( file.Ext().CompareF( KTxtExtension3GP ) == 0
                     || file.Ext().CompareF( KTxtExtension3G2 ) == 0 )
                     {
                     mimebuf = KMimeTypeVideo3gpp().Alloc();
@@ -566,44 +514,35 @@
     PRINT( _L( "MM MTP => MmMtpDpUtility::OdfMimeTypeL" ) );
     HBufC8* mimebuf = NULL;
 
-    TParsePtrC file( aFullPath );
+    CContent* content = CContent::NewL( aFullPath );
+    CleanupStack::PushL( content ); // + content
 
-    if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 )
-        {
-        CContent* content = CContent::NewL( aFullPath );
-        CleanupStack::PushL( content ); // + content
-
-        HBufC* buffer = HBufC::NewL( KMimeTypeMaxLength );
-        CleanupStack::PushL( buffer ); // + buffer
+    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() );
+    TPtr data = buffer->Des();
+    TInt err = content->GetStringAttribute( EMimeType, data );
 
-            if (mimebuf == NULL)
-                {
-                User::LeaveIfError( KErrNotFound );
-                }
+    if ( err == KErrNone )
+        {
+        mimebuf = HBufC8::New( buffer->Length() );
 
-            mimebuf->Des().Copy( *buffer );
+        if ( mimebuf == NULL )
+            {
+            User::LeaveIfError( KErrNotFound );
             }
 
-        // leave if NULL
-        if ( mimebuf == NULL )
-            {
-            User::Leave( KErrNotFound );
-            }
+        mimebuf->Des().Copy( *buffer );
+        }
 
-        CleanupStack::PopAndDestroy( buffer ); // - buffer
-        CleanupStack::PopAndDestroy( content ); // - content
+    // leave if NULL
+    if ( mimebuf == NULL )
+        {
+        User::Leave( KErrNotFound );
         }
-    else
-        {
-        User::Leave( KErrNotSupported );
-        }
+
+    CleanupStack::PopAndDestroy( buffer ); // - buffer
+    CleanupStack::PopAndDestroy( content ); // - content
 
     PRINT( _L( "MM MTP <= MmMtpDpUtility::OdfMimeTypeL" ) );
     return mimebuf;
@@ -621,62 +560,52 @@
     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 );
-        PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL OpenFileL" ) );
+    CHXMetaDataUtility *hxUtility = CHXMetaDataUtility::NewL();
+    CleanupStack::PushL( hxUtility );
 
-        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 );
-
-            if ( id == HXMetaDataKeys::EHXMimeType )
-                {
-                TPtr des = buf->Des();
+    hxUtility->OpenFileL( aFullPath );
+    PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL OpenFileL" ) );
 
-                if ( des.Find( KHxMimeTypeWma() ) != KErrNotFound )
-                    {
-                    isAudio = ETrue;
-                    }
-                else if ( des.Find( KHxMimeTypeWmv() ) != KErrNotFound )
-                    {
-                    PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL, video" ) );
-                    mimebuf = KMimeTypeVideoWm().Alloc();
-                    break;
-                    }
+    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 );
+
+        if ( id == HXMetaDataKeys::EHXMimeType )
+            {
+            TPtr des = buf->Des();
+
+            if ( des.Find( KHxMimeTypeWma() ) != KErrNotFound )
+                {
+                isAudio = ETrue;
                 }
-            else if ( i == count - 1 )
+            else if ( des.Find( KHxMimeTypeWmv() ) != KErrNotFound )
                 {
-                if ( isAudio )
-                    {
-                    PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL, audio" ) );
-                    mimebuf = KMimeTypeAudioWm().Alloc();
-                    }
-                else
-                    {
-                    User::Leave( KErrNotFound );
-                    }
+                PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL, video" ) );
+                mimebuf = KMimeTypeVideoWm().Alloc();
+                break;
                 }
             }
-
-        hxUtility->ResetL();
-        CleanupStack::PopAndDestroy( hxUtility );
-        }
-    else
-        {
-        User::Leave( KErrNotSupported );
+        else if ( i == count - 1 )
+            {
+            if ( isAudio )
+                {
+                PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL, audio" ) );
+                mimebuf = KMimeTypeAudioWm().Alloc();
+                }
+            else
+                {
+                User::Leave( KErrNotFound );
+                }
+            }
         }
 
+    hxUtility->ResetL();
+    CleanupStack::PopAndDestroy( hxUtility );
 #else
     User::Leave( KErrNotSupported );
 #endif
@@ -717,7 +646,7 @@
     else
         {
         PRINT( _L( "MM MTP <= MmMtpDpUtility::SubFormatCodeFromMime format not supported" ) );
-        subFormatCode = EMTPSubFormatCodeUndefine;
+        subFormatCode = EMTPSubFormatCodeUndefined;
         }
 
     PRINT1( _L( "MM MTP <= MmMtpDpUtility::SubFormatCodeFromMime SubFormatCode = %d" ), subFormatCode );
--- a/mmappcomponents/playbackhelper/group/playbackhelper.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/playbackhelper/group/playbackhelper.mmp	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version:  7 %
+// Version : %version:  8 %
 
 
 #include <data_caging_paths.hrh>
--- a/mmappcomponents/playbackhelper/inc/playbackhelper_log.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/playbackhelper/inc/playbackhelper_log.h	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 6 %
+// Version : %version: 7 %
 
 
 #ifndef PLAYBACKHELPER_LOG_H
--- a/mmappcomponents/playlistengine/group/bld.inf	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/playlistengine/group/bld.inf	Fri May 14 16:21:14 2010 +0300
@@ -23,9 +23,12 @@
 
 PRJ_EXPORTS
 ../rom/mpxplaylistengine.iby            CORE_MW_LAYER_IBY_EXPORT_PATH(mpxplaylistengine.iby)
-../rom/mpxplaylistrecognizerplugin.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(mpxplaylistrecognizerplugin.iby)
+
+//MMMW has a generic recognizer that takes care of m3u files
+//../rom/mpxplaylistrecognizerplugin.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(mpxplaylistrecognizerplugin.iby)
 
 PRJ_MMPFILES
-mpxplaylistrecognizer.mmp
+//MMMW has a generic recognizer that takes care of m3u files
+//mpxplaylistrecognizer.mmp
 mpxplaylistengine.mmp
 
--- a/mmappcomponents/playlistengine/inc/mpxplaylistrecognizer.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/playlistengine/inc/mpxplaylistrecognizer.h	Fri May 14 16:21:14 2010 +0300
@@ -29,6 +29,8 @@
 class CMPXPluginHandlerBase;
 
 /**
+*  Deprecated. replaced by playlist recognizer in mw/mmmw.
+*
 *  Concrete implementation of the recognizer API used to recognize playlist files.
 *
 *  This is used by the application framework, as well as CMPXPlaylistEngine to
--- a/mmappcomponents/playlistengine/src/mpxplaylistengine.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/playlistengine/src/mpxplaylistengine.cpp	Fri May 14 16:21:14 2010 +0300
@@ -59,7 +59,6 @@
 #include "mpxplaylistenginedefs.hrh"
 #include "mpxplaylistplugin.h"
 #include "mpxplaylistengine.h"
-#include "mpxplaylistrecognizer.h"
 
 // ============================ CONSTANTS =====================================
 const TInt KMPXBufExpandSize = 0x40;
--- a/mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 5 %
+// Version : %version: 6 %
 
 
 #include <data_caging_paths.hrh>
--- a/mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 4 %
+// Version : %version: 5 %
 
 
 
--- a/mmappfw_plat/group/bld.inf	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/group/bld.inf	Fri May 14 16:21:14 2010 +0300
@@ -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.6 %
+*  Version     : %version: da1ido#1.1.4.1.3.3.8 %
 *
 */
 
@@ -46,3 +46,4 @@
 #endif
 #include "../playback_helper_api/group/bld.inf"
 #include "../videoplaylist_utility_api/group/bld.inf"
+#include "../qt_telephony_multimedia_service_api/group/bld.inf"
--- a/mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp	Fri May 14 16:21:14 2010 +0300
@@ -49,7 +49,11 @@
 LIBRARY         euser.lib
 LIBRARY         bafl.lib estor.lib ecom.lib stiftestinterface.lib
 LIBRARY         stiftestengine.lib 
-LIBRARY   		mpxcollectionmediator.lib mpxcollectionutility.lib mpxcollectionengine.lib mpxcollectionhelper.lib mpxcommon.lib 
+LIBRARY         mpxcollectionmediator.lib
+LIBRARY         mpxcollectionutility.lib
+LIBRARY         mpxcollectionengine.lib
+LIBRARY         mpxcollectionhelper.lib
+LIBRARY         mpxcommon.lib 
 
 LANG            SC
 
--- a/mmappfw_plat/harvester_metadata_extractor_api/group/bld.inf	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/harvester_metadata_extractor_api/group/bld.inf	Fri May 14 16:21:14 2010 +0300
@@ -25,3 +25,4 @@
 PRJ_EXPORTS          
           
 ../inc/mpxmetadataextractor.h                    MW_LAYER_PLATFORM_EXPORT_PATH(mpxmetadataextractor.h)                            
+../inc/mpxmetadataextractorobserver.h            MW_LAYER_PLATFORM_EXPORT_PATH(mpxmetadataextractorobserver.h)                            
--- a/mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractor.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractor.h	Fri May 14 16:21:14 2010 +0300
@@ -24,6 +24,7 @@
 class CMetaDataUtility;
 class CMPXFileInfoUtility;
 class CMPXDrmMediaUtility;
+class MMPXMetadataExtractorObserver;
 #include <thumbnailmanager.h>
 #include <thumbnailmanagerobserver.h>
 
@@ -33,7 +34,7 @@
  *  @lib mpxfilehandler.lib
  */
 class CMPXMetadataExtractor : public CBase,
-                            public MThumbnailManagerObserver
+                              public MThumbnailManagerObserver
     {
     
 public:
@@ -72,6 +73,27 @@
      */
     IMPORT_C TInt ExtractAlbumArtL( CMPXMedia* aMedia );
     
+    /*
+    * Create a media object for a file. This is a asynchronous function.
+    * This function will leave with KErrAbort if still processing last request.
+    * Callback function is HandleCreateMediaComplete()
+    * @since 9.2
+    * @param aFile a fullpath to the file.
+    * @param aObs Metadata Extractor Observer
+    * @param aMetadataOnly extract metadata only or not. Default EFalse
+    */
+    IMPORT_C void CreateMediaAsyncL( const TDesC& aFile,
+                                     MMPXMetadataExtractorObserver* aObs,
+                                     TBool aMetadataOnly = EFalse );
+
+    /**
+     * Cancel request.  This will empty the task array and stop the wait loop. This
+     *                  will cause the CreateMediaL() to finish more quickly. Also,
+     *                  all outstanding thumbnail requests are cancelled.
+     * @since 9.2
+     */
+    IMPORT_C void CancelRequest();
+    
 private: // New Functions:
     
     /**
@@ -84,26 +106,14 @@
     /**
     * Function to go through the metadata entries.
     * @since 3.2.3
-    * @param aProp Media Properties to update.
-    * @param aFile File name
     */
-    void SetMediaPropertiesL( CMPXMedia& aProp, 
-                              const TDesC& aFile );
+    void SetMediaPropertiesL();
     
     /**
     * Sets other media properties not found from metadata util.
     * @since 3.2.3
-    * @param aProp Media Properties to update.
-    * @param aFile file name.
-    * @param aMetadataOnly extract metadata only or not Default EFalse.
-    * @param aFileHandle file handle to the file. 
-    * @param aFileErr file handle error if file could not be opened
     */
-    void SetExtMediaPropertiesL( CMPXMedia& aProp, 
-                                 const TDesC& aFile,
-                                 TBool aMetadataOnly,
-                                 RFile& aFileHandle,
-                                 TInt aFileErr  );   
+    void SetExtMediaPropertiesL();   
                                 
     /**
     * Checks to see if a container type is supported.
@@ -151,22 +161,12 @@
     static TInt TimeoutTimerCallback(TAny* aPtr);
 
     /**
-     * Get album art metadata.
-     * @since 5.0
-     * @param aMedia
-     * @return error ID 
-     */
-    TInt GetMediaAlbumArtL( CMPXMedia& aMedia,
-                            const TDesC& aFile );
-    
-    /**
      * Add album art to media object.
      * @since 5.0
      * @param aMedia
      */
     void AddMediaAlbumArtL( CMPXMedia& aMedia,
-                            const TDesC& aFile,
-                            TDesC8& aValue);
+                            const TDesC& aFile );
     
     /**
      * Check if can send request to TNM or not.
@@ -175,6 +175,62 @@
      */                     
     void CheckBeforeSendRequest();
     
+    /**
+     * Cancel all outstanding thumbnail requests
+     * @since 9.2
+     * 
+     */                     
+    void CancelAllThumbnailRequests();
+    
+    /**
+     * Create media and set default data.
+     * @since 9.2
+     * 
+     */                     
+    void DoCreateMediaL();
+    
+    /**
+     * Execute task at index 0.
+     * @since 9.2
+     * 
+     */                     
+    void ExecuteTaskL();
+    
+    /**
+     * Cancel task timer. 
+     */
+    void CancelTaskTimer();
+    
+    /**
+    * Callback when the task timer expires.
+    */
+    static TInt TaskTimerCallback(TAny* aPtr);
+
+    /**
+     * Populate task array
+     * @since 9.2
+     */
+    void AddTasksL();
+    
+    /**
+     * Opens the file
+     * @since 9.2
+     * @return system error
+     */
+    TInt OpenFile();
+    
+    /**
+     * Handle task timer expired
+     * @since 9.2 
+     */
+    void HandleTaskTimerExpired();
+    
+    /**
+     * Clean up
+     * @since 9.2 
+     */
+    void CleanUp();
+    
 private:
 
     /**
@@ -190,6 +246,15 @@
     void ConstructL();
 
 private: // data
+    enum EMetadataExtractorTasks
+        {
+        ETaskCreateMedia,
+        ETaskAddMetadata,
+        ETaskAddExtMetadata,
+        ETaskAddAlbumArt,
+        ETaskCheckBeforeSend
+        };
+    
     CMetaDataUtility*    iMetadataUtility;  // extract metadata from file
     CMPXDrmMediaUtility* iDrmMediaUtility;  // extra drm data from file
     CMPXFileInfoUtility* iFileInfoUtil;     // extract duration/bitrate etc from file
@@ -200,8 +265,16 @@
     CThumbnailManager*    iTNManager;
     CActiveSchedulerWait* iTNSyncWait;  // wait loop use to sync thumbnail
     CPeriodic*            iTimer; // backup timer to stop wait loop
-    TInt                  iOutstandingThumbnailRequest;
-    TInt                  iTNMBlockCount;
+    RArray<TThumbnailRequestId>     iArrayTNRequestId;
+    RArray<EMetadataExtractorTasks> iArrayTasks;
+    TBool                           iCancelled;
+    CPeriodic*                      iTaskTimer; // timer for task execution
+    MMPXMetadataExtractorObserver*  iObs; // metadata extractor obserer
+    TFileName                       iFileName;
+    RFile                           iFile;
+    CMPXMedia*                      iMedia;  // ownership transferred
+    TBool                           iMetadataOnly;
+    TInt                            iFileOpenError;
     };
 
 #endif // CMPXMETADATAEXTRACTOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractorobserver.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* 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:  Observer class for metadata extractor
+*
+*/
+
+
+#ifndef MMPXMETADATAEXTRACTOROBSERVER_H
+#define MMPXMETADATAEXTRACTOROBSERVER_H
+
+class CMPXMediaArray;
+
+/**
+ *  Metadata Extractor observer
+ *
+ *  @lib mpxfilehandler.lib
+ *  @since S60 v9.2
+ */
+class MMPXMetadataExtractorObserver
+    {
+
+public:
+
+    /**
+    * Callback when the CreateMediaL() is completed.
+    * @param aMedia media with metadata populated. Ownership transferred.
+    * @param aError error
+    */
+    virtual void HandleCreateMediaComplete( CMPXMedia* aMedia, TInt aError ) = 0;
+    };
+
+#endif // MMPXMETADATAEXTRACTOROBSERVER_H
--- a/mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h	Fri May 14 16:21:14 2010 +0300
@@ -69,7 +69,7 @@
     EUSBMTPEndEvent,           // MTP end event
     EUSBMTPNotActiveEvent,     // MTP selected but not active
     ESystemEventMax,           // End of event enum
-    EPowerKeyEjectEvent        // Power key eject mmc
+    EDiskDismountEvent         // Disk dismount notification (MPX Harvester internal)
     };
 
 #endif // MPX_HARVESTER_COMMON_H
--- a/mmappfw_plat/mpx_common_api/inc/mpxmediamtpdefs.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/mpx_common_api/inc/mpxmediamtpdefs.h	Fri May 14 16:21:14 2010 +0300
@@ -35,6 +35,7 @@
 */    
 const TMPXAttributeData KMPXMediaMTPDrmStatus = {KMPXMediaIdMTP, 0x0001}; // TUint16
 const TMPXAttributeData KMPXMediaMTPSampleDataFlag = {KMPXMediaIdMTP, 0x0002}; // TBool
+const TMPXAttributeData KMPXMediaMTPSampleData = {KMPXMediaIdMTP, 0x0004}; // HBufC8*
 const TMPXAttributeData KMPXMediaMTPAll = {KMPXMediaIdMTP, 0xffffffff};
 
 #endif // MPXMEDIAMTPDEFS_H
--- a/mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h	Fri May 14 16:21:14 2010 +0300
@@ -46,6 +46,7 @@
 const TMPXAttributeData KMPXMediaMusicAlbumArtThumbnailSize={KMPXMediaIdMusic,0x800}; // TSint
 const TMPXAttributeData KMPXMediaMusicAlbumArtChanged={KMPXMediaIdMusic,0x1000}; // TInt
 const TMPXAttributeData KMPXMediaMusicAlbumArtist={KMPXMediaIdMusic,0x2000}; // Text
+const TMPXAttributeData KMPXMediaMusicAlbumId={KMPXMediaIdMusic,0x4000}; // TMPXItemId
 const TMPXAttributeData KMPXMediaMusicAll={KMPXMediaIdMusic,0xffffffff}; // Text
 
 /** 
@@ -68,6 +69,7 @@
     EMPXMediaMusicAlbumArtThumbnail=0x400,
     EMPXMediaMusicAlbumArtThumbnailSize=0x800,
     EMPXMediaMusicAlbumArtist=0x2000,
+    EMPXMediaMusicAlbumId=0x4000,
     EMPXMediaMusicAll=0xffffffff
     };
 
--- a/mmappfw_plat/mpx_common_definition_api/group/bld.inf	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/mpx_common_definition_api/group/bld.inf	Fri May 14 16:21:14 2010 +0300
@@ -36,4 +36,5 @@
 ../inc/mpxmessage2.h                             MW_LAYER_PLATFORM_EXPORT_PATH(mpxmessage2.h)              
 ../inc/mpxpathconfiguration.hrh                  MW_LAYER_PLATFORM_EXPORT_PATH(mpxpathconfiguration.hrh)   
 ../inc/mpxprivatecrkeys.h                        MW_LAYER_PLATFORM_EXPORT_PATH(mpxprivatecrkeys.h)         
-../inc/mpxsearchcriteria.h                       MW_LAYER_PLATFORM_EXPORT_PATH(mpxsearchcriteria.h)        
\ No newline at end of file
+../inc/mpxsearchcriteria.h                       MW_LAYER_PLATFORM_EXPORT_PATH(mpxsearchcriteria.h)
+../inc/EqualizerConstants.h                      MW_LAYER_PLATFORM_EXPORT_PATH(EqualizerConstants.h)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/group/bld.inf	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/qtms.h                    MW_LAYER_PLATFORM_EXPORT_PATH(qtms.h)
+../inc/qtmsamrformat.h           MW_LAYER_PLATFORM_EXPORT_PATH(qtmsamrformat.h)
+../inc/qtmsbuffer.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmsbuffer.h)
+../inc/qtmscall.h                MW_LAYER_PLATFORM_EXPORT_PATH(qtmscall.h)
+../inc/qtmsclientsink.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsclientsink.h)
+../inc/qtmsclientsource.h        MW_LAYER_PLATFORM_EXPORT_PATH(qtmsclientsource.h)
+../inc/qtmsdtmf.h                MW_LAYER_PLATFORM_EXPORT_PATH(qtmsdtmf.h)
+../inc/qtmseffect.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmseffect.h)
+../inc/qtmsfactory.h             MW_LAYER_PLATFORM_EXPORT_PATH(qtmsfactory.h)
+../inc/qtmsformat.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmsformat.h)
+../inc/qtmsg711format.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsg711format.h)
+../inc/qtmsg729format.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsg729format.h)
+../inc/qtmsgaineffect.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsgaineffect.h)
+../inc/qtmsglobalgaineffect.h    MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalgaineffect.h)
+../inc/qtmsglobalrouting.h       MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalrouting.h)
+../inc/qtmsglobalvoleffect.h     MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalvoleffect.h)
+../inc/qtmsilbcformat.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsilbcformat.h)
+../inc/qtmspcmformat.h           MW_LAYER_PLATFORM_EXPORT_PATH(qtmspcmformat.h)
+../inc/qtmsringtone.h            MW_LAYER_PLATFORM_EXPORT_PATH(qtmsringtone.h)
+../inc/qtmssink.h                MW_LAYER_PLATFORM_EXPORT_PATH(qtmssink.h)
+../inc/qtmssource.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmssource.h)
+../inc/qtmsstream.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmsstream.h)
+../inc/qtmsvolumeeffect.h        MW_LAYER_PLATFORM_EXPORT_PATH(qtmsvolumeeffect.h)
+../inc/qtmsmicsource.h           MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmicsource.h)
+../inc/qtmsmodemsink.h           MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmodemsink.h)
+../inc/qtmsmodemsource.h         MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmodemsource.h)
+../inc/qtmsspeakersink.h         MW_LAYER_PLATFORM_EXPORT_PATH(qtmsspeakersink.h)
+../inc/qtmsinbandtone.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsinbandtone.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtms.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_H
+#define QTMS_H
+
+// Include files
+#include <glib.h>
+#include <vector>
+
+namespace QTMS {
+
+class QTMSFormat;
+
+// Result codes
+#define QTMS_RESULT_SUCCESS                      ((gint)0x00000000)
+#define QTMS_RESULT_ALREADY_EXIST                ((gint)0x00000001)
+#define QTMS_RESULT_DOES_NOT_EXIST               ((gint)0x00000002)
+#define QTMS_RESULT_NULL_ARGUMENT                ((gint)0x00000003)
+#define QTMS_RESULT_INVALID_ARGUMENT             ((gint)0x00000004)
+#define QTMS_RESULT_INVALID_STATE                ((gint)0x00000005)
+#define QTMS_RESULT_UNINITIALIZED_OBJECT         ((gint)0x00000006)
+#define QTMS_RESULT_INSUFFICIENT_MEMORY          ((gint)0x00000007)
+#define QTMS_RESULT_GENERAL_ERROR                ((gint)0x00000008)
+#define QTMS_RESULT_FATAL_ERROR                  ((gint)0x00000009)
+#define QTMS_RESULT_OPERATION_CANCELLED          ((gint)0x0000000A)
+#define QTMS_RESULT_ILLEGAL_OPERATION            ((gint)0x0000000B)
+#define QTMS_RESULT_BUFFER_LATENCY_ERROR         ((gint)0x0000000C)
+#define QTMS_RESULT_CALL_TYPE_NOT_SUPPORTED      ((gint)0x0000000D)
+#define QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED    ((gint)0x0000000E)
+#define QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED    ((gint)0x0000000F)
+#define QTMS_RESULT_SINK_TYPE_NOT_SUPPORTED      ((gint)0x00000010)
+#define QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED    ((gint)0x00000011)
+#define QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED    ((gint)0x00000012)
+#define QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED    ((gint)0x00000013)
+#define QTMS_RESULT_VERSION_NOT_SUPPORTED        ((gint)0x00000014)
+#define QTMS_RESULT_FORMAT_TYPE_UNSPECIFIED      ((gint)0x00000015)
+#define QTMS_RESULT_FEATURE_NOT_SUPPORTED        ((gint)0x00000016)
+
+// Reasons codes
+#define QTMS_REASON_CLIENT_INITIATED             ((gint)0x00000000)
+#define QTMS_REASON_DEVICE_IN_USE                ((gint)0x00000001) // Device not available
+#define QTMS_REASON_DEVICE_TAKEN                 ((gint)0x00000002) // Preemption
+#define QTMS_REASON_INSUFFICIENT_MEMORY          ((gint)0x00000003) // Memory
+#define QTMS_REASON_PERMISSION_DENIED            ((gint)0x00000004) // Client app does not have perission
+#define QTMS_REASON_EMERGENCY_CALL_ONGOING       ((gint)0x00000005) // Already ongoing emergency call
+#define QTMS_REASON_EMERGENCY_CALL_STARTED       ((gint)0x00000006) // Preemption because of emergency call
+#define QTMS_REASON_SOURCE_NULL                  ((gint)0x00000007) // Could be checked on client side
+#define QTMS_REASON_SOURCE_NOT_SUPPORTED         ((gint)0x00000008)
+#define QTMS_REASON_FORMAT_NULL                  ((gint)0x00000009) // Could be checked on client side
+#define QTMS_REASON_EFFECT_NOT_SUPPORTED         ((gint)0x0000000A)
+#define QTMS_REASON_SINK_NULL                    ((gint)0x0000000B) // Could be checked on client side
+#define QTMS_REASON_SINK_NOT_SUPPORTED           ((gint)0x0000000C)
+#define QTMS_REASON_CALL_NOT_ACTIVE              ((gint)0x0000000D)
+
+// Event codes
+#define QTMS_EVENT_STREAM_STATE_CHANGED          ((gint)0x00000000)
+#define QTMS_EVENT_SOURCE_FILL_BUFFER            ((gint)0x00000001)
+#define QTMS_EVENT_SOURCE_PROCESSED_BUFFER       ((gint)0x00000002)
+#define QTMS_EVENT_SINK_PROCESS_BUFFER           ((gint)0x00000003)
+#define QTMS_EVENT_EFFECT_VOL_CHANGED            ((gint)0x00000004)
+#define QTMS_EVENT_EFFECT_GAIN_CHANGED           ((gint)0x00000005)
+#define QTMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED ((gint)0x00000006)
+#define QTMS_EVENT_ROUTING_OUTPUT_CHANGED        ((gint)0x00000007)
+#define QTMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE   ((gint)0x00000008)
+#define QTMS_EVENT_RINGTONE_OPEN_COMPLETE        ((gint)0x00000009)
+#define QTMS_EVENT_RINGTONE_PLAY_COMPLETE        ((gint)0x0000000A)
+#define QTMS_EVENT_RINGTONE_DEINIT_COMPLETE      ((gint)0x0000000B)
+#define QTMS_EVENT_DTMF_TONE_STARTED             ((gint)0x0000000C)
+#define QTMS_EVENT_DTMF_TONE_STOPPED             ((gint)0x0000000D)
+#define QTMS_EVENT_INBAND_TONE_STARTED           ((gint)0x0000000E)
+#define QTMS_EVENT_INBAND_TONE_STOPPED           ((gint)0x0000000F)
+
+// Stream states
+typedef gint QTMSStreamState;
+#define QTMS_STREAM_UNINITIALIZED                ((gint)0x00000000)
+#define QTMS_STREAM_INITIALIZED                  ((gint)0x00000001)
+#define QTMS_STREAM_PAUSED                       ((gint)0x00000002)
+#define QTMS_STREAM_STARTED                      ((gint)0x00000003)
+
+#define DEFAULT_CALL_CONTEXT                    ((gint)1)
+
+// QTMS object types
+typedef gint QTMSStreamType;
+#define QTMS_STREAM_UPLINK                       ((gint)0)
+#define QTMS_STREAM_DOWNLINK                     ((gint)1)
+
+typedef gint QTMSBufferType;
+#define QTMS_BUFFER_MEMORY                       ((gint)2)
+
+typedef gint QTMSSourceType;
+#define QTMS_SOURCE_CLIENT                       ((gint)3)
+#define QTMS_SOURCE_MODEM                        ((gint)4)
+#define QTMS_SOURCE_MIC                          ((gint)5)
+
+typedef gint QTMSSinkType;
+#define QTMS_SINK_CLIENT                         ((gint)6)
+#define QTMS_SINK_MODEM                          ((gint)7)
+#define QTMS_SINK_SPEAKER                        ((gint)8)
+
+typedef gint QTMSEffectType;
+#define QTMS_EFFECT_GLOBAL_VOL                   ((gint)9)
+#define QTMS_EFFECT_GLOBAL_GAIN                  ((gint)10)
+#define QTMS_EFFECT_VOLUME                       ((gint)11)
+#define QTMS_EFFECT_GAIN                         ((gint)12)
+
+typedef gint QTMSFormatType;
+#define QTMS_FORMAT_PCM                          ((gint)13)
+#define QTMS_FORMAT_AMR                          ((gint)14)
+#define QTMS_FORMAT_G711                         ((gint)15)
+#define QTMS_FORMAT_G729                         ((gint)16)
+#define QTMS_FORMAT_ILBC                         ((gint)17)
+
+typedef gint QTMSRingToneType;
+#define QTMS_RINGTONE_DEFAULT                    ((gint)0)
+#define QTMS_RINGTONE_FILE                       ((gint)1)
+#define QTMS_RINGTONE_SEQUENCE                   ((gint)2)
+#define QTMS_RINGTONE_BEEP_ONCE                  ((gint)3)
+#define QTMS_RINGTONE_SILENT                     ((gint)4)
+#define QTMS_RINGTONE_UNSECURE_VOIP              ((gint)5)
+
+typedef gint QTMSRTPSessionType;
+#define QTMS_SESSION_RTP_PULL                    ((gint)0)
+#define QTMS_SESSION_RTP_PUSH                    ((gint)1)
+
+// QTMS vectors
+typedef std::vector<QTMSFormat*> FormatVector;
+typedef std::vector<guint> BitRateVector;
+typedef std::vector<guint> OutputVector;
+
+// Call types
+typedef gint QTMSCallType;
+#define QTMS_CALL_CS                             ((gint)0)
+#define QTMS_CALL_ECS                            ((gint)1)
+#define QTMS_CALL_IP                             ((gint)2)
+#define QTMS_CALL_RTP                            ((gint)3)
+
+// Codec modes
+typedef gint QTMSG711CodecMode;
+#define QTMS_G711_CODEC_MODE_ALAW                ((gint)0)
+#define QTMS_G711_CODEC_MODE_MULAW               ((gint)1)
+
+typedef gint QTMSILBCCodecMode;
+#define QTMS_ILBC_CODEC_MODE_20MS_FRAME          ((gint)0)
+#define QTMS_ILBC_CODEC_MODE_30MS_FRAME          ((gint)1)
+
+// Audio output types
+typedef gint QTMSAudioOutput;
+#define QTMS_AUDIO_OUTPUT_NONE                   ((gint)0)
+#define QTMS_AUDIO_OUTPUT_PUBLIC                 ((gint)1)
+#define QTMS_AUDIO_OUTPUT_PRIVATE                ((gint)2)
+#define QTMS_AUDIO_OUTPUT_HANDSET                ((gint)3)
+#define QTMS_AUDIO_OUTPUT_LOUDSPEAKER            ((gint)4)
+#define QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY        ((gint)5)
+#define QTMS_AUDIO_OUTPUT_ACCESSORY              ((gint)6)
+#define QTMS_AUDIO_OUTPUT_ETTY                   ((gint)7)
+#define QTMS_AUDIO_OUTPUT_NOT_ACTIVE             ((gint)8)
+
+typedef gint QTMSInbandToneType;
+#define QTMS_INBAND_USER_BUSY                    ((gint)0)
+#define QTMS_INBAND_RADIO_PATH_NOT_AVAIL         ((gint)1)
+#define QTMS_INBAND_CONGESTION                   ((gint)2)
+#define QTMS_INBAND_SPECIAL_INFO                 ((gint)3)
+#define QTMS_INBAND_REORDER                      ((gint)4)
+#define QTMS_INBAND_REMOTE_ALEARTING             ((gint)5)
+#define QTMS_INBAND_CALL_WAITING                 ((gint)6)
+#define QTMS_INBAND_DATA_CALL                    ((gint)7)
+#define QTMS_INBAND_NO_SEQUENCE                  ((gint)8)
+#define QTMS_INBAND_BEEP_SEQUENCE                ((gint)9)
+
+// Structure signalling callback notifications
+struct QTMSSignalEvent
+    {
+    guint type;
+    guint reason;
+    gpointer event_data;
+    gpointer user_data;
+    gint curr_state;
+    gint prev_state;
+    };
+
+// Structure for global volume effect change event
+struct QTMSVolumeEventChangeData
+    {
+    guint level;
+    QTMSAudioOutput output;
+    gboolean output_changed;
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsamrformat.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_AMR_FORMAT_H
+#define QTMS_AMR_FORMAT_H
+
+#include <QObject>
+#include <qtmsformat.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSAMRFormat class
+ *
+ * This class provides access methods to configure and query AMR-NB codec
+ * format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSAMRFormat : public QObject,
+                                              public QTMSFormat
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSAMRFormat();
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSAMRFormat();
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_AMR_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsbuffer.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_BUFFER_H
+#define QTMS_BUFFER_H
+
+#include <qtms.h>
+#include <QObject>
+
+namespace QTMS {
+
+/**
+ * QTMSBuffer class
+ *
+ * This interface provides data buffers to QTMS clients. This class allows
+ * clients to allocate data by themselves or request a specific size of the
+ * buffer from the factory.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMSBuffer : public QObject
+    {
+    Q_OBJECT
+public:
+    /**
+     * Return buffer type.
+     *
+     * @param  buftype
+     *      Type of the buffer object (QTMS_BUFFER_MEMORY).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSBufferType& buftype)=0;
+
+    /**
+     * Returns time stamp of the buffer so that the framework can determine
+     * the time at which this buffer has to be rendered by the output device
+     * sink.
+     *
+     * @param  ts
+     *      Time stamp in microseconds.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetTimeStamp(guint64& ts)=0;
+
+    /**
+     * Sets the time stamp on the Buffer so that the framework can determine
+     * the time at which this buffer has to be rendered by the output device
+     * sink.
+     *
+     * @param  ts
+     *      Time stamp in microseconds.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint SetTimeStamp(const guint64 ts) =0;
+
+    /**
+     * Returns size of data in the buffer.
+     *
+     * @param  size
+     *      Size of data in the buffer.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetDataSize(guint& size)=0;
+
+    /**
+     * Set size of data in the buffer after filling in by the client.
+     *
+     * @param  size
+     *      Size of data in the buffer.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint SetDataSize(const guint size)=0;
+
+    /**
+     * Return pointer to the memory location of the data associated with this
+     * buffer.
+     *
+     * @param  bufptr
+     *      Pointer to the data stored in the buffer.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetDataPtr(guint8*& bufptr) =0;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_BUFFER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmscall.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CALL_H
+#define QTMS_CALL_H
+
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSCall;
+}
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSStream;
+
+/**
+ * QTMSCall class
+ *
+ * This class instantiates QTMS call object of one of the following types:
+ *  QTMS_CALL_CS
+ *  QTMS_CALL_ECS
+ *  QTMS_CALL_IP
+ *
+ * Each QTMS call contains at least 1 stream (uplink or downlink).
+ *
+ * Usage:
+ * <code>
+ * QTMSFactory *iFactory;
+ * QTMSCall *iCall;
+ * QTMSStream *iUplink;
+ * QTMSStream *iDownlink;
+ * gint err;
+ * err = QTMSFactory::CreateFactory(iFactory);
+ * err = iFactory->CreateCall(QTMS_CALL_IP, iCall);
+ * err = iCall->CreateStream(QTMS_STREAM_UPLINK, iUplink);
+ * err = iCall->CreateStream(QTMS_STREAM_DOWNLINK, iDownlink);
+ * ...
+ * err = iCall->DeleteStream(iDownlink);
+ * err = iCall->DeleteStream(iUplink);
+ * err = iFactory->DeleteCall(iCall);
+ * delete iFactory;
+ * ...
+ * </code>
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSCall : public QObject
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     *
+     */
+    virtual ~QTMSCall();
+
+    /**
+     * Return call type.
+     *
+     * This function can be called at any time.
+     *
+     * Possible call types are as follows:
+     *  QTMS_CALL_CS,
+     *  QTMS_CALL_ECS
+     *  QTMS_CALL_IP
+     *
+     * @return
+     *      Call type as indicated above.
+     *
+     */
+    QTMSCallType GetCallType();
+
+    /**
+     * Get call context ID.
+     *
+     * This ID is passed during the creation of the call object.
+     *
+     * @param  ctxid
+     *      Context ID.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FATAL_ERROR if an error occured.
+     *
+     */
+    gint GetCallContextId(guint& ctxid);
+
+    /**
+     * Create QTMS stream of the given type.
+     *
+     * @param  type
+     *      Stream type to be created.
+     *
+     * @param  strm
+     *      Created stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if call creation failed due to
+     *      insufficient memory.
+     *      QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED if stream type is not
+     *      supported.
+     *      QTMS_RESULT_FATAL_ERROR if an error occured.
+     *      QTMS_REASON_EMERGENCY_CALL_ONGOING if emergency call is active.
+     *      QTMS_REASON_PERMISSION_DENIED if permission is denied.
+     *
+     */
+    gint CreateStream(const QTMSStreamType type, QTMSStream*& strm);
+
+    /**
+     * Delete stream object.
+     *
+     * @param  strm
+     *      Stream to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the stream is not valid.
+     */
+    gint DeleteStream(QTMSStream*& strm);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSCall();
+
+protected:
+    TMS::TMSCall* iTmsCall;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_CALL_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsink.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CLIENT_SINK_H
+#define QTMS_CLIENT_SINK_H
+
+#include <qtms.h>
+#include <qtmssink.h>
+#include <QObject>
+#include <qglobal.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSink;
+class TMSBuffer;
+}
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSBuffer;
+
+/**
+ * QTMSClientSink class
+ *
+ * This class provides QTMS client sink interface. It serves as a data sink
+ * to the QTMS, which supplies the client with buffers recorded by the a/v
+ * recording device. The constant flow of data between the a/v recorder
+ * device and the client is accomplished by sending BufferProcessed() events
+ * in response to TMSClientSinkObserver::ProcessBuffer sink observer callbacks.
+ * This indicates to the QTMS that the supplied buffer has been consumed by the
+ * client and it is ready to receive more recorded data.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSClientSink : public QObject,
+                                               public QTMSSink
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSClientSink();
+
+    /**
+     * Tell the sink that the buffer passed in has been processed by
+     * the client and is ready to be reused by the Sink.
+     *
+     * This function must be called in response to the callback from the
+     * sink observer QTMSClientSinkObserver::ProcessBuffer().
+     *
+     * @param  buffer
+     *      The buffer which has been processed by the client (filled in
+     *      with data).
+     *
+     * @return
+     *      Status of the operation.
+     *
+     */
+    gint BufferProcessed(TMS::TMSBuffer* buffer);
+
+    /**
+     * Return sink type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sinktype
+     *      The type of sink object (QTMS_SINK_CLIENT).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSinkType& sinktype);
+
+    Q_SIGNALS:
+    void ProcessBuffer(const TMS::TMSBuffer* buffer);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSClientSink();
+
+protected:
+    TMS::TMSSink* iSink;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_CLIENT_SINK_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsource.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CLIENT_SOURCE_H
+#define QTMS_CLIENT_SOURCE_H
+
+#include <qtms.h>
+#include <qtmssource.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSource;
+class TMSBuffer;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSClientSource class
+ *
+ * This class instantiates QTMS client source interface. It serves as a data
+ * source to the QTMS, through which the client submits data buffers to the
+ * QTMS call server for playback on the audio and/or video output device.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSClientSource : public QObject,
+                                                 public QTMSSource
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSClientSource();
+
+    /**
+     * PULL MODE ONLY
+     *
+     * Tell the source that the buffer passed in has been filled in with data
+     * by the client and it is ready to be sent do the QTMS for processing.
+     *
+     * This function must be called in response to the callback from the
+     * source observer QTMSClientSourceObserver::FillBuffer.
+     *
+     * @param  buffer
+     *      The buffer which has been processed by the client (filled in
+     *      with data).
+     *
+     * @return
+     *      Status of the operation.
+     *
+     */
+    gint BufferFilled(TMS::TMSBuffer& buffer);
+
+    /**
+     * In the PUSH MODE, tell the source that the supplied buffer filled in
+     * with data should be queued before being sent for processing by the
+     * server. All ProcessBuffer requests will be queued until client calls
+     * Flush(). After all queued buffers are pushed to the server and
+     * processed, the QTMS will respond by issuing
+     * QTMSClientSourceObserver::BufferProcessed
+     * callback event.
+     *
+     * @param  buffer
+     *      The buffer with audio data supplied by the client for playback.
+     *
+     */
+    gint ProcessBuffer(TMS::TMSBuffer* buffer);
+
+    /**
+     * PUSH MODE ONLY
+     *
+     * Tell the QTMS framework to queue ProcessBuffer events. To request the
+     * QTMS push mode operation, the SetEnqueueMode must be called with the
+     * flag set TRUE. Buffer enqueuing continues until the client calls
+     * Flush(). At this point all queued data (buffers) are sent over to the
+     * QTMS for processing and the enqueuing mode is turned OFF. To turn it
+     * ON again, the client has to call SetEnqueueMode with TRUE parameter.
+     *
+     * Has no effect in the PULL mode.
+     *
+     * @param  enable
+     *      Toggles buffer enqueuing ON and OFF.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetEnqueueMode(const gboolean enable);
+
+    /**
+     * PUSH MODE ONLY
+     *
+     * Return current buffer enqueuing mode setting.
+     * Has no effect in the PULL mode.
+     *
+     * @param  enable
+     *      Current enqueuing mode.
+     *
+     */
+    gint GetEnqueueMode(gboolean& enable);
+
+    /**
+     * PUSH MODE ONLY
+     *
+     * Push all queued buffers by ProcessBuffer to the server for processing.
+     * After calling this function, the enqueuing mode is turned OFF. To set
+     * it ON, the client has to call SetEnqueueMode again.
+     *
+     * Has no effect in the PULL mode.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Flush();
+
+    /**
+     * Return the source type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  QTMSSourceType&
+     *      The type of the source object. The supported source types are
+     *      as follows:
+     *          QTMS_SOURCE_CLIENT
+     *          QTMS_SOURCE_MODEM
+     *          QTMS_SOURCE_MIC
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSourceType& sourcetype);
+
+    Q_SIGNALS:
+    void FillBuffer(TMS::TMSBuffer& buffer);
+    void BufferProcessed(const TMS::TMSBuffer* buffer, gint reason);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSClientSource();
+
+protected:
+    TMS::TMSSource* iSource;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_CLIENT_SOURCE_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsdtmf.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_DTMF_H
+#define QTMS_DTMF_H
+
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSDTMF;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSDTMFclass
+ *
+ * This class provides DTMF playback capability to the QTMS clients. Each
+ * DTMF player session is associated either with an uplink or downlink stream.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSDTMF : public QObject
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSDTMF();
+
+    /**
+     * Starts DTMF playback. In the case of downlink, the tone will be played
+     * locally. In case of uplink, the network will play tones.
+     *
+     * Common for CS and VOIP (uplink and downlink)
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Start();
+
+    /**
+     * Stops DTMF playback.
+     * Common for CS and VOIP (Uplink and Downlink).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Stop();
+
+    /**
+     * Supply DTMF player with a string of tones to be played on local
+     * playback device or sent via the uplink.
+     *
+     * @param  string
+     *      String containing one or more DTMF digits.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetTone(GString* string);
+
+    /**
+     *  Allows a client to continue or cancel the sending of a DTMF string
+     *  when it was stopped by the use of ‘w’ char in the string.
+     *  The client will set sending param to true if it wishes to continue
+     *  the DTMF string sending and will set sending param to false if it
+     *  wishes to discard the rest of the DTMF string.
+     *  Reference: Multimode ETel API Design Document
+     *
+     *  For CS calltype
+     *
+     *  @param  sending
+     *      Boolean to continue sending DTMF string.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint ContinueDTMFStringSending(gboolean sending);
+
+    Q_SIGNALS:
+    void DTMFEvent(const QTMSDTMF& dtmf, QTMSSignalEvent event);
+
+protected:
+
+    /**
+     * Constructor
+     */
+    QTMSDTMF();
+
+protected:
+    TMS::TMSDTMF* iDtmf;
+    };
+
+} //namespace QTMS
+
+#endif //__QTMS_DTMF_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmseffect.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_EFFECT_H
+#define QTMS_EFFECT_H
+
+#include <qtms.h>
+#include <QObject>
+
+namespace QTMS {
+
+/**
+ * QTMSEffect class
+ *
+ * Base class for all effect object classes.
+ * This is an abstract class.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMSEffect
+    {
+    //Q_OBJECT
+public:
+    /**
+     * Return effect type.
+     *
+     * @param  effecttype
+     *      Type of the effect object.
+     *
+     * @return
+     *      The status of the operation.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype) = 0;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_EFFECT_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsfactory.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,458 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_FACTORY_H
+#define QTMS_FACTORY_H
+
+#include <qtms.h>
+#include <QObject>
+#include <QtCore/qglobal.h>
+#include "qtmswrapperexport.h"
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSCall;
+class QTMSFormat;
+class QTMSEffect;
+class QTMSBuffer;
+class QTMSSource;
+class QTMSSink;
+class QTMSFactoryImpl;
+class QTMSVer; // QTMS version definition
+class QTMSGlobalRouting;
+class QTMSDTMF;
+class QTMSRingTone;
+class QTMSInbandTone;
+
+/**
+ * QTMSFactory class
+ *
+ * This class serves as a factory crating all necessary QTMS components.
+ *
+ * Usage:
+ * <code>
+ * QTMSFactory* iFactory;
+ * QTMSCall* iCall;
+ * gint err;
+ * err = QTMSFactory::CreateFactory(iFactory);
+ * err = iFactory->CreateCall(QTMS_CALL_IP, iCall);
+ * ...
+ * err = iFactory->DeleteCall(iCall);
+ * delete iFactory;
+ * ...
+ * </code>
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSFactory : public QObject
+    {
+    Q_OBJECT
+public:
+    /**
+     * Returns pointer reference to created QTMS Factory object. The specified
+     * API version will allow using different QTMS API variants.
+     *
+     * @param  QTMSfactory
+     *      Created Factory object.
+     *
+     * @param  ver
+     *      API version which should be used to create QTMS components.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if factory is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if factory creation failed due to
+     *      insufficient of memory.
+     *      QTMS_RESULT_VERSION_NOT_SUPPORTED if requested API version is not
+     *      supported.
+     *
+     */
+    static gint CreateFactory(QTMSFactory*& tmsfactory, QTMSVer& ver);
+
+    /**
+     * Destructor
+     *
+     * Deletes the QTMS Factory.
+     *
+     */
+    virtual ~QTMSFactory();
+
+    /**
+     * Creates QTMS Call of the given type with context ID.
+     *
+     * @param  ctype
+     *      Call type to be created.
+     *      Supported call types:
+     *          QTMS_CALL_CS
+     *          QTMS_CALL_ECS
+     *          QTMS_CALL_IP
+     *
+     * @param  QTMScall
+     *      Created Call object.
+     *
+     * @param  ctxid
+     *      The Context ID to be assigned to the call. The default is
+     *      DEFAULT_CALL_CONTEXT.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if call is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if call creation failed due to
+     *      insufficient memory.
+     *      QTMS_RESULT_CALL_TYPE_NOT_SUPPORTED if calltype is not supported.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the context id is not valid.
+     *      QTMS_RESULT_FATAL_ERROR if there is any other error.
+     *
+     */
+    gint CreateCall(QTMSCallType ctype, QTMSCall*& QTMScall,
+            guint ctxid = DEFAULT_CALL_CONTEXT);
+
+    /**
+     * Deletes QTMS Call.
+     *
+     * @param  QTMSct
+     *      The call to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if call is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the call is not valid.
+     *
+     */
+    gint DeleteCall(QTMSCall*& qtmsct);
+
+    /**
+     * Is the given calltype supported by the QTMS API.
+     *
+     * @param  ctype
+     *      The call type to be validated.
+     *
+     * @param  flag
+     *      Indicates wheter the call type is supported or not.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if operation was successful.
+     *      QTMS_RESULT_FATAL_ERROR if operation failed.
+     *
+     */
+    gint IsCallTypeSupported(QTMSCallType ctype, gboolean& flag);
+
+    /**
+     * Returns supported codec format types.
+     *
+     * @param  strmtype
+     *      Stream type: Uplink or Downlink
+     *
+     * @param  fmtlist
+     *      Format vector in which the supported formats are stored
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if operation was successful.
+     *      QTMS_RESULT_FATAL_ERROR if operation failed.
+     *
+     */
+    gint GetSupportedFormats(const QTMSStreamType strmtype,
+            FormatVector& fmtlist);
+
+    /**
+     * Creates Format object of the given format type.
+     *
+     * @param  fmttype
+     *      Format type to be created.
+     *
+     * @param  QTMSfmt
+     *      Crated Format object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if format is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if format creation failed due to
+     *      insufficient of memory.
+     *      QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED if format type is not
+     *      supported.
+     *
+     */
+    gint CreateFormat(QTMSFormatType fmttype, QTMSFormat*& qtmsfmt);
+
+    /**
+     * Deletes Format object.
+     *
+     * @param  QTMSfmt
+     *      Format to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if format is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the format is not valid.
+     *
+     */
+    gint DeleteFormat(QTMSFormat*& qtmsfmt);
+
+    /**
+     * Creates Effect object of the given type.
+     *
+     * @param  QTMSeffecttype
+     *      Effect type to be created.
+     *
+     * @param  QTMSeffect
+     *      Created Effect object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if effect is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if effect creation failed due to
+     *      insufficient memory.
+     *      QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED if the effect type is not
+     *      supported.
+     *
+     */
+    gint CreateEffect(QTMSEffectType QTMSeffecttype,
+            QTMSEffect*& qtmseffect);
+
+    /**
+     * Deletes Effect object.
+     *
+     * @param  QTMSeffect
+     *      Effect object to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if effect is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the effect is not valid.
+     */
+    gint DeleteEffect(QTMSEffect*& qtmseffect);
+
+    /**
+     * Creates Buffer object of the given type and size.
+     * The memory is allocated on the heap.
+     *
+     * @param  buffertype
+     *      Buffer type to be created.
+     *
+     * @param  size
+     *      Size of the buffer to be created.
+     *
+     * @param  QTMSbuffer
+     *      Created buffer object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if buffer is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if buffer creation failed due to
+     *      insufficient memory.
+     *      QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED if the buffer type is not
+     *      supported.
+     *
+     */
+    gint CreateBuffer(QTMSBufferType buffertype, guint size,
+            QTMSBuffer*& qtmsbuffer);
+
+    /**
+     * Deletes the Buffer object.
+     *
+     * @param  QTMSbuffer
+     *      Buffer to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if buffer is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the buffer is not valid.
+     */
+    gint DeleteBuffer(QTMSBuffer*& qtmsbuffer);
+
+    /**
+     * Creates the Source object of the given type.
+     *
+     * @param  srctype
+     *      Source type to be created.
+     *
+     * @param  QTMSsrc
+     *      Crated source object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if source creation failed due to
+     *      lack of memory.
+     *      QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if the source type is not
+     *      supported.
+     *
+     */
+    gint CreateSource(QTMSSourceType srctype, QTMSSource*& qtmssrc);
+
+    /**
+     * Deletes the Source object.
+     *
+     * @param  QTMSsrc
+     *      Source to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the source is not valid.
+     *
+     */
+    gint DeleteSource(QTMSSource*& qtmssrc);
+
+    /**
+     * Creates the Sink object of the given QTMSSinkType.
+     *
+     * @param  sinktype
+     *      Sink type to be created.
+     *
+     * @param  QTMSsink
+     *      Created sink object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if sink creation failed due to
+     *      lack of memory.
+     *      QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if the sink type is not
+     *      supported.
+     *
+     */
+    gint CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink);
+
+    /**
+     * Deletes the Sink object.
+     *
+     * @param  QTMSsink
+     *      The sink to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the sink is not valid.
+     */
+    gint DeleteSink(QTMSSink*& qtmssink);
+
+    /**
+     * Creates QTMSGlobalRouting object.
+     *
+     * @param  globrouting
+     *      Created global routing object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if global routing object is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if global routing creation failed
+     *      due to lack of memory.
+     *      QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if global routing is not
+     *      supported.
+     *
+     */
+    gint CreateGlobalRouting(QTMSGlobalRouting*& globrouting);
+
+    /**
+     * Deletes QTMSGlobalRouting object.
+     *
+     * @param  globrouting
+     *      Global routing object to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if global routing object is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the global routing object is invalid.
+     */
+    gint DeleteGlobalRouting(QTMSGlobalRouting*& globrouting);
+
+    /**
+     * Create DTMF player object.
+     *
+     * @param  streamtype
+     *     Stream ID to be used to create the DTMF player.
+     *     QTMS_STREAM_UPLINK
+     *     QTMS_STREAM_DOWNLINK
+     *
+     * @param  dtmf
+     *      Created DTMF player.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if DTMF player creation failed due
+     *      to insufficient memory.
+     *      QTMS_RESULT_FATAL_ERROR if an error occured.
+     *      QTMS_REASON_EMERGENCY_CALL_ONGOING if emergency call is active.
+     *      QTMS_REASON_PERMISSION_DENIED if permission is denied.
+     *
+     */
+    gint CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& dtmf);
+
+    /**
+     * Delete DTMF player object.
+     *
+     * @param  dtmf
+     *      DTMF player to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the DTMF player is not valid.
+     *
+     */
+    gint DeleteDTMF(QTMSDTMF*& dtmf);
+
+    /**
+     * Creates QTMSRingTone player object  for audio ring tone.
+     *
+     * @param  rt
+     *      RingTone player object to be created.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS when object is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY when object creation failed due to
+     *      insufficient memory.
+     */
+    gint CreateRingTonePlayer(QTMSRingTone*& rt);
+
+    /**
+     * Deletes QTMSRingTone object.
+     *
+     * @param  rt
+     *      RingTone player object to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS when object is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if RingTone player object is invalid.
+     */
+    gint DeleteRingTonePlayer(QTMSRingTone*& rt);
+
+    /**
+     * Creates QTMSInbandTone player object.
+     *
+     * @param  inbandtone
+     *      InbandTone player object to be created.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS when object is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY when object creation failed due to
+     *      insufficient memory.
+     */
+    gint CreateInbandTonePlayer(QTMSInbandTone*& inbandtone);
+
+    /**
+     * Deletes QTMSInbandTone object.
+     *
+     * @param  inbandtone
+     *      InbandTone player object to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS when object is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if InbandTone player object is invalid.
+     */
+    gint DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone);
+
+private:
+    /**
+     * Constructor
+     */
+    QTMSFactory();
+
+private:
+    QTMSFactoryImpl* impl;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_FACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsformat.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_FORMAT_H
+#define QTMS_FORMAT_H
+
+#include <qtms.h>
+#include "qtmswrapperexport.h"
+
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSFormat class
+ *
+ * This is base class for codec format classes. Provides access methods to
+ * configure and query common codec format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * Usage:
+ * <code>
+ *  QTMSFactory* iFactory;
+ *  QTMSFormat* iFormat
+ *  gint err;
+ *  err = QTMSFactory::CreateFactory(iFactory);
+ *  err = iFactory->Create(QTMS_FORMAT_XXX,iFormat);
+ *  ...
+ * </code>
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSFormat
+    {
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSFormat();
+
+    /**
+     * Get supported bitrates. Returns list of supported bitrates for the
+     * selected encoder
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  bitrates
+     *      The typedef std::vector<guint> BitRateVector; list of codecs.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint GetSupportedBitRates(BitRateVector& bitrates);
+
+    /**
+     * Set bitrate.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  bitrate
+     *      Bitrate to be set for the encoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_ARGUMENT if requested bitrate is invalid.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetBitRate(const guint bitrate);
+
+    /**
+     * Get current encoder's bitrate.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  bitrate
+     *      Current bitrate.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint GetBitRate(guint& bitrate);
+
+    /**
+     * Return format type.
+     *
+     * @param  fmttype
+     *      Type of the format object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSFormatType& fmttype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSFormat();
+
+protected:
+    TMS::TMSFormat *iFormat;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg711format.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,205 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_G711_FORMAT_H
+#define QTMS_G711_FORMAT_H
+
+#include <qtms.h>
+#include <qtmsformat.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSG711Format class
+ *
+ * This class provides access methods to configure and query G.711 codec
+ * format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSG711Format : public QObject,
+                                               public QTMSFormat
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSG711Format();
+
+    /**
+     * Set G.711 codec mode.
+     *
+     * This method is allowable when encoding is not active; i.e. anytime
+     * before encoding is started or after it is stopped.
+     *
+     * Supported G.711 codec modes are:
+     *  QTMS_G711_CODEC_MODE_ALAW
+     *  QTMS_G711_CODEC_MODE_MULAW
+     *
+     * @param  mode
+     *      Sets selected G.711 encoding or decoding mode.
+
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      encoding or decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetMode(const QTMSG711CodecMode mode);
+
+    /**
+     * Return current G.711 codec mode.
+     *
+     * This method is allowable at all times, while actively encoding/decoding
+     * or not.
+     *
+     * Supported G.711 codec modes are:
+     *  QTMS_G711_CODEC_MODE_ALAW
+     *  QTMS_G711_CODEC_MODE_MULAW
+     *
+     * @param  mode
+     *      Returns current G.711 encoding or decoding mode.
+
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMode(QTMSG711CodecMode& mode);
+
+    /**
+     * Toggles on and off Comfort Noise Generator (CNG) for G.711 decoder.
+     * Not supported by the encoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  cng
+     *      Sets CNG feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetCNG(const gboolean cng);
+
+    /**
+     * Returns current CNG setting of the G.711 decoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  cng
+     *      Current CNG setting of the decoder.
+     *
+     * @return gint
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetCNG(gboolean& cng);
+
+    /**
+     * Toggles on and off Packet Loss Concealment (PLC) for G.711 decoder.
+     * Not supported by the encoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  plc
+     *      Sets PLC feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetPlc(const gboolean plc);
+
+    /**
+     * Returns current PLC setting of the G.711 decoder.
+     *
+     * This method is allowable at all times, while actively decoding or not.
+     *
+     * @param  plc
+     *      Current CNG setting of the decoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetPlc(gboolean& plc);
+
+    /**
+     * Toggles on and off Voice Activation Detection (VAD) for G.711 encoder.
+     * Not supported by the decoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Sets VAD feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetVADMode(const gboolean vad);
+
+    /**
+     * Returns current VAD setting of the G.711 encoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Current VAD setting of the encoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetVADMode(gboolean& vad);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSG711Format();
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_G711_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg729format.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_G729_FORMAT_H
+#define QTMS_G729_FORMAT_H
+
+#include <qtms.h>
+#include <qtmsformat.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSG729Format class
+ *
+ * This class provides access methods to configure and query G.729 codec
+ * format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSG729Format : public QObject,
+                                               public QTMSFormat
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSG729Format();
+
+    /**
+     * Toggles on and off Voice Activation Detection (VAD) for G.729 encoder.
+     * Not supported by the decoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Sets VAD feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *      QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does
+     *      not exist.
+     *
+     */
+    gint SetVADMode(const gboolean vad);
+
+    /**
+     * Returns current VAD setting of the G.729 encoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Current VAD setting of the encoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetVADMode(gboolean& vad);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSG729Format();
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_G729_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsgaineffect.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GAIN_EFFECT_H
+#define QTMS_GAIN_EFFECT_H
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSEffect;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSGainEffect class
+ *
+ * This class provides microphone gain level control in the stream scope.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSGainEffect : public QObject,
+                                               public QTMSEffect
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSGainEffect();
+
+    /**
+     * Set mic gain level. The gain level should not be higher than
+     * the value returned by GetMaxLevel().
+     *
+     * @param  level
+     *      Gain level to be set.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetLevel(const guint level);
+
+    /**
+     * Return mic gain level.
+     *
+     * @param  level
+     *      Current mic gain level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetLevel(guint& level);
+
+    /**
+     * Return max microphone gain level supported by the device.
+     *
+     * @param  level
+     *      Max gain level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMaxLevel(guint& level);
+
+    /**
+     * Returns type of the effect.
+     *
+     * This function can be called at any time.
+     *
+     * @param  effecttype
+     *      Variable that contains the effect type on return.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype);
+
+    Q_SIGNALS:
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSGainEffect();
+
+protected:
+    TMS::TMSEffect *iEffect;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_GAIN_EFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalgaineffect.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_GAIN_EFFECT_H
+#define QTMS_GLOBAL_GAIN_EFFECT_H
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include "qtmswrapperexport.h"
+#include <QObject>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSEffect;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSGlobalGainEffect class
+ *
+ * This class provides microphone gain level control in the global QTMS scope.
+ * Mic gain level changes done by any client are adjusted accross all calls
+ * serviced by the QTMS server.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalGainEffect : public QObject,
+                                                     public QTMSEffect
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSGlobalGainEffect();
+
+    /**
+     * Set global microphone gain level. The global gain level should be
+     * between 0 and the max value returned by GetMaxLevel().
+     *
+     * @param  level
+     *      Gain level to be set.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetLevel(const guint level);
+
+    /**
+     * Return current global microphone gain level.
+     *
+     * @param  level
+     *      Current mic gain level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetLevel(guint& level);
+
+    /**
+     * Return max microphone gain level supported by the device.
+     *
+     * @param  level
+     *      Max mic gain level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMaxLevel(guint& level);
+
+    /**
+     * Return effect type.
+     *
+     * @param  effecttype
+     *      Type of the effect object (QTMS_EFFECT_GLOBAL_GAIN).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype);
+
+    Q_SIGNALS:
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSGlobalGainEffect();
+
+protected:
+    TMS::TMSEffect* iEffect;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_GLOBAL_GAIN_EFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalrouting.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_ROUTING_H
+#define QTMS_GLOBAL_ROUTING_H
+
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSGlobalRouting;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSGlobalRouting class
+ *
+ * This class provides audio routing control in the global QTMS scope.
+ * Audio routing changes done by any client are adjusted accross all calls
+ * serviced by the QTMS server.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalRouting : public QObject
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSGlobalRouting();
+
+    /**
+     * Set global output device audio should be routed to.
+     *
+     * Settings are call-type dependent.
+     *
+     * Common:
+     *  QTMS_AUDIO_OUTPUT_NONE
+     * VoIP call type:
+     *  QTMS_AUDIO_OUTPUT_PUBLIC
+     *  QTMS_AUDIO_OUTPUT_PRIVATE
+     * CS call type:
+     *  QTMS_AUDIO_OUTPUT_HANDSET
+     *  QTMS_AUDIO_OUTPUT_LOUDSPEAKER
+     *  QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY
+     *  QTMS_AUDIO_OUTPUT_ACCESSORY
+     *  QTMS_AUDIO_OUTPUT_ETTY
+     *
+     * @param  output
+     *      Sets call-specific audio output device.
+     *
+     * @return
+     *      QTMS_RESULT_INVALID_ARGUMENT if set to QTMS_AUDIO_OUTPUT_NONE.
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetOutput(const QTMSAudioOutput output);
+
+    /**
+     * Return current global audio output device settings.
+     *
+     * Settings are call-type dependent.
+     * See SetOutput() (above)
+     *
+     * @param  output
+     *      Current audio output device.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetOutput(QTMSAudioOutput& output);
+
+    /**
+     * Return previous audio output device.
+     *
+     * Settings are call-type dependent.
+     * See SetOutput() (above)
+     *
+     * @param  output
+     *      Previous audio output device.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetPreviousOutput(QTMSAudioOutput& output);
+
+    /**
+     * Return list of supported audio output devices.
+     *
+     * Settings are call-type dependent.
+     * See SetOutput() (above)
+     *
+     * @param  outputs
+     *      The typedef std::vector<guint> OutputVector; list of supported
+     *      audio output devices (QTMSAudioOutput-type).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetAvailableOutputs(OutputVector& outputs);
+
+    Q_SIGNALS:
+    void GlobalRoutingEvent(const QTMSGlobalRouting& routing,
+            QTMSSignalEvent event, QTMSAudioOutput output);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSGlobalRouting();
+
+protected:
+    TMS::TMSGlobalRouting* iRouting;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_GLOBAL_ROUTING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalvoleffect.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_VOL_EFFECT_H
+#define QTMS_GLOBAL_VOL_EFFECT_H
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include <QObject>
+#include <qglobal.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSEffect;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSGlobalVolEffect class
+ *
+ * This class provides volume level control in the global QTMS scope. Volume
+ * level changes done by any client are adjusted accross all calls serviced
+ * by the QTMS server.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalVolEffect : public QObject,
+                                                    public QTMSEffect
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSGlobalVolEffect();
+
+    /**
+     * Set global audio volume level. The volume level should be between 0
+     * and the max value returned by GetMaxLevel().
+     *
+     * @param  level
+     *      the volume level to be set.
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     */
+    gint SetLevel(const guint level);
+
+    /**
+     * Return current global audio volume level.
+     *
+     * @param  level
+     *      Volume level to be set.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetLevel(guint& level);
+
+    /**
+     * Return max volume level supported by the device.
+     *
+     * @param  level
+     *      Max volume level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMaxLevel(guint& level);
+
+    /**
+     * Return effect type.
+     *
+     * @param  effecttype
+     *      Type of the effect object (QTMS_EFFECT_GLOBAL_VOL).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype);
+
+    Q_SIGNALS:
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSGlobalVolEffect();
+
+protected:
+    TMS::TMSEffect* iEffect;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_GLOBAL_VOL_EFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsilbcformat.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_ILBC_FORMAT_H
+#define QTMS_ILBC_FORMAT_H
+
+#include <qtms.h>
+#include <qtmsformat.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSILBCFormat class
+ *
+ * This class provides access methods to configure and query iLBC codec
+ * format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSILBCFormat : public QObject,
+                                               public QTMSFormat
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSILBCFormat();
+
+    /**
+     * Set iLBC codec mode.
+     *
+     * This method is allowable when encoding is not active; i.e. anytime
+     * before encoding is started or after it is stopped.
+     *
+     * Supported iLBC codec modes are:
+     *  QTMS_ILBC_CODEC_MODE_20MILLI_SEC_FRAME
+     *  QTMS_ILBC_CODEC_MODE_30MILLI_SEC_FRAME
+     *
+     * @param  mode
+     *      Sets selected iLBC encoding or decoding mode.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      encoding or decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *      QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does
+     *      not exist.
+     *
+     */
+    gint SetMode(const QTMSILBCCodecMode mode);
+
+    /**
+     * Return current iLBC codec mode.
+     *
+     * This method is allowable at all times, while actively encoding/decoding
+     * or not.
+     *
+     * Supported iLBC codec modes are:
+     *  QTMS_ILBC_CODEC_MODE_20MILLI_SEC_FRAME
+     *  QTMS_ILBC_CODEC_MODE_30MILLI_SEC_FRAME
+     *
+     * @param  mode
+     *      Returns current iLBC encoding or decoding mode.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMode(QTMSILBCCodecMode& mode);
+
+    /**
+     * Toggles on and off Comfort Noise Generator (CNG) for iLBC decoder.
+     * Not supported by the encoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  cng
+     *      Sets CNG feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *      QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does
+     *      not exist.
+     *
+     */
+    gint SetCNG(const gboolean cng);
+
+    /**
+     * Returns current CNG setting of the iLBC decoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  cng
+     *      Current CNG setting of the decoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetCNG(gboolean& cng);
+
+    /**
+     * Toggles on and off Voice Activation Detection (VAD) for iLBC encoder.
+     * Not supported by the decoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Sets VAD feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *      QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does
+     *      not exist.
+     *
+     */
+    gint SetVADMode(const gboolean vad);
+
+    /**
+     * Returns current VAD setting of the iLBC encoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Current VAD setting of the encoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetVADMode(gboolean& vad);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSILBCFormat();
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_ILBC_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsinbandtone.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_INBAND_TONE_H
+#define QTMS_INBAND_TONE_H
+
+#include <glib.h>
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSInbandTone;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSInbandTone class
+ *
+ * This class provides Inband tone playback capability to the QTMS clients.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSInbandTone : public QObject
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSInbandTone();
+
+    /**
+     * Starts the inband tone playback. The inband volume will correspond to
+     * the current downlink volume level.
+     *
+     * For CS calltype.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Start(QTMSInbandToneType inbandtonetype);
+
+    /**
+     * Stops the inband tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Stop();
+
+    Q_SIGNALS:
+    void InbandToneEvent(const QTMSInbandTone& inbandtone,
+            QTMSSignalEvent event);
+
+protected:
+
+    /**
+     * Constructor
+     */
+    QTMSInbandTone();
+
+protected:
+    TMS::TMSInbandTone* iInbandTone;
+    };
+
+} //namespace QTMS
+
+#endif //__QTMS_INBAND_TONE_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmicsource.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MIC_SOURCE_H
+#define QTMS_MIC_SOURCE_H
+
+#include <qtms.h>
+#include <qtmssource.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSource;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSMicSource class
+ *
+ * This class instantiates QTMS mic source object.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSMicSource : public QObject,
+                                              public QTMSSource
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSMicSource();
+
+    /**
+     * Return source type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sourcetype
+     *      The type of sink object (QTMS_SOURCE_MIC).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSourceType& sourcetype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSMicSource();
+
+protected:
+    TMS::TMSSource *iSource;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_MIC_SOURCE_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsink.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MODEM_SINK_H
+#define QTMS_MODEM_SINK_H
+
+#include <qtms.h>
+#include <qtmssink.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSink;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSModemSink class
+ *
+ * This class instantiates QTMS modem sink object.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSModemSink : public QObject,
+                                              public QTMSSink
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSModemSink();
+
+    /**
+     * Return sink type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sinktype
+     *      The type of sink object (QTMS_SINK_MODEM).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSinkType& sinktype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSModemSink();
+
+protected:
+    TMS::TMSSink *iSink;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_MODEM_SINK_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsource.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MODEM_SOURCE_H
+#define QTMS_MODEM_SOURCE_H
+
+#include <qtms.h>
+#include <qtmssource.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSource;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSModemSource class
+ *
+ * This class instantiates QTMS mode source object.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSModemSource : public QObject,
+                                                public QTMSSource
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSModemSource();
+
+    /**
+     * Return source type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sourcetype
+     *      The type of sink object (QTMS_SOURCE_MODEM).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSourceType& sourcetype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSModemSource();
+
+protected:
+    TMS::TMSSource *iSource;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_MODEM_SOURCE_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmspcmformat.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_PCM_FORMAT_H
+#define QTMS_PCM_FORMAT_H
+
+#include <qtms.h>
+#include <qtmsformat.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSPCMFormat class
+ *
+ * This class provides access methods to configure and query PCM-16 codec
+ * format settings.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSPCMFormat : public QObject,
+                                              public QTMSFormat
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSPCMFormat();
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSPCMFormat();
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_PCM_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsringtone.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_RINGTONE_H
+#define QTMS_RINGTONE_H
+
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSRingTone;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSRingTone class
+ *
+ * This class provides ring tone playback capability to the QTMS clients.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSRingTone : public QObject
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSRingTone();
+
+    /**
+     * Init ring tone player to play supplied content based on its type.
+     *
+     * @param  type
+     *      Type of the content descriptor. Allowed types:
+     *          - QTMS_RINGTONE_DEFAULT - use RT from current Profile
+     *          - QTMS_RINGTONE_FILE  - A/V File
+     *          - QTMS_RINGTONE_SEQUENCE - RNG sequence in the descriptor format
+     *          - QTMS_RINGTONE_BEEP_ONCE - play a beep
+     *          - QTMS_RINGTONE_SILENT - play silent tone
+     *          - QTMS_RINGTONE_UNSECURE_VOIP - play tone for uncecure VoIP call
+     *
+     * @param  str
+     *      Content descriptor to play. String containing one of the following:
+     *          - File with folder name
+     *          - Nokia ring tone sequence in a descriptor format
+     *          - NULL - Will use current Profile.
+     *
+     * @param  tts
+     *      Text to be played. When added it will be played along with the
+     *      tone. TTS can only be played with QTMS_RINGTONE_DEFAULT and
+     *      TMS_RINGTONE_FILE. Parameter will be ignored for all other types.
+     *          - NULL - Will use current Profile TTS setting - caller's name
+     *            will be played from the phone book (if available).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Init(const QTMSRingToneType type = QTMS_RINGTONE_DEFAULT,
+            GString* str = NULL, GString* tts = NULL);
+
+    /**
+     * Deinit ring tone player.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Deinit();
+
+    /**
+     * Start ring tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Play();
+
+    /**
+     * Stop ring tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Stop();
+
+    /**
+     * Pause ring tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Pause();
+
+    /**
+     * Mute ring tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Mute();
+
+    Q_SIGNALS:
+    void RingtoneEvent(const QTMSRingTone& rt, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSRingTone();
+
+protected:
+    TMS::TMSRingTone *iRingTone;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_RINGTONE_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssink.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SINK_H
+#define QTMS_SINK_H
+
+#include <qtms.h>
+
+namespace QTMS {
+
+/**
+ * QTMSSink class
+ *
+ * Base class for QTMS data sink type objects.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMSSink
+    {
+public:
+    /**
+     * Returns type of the concrete data sink object implementation.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sinktype&
+     *      Contains data sink type on return.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink type is returned successfully.
+     *
+     */
+    virtual gint GetType(QTMSSinkType& sinktype) = 0;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_SINK_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssource.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SOURCE_H
+#define QTMS_SOURCE_H
+
+#include <qtms.h>
+
+namespace QTMS {
+
+/**
+ * QTMSSource class
+ *
+ * Base class for QTMS data source type objects.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMSSource
+    {
+public:
+    /**
+     * Returns type of the concrete data source object implementation.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sourcetype
+     *      Contains data source type on return.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source type is returned successfully.
+     *
+     */
+    virtual gint GetType(QTMSSourceType& sourcetype) = 0;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_SOURCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsspeakersink.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SPEAKER_SINK_H
+#define QTMS_SPEAKER_SINK_H
+
+#include <qtms.h>
+#include <qtmssink.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSink;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSSpeakerSink class
+ *
+ * This class instantiates QTMS speaker sink object.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSSpeakerSink : public QObject,
+                                                public QTMSSink
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSSpeakerSink();
+
+    /**
+     * Return sink type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sinktype
+     *      The type of sink object (QTMS_SINK_SPEAKER).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSinkType& sinktype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSSpeakerSink();
+
+protected:
+    TMS::TMSSink *iSink;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_SPEAKER_SINK_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsstream.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,496 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_STREAM_H
+#define QTMS_STREAM_H
+
+// Include files
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSStream;
+}
+
+namespace QTMS {
+
+// Forward declarations
+class QTMSSource;
+class QTMSSink;
+class QTMSEffect;
+class QTMSFormat;
+class QTMSBuffer;
+
+/**
+ * QTMSStream class
+ *
+ * QTMSStream class represents either uplink or downlink stream associated with
+ * a QTMSCall.
+ *
+ * This class provides means for setting up and controlling telephony
+ * multimedia streams associated with a Circuit Switching (CS) call or Packet
+ * Switching (PS) such as IP call.
+ *
+ * QTMSStream instances are created by QTMSCall instance. Multiple QTMSStream
+ * instances (uplink and/or downlink streams) can be created. The QTMS engine
+ * does not limit the number of streams created per QTMSCall object. However,
+ * the combination of device policy and device run-time resources (both
+ * software and hardware) may limit this use-case.
+ *
+ * QTMSCall is a container which owns all its QTMSStream instances. The client
+ * has an option of creating and deleting individual streams. However, when a
+ * QTMSCall instance is deleted, all the streams associated with it are
+ * automatically deleted as well.
+ *
+ * QTMS ver 1.0.0.0:
+ *  (1) An initialized stream will have one source, zero or one format,
+ *  zero or more effects, and one or more sinks.
+ *
+ *  (2) In the initial version of the QTMS implementation, the CS uplink and
+ *  downlink streams will not control or communicate with the cellular modem.
+ *  Also, the PS (IP) uplink and downlink streams will not handle network
+ *  protocol. It is assumed that the QTMS client will handle this functionality.
+ *
+ * States:
+ *  (1) QTMS_STREAM_UNINITIALIZED (initial state): The stream is alive but has
+ *  not allocated all the resources it needs to function.
+ *
+ *  (2) QTMS_STREAM_INITIALIZED: The stream has all the information required to
+ *  acquire the media resources. Stream in this state will have most of the
+ *  resources allocated, except the critical system resources, such as policy
+ *  and/or hardware resources.
+ *
+ *  (3) QTMS_STREAM_PAUSED: The stream has all the resources allocated, which may
+ *  include critical system resources such as policy and/or hardware resources.
+ *
+ *  (4) QTMS_STREAM_STARTED: The stream has all the resources allocated,
+ *  including critical system resources such as policy and/or hardware resources
+ *  and is active.
+ *
+ * Usage:
+ * <code>
+ * QTMSFactory *iFactory;
+ * QTMSCall *iCall;
+ * QTMSStream *iUplink;
+ * QTMSStream *iDownlink;
+ * gint err;
+ *
+ * err = QTMSFactory::CreateFactory(iFactory);
+ * err = iFactory->CreateCall(QTMS_CALL_IP, iCall);
+ * err = iCall->CreateStream(QTMS_STREAM_UPLINK, iUplink);
+ * err = iCall->CreateStream(QTMS_STREAM_DOWNLINK, iDownlink);
+ * // Configure CS uplink stream
+ * iUplinkStream->AddObserver(*this);
+ * iUplinkStream->AddSource(iMicSource);
+ * iUplinkStream->AddSink(iModemSink);
+ * iUplinkStream->AddEffect(iGainEffect); // To control mic gain
+ * iUplinkStream->Init();
+ * // Wait for state change callback
+ * iUplinkStream->Play();
+ * // Wait for state change callback
+ * ...
+ * // call terminated on the cell modem side, now signal multimedia system
+ * iUplinkStream->Stop();
+ * ...
+ *  err = iCall->DeleteStream(iDownlink);
+ *  err = iCall->DeleteStream(iUplink);
+ *  err = iFactory->DeleteCall(iCall);
+ * delete iFactory;
+ *
+ * </code>
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+
+class QTMS_WRAPPER_DLL_EXPORT QTMSStream : public QObject
+    {
+    Q_OBJECT
+public:
+
+    /**
+     * Destructor
+     */
+    virtual ~QTMSStream();
+
+    /**
+     * Add source for this stream.
+     *
+     * This function can be called only when stream is in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After source is added to the stream successfully, ownership of the source
+     * is vested in this stream. If the client wants to reuse the source, it
+     * should call RemoveSource() to re-claim QTMSSource ownership.
+     *
+     * @param  source
+     *      Source object to be added to the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source is added successfully to the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if source is a NULL.
+     *      QTMS_RESULT_ALREADY_EXIST if source has already been added to the
+     *      stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint AddSource(QTMSSource* source);
+
+    /**
+     * Remove source from this stream.
+     *
+     * This function can be called only when stream is in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After source is removed from the stream successfully, ownership of
+     * source is re-claimed by the client.
+     *
+     * @param  source
+     *      The source to remove.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source is removed successfully from the
+     *      stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if source is a NULL.
+     *      QTMS_RESULT_DOES_NOT_EXIST if trying to remove the source that has
+     *      not been added to stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint RemoveSource(QTMSSource* source);
+
+    /**
+     * Add sink to the stream.
+     *
+     * Multiple sinks of different types can be added to a stream.
+     *
+     * This function can be called only when stream is in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After sink is added to the stream successfully, ownership of the sink is
+     * vested in the stream. If the client wants to reuse sink, it should call
+     * RemoveSink() to re-claim QTMSSink ownership.
+     *
+     * @param  sink
+     *      Data sink to be added to the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink is added successfully to the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if sink is a NULL.
+     *      QTMS_RESULT_ALREADY_EXIST if sink type is already added to the
+     *      stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint AddSink(QTMSSink* sink);
+
+    /**
+     * Remove sink from the stream.
+     *
+     * This function can be called only when stream is in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After sink is removed from the stream successfully, ownership of the
+     * sink is re-claimed by the client.
+     *
+     * @param  sink
+     *      Sink to removed from the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink is removed successfully from the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if sink is a NULL.
+     *      QTMS_RESULT_DOES_NOT_EXIST if trying to remove sink that has not
+     *      been added to the stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint RemoveSink(QTMSSink* sink);
+
+    /**
+     * Set data format for the stream.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After format is added to the stream successfully, ownership of the
+     * format is vested in this stream. If the client wants to reuse format,
+     * it should call ResetFormat() to re-claim QTMSFormat ownership.
+     *
+     * Note: In QTMS Ver 1.0.0.0, setting data format for CS call is not
+     * required.
+     *
+     * @param  format
+     *      Data format to be set on the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if format is set successfully on the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if format is a NULL.
+     *      QTMS_RESULT_ALREADY_EXIST if format is already set on the stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint SetFormat(QTMSFormat* format);
+
+    /**
+     * Remove data format from the stream.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After format is removed from the stream successfully, ownership of
+     * the format object is re-claimed by the client.
+     *
+     * @param  format
+     *      Data format to be removed from the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if format is removed successfully from the
+     *      stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if format is a NULL.
+     *      QTMS_RESULT_DOES_NOT_EXIST if format is not currently set on the
+     *      stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint ResetFormat(QTMSFormat* format);
+
+    /**
+     * Add an effect to the stream.
+     *
+     * Multiple effect objects of different types can be added to the stream.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After effect is added to the stream successfully, ownership of the
+     * effect is vested in the stream. If the client wants to reuse the effect,
+     * it shall call RemoveEffect() to re-claim QTMSEffect ownership.
+     *
+     * @param  effect
+     *      Stream effect to be added to the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if effect is added successfully to the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if effect is a NULL.
+     *      QTMS_RESULT_ALREADY_EXIST if effect type is already added to the
+     *      stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint AddEffect(QTMSEffect* effect);
+
+    /**
+     * Remove effect from the stream.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After effect is removed from the stream successfully, ownership of the
+     * effect is re-claimed by the client.
+     *
+     * @param  effect
+     *      Stream effect to be removed from the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if effect is removed successfully from the
+     *      stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if effect is a NULL.
+     *      QTMS_RESULT_DOES_NOT_EXIST if trying to remove an effect that has
+     *      not been added to the stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint RemoveEffect(QTMSEffect* effect);
+
+    /**
+     * Get current state of the stream.
+     *
+     * This function can be called at any time.
+     *
+     * Possible states are:
+     *  QTMS_STREAM_UNINITIALIZED,
+     *  QTMS_STREAM_INITIALIZED,
+     *  QTMS_STREAM_PAUSED,
+     *  QTMS_STREAM_STARTED.
+
+     * @return
+     *      Stream's current state.
+     *
+     */
+    gint GetState();
+
+    /**
+     * Get stream type.
+     *
+     * This function can be called at any time.
+     *
+     * The possible types are:
+     *  QTMS_STREAM_UPLINK
+     *  QTMS_STREAM_DOWNLINK
+     *
+     * @return
+     *      Stream type indicating whether it is an uplink or downlink.
+     *
+     */
+    gint GetStreamId();
+
+    /**
+     * Get stream ID.
+     *
+     * This function can be called at any time.
+     *
+     * @return
+     *      Unique ID of the stream.
+     *
+     */
+    gint GetStreamType();
+
+    /**
+     * Trigger stream to transition to the initialized state.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * If Init() is called when stream is already in initialized state, the
+     * request will be ignored and the function will return QTMS_RESULT_SUCCESS.
+     *
+     * Upon stream's successful transition to initialized state, the stream will
+     * be in the QTMS_STREAM_INITIALIZED state.
+     *
+     * QUESTION??? Should we do the initial checking here??? (for source,
+     * sink and other settings)
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if stream transitioned to the initialized state.
+     *      QTMS_RESULT_INVALID_STATE if stream has not transitioned to the
+     *      QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint Init();
+
+    /**
+     * Trigger stream to transition to the paused state.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED or QTMS_STREAM_STARTED state.
+     *
+     * If Pause() is called when stream is already in paused state, the
+     * request will be ignored and the function will return QTMS_RESULT_SUCCESS.
+     *
+     * Upon stream's successful transition to the paused state, the stream will
+     * be in the QTMS_STREAM_PAUSED state.
+     *
+     * Note: In QTMS Ver 1.0.0.0, pausing stream for CS call is not supported.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if stream successfully transitioned to the paused
+     *      state.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_INITIALIZED or QTMS_STREAM_STARTED state.
+     *
+     */
+    gint Pause();
+
+    /**
+     * Trigger stream to transition to the started state.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_INITIALIZED or QTMS_STREAM_PAUSED state.
+     *
+     * If Start() is called when stream is already in the started state, the
+     * request will be ignored and the function will return QTMS_RESULT_SUCCESS.
+     *
+     * If Start() is called when stream is already in the initialized state, the
+     * stream will implicitly pause, but the observer will only receive one
+     * state change callback.
+     *
+     * Upon stream's successful transition to the started state, the stream will
+     * be in the QTMS_STREAM_STARTED state.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if stream successfully transitioned to the paused
+     *      state.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_INITIALIZED or QTMS_STREAM_PAUSED state.
+     *
+     */
+    gint Start();
+
+    /**
+     * Trigger stream to transition to the initialized state.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_STARTED or QTMS_STREAM_PAUSED state.
+     *
+     * If Stop() is called when stream is already in the stopped state, the
+     * request will be ignored and the function will return QTMS_RESULT_SUCCESS.
+     *
+     * Upon stream's successful transition to the started state, the stream will
+     * be in the QTMS_STREAM_INITIALIZED state.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if stream successfully transitioned to the paused
+     *      state.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_STARTED or QTMS_STREAM_PAUSED state.
+     *
+     */
+    gint Stop();
+
+    /**
+     * Trigger stream to transition to un-initialized state.
+     *
+     * This function can be called only when stream is NOT in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * If Deinit() is called when stream is already in un-initialized state, the
+     * request will be ignored.
+     *
+     * Upon stream's successful transition to the un-initialized state, the
+     * stream will be in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    void Deinit();
+
+    Q_SIGNALS:
+    void TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSStream();
+
+protected:
+    TMS::TMSStream *iStream;
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_STREAM_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsvolumeeffect.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_VOLUME_EFFECT_H
+#define QTMS_VOLUME_EFFECT_H
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSEffect;
+}
+
+namespace QTMS {
+
+/**
+ * QTMSVolumeEffect class
+ *
+ * This class provides volume level control in the stream scope.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSVolumeEffect : public QObject,
+                                                 public QTMSEffect
+    {
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSVolumeEffect();
+
+    /**
+     * Set audio volume level. The volume level should not be higher than
+     * the value returned by GetMaxLevel().
+     *
+     * @param  level
+     *      Volume level to be set.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetLevel(const guint level);
+
+    /**
+     * Return current audio volume level settings.
+     *
+     * @param  level
+     *      Volume level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetLevel(guint& level);
+
+    /**
+     * Return max volume level supported by the device.
+     *
+     * @param  level
+     *      Max volume level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMaxLevel(guint& level);
+
+    /**
+     * Returns type of the effect.
+     *
+     * This function can be called at any time.
+     *
+     * @param  effecttype
+     *      Variable that contains the effect type on return.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype);
+
+Q_SIGNALS:
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSVolumeEffect();
+
+protected:
+    TMS::TMSEffect *iEffect;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_VOLUME_EFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmswrapperexport.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010 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 QTMS_WRAPPER_EXPORT_H_
+#define QTMS_WRAPPER_EXPORT_H_
+
+// System includes
+#include <qglobal.h>
+
+#ifdef BUILD_TMS_WRAPPER_DLL
+#define QTMS_WRAPPER_DLL_EXPORT Q_DECL_EXPORT
+#else
+#define QTMS_WRAPPER_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // QTMS_WRAPPER_EXPORT_H_
--- a/mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp	Mon May 03 12:58:40 2010 +0300
+++ b/mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp	Fri May 14 16:21:14 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 4 %
+// Version : %version: 5 %
 
 
 #include <platform_paths.hrh>
--- a/mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h	Mon May 03 12:58:40 2010 +0300
+++ b/mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h	Fri May 14 16:21:14 2010 +0300
@@ -79,6 +79,14 @@
     *  @param aData some data
     */
     IMPORT_C void NotifyL(TMPXCollectionBroadCastMsg aMsg, TInt aData);
+    
+    
+    /**
+    *  Broadcast a command to all plug-ins
+    *  @param aCmd command to send
+    *  @param aData some data
+    */
+    void Command(TMPXCollectionCommand aCmd, TInt aData);
 
     /**
     * Retrieves the set of supported file types in the collection server
--- a/mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp	Fri May 14 16:21:14 2010 +0300
@@ -619,6 +619,13 @@
             iEngine.PluginPop();
             break;
             }
+        case EMcCloseCollection:
+            {
+            // Forward to all plug-ins; argument is drive number
+            iEngine.Command ( aCmd, aData );
+            break;
+            }
+
         default:
             {
             User::Leave(KErrNotSupported);
--- a/mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp	Fri May 14 16:21:14 2010 +0300
@@ -194,6 +194,9 @@
     TInt command = KErrNotSupported;
     TInt data = 0;
     TBool clearCache ( EFalse );
+    TBool notify( ETrue );
+    TInt count = iContexts.Count();
+    CMPXCollectionClientContext* context( NULL );
     switch( aMsg )
         {
         case EMcMsgFormatStart:
@@ -207,8 +210,14 @@
             clearCache = ETrue;
             break;
             }
+        case EMcMsgDiskInserted:        	
+            for( TInt i=0; i<count; ++i )
+                {
+                context = iContexts[i];
+                context->NotifyL( aMsg, aData );
+                }
+            notify = EFalse;
         case EMcMsgFormatEnd:
-        case EMcMsgDiskInserted:
         case EMcMsgUSBMassStorageEnd:
             {
             command = EMcReOpenCollection;
@@ -253,12 +262,7 @@
         }
     if( command != KErrNotSupported )
         {
-        TArray<CMPXCollectionPlugin*> plugins = iPluginHandler->LoadedPlugins();
-        for( TInt i=0; i<plugins.Count(); ++i )
-            {
-            CMPXCollectionPlugin* plugin = plugins[i];
-            TRAP_IGNORE(plugin->CommandL( (TMPXCollectionCommand)command, data));
-            }
+        Command( (TMPXCollectionCommand)command, data );
         }
 
     if( clearCache )
@@ -286,12 +290,22 @@
         rfs.Close();
     	}
     
-    TInt count = iContexts.Count();
-    for( TInt i=0; i<count; ++i )
+    if ( notify )
+    	{
+		for( TInt i=0; i<count; ++i )
+			{
+			context = iContexts[i];
+			context->NotifyL( aMsg, aData );
+			}
+    	}
+    }
+void CMPXCollectionEngine::Command( TMPXCollectionCommand aCmd, TInt aData )
+    {
+    TArray<CMPXCollectionPlugin*> plugins = iPluginHandler->LoadedPlugins();
+    for( TInt i=0; i<plugins.Count(); ++i )
         {
-        CMPXCollectionClientContext* context;
-        context = iContexts[i];
-        context->NotifyL( aMsg, aData );
+        CMPXCollectionPlugin* plugin = plugins[i];
+        TRAP_IGNORE(plugin->CommandL( aCmd, aData));
         }
     }
 
--- a/mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp	Fri May 14 16:21:14 2010 +0300
@@ -570,14 +570,14 @@
 //
 void CMPXCollectionSession::CancelRequests()
     {
+    if (iContext)
+        {
+        iContext->CancelRequest(this);
+        }
     if (!iMessage.IsNull())
         {
         iMessage.Complete(KErrCancel);
         }
-    if (iContext)
-        {
-        iContext->CancelRequest(this);
-        }
     }
 
 // ----------------------------------------------------------------------------
--- a/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp	Fri May 14 16:21:14 2010 +0300
@@ -1478,6 +1478,23 @@
             {
             iProperties[EPbPropertyPosition] = 0;
             }
+	
+	//check whether plugin is KMPXPlaybackPluginVersion2, if not, set saved position
+    CDesCArray* interfaces = iPluginHandler->SupportedInterfacesL( iPluginUid );
+    TBool version2InterfaceSupported = EFalse;
+    if ( interfaces->MdcaCount() )
+        {
+        TInt pos(0);            
+        version2InterfaceSupported = !interfaces->FindIsq( KMPXPlaybackPluginVersion2, pos );
+        }
+    delete interfaces;
+    
+    if ( !version2InterfaceSupported )
+        {
+        // Set position to restore saved position.
+        TRAP_IGNORE( // uPnP leaves if set position in stop state
+                PluginL()->SetL( EPbPropertyPosition, iProperties[EPbPropertyPosition] ));
+        }
 
     iAutoResumeHandler->HandleOpenFileComplete();
     
@@ -1678,14 +1695,6 @@
         iCallback->HandleProperty(aProperty,aValue,aError);
         iCallback = NULL;
         iTaskQueue->CompleteTask();
-        
-        // notify client the new position during the playback
-        if ((EPbPropertyPosition == aProperty) && (iProgressTimer->IsActive()))
-            {
-            TRAP_IGNORE(iClientList->SendMsgL(
-                    TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged,
-                                        EPbPropertyPosition,aValue)));            
-            }
         }
     MPX_DEBUG2("<--CMPXPlaybackEngine::HandleProperty 0x%08x", this);
     }
@@ -2628,7 +2637,7 @@
     MPX_DEBUG1("==>CMPXPlaybackEngine::DoStopL()");
     Suspend();
     if (iState == EPbStatePaused || iState == EPbStatePlaying ||
-        iState == EPbStateInitialising)
+        iState == EPbStateInitialising || iState == EPbStateBuffering)
         {
         if (aSavePlaybackInfo && (iState == EPbStatePaused || iState == EPbStatePlaying ))
             {
--- a/mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp	Mon May 03 12:58:40 2010 +0300
+++ b/mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp	Fri May 14 16:21:14 2010 +0300
@@ -196,8 +196,16 @@
             if (cl->ClientCount()==0)
                 {
                 MPX_DEBUG1("CMPXPlaybackServer::RemoveClient delete a player");
+                CMPXPlaybackEngine* enginePtr = p; 
                 delete p;
-                iPlayers.Remove(i);
+				//Due to callbacks in PlaybackServer we have to remove engine from the iPlayers array after deleting.
+                //enginePtr is a invalid pointer as p is already deleted
+    		    //Find the index of deleted engine using its address
+				TInt engineIndex = iPlayers.Find(enginePtr);
+                if ( engineIndex != KErrNotFound )
+                    {
+                    iPlayers.Remove(engineIndex);
+                    }
                 }
             break;
             }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/SIS/QTMS_udeb_STUB_SIS.bat	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,70 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  GStreamer SisStub
+rem
+
+@echo off
+echo ----------------------------
+echo Configuring for RnD SIS
+echo ----------------------------
+echo Start of configure time:
+time /t
+
+:CREATE_DIR
+echo.
+echo - create Sis folder (created only if needed)
+mkdir .\SIS
+
+:COPY_DLL
+echo.
+echo - Copy dlls [udeb]:
+copy %EPOCROOT%epoc32\release\armv5\udeb\qtmsapi.dll .
+
+
+
+if errorlevel == 1 goto END_ERROR
+
+:CALL_ELFTRAIN
+echo - Updating Version No [10.1] (calling elftran)
+call elftran.exe -version 10.1 qtmsapi.dll
+
+
+
+:MAKESIS
+makesis ..\SIS\qtms.pkg ..\SIS\qtms.sis
+signsis ..\SIS\qtms.sis ..\SIS\qtms.sisx rd.crt rd.key
+if errorlevel == 1 goto END_ERROR
+
+:DELETE_DLL
+echo.
+echo - remove the copied dlls from current folder
+del qtmsapi.dll
+
+
+
+goto END
+
+:END_ERROR
+echo.
+echo Sis creation failed.
+goto FINAL_END
+
+:END
+echo.
+echo Sis file created succesfully
+echo ============================
+
+:FINAL_END
+echo End of configure time is:
+time /t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/SIS/qtms.pkg	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,35 @@
+;
+; 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: Telephony Multimedia Services (TMS) - UDEB build
+;
+;File: tms.pkg
+
+;Languages
+&EN
+
+;Header
+#{"QTMS"},(0x10207CB2),1,0,0, TYPE=SA, RU
+
+;Series 60 v5.0
+[0x101F7961], 0,0,0, {"Series60ProductID"}
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Files To Copy...<src> <destination>
+"/epoc32/release/armv5/udeb/qtmsapi.dll"         -"!:/sys/bin/qtmsapi.dll"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/bwins/qtmsu.def	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,388 @@
+EXPORTS
+	?qt_metacast@QTMSSpeakerSink@QTMS@@UAEPAXPBD@Z @ 1 NONAME ; void * QTMS::QTMSSpeakerSink::qt_metacast(char const *)
+	?getStaticMetaObject@QTMSGainEffect@QTMS@@SAABUQMetaObject@@XZ @ 2 NONAME ; struct QMetaObject const & QTMS::QTMSGainEffect::getStaticMetaObject(void)
+	??0QTMSStream@QTMS@@IAE@XZ @ 3 NONAME ; QTMS::QTMSStream::QTMSStream(void)
+	??0QTMSAMRFormat@QTMS@@IAE@XZ @ 4 NONAME ; QTMS::QTMSAMRFormat::QTMSAMRFormat(void)
+	?tr@QTMSG729Format@QTMS@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString QTMS::QTMSG729Format::tr(char const *, char const *, int)
+	?tr@QTMSModemSource@QTMS@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString QTMS::QTMSModemSource::tr(char const *, char const *)
+	?CreateRingTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSRingTone@2@@Z @ 7 NONAME ; int QTMS::QTMSFactory::CreateRingTonePlayer(class QTMS::QTMSRingTone * &)
+	?qt_metacall@QTMSClientSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 8 NONAME ; int QTMS::QTMSClientSource::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString QTMS::QTMSVolumeEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QTMSG711Format@QTMS@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString QTMS::QTMSG711Format::trUtf8(char const *, char const *, int)
+	?Start@QTMSStream@QTMS@@QAEHXZ @ 11 NONAME ; int QTMS::QTMSStream::Start(void)
+	??_EQTMSGlobalRouting@QTMS@@UAE@I@Z @ 12 NONAME ; QTMS::QTMSGlobalRouting::~QTMSGlobalRouting(unsigned int)
+	?metaObject@QTMSGlobalRouting@QTMS@@UBEPBUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalRouting::metaObject(void) const
+	?SetPlc@QTMSG711Format@QTMS@@QAEHH@Z @ 14 NONAME ; int QTMS::QTMSG711Format::SetPlc(int)
+	?BufferProcessed@QTMSClientSource@QTMS@@IAEXPBVTMSBuffer@TMS@@H@Z @ 15 NONAME ; void QTMS::QTMSClientSource::BufferProcessed(class TMS::TMSBuffer const *, int)
+	?AddSink@QTMSStream@QTMS@@QAEHPAVQTMSSink@2@@Z @ 16 NONAME ; int QTMS::QTMSStream::AddSink(class QTMS::QTMSSink *)
+	?tr@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 17 NONAME ; class QString QTMS::QTMSPCMFormat::tr(char const *, char const *, int)
+	??_EQTMSG729Format@QTMS@@UAE@I@Z @ 18 NONAME ; QTMS::QTMSG729Format::~QTMSG729Format(unsigned int)
+	?qt_metacast@QTMSClientSink@QTMS@@UAEPAXPBD@Z @ 19 NONAME ; void * QTMS::QTMSClientSink::qt_metacast(char const *)
+	?tr@QTMSG729Format@QTMS@@SA?AVQString@@PBD0@Z @ 20 NONAME ; class QString QTMS::QTMSG729Format::tr(char const *, char const *)
+	??_EQTMSSpeakerSink@QTMS@@UAE@I@Z @ 21 NONAME ; QTMS::QTMSSpeakerSink::~QTMSSpeakerSink(unsigned int)
+	?getStaticMetaObject@QTMSInbandTone@QTMS@@SAABUQMetaObject@@XZ @ 22 NONAME ; struct QMetaObject const & QTMS::QTMSInbandTone::getStaticMetaObject(void)
+	??0QTMSGainEffect@QTMS@@IAE@XZ @ 23 NONAME ; QTMS::QTMSGainEffect::QTMSGainEffect(void)
+	?tr@QTMSClientSink@QTMS@@SA?AVQString@@PBD0H@Z @ 24 NONAME ; class QString QTMS::QTMSClientSink::tr(char const *, char const *, int)
+	?GetType@QTMSGlobalGainEffect@QTMS@@UAEHAAH@Z @ 25 NONAME ; int QTMS::QTMSGlobalGainEffect::GetType(int &)
+	??1QTMSInbandTone@QTMS@@UAE@XZ @ 26 NONAME ; QTMS::QTMSInbandTone::~QTMSInbandTone(void)
+	?trUtf8@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString QTMS::QTMSInbandTone::trUtf8(char const *, char const *, int)
+	?GetType@QTMSModemSink@QTMS@@UAEHAAH@Z @ 28 NONAME ; int QTMS::QTMSModemSink::GetType(int &)
+	?trUtf8@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0H@Z @ 29 NONAME ; class QString QTMS::QTMSSpeakerSink::trUtf8(char const *, char const *, int)
+	?Stop@QTMSDTMF@QTMS@@QAEHXZ @ 30 NONAME ; int QTMS::QTMSDTMF::Stop(void)
+	?DeleteRingTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSRingTone@2@@Z @ 31 NONAME ; int QTMS::QTMSFactory::DeleteRingTonePlayer(class QTMS::QTMSRingTone * &)
+	?tr@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 32 NONAME ; class QString QTMS::QTMSVolumeEffect::tr(char const *, char const *, int)
+	?AddSource@QTMSStream@QTMS@@QAEHPAVQTMSSource@2@@Z @ 33 NONAME ; int QTMS::QTMSStream::AddSource(class QTMS::QTMSSource *)
+	??1QTMSGlobalVolEffect@QTMS@@UAE@XZ @ 34 NONAME ; QTMS::QTMSGlobalVolEffect::~QTMSGlobalVolEffect(void)
+	?GetType@QTMSSpeakerSink@QTMS@@UAEHAAH@Z @ 35 NONAME ; int QTMS::QTMSSpeakerSink::GetType(int &)
+	?getStaticMetaObject@QTMSGlobalVolEffect@QTMS@@SAABUQMetaObject@@XZ @ 36 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalVolEffect::getStaticMetaObject(void)
+	??0QTMSModemSource@QTMS@@IAE@XZ @ 37 NONAME ; QTMS::QTMSModemSource::QTMSModemSource(void)
+	?trUtf8@QTMSMicSource@QTMS@@SA?AVQString@@PBD0@Z @ 38 NONAME ; class QString QTMS::QTMSMicSource::trUtf8(char const *, char const *)
+	?GetVADMode@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 39 NONAME ; int QTMS::QTMSILBCFormat::GetVADMode(int &)
+	?qt_metacast@QTMSDTMF@QTMS@@UAEPAXPBD@Z @ 40 NONAME ; void * QTMS::QTMSDTMF::qt_metacast(char const *)
+	??_EQTMSCall@QTMS@@UAE@I@Z @ 41 NONAME ; QTMS::QTMSCall::~QTMSCall(unsigned int)
+	?trUtf8@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0@Z @ 42 NONAME ; class QString QTMS::QTMSILBCFormat::trUtf8(char const *, char const *)
+	?SetMode@QTMSILBCFormat@QTMS@@QAEHH@Z @ 43 NONAME ; int QTMS::QTMSILBCFormat::SetMode(int)
+	?trUtf8@QTMSModemSink@QTMS@@SA?AVQString@@PBD0H@Z @ 44 NONAME ; class QString QTMS::QTMSModemSink::trUtf8(char const *, char const *, int)
+	?GetVADMode@QTMSG711Format@QTMS@@QAEHAAH@Z @ 45 NONAME ; int QTMS::QTMSG711Format::GetVADMode(int &)
+	?staticMetaObject@QTMSDTMF@QTMS@@2UQMetaObject@@B @ 46 NONAME ; struct QMetaObject const QTMS::QTMSDTMF::staticMetaObject
+	??0QTMSMicSource@QTMS@@IAE@XZ @ 47 NONAME ; QTMS::QTMSMicSource::QTMSMicSource(void)
+	?GetPreviousOutput@QTMSGlobalRouting@QTMS@@QAEHAAH@Z @ 48 NONAME ; int QTMS::QTMSGlobalRouting::GetPreviousOutput(int &)
+	??1QTMSGainEffect@QTMS@@UAE@XZ @ 49 NONAME ; QTMS::QTMSGainEffect::~QTMSGainEffect(void)
+	?trUtf8@QTMSClientSink@QTMS@@SA?AVQString@@PBD0@Z @ 50 NONAME ; class QString QTMS::QTMSClientSink::trUtf8(char const *, char const *)
+	?EffectsEvent@QTMSGainEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 51 NONAME ; void QTMS::QTMSGainEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent)
+	?qt_metacast@QTMSILBCFormat@QTMS@@UAEPAXPBD@Z @ 52 NONAME ; void * QTMS::QTMSILBCFormat::qt_metacast(char const *)
+	?TMSStreamEvent@QTMSStream@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 53 NONAME ; void QTMS::QTMSStream::TMSStreamEvent(class QTMS::QTMSStream const &, struct QTMS::QTMSSignalEvent)
+	??1QTMSModemSink@QTMS@@UAE@XZ @ 54 NONAME ; QTMS::QTMSModemSink::~QTMSModemSink(void)
+	?metaObject@QTMSVolumeEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 55 NONAME ; struct QMetaObject const * QTMS::QTMSVolumeEffect::metaObject(void) const
+	??_EQTMSClientSink@QTMS@@UAE@I@Z @ 56 NONAME ; QTMS::QTMSClientSink::~QTMSClientSink(unsigned int)
+	?qt_metacast@QTMSModemSink@QTMS@@UAEPAXPBD@Z @ 57 NONAME ; void * QTMS::QTMSModemSink::qt_metacast(char const *)
+	??1QTMSClientSource@QTMS@@UAE@XZ @ 58 NONAME ; QTMS::QTMSClientSource::~QTMSClientSource(void)
+	?qt_metacall@QTMSGainEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 59 NONAME ; int QTMS::QTMSGainEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?CreateSource@QTMSFactory@QTMS@@QAEHHAAPAVQTMSSource@2@@Z @ 60 NONAME ; int QTMS::QTMSFactory::CreateSource(int, class QTMS::QTMSSource * &)
+	?trUtf8@QTMSFactory@QTMS@@SA?AVQString@@PBD0@Z @ 61 NONAME ; class QString QTMS::QTMSFactory::trUtf8(char const *, char const *)
+	?qt_metacall@QTMSGlobalVolEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 62 NONAME ; int QTMS::QTMSGlobalVolEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?GetLevel@QTMSGlobalGainEffect@QTMS@@QAEHAAI@Z @ 63 NONAME ; int QTMS::QTMSGlobalGainEffect::GetLevel(unsigned int &)
+	?trUtf8@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 64 NONAME ; class QString QTMS::QTMSGlobalVolEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QTMSCall@QTMS@@SA?AVQString@@PBD0@Z @ 65 NONAME ; class QString QTMS::QTMSCall::trUtf8(char const *, char const *)
+	?GetMaxLevel@QTMSGlobalGainEffect@QTMS@@QAEHAAI@Z @ 66 NONAME ; int QTMS::QTMSGlobalGainEffect::GetMaxLevel(unsigned int &)
+	?RemoveSource@QTMSStream@QTMS@@QAEHPAVQTMSSource@2@@Z @ 67 NONAME ; int QTMS::QTMSStream::RemoveSource(class QTMS::QTMSSource *)
+	?DTMFEvent@QTMSDTMF@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 68 NONAME ; void QTMS::QTMSDTMF::DTMFEvent(class QTMS::QTMSDTMF const &, struct QTMS::QTMSSignalEvent)
+	?GetCNG@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 69 NONAME ; int QTMS::QTMSILBCFormat::GetCNG(int &)
+	?qt_metacast@QTMSG729Format@QTMS@@UAEPAXPBD@Z @ 70 NONAME ; void * QTMS::QTMSG729Format::qt_metacast(char const *)
+	?tr@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0@Z @ 71 NONAME ; class QString QTMS::QTMSILBCFormat::tr(char const *, char const *)
+	?GetType@QTMSClientSink@QTMS@@UAEHAAH@Z @ 72 NONAME ; int QTMS::QTMSClientSink::GetType(int &)
+	?tr@QTMSModemSink@QTMS@@SA?AVQString@@PBD0H@Z @ 73 NONAME ; class QString QTMS::QTMSModemSink::tr(char const *, char const *, int)
+	?staticMetaObject@QTMSMicSource@QTMS@@2UQMetaObject@@B @ 74 NONAME ; struct QMetaObject const QTMS::QTMSMicSource::staticMetaObject
+	?metaObject@QTMSModemSource@QTMS@@UBEPBUQMetaObject@@XZ @ 75 NONAME ; struct QMetaObject const * QTMS::QTMSModemSource::metaObject(void) const
+	?ContinueDTMFStringSending@QTMSDTMF@QTMS@@QAEHH@Z @ 76 NONAME ; int QTMS::QTMSDTMF::ContinueDTMFStringSending(int)
+	?GetCNG@QTMSG711Format@QTMS@@QAEHAAH@Z @ 77 NONAME ; int QTMS::QTMSG711Format::GetCNG(int &)
+	?CreateGlobalRouting@QTMSFactory@QTMS@@QAEHAAPAVQTMSGlobalRouting@2@@Z @ 78 NONAME ; int QTMS::QTMSFactory::CreateGlobalRouting(class QTMS::QTMSGlobalRouting * &)
+	?trUtf8@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0H@Z @ 79 NONAME ; class QString QTMS::QTMSGlobalRouting::trUtf8(char const *, char const *, int)
+	?tr@QTMSClientSink@QTMS@@SA?AVQString@@PBD0@Z @ 80 NONAME ; class QString QTMS::QTMSClientSink::tr(char const *, char const *)
+	?trUtf8@QTMSModemSink@QTMS@@SA?AVQString@@PBD0@Z @ 81 NONAME ; class QString QTMS::QTMSModemSink::trUtf8(char const *, char const *)
+	?qt_metacall@QTMSInbandTone@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 82 NONAME ; int QTMS::QTMSInbandTone::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?staticMetaObject@QTMSSpeakerSink@QTMS@@2UQMetaObject@@B @ 83 NONAME ; struct QMetaObject const QTMS::QTMSSpeakerSink::staticMetaObject
+	?staticMetaObject@QTMSGainEffect@QTMS@@2UQMetaObject@@B @ 84 NONAME ; struct QMetaObject const QTMS::QTMSGainEffect::staticMetaObject
+	?staticMetaObject@QTMSModemSink@QTMS@@2UQMetaObject@@B @ 85 NONAME ; struct QMetaObject const QTMS::QTMSModemSink::staticMetaObject
+	?tr@QTMSModemSource@QTMS@@SA?AVQString@@PBD0H@Z @ 86 NONAME ; class QString QTMS::QTMSModemSource::tr(char const *, char const *, int)
+	?tr@QTMSDTMF@QTMS@@SA?AVQString@@PBD0@Z @ 87 NONAME ; class QString QTMS::QTMSDTMF::tr(char const *, char const *)
+	?tr@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 88 NONAME ; class QString QTMS::QTMSGlobalVolEffect::tr(char const *, char const *, int)
+	?GetType@QTMSGainEffect@QTMS@@UAEHAAH@Z @ 89 NONAME ; int QTMS::QTMSGainEffect::GetType(int &)
+	?trUtf8@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0@Z @ 90 NONAME ; class QString QTMS::QTMSSpeakerSink::trUtf8(char const *, char const *)
+	??_EQTMSG711Format@QTMS@@UAE@I@Z @ 91 NONAME ; QTMS::QTMSG711Format::~QTMSG711Format(unsigned int)
+	?qt_metacast@QTMSAMRFormat@QTMS@@UAEPAXPBD@Z @ 92 NONAME ; void * QTMS::QTMSAMRFormat::qt_metacast(char const *)
+	?GlobalRoutingEvent@QTMSGlobalRouting@QTMS@@IAEXABV12@UQTMSSignalEvent@2@H@Z @ 93 NONAME ; void QTMS::QTMSGlobalRouting::GlobalRoutingEvent(class QTMS::QTMSGlobalRouting const &, struct QTMS::QTMSSignalEvent, int)
+	?trUtf8@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 94 NONAME ; class QString QTMS::QTMSAMRFormat::trUtf8(char const *, char const *, int)
+	?metaObject@QTMSMicSource@QTMS@@UBEPBUQMetaObject@@XZ @ 95 NONAME ; struct QMetaObject const * QTMS::QTMSMicSource::metaObject(void) const
+	??1QTMSSpeakerSink@QTMS@@UAE@XZ @ 96 NONAME ; QTMS::QTMSSpeakerSink::~QTMSSpeakerSink(void)
+	??0QTMSVolumeEffect@QTMS@@IAE@XZ @ 97 NONAME ; QTMS::QTMSVolumeEffect::QTMSVolumeEffect(void)
+	?staticMetaObject@QTMSAMRFormat@QTMS@@2UQMetaObject@@B @ 98 NONAME ; struct QMetaObject const QTMS::QTMSAMRFormat::staticMetaObject
+	?Init@QTMSStream@QTMS@@QAEHXZ @ 99 NONAME ; int QTMS::QTMSStream::Init(void)
+	?GetVADMode@QTMSG729Format@QTMS@@QAEHAAH@Z @ 100 NONAME ; int QTMS::QTMSG729Format::GetVADMode(int &)
+	??1QTMSGlobalGainEffect@QTMS@@UAE@XZ @ 101 NONAME ; QTMS::QTMSGlobalGainEffect::~QTMSGlobalGainEffect(void)
+	??_EQTMSInbandTone@QTMS@@UAE@I@Z @ 102 NONAME ; QTMS::QTMSInbandTone::~QTMSInbandTone(unsigned int)
+	?trUtf8@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0@Z @ 103 NONAME ; class QString QTMS::QTMSAMRFormat::trUtf8(char const *, char const *)
+	?GetType@QTMSClientSource@QTMS@@UAEHAAH@Z @ 104 NONAME ; int QTMS::QTMSClientSource::GetType(int &)
+	?metaObject@QTMSPCMFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 105 NONAME ; struct QMetaObject const * QTMS::QTMSPCMFormat::metaObject(void) const
+	?tr@QTMSMicSource@QTMS@@SA?AVQString@@PBD0@Z @ 106 NONAME ; class QString QTMS::QTMSMicSource::tr(char const *, char const *)
+	??1QTMSGlobalRouting@QTMS@@UAE@XZ @ 107 NONAME ; QTMS::QTMSGlobalRouting::~QTMSGlobalRouting(void)
+	?getStaticMetaObject@QTMSStream@QTMS@@SAABUQMetaObject@@XZ @ 108 NONAME ; struct QMetaObject const & QTMS::QTMSStream::getStaticMetaObject(void)
+	?trUtf8@QTMSClientSource@QTMS@@SA?AVQString@@PBD0@Z @ 109 NONAME ; class QString QTMS::QTMSClientSource::trUtf8(char const *, char const *)
+	?tr@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 110 NONAME ; class QString QTMS::QTMSAMRFormat::tr(char const *, char const *, int)
+	?qt_metacast@QTMSModemSource@QTMS@@UAEPAXPBD@Z @ 111 NONAME ; void * QTMS::QTMSModemSource::qt_metacast(char const *)
+	?getStaticMetaObject@QTMSG711Format@QTMS@@SAABUQMetaObject@@XZ @ 112 NONAME ; struct QMetaObject const & QTMS::QTMSG711Format::getStaticMetaObject(void)
+	??_EQTMSClientSource@QTMS@@UAE@I@Z @ 113 NONAME ; QTMS::QTMSClientSource::~QTMSClientSource(unsigned int)
+	?GetLevel@QTMSGainEffect@QTMS@@QAEHAAI@Z @ 114 NONAME ; int QTMS::QTMSGainEffect::GetLevel(unsigned int &)
+	?tr@QTMSFactory@QTMS@@SA?AVQString@@PBD0@Z @ 115 NONAME ; class QString QTMS::QTMSFactory::tr(char const *, char const *)
+	?qt_metacast@QTMSGlobalRouting@QTMS@@UAEPAXPBD@Z @ 116 NONAME ; void * QTMS::QTMSGlobalRouting::qt_metacast(char const *)
+	?getStaticMetaObject@QTMSFactory@QTMS@@SAABUQMetaObject@@XZ @ 117 NONAME ; struct QMetaObject const & QTMS::QTMSFactory::getStaticMetaObject(void)
+	??_EQTMSAMRFormat@QTMS@@UAE@I@Z @ 118 NONAME ; QTMS::QTMSAMRFormat::~QTMSAMRFormat(unsigned int)
+	?getStaticMetaObject@QTMSPCMFormat@QTMS@@SAABUQMetaObject@@XZ @ 119 NONAME ; struct QMetaObject const & QTMS::QTMSPCMFormat::getStaticMetaObject(void)
+	?Flush@QTMSClientSource@QTMS@@QAEHXZ @ 120 NONAME ; int QTMS::QTMSClientSource::Flush(void)
+	?DeleteGlobalRouting@QTMSFactory@QTMS@@QAEHAAPAVQTMSGlobalRouting@2@@Z @ 121 NONAME ; int QTMS::QTMSFactory::DeleteGlobalRouting(class QTMS::QTMSGlobalRouting * &)
+	?tr@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0H@Z @ 122 NONAME ; class QString QTMS::QTMSGlobalRouting::tr(char const *, char const *, int)
+	?SetMode@QTMSG711Format@QTMS@@QAEHH@Z @ 123 NONAME ; int QTMS::QTMSG711Format::SetMode(int)
+	?GetMode@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 124 NONAME ; int QTMS::QTMSILBCFormat::GetMode(int &)
+	?GetMode@QTMSG711Format@QTMS@@QAEHAAH@Z @ 125 NONAME ; int QTMS::QTMSG711Format::GetMode(int &)
+	?GetAvailableOutputs@QTMSGlobalRouting@QTMS@@QAEHAAV?$vector@IV?$allocator@I@std@@@std@@@Z @ 126 NONAME ; int QTMS::QTMSGlobalRouting::GetAvailableOutputs(class std::vector<unsigned int, class std::allocator<unsigned int> > &)
+	?staticMetaObject@QTMSFactory@QTMS@@2UQMetaObject@@B @ 127 NONAME ; struct QMetaObject const QTMS::QTMSFactory::staticMetaObject
+	?DeleteFormat@QTMSFactory@QTMS@@QAEHAAPAVQTMSFormat@2@@Z @ 128 NONAME ; int QTMS::QTMSFactory::DeleteFormat(class QTMS::QTMSFormat * &)
+	?tr@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 129 NONAME ; class QString QTMS::QTMSILBCFormat::tr(char const *, char const *, int)
+	??1QTMSPCMFormat@QTMS@@UAE@XZ @ 130 NONAME ; QTMS::QTMSPCMFormat::~QTMSPCMFormat(void)
+	?trUtf8@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 131 NONAME ; class QString QTMS::QTMSGainEffect::trUtf8(char const *, char const *)
+	??0QTMSG711Format@QTMS@@IAE@XZ @ 132 NONAME ; QTMS::QTMSG711Format::QTMSG711Format(void)
+	?staticMetaObject@QTMSILBCFormat@QTMS@@2UQMetaObject@@B @ 133 NONAME ; struct QMetaObject const QTMS::QTMSILBCFormat::staticMetaObject
+	?metaObject@QTMSG729Format@QTMS@@UBEPBUQMetaObject@@XZ @ 134 NONAME ; struct QMetaObject const * QTMS::QTMSG729Format::metaObject(void) const
+	?tr@QTMSFactory@QTMS@@SA?AVQString@@PBD0H@Z @ 135 NONAME ; class QString QTMS::QTMSFactory::tr(char const *, char const *, int)
+	?tr@QTMSCall@QTMS@@SA?AVQString@@PBD0H@Z @ 136 NONAME ; class QString QTMS::QTMSCall::tr(char const *, char const *, int)
+	?staticMetaObject@QTMSClientSink@QTMS@@2UQMetaObject@@B @ 137 NONAME ; struct QMetaObject const QTMS::QTMSClientSink::staticMetaObject
+	?EffectsEvent@QTMSGlobalVolEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 138 NONAME ; void QTMS::QTMSGlobalVolEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent)
+	?CreateFormat@QTMSFactory@QTMS@@QAEHHAAPAVQTMSFormat@2@@Z @ 139 NONAME ; int QTMS::QTMSFactory::CreateFormat(int, class QTMS::QTMSFormat * &)
+	?SetCNG@QTMSILBCFormat@QTMS@@QAEHH@Z @ 140 NONAME ; int QTMS::QTMSILBCFormat::SetCNG(int)
+	??1QTMSAMRFormat@QTMS@@UAE@XZ @ 141 NONAME ; QTMS::QTMSAMRFormat::~QTMSAMRFormat(void)
+	?metaObject@QTMSClientSink@QTMS@@UBEPBUQMetaObject@@XZ @ 142 NONAME ; struct QMetaObject const * QTMS::QTMSClientSink::metaObject(void) const
+	?trUtf8@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0@Z @ 143 NONAME ; class QString QTMS::QTMSInbandTone::trUtf8(char const *, char const *)
+	?staticMetaObject@QTMSG711Format@QTMS@@2UQMetaObject@@B @ 144 NONAME ; struct QMetaObject const QTMS::QTMSG711Format::staticMetaObject
+	?BufferFilled@QTMSClientSource@QTMS@@QAEHAAVTMSBuffer@TMS@@@Z @ 145 NONAME ; int QTMS::QTMSClientSource::BufferFilled(class TMS::TMSBuffer &)
+	?trUtf8@QTMSDTMF@QTMS@@SA?AVQString@@PBD0H@Z @ 146 NONAME ; class QString QTMS::QTMSDTMF::trUtf8(char const *, char const *, int)
+	?InbandToneEvent@QTMSInbandTone@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 147 NONAME ; void QTMS::QTMSInbandTone::InbandToneEvent(class QTMS::QTMSInbandTone const &, struct QTMS::QTMSSignalEvent)
+	?tr@QTMSModemSink@QTMS@@SA?AVQString@@PBD0@Z @ 148 NONAME ; class QString QTMS::QTMSModemSink::tr(char const *, char const *)
+	?tr@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 149 NONAME ; class QString QTMS::QTMSGainEffect::tr(char const *, char const *, int)
+	?qt_metacast@QTMSG711Format@QTMS@@UAEPAXPBD@Z @ 150 NONAME ; void * QTMS::QTMSG711Format::qt_metacast(char const *)
+	?GetMaxLevel@QTMSVolumeEffect@QTMS@@QAEHAAI@Z @ 151 NONAME ; int QTMS::QTMSVolumeEffect::GetMaxLevel(unsigned int &)
+	??0QTMSSpeakerSink@QTMS@@IAE@XZ @ 152 NONAME ; QTMS::QTMSSpeakerSink::QTMSSpeakerSink(void)
+	?ProcessBuffer@QTMSClientSource@QTMS@@QAEHPAVTMSBuffer@TMS@@@Z @ 153 NONAME ; int QTMS::QTMSClientSource::ProcessBuffer(class TMS::TMSBuffer *)
+	??_EQTMSMicSource@QTMS@@UAE@I@Z @ 154 NONAME ; QTMS::QTMSMicSource::~QTMSMicSource(unsigned int)
+	?metaObject@QTMSModemSink@QTMS@@UBEPBUQMetaObject@@XZ @ 155 NONAME ; struct QMetaObject const * QTMS::QTMSModemSink::metaObject(void) const
+	?DeleteCall@QTMSFactory@QTMS@@QAEHAAPAVQTMSCall@2@@Z @ 156 NONAME ; int QTMS::QTMSFactory::DeleteCall(class QTMS::QTMSCall * &)
+	?tr@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 157 NONAME ; class QString QTMS::QTMSGlobalGainEffect::tr(char const *, char const *, int)
+	?qt_metacall@QTMSMicSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 158 NONAME ; int QTMS::QTMSMicSource::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?GetType@QTMSFormat@QTMS@@UAEHAAH@Z @ 159 NONAME ; int QTMS::QTMSFormat::GetType(int &)
+	?DeleteStream@QTMSCall@QTMS@@QAEHAAPAVQTMSStream@2@@Z @ 160 NONAME ; int QTMS::QTMSCall::DeleteStream(class QTMS::QTMSStream * &)
+	?trUtf8@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0@Z @ 161 NONAME ; class QString QTMS::QTMSVolumeEffect::trUtf8(char const *, char const *)
+	?CreateInbandTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSInbandTone@2@@Z @ 162 NONAME ; int QTMS::QTMSFactory::CreateInbandTonePlayer(class QTMS::QTMSInbandTone * &)
+	?trUtf8@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0@Z @ 163 NONAME ; class QString QTMS::QTMSGlobalRouting::trUtf8(char const *, char const *)
+	??1QTMSG711Format@QTMS@@UAE@XZ @ 164 NONAME ; QTMS::QTMSG711Format::~QTMSG711Format(void)
+	?tr@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 165 NONAME ; class QString QTMS::QTMSGainEffect::tr(char const *, char const *)
+	??_EQTMSModemSource@QTMS@@UAE@I@Z @ 166 NONAME ; QTMS::QTMSModemSource::~QTMSModemSource(unsigned int)
+	?qt_metacall@QTMSPCMFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 167 NONAME ; int QTMS::QTMSPCMFormat::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0QTMSILBCFormat@QTMS@@IAE@XZ @ 168 NONAME ; QTMS::QTMSILBCFormat::QTMSILBCFormat(void)
+	?trUtf8@QTMSStream@QTMS@@SA?AVQString@@PBD0H@Z @ 169 NONAME ; class QString QTMS::QTMSStream::trUtf8(char const *, char const *, int)
+	?qt_metacast@QTMSPCMFormat@QTMS@@UAEPAXPBD@Z @ 170 NONAME ; void * QTMS::QTMSPCMFormat::qt_metacast(char const *)
+	?qt_metacall@QTMSSpeakerSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 171 NONAME ; int QTMS::QTMSSpeakerSink::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?GetLevel@QTMSVolumeEffect@QTMS@@QAEHAAI@Z @ 172 NONAME ; int QTMS::QTMSVolumeEffect::GetLevel(unsigned int &)
+	?trUtf8@QTMSFactory@QTMS@@SA?AVQString@@PBD0H@Z @ 173 NONAME ; class QString QTMS::QTMSFactory::trUtf8(char const *, char const *, int)
+	??_EQTMSGainEffect@QTMS@@UAE@I@Z @ 174 NONAME ; QTMS::QTMSGainEffect::~QTMSGainEffect(unsigned int)
+	?tr@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0@Z @ 175 NONAME ; class QString QTMS::QTMSGlobalRouting::tr(char const *, char const *)
+	?tr@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0@Z @ 176 NONAME ; class QString QTMS::QTMSAMRFormat::tr(char const *, char const *)
+	?getStaticMetaObject@QTMSSpeakerSink@QTMS@@SAABUQMetaObject@@XZ @ 177 NONAME ; struct QMetaObject const & QTMS::QTMSSpeakerSink::getStaticMetaObject(void)
+	?CreateDTMF@QTMSFactory@QTMS@@QAEHHAAPAVQTMSDTMF@2@@Z @ 178 NONAME ; int QTMS::QTMSFactory::CreateDTMF(int, class QTMS::QTMSDTMF * &)
+	?trUtf8@QTMSStream@QTMS@@SA?AVQString@@PBD0@Z @ 179 NONAME ; class QString QTMS::QTMSStream::trUtf8(char const *, char const *)
+	?tr@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0@Z @ 180 NONAME ; class QString QTMS::QTMSInbandTone::tr(char const *, char const *)
+	?tr@QTMSStream@QTMS@@SA?AVQString@@PBD0@Z @ 181 NONAME ; class QString QTMS::QTMSStream::tr(char const *, char const *)
+	??1QTMSMicSource@QTMS@@UAE@XZ @ 182 NONAME ; QTMS::QTMSMicSource::~QTMSMicSource(void)
+	??_EQTMSFactory@QTMS@@UAE@I@Z @ 183 NONAME ; QTMS::QTMSFactory::~QTMSFactory(unsigned int)
+	??1QTMSCall@QTMS@@UAE@XZ @ 184 NONAME ; QTMS::QTMSCall::~QTMSCall(void)
+	?staticMetaObject@QTMSG729Format@QTMS@@2UQMetaObject@@B @ 185 NONAME ; struct QMetaObject const QTMS::QTMSG729Format::staticMetaObject
+	??0QTMSClientSource@QTMS@@IAE@XZ @ 186 NONAME ; QTMS::QTMSClientSource::QTMSClientSource(void)
+	?Stop@QTMSInbandTone@QTMS@@QAEHXZ @ 187 NONAME ; int QTMS::QTMSInbandTone::Stop(void)
+	?tr@QTMSCall@QTMS@@SA?AVQString@@PBD0@Z @ 188 NONAME ; class QString QTMS::QTMSCall::tr(char const *, char const *)
+	?qt_metacall@QTMSCall@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 189 NONAME ; int QTMS::QTMSCall::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?metaObject@QTMSSpeakerSink@QTMS@@UBEPBUQMetaObject@@XZ @ 190 NONAME ; struct QMetaObject const * QTMS::QTMSSpeakerSink::metaObject(void) const
+	?SetTone@QTMSDTMF@QTMS@@QAEHPAU_GString@@@Z @ 191 NONAME ; int QTMS::QTMSDTMF::SetTone(struct _GString *)
+	?SetEnqueueMode@QTMSClientSource@QTMS@@QAEHH@Z @ 192 NONAME ; int QTMS::QTMSClientSource::SetEnqueueMode(int)
+	?staticMetaObject@QTMSClientSource@QTMS@@2UQMetaObject@@B @ 193 NONAME ; struct QMetaObject const QTMS::QTMSClientSource::staticMetaObject
+	?trUtf8@QTMSModemSource@QTMS@@SA?AVQString@@PBD0@Z @ 194 NONAME ; class QString QTMS::QTMSModemSource::trUtf8(char const *, char const *)
+	?trUtf8@QTMSG729Format@QTMS@@SA?AVQString@@PBD0H@Z @ 195 NONAME ; class QString QTMS::QTMSG729Format::trUtf8(char const *, char const *, int)
+	?GetType@QTMSVolumeEffect@QTMS@@UAEHAAH@Z @ 196 NONAME ; int QTMS::QTMSVolumeEffect::GetType(int &)
+	?qt_metacall@QTMSVolumeEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 197 NONAME ; int QTMS::QTMSVolumeEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@QTMSG711Format@QTMS@@SA?AVQString@@PBD0H@Z @ 198 NONAME ; class QString QTMS::QTMSG711Format::tr(char const *, char const *, int)
+	??1QTMSILBCFormat@QTMS@@UAE@XZ @ 199 NONAME ; QTMS::QTMSILBCFormat::~QTMSILBCFormat(void)
+	?qt_metacall@QTMSILBCFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 200 NONAME ; int QTMS::QTMSILBCFormat::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0H@Z @ 201 NONAME ; class QString QTMS::QTMSSpeakerSink::tr(char const *, char const *, int)
+	?GetBitRate@QTMSFormat@QTMS@@QAEHAAI@Z @ 202 NONAME ; int QTMS::QTMSFormat::GetBitRate(unsigned int &)
+	?GetType@QTMSModemSource@QTMS@@UAEHAAH@Z @ 203 NONAME ; int QTMS::QTMSModemSource::GetType(int &)
+	?staticMetaObject@QTMSGlobalVolEffect@QTMS@@2UQMetaObject@@B @ 204 NONAME ; struct QMetaObject const QTMS::QTMSGlobalVolEffect::staticMetaObject
+	??1QTMSFormat@QTMS@@UAE@XZ @ 205 NONAME ; QTMS::QTMSFormat::~QTMSFormat(void)
+	?GetPlc@QTMSG711Format@QTMS@@QAEHAAH@Z @ 206 NONAME ; int QTMS::QTMSG711Format::GetPlc(int &)
+	?Start@QTMSInbandTone@QTMS@@QAEHH@Z @ 207 NONAME ; int QTMS::QTMSInbandTone::Start(int)
+	?trUtf8@QTMSClientSink@QTMS@@SA?AVQString@@PBD0H@Z @ 208 NONAME ; class QString QTMS::QTMSClientSink::trUtf8(char const *, char const *, int)
+	?tr@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0H@Z @ 209 NONAME ; class QString QTMS::QTMSInbandTone::tr(char const *, char const *, int)
+	??_EQTMSPCMFormat@QTMS@@UAE@I@Z @ 210 NONAME ; QTMS::QTMSPCMFormat::~QTMSPCMFormat(unsigned int)
+	?metaObject@QTMSAMRFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 211 NONAME ; struct QMetaObject const * QTMS::QTMSAMRFormat::metaObject(void) const
+	?metaObject@QTMSStream@QTMS@@UBEPBUQMetaObject@@XZ @ 212 NONAME ; struct QMetaObject const * QTMS::QTMSStream::metaObject(void) const
+	?getStaticMetaObject@QTMSGlobalGainEffect@QTMS@@SAABUQMetaObject@@XZ @ 213 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalGainEffect::getStaticMetaObject(void)
+	?tr@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0@Z @ 214 NONAME ; class QString QTMS::QTMSGlobalVolEffect::tr(char const *, char const *)
+	?staticMetaObject@QTMSInbandTone@QTMS@@2UQMetaObject@@B @ 215 NONAME ; struct QMetaObject const QTMS::QTMSInbandTone::staticMetaObject
+	?trUtf8@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 216 NONAME ; class QString QTMS::QTMSGlobalGainEffect::trUtf8(char const *, char const *, int)
+	?metaObject@QTMSCall@QTMS@@UBEPBUQMetaObject@@XZ @ 217 NONAME ; struct QMetaObject const * QTMS::QTMSCall::metaObject(void) const
+	?qt_metacall@QTMSClientSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 218 NONAME ; int QTMS::QTMSClientSink::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacast@QTMSClientSource@QTMS@@UAEPAXPBD@Z @ 219 NONAME ; void * QTMS::QTMSClientSource::qt_metacast(char const *)
+	?CreateStream@QTMSCall@QTMS@@QAEHHAAPAVQTMSStream@2@@Z @ 220 NONAME ; int QTMS::QTMSCall::CreateStream(int, class QTMS::QTMSStream * &)
+	?DeleteInbandTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSInbandTone@2@@Z @ 221 NONAME ; int QTMS::QTMSFactory::DeleteInbandTonePlayer(class QTMS::QTMSInbandTone * &)
+	?SetLevel@QTMSGlobalGainEffect@QTMS@@QAEHI@Z @ 222 NONAME ; int QTMS::QTMSGlobalGainEffect::SetLevel(unsigned int)
+	?GetStreamType@QTMSStream@QTMS@@QAEHXZ @ 223 NONAME ; int QTMS::QTMSStream::GetStreamType(void)
+	?getStaticMetaObject@QTMSGlobalRouting@QTMS@@SAABUQMetaObject@@XZ @ 224 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalRouting::getStaticMetaObject(void)
+	??0QTMSGlobalVolEffect@QTMS@@IAE@XZ @ 225 NONAME ; QTMS::QTMSGlobalVolEffect::QTMSGlobalVolEffect(void)
+	?CreateSink@QTMSFactory@QTMS@@QAEHHAAPAVQTMSSink@2@@Z @ 226 NONAME ; int QTMS::QTMSFactory::CreateSink(int, class QTMS::QTMSSink * &)
+	?EffectsEvent@QTMSVolumeEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 227 NONAME ; void QTMS::QTMSVolumeEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent)
+	?getStaticMetaObject@QTMSG729Format@QTMS@@SAABUQMetaObject@@XZ @ 228 NONAME ; struct QMetaObject const & QTMS::QTMSG729Format::getStaticMetaObject(void)
+	??1QTMSDTMF@QTMS@@UAE@XZ @ 229 NONAME ; QTMS::QTMSDTMF::~QTMSDTMF(void)
+	?DeleteDTMF@QTMSFactory@QTMS@@QAEHAAPAVQTMSDTMF@2@@Z @ 230 NONAME ; int QTMS::QTMSFactory::DeleteDTMF(class QTMS::QTMSDTMF * &)
+	??_EQTMSFormat@QTMS@@UAE@I@Z @ 231 NONAME ; QTMS::QTMSFormat::~QTMSFormat(unsigned int)
+	?staticMetaObject@QTMSGlobalGainEffect@QTMS@@2UQMetaObject@@B @ 232 NONAME ; struct QMetaObject const QTMS::QTMSGlobalGainEffect::staticMetaObject
+	?SetVADMode@QTMSILBCFormat@QTMS@@QAEHH@Z @ 233 NONAME ; int QTMS::QTMSILBCFormat::SetVADMode(int)
+	??0QTMSCall@QTMS@@IAE@XZ @ 234 NONAME ; QTMS::QTMSCall::QTMSCall(void)
+	?GetEnqueueMode@QTMSClientSource@QTMS@@QAEHAAH@Z @ 235 NONAME ; int QTMS::QTMSClientSource::GetEnqueueMode(int &)
+	?metaObject@QTMSGlobalVolEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 236 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalVolEffect::metaObject(void) const
+	?staticMetaObject@QTMSGlobalRouting@QTMS@@2UQMetaObject@@B @ 237 NONAME ; struct QMetaObject const QTMS::QTMSGlobalRouting::staticMetaObject
+	?SetCNG@QTMSG711Format@QTMS@@QAEHH@Z @ 238 NONAME ; int QTMS::QTMSG711Format::SetCNG(int)
+	?qt_metacall@QTMSG729Format@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 239 NONAME ; int QTMS::QTMSG729Format::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacast@QTMSFactory@QTMS@@UAEPAXPBD@Z @ 240 NONAME ; void * QTMS::QTMSFactory::qt_metacast(char const *)
+	?tr@QTMSStream@QTMS@@SA?AVQString@@PBD0H@Z @ 241 NONAME ; class QString QTMS::QTMSStream::tr(char const *, char const *, int)
+	?SetLevel@QTMSVolumeEffect@QTMS@@QAEHI@Z @ 242 NONAME ; int QTMS::QTMSVolumeEffect::SetLevel(unsigned int)
+	?DeleteEffect@QTMSFactory@QTMS@@QAEHAAPAVQTMSEffect@2@@Z @ 243 NONAME ; int QTMS::QTMSFactory::DeleteEffect(class QTMS::QTMSEffect * &)
+	?qt_metacast@QTMSCall@QTMS@@UAEPAXPBD@Z @ 244 NONAME ; void * QTMS::QTMSCall::qt_metacast(char const *)
+	?SetFormat@QTMSStream@QTMS@@QAEHPAVQTMSFormat@2@@Z @ 245 NONAME ; int QTMS::QTMSStream::SetFormat(class QTMS::QTMSFormat *)
+	?getStaticMetaObject@QTMSDTMF@QTMS@@SAABUQMetaObject@@XZ @ 246 NONAME ; struct QMetaObject const & QTMS::QTMSDTMF::getStaticMetaObject(void)
+	?getStaticMetaObject@QTMSMicSource@QTMS@@SAABUQMetaObject@@XZ @ 247 NONAME ; struct QMetaObject const & QTMS::QTMSMicSource::getStaticMetaObject(void)
+	?trUtf8@QTMSClientSource@QTMS@@SA?AVQString@@PBD0H@Z @ 248 NONAME ; class QString QTMS::QTMSClientSource::trUtf8(char const *, char const *, int)
+	?qt_metacall@QTMSGlobalGainEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 249 NONAME ; int QTMS::QTMSGlobalGainEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?CreateCall@QTMSFactory@QTMS@@QAEHHAAPAVQTMSCall@2@I@Z @ 250 NONAME ; int QTMS::QTMSFactory::CreateCall(int, class QTMS::QTMSCall * &, unsigned int)
+	?SetVADMode@QTMSG729Format@QTMS@@QAEHH@Z @ 251 NONAME ; int QTMS::QTMSG729Format::SetVADMode(int)
+	?DeleteBuffer@QTMSFactory@QTMS@@QAEHAAPAVQTMSBuffer@2@@Z @ 252 NONAME ; int QTMS::QTMSFactory::DeleteBuffer(class QTMS::QTMSBuffer * &)
+	?trUtf8@QTMSG711Format@QTMS@@SA?AVQString@@PBD0@Z @ 253 NONAME ; class QString QTMS::QTMSG711Format::trUtf8(char const *, char const *)
+	?qt_metacall@QTMSDTMF@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 254 NONAME ; int QTMS::QTMSDTMF::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QTMSModemSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 255 NONAME ; int QTMS::QTMSModemSource::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?CreateFactory@QTMSFactory@QTMS@@SAHAAPAV12@AAVQTMSVer@2@@Z @ 256 NONAME ; int QTMS::QTMSFactory::CreateFactory(class QTMS::QTMSFactory * &, class QTMS::QTMSVer &)
+	?tr@QTMSClientSource@QTMS@@SA?AVQString@@PBD0H@Z @ 257 NONAME ; class QString QTMS::QTMSClientSource::tr(char const *, char const *, int)
+	??1QTMSStream@QTMS@@UAE@XZ @ 258 NONAME ; QTMS::QTMSStream::~QTMSStream(void)
+	?qt_metacast@QTMSVolumeEffect@QTMS@@UAEPAXPBD@Z @ 259 NONAME ; void * QTMS::QTMSVolumeEffect::qt_metacast(char const *)
+	??_EQTMSStream@QTMS@@UAE@I@Z @ 260 NONAME ; QTMS::QTMSStream::~QTMSStream(unsigned int)
+	?tr@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0@Z @ 261 NONAME ; class QString QTMS::QTMSSpeakerSink::tr(char const *, char const *)
+	?RemoveSink@QTMSStream@QTMS@@QAEHPAVQTMSSink@2@@Z @ 262 NONAME ; int QTMS::QTMSStream::RemoveSink(class QTMS::QTMSSink *)
+	?trUtf8@QTMSModemSource@QTMS@@SA?AVQString@@PBD0H@Z @ 263 NONAME ; class QString QTMS::QTMSModemSource::trUtf8(char const *, char const *, int)
+	?metaObject@QTMSILBCFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 264 NONAME ; struct QMetaObject const * QTMS::QTMSILBCFormat::metaObject(void) const
+	?staticMetaObject@QTMSPCMFormat@QTMS@@2UQMetaObject@@B @ 265 NONAME ; struct QMetaObject const QTMS::QTMSPCMFormat::staticMetaObject
+	?getStaticMetaObject@QTMSClientSource@QTMS@@SAABUQMetaObject@@XZ @ 266 NONAME ; struct QMetaObject const & QTMS::QTMSClientSource::getStaticMetaObject(void)
+	??1QTMSFactory@QTMS@@UAE@XZ @ 267 NONAME ; QTMS::QTMSFactory::~QTMSFactory(void)
+	?DeleteSource@QTMSFactory@QTMS@@QAEHAAPAVQTMSSource@2@@Z @ 268 NONAME ; int QTMS::QTMSFactory::DeleteSource(class QTMS::QTMSSource * &)
+	?qt_metacall@QTMSGlobalRouting@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 269 NONAME ; int QTMS::QTMSGlobalRouting::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0QTMSGlobalGainEffect@QTMS@@IAE@XZ @ 270 NONAME ; QTMS::QTMSGlobalGainEffect::QTMSGlobalGainEffect(void)
+	?trUtf8@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0@Z @ 271 NONAME ; class QString QTMS::QTMSPCMFormat::trUtf8(char const *, char const *)
+	??0QTMSDTMF@QTMS@@IAE@XZ @ 272 NONAME ; QTMS::QTMSDTMF::QTMSDTMF(void)
+	?GetLevel@QTMSGlobalVolEffect@QTMS@@QAEHAAI@Z @ 273 NONAME ; int QTMS::QTMSGlobalVolEffect::GetLevel(unsigned int &)
+	?GetType@QTMSGlobalVolEffect@QTMS@@UAEHAAH@Z @ 274 NONAME ; int QTMS::QTMSGlobalVolEffect::GetType(int &)
+	?getStaticMetaObject@QTMSILBCFormat@QTMS@@SAABUQMetaObject@@XZ @ 275 NONAME ; struct QMetaObject const & QTMS::QTMSILBCFormat::getStaticMetaObject(void)
+	??_EQTMSGlobalGainEffect@QTMS@@UAE@I@Z @ 276 NONAME ; QTMS::QTMSGlobalGainEffect::~QTMSGlobalGainEffect(unsigned int)
+	?trUtf8@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0@Z @ 277 NONAME ; class QString QTMS::QTMSGlobalVolEffect::trUtf8(char const *, char const *)
+	?qt_metacast@QTMSGlobalGainEffect@QTMS@@UAEPAXPBD@Z @ 278 NONAME ; void * QTMS::QTMSGlobalGainEffect::qt_metacast(char const *)
+	??_EQTMSModemSink@QTMS@@UAE@I@Z @ 279 NONAME ; QTMS::QTMSModemSink::~QTMSModemSink(unsigned int)
+	??0QTMSModemSink@QTMS@@IAE@XZ @ 280 NONAME ; QTMS::QTMSModemSink::QTMSModemSink(void)
+	?tr@QTMSG711Format@QTMS@@SA?AVQString@@PBD0@Z @ 281 NONAME ; class QString QTMS::QTMSG711Format::tr(char const *, char const *)
+	?GetState@QTMSStream@QTMS@@QAEHXZ @ 282 NONAME ; int QTMS::QTMSStream::GetState(void)
+	?qt_metacall@QTMSG711Format@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 283 NONAME ; int QTMS::QTMSG711Format::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?getStaticMetaObject@QTMSClientSink@QTMS@@SAABUQMetaObject@@XZ @ 284 NONAME ; struct QMetaObject const & QTMS::QTMSClientSink::getStaticMetaObject(void)
+	?qt_metacast@QTMSInbandTone@QTMS@@UAEPAXPBD@Z @ 285 NONAME ; void * QTMS::QTMSInbandTone::qt_metacast(char const *)
+	?getStaticMetaObject@QTMSModemSource@QTMS@@SAABUQMetaObject@@XZ @ 286 NONAME ; struct QMetaObject const & QTMS::QTMSModemSource::getStaticMetaObject(void)
+	?metaObject@QTMSGainEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 287 NONAME ; struct QMetaObject const * QTMS::QTMSGainEffect::metaObject(void) const
+	??0QTMSGlobalRouting@QTMS@@IAE@XZ @ 288 NONAME ; QTMS::QTMSGlobalRouting::QTMSGlobalRouting(void)
+	?metaObject@QTMSClientSource@QTMS@@UBEPBUQMetaObject@@XZ @ 289 NONAME ; struct QMetaObject const * QTMS::QTMSClientSource::metaObject(void) const
+	?qt_metacast@QTMSStream@QTMS@@UAEPAXPBD@Z @ 290 NONAME ; void * QTMS::QTMSStream::qt_metacast(char const *)
+	?DeleteSink@QTMSFactory@QTMS@@QAEHAAPAVQTMSSink@2@@Z @ 291 NONAME ; int QTMS::QTMSFactory::DeleteSink(class QTMS::QTMSSink * &)
+	?getStaticMetaObject@QTMSModemSink@QTMS@@SAABUQMetaObject@@XZ @ 292 NONAME ; struct QMetaObject const & QTMS::QTMSModemSink::getStaticMetaObject(void)
+	?tr@QTMSClientSource@QTMS@@SA?AVQString@@PBD0@Z @ 293 NONAME ; class QString QTMS::QTMSClientSource::tr(char const *, char const *)
+	??_EQTMSDTMF@QTMS@@UAE@I@Z @ 294 NONAME ; QTMS::QTMSDTMF::~QTMSDTMF(unsigned int)
+	?qt_metacall@QTMSStream@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 295 NONAME ; int QTMS::QTMSStream::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@QTMSDTMF@QTMS@@SA?AVQString@@PBD0H@Z @ 296 NONAME ; class QString QTMS::QTMSDTMF::tr(char const *, char const *, int)
+	?qt_metacast@QTMSGainEffect@QTMS@@UAEPAXPBD@Z @ 297 NONAME ; void * QTMS::QTMSGainEffect::qt_metacast(char const *)
+	?GetCallContextId@QTMSCall@QTMS@@QAEHAAI@Z @ 298 NONAME ; int QTMS::QTMSCall::GetCallContextId(unsigned int &)
+	?GetCallType@QTMSCall@QTMS@@QAEHXZ @ 299 NONAME ; int QTMS::QTMSCall::GetCallType(void)
+	?Start@QTMSDTMF@QTMS@@QAEHXZ @ 300 NONAME ; int QTMS::QTMSDTMF::Start(void)
+	?trUtf8@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 301 NONAME ; class QString QTMS::QTMSGlobalGainEffect::trUtf8(char const *, char const *)
+	?SetOutput@QTMSGlobalRouting@QTMS@@QAEHH@Z @ 302 NONAME ; int QTMS::QTMSGlobalRouting::SetOutput(int)
+	??0QTMSClientSink@QTMS@@IAE@XZ @ 303 NONAME ; QTMS::QTMSClientSink::QTMSClientSink(void)
+	?SetLevel@QTMSGlobalVolEffect@QTMS@@QAEHI@Z @ 304 NONAME ; int QTMS::QTMSGlobalVolEffect::SetLevel(unsigned int)
+	?IsCallTypeSupported@QTMSFactory@QTMS@@QAEHHAAH@Z @ 305 NONAME ; int QTMS::QTMSFactory::IsCallTypeSupported(int, int &)
+	?qt_metacast@QTMSGlobalVolEffect@QTMS@@UAEPAXPBD@Z @ 306 NONAME ; void * QTMS::QTMSGlobalVolEffect::qt_metacast(char const *)
+	?staticMetaObject@QTMSModemSource@QTMS@@2UQMetaObject@@B @ 307 NONAME ; struct QMetaObject const QTMS::QTMSModemSource::staticMetaObject
+	?GetStreamId@QTMSStream@QTMS@@QAEHXZ @ 308 NONAME ; int QTMS::QTMSStream::GetStreamId(void)
+	??0QTMSG729Format@QTMS@@IAE@XZ @ 309 NONAME ; QTMS::QTMSG729Format::QTMSG729Format(void)
+	??_EQTMSGlobalVolEffect@QTMS@@UAE@I@Z @ 310 NONAME ; QTMS::QTMSGlobalVolEffect::~QTMSGlobalVolEffect(unsigned int)
+	?getStaticMetaObject@QTMSAMRFormat@QTMS@@SAABUQMetaObject@@XZ @ 311 NONAME ; struct QMetaObject const & QTMS::QTMSAMRFormat::getStaticMetaObject(void)
+	?staticMetaObject@QTMSVolumeEffect@QTMS@@2UQMetaObject@@B @ 312 NONAME ; struct QMetaObject const QTMS::QTMSVolumeEffect::staticMetaObject
+	??0QTMSFormat@QTMS@@IAE@XZ @ 313 NONAME ; QTMS::QTMSFormat::QTMSFormat(void)
+	?GetSupportedFormats@QTMSFactory@QTMS@@QAEHHAAV?$vector@PAVQTMSFormat@QTMS@@V?$allocator@PAVQTMSFormat@QTMS@@@std@@@std@@@Z @ 314 NONAME ; int QTMS::QTMSFactory::GetSupportedFormats(int, class std::vector<class QTMS::QTMSFormat *, class std::allocator<class QTMS::QTMSFormat *> > &)
+	?SetVADMode@QTMSG711Format@QTMS@@QAEHH@Z @ 315 NONAME ; int QTMS::QTMSG711Format::SetVADMode(int)
+	?getStaticMetaObject@QTMSVolumeEffect@QTMS@@SAABUQMetaObject@@XZ @ 316 NONAME ; struct QMetaObject const & QTMS::QTMSVolumeEffect::getStaticMetaObject(void)
+	?qt_metacall@QTMSModemSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 317 NONAME ; int QTMS::QTMSModemSink::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 318 NONAME ; class QString QTMS::QTMSILBCFormat::trUtf8(char const *, char const *, int)
+	?trUtf8@QTMSDTMF@QTMS@@SA?AVQString@@PBD0@Z @ 319 NONAME ; class QString QTMS::QTMSDTMF::trUtf8(char const *, char const *)
+	?tr@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 320 NONAME ; class QString QTMS::QTMSGlobalGainEffect::tr(char const *, char const *)
+	?AddEffect@QTMSStream@QTMS@@QAEHPAVQTMSEffect@2@@Z @ 321 NONAME ; int QTMS::QTMSStream::AddEffect(class QTMS::QTMSEffect *)
+	?ResetFormat@QTMSStream@QTMS@@QAEHPAVQTMSFormat@2@@Z @ 322 NONAME ; int QTMS::QTMSStream::ResetFormat(class QTMS::QTMSFormat *)
+	?metaObject@QTMSG711Format@QTMS@@UBEPBUQMetaObject@@XZ @ 323 NONAME ; struct QMetaObject const * QTMS::QTMSG711Format::metaObject(void) const
+	??1QTMSVolumeEffect@QTMS@@UAE@XZ @ 324 NONAME ; QTMS::QTMSVolumeEffect::~QTMSVolumeEffect(void)
+	?GetSupportedBitRates@QTMSFormat@QTMS@@QAEHAAV?$vector@IV?$allocator@I@std@@@std@@@Z @ 325 NONAME ; int QTMS::QTMSFormat::GetSupportedBitRates(class std::vector<unsigned int, class std::allocator<unsigned int> > &)
+	?EffectsEvent@QTMSGlobalGainEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 326 NONAME ; void QTMS::QTMSGlobalGainEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent)
+	?staticMetaObject@QTMSCall@QTMS@@2UQMetaObject@@B @ 327 NONAME ; struct QMetaObject const QTMS::QTMSCall::staticMetaObject
+	??1QTMSModemSource@QTMS@@UAE@XZ @ 328 NONAME ; QTMS::QTMSModemSource::~QTMSModemSource(void)
+	??1QTMSClientSink@QTMS@@UAE@XZ @ 329 NONAME ; QTMS::QTMSClientSink::~QTMSClientSink(void)
+	?metaObject@QTMSFactory@QTMS@@UBEPBUQMetaObject@@XZ @ 330 NONAME ; struct QMetaObject const * QTMS::QTMSFactory::metaObject(void) const
+	?metaObject@QTMSInbandTone@QTMS@@UBEPBUQMetaObject@@XZ @ 331 NONAME ; struct QMetaObject const * QTMS::QTMSInbandTone::metaObject(void) const
+	?trUtf8@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 332 NONAME ; class QString QTMS::QTMSGainEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QTMSMicSource@QTMS@@SA?AVQString@@PBD0H@Z @ 333 NONAME ; class QString QTMS::QTMSMicSource::trUtf8(char const *, char const *, int)
+	?GetMaxLevel@QTMSGlobalVolEffect@QTMS@@QAEHAAI@Z @ 334 NONAME ; int QTMS::QTMSGlobalVolEffect::GetMaxLevel(unsigned int &)
+	??_EQTMSVolumeEffect@QTMS@@UAE@I@Z @ 335 NONAME ; QTMS::QTMSVolumeEffect::~QTMSVolumeEffect(unsigned int)
+	??1QTMSG729Format@QTMS@@UAE@XZ @ 336 NONAME ; QTMS::QTMSG729Format::~QTMSG729Format(void)
+	?tr@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0@Z @ 337 NONAME ; class QString QTMS::QTMSVolumeEffect::tr(char const *, char const *)
+	?GetType@QTMSMicSource@QTMS@@UAEHAAH@Z @ 338 NONAME ; int QTMS::QTMSMicSource::GetType(int &)
+	?CreateEffect@QTMSFactory@QTMS@@QAEHHAAPAVQTMSEffect@2@@Z @ 339 NONAME ; int QTMS::QTMSFactory::CreateEffect(int, class QTMS::QTMSEffect * &)
+	?getStaticMetaObject@QTMSCall@QTMS@@SAABUQMetaObject@@XZ @ 340 NONAME ; struct QMetaObject const & QTMS::QTMSCall::getStaticMetaObject(void)
+	?metaObject@QTMSGlobalGainEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 341 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalGainEffect::metaObject(void) const
+	??0QTMSFactory@QTMS@@AAE@XZ @ 342 NONAME ; QTMS::QTMSFactory::QTMSFactory(void)
+	?GetOutput@QTMSGlobalRouting@QTMS@@QAEHAAH@Z @ 343 NONAME ; int QTMS::QTMSGlobalRouting::GetOutput(int &)
+	?tr@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0@Z @ 344 NONAME ; class QString QTMS::QTMSPCMFormat::tr(char const *, char const *)
+	?CreateBuffer@QTMSFactory@QTMS@@QAEHHIAAPAVQTMSBuffer@2@@Z @ 345 NONAME ; int QTMS::QTMSFactory::CreateBuffer(int, unsigned int, class QTMS::QTMSBuffer * &)
+	?trUtf8@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 346 NONAME ; class QString QTMS::QTMSPCMFormat::trUtf8(char const *, char const *, int)
+	?qt_metacast@QTMSMicSource@QTMS@@UAEPAXPBD@Z @ 347 NONAME ; void * QTMS::QTMSMicSource::qt_metacast(char const *)
+	?trUtf8@QTMSG729Format@QTMS@@SA?AVQString@@PBD0@Z @ 348 NONAME ; class QString QTMS::QTMSG729Format::trUtf8(char const *, char const *)
+	?BufferProcessed@QTMSClientSink@QTMS@@QAEHPAVTMSBuffer@TMS@@@Z @ 349 NONAME ; int QTMS::QTMSClientSink::BufferProcessed(class TMS::TMSBuffer *)
+	?ProcessBuffer@QTMSClientSink@QTMS@@IAEXPBVTMSBuffer@TMS@@@Z @ 350 NONAME ; void QTMS::QTMSClientSink::ProcessBuffer(class TMS::TMSBuffer const *)
+	?qt_metacall@QTMSAMRFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 351 NONAME ; int QTMS::QTMSAMRFormat::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0QTMSInbandTone@QTMS@@IAE@XZ @ 352 NONAME ; QTMS::QTMSInbandTone::QTMSInbandTone(void)
+	?RemoveEffect@QTMSStream@QTMS@@QAEHPAVQTMSEffect@2@@Z @ 353 NONAME ; int QTMS::QTMSStream::RemoveEffect(class QTMS::QTMSEffect *)
+	?SetBitRate@QTMSFormat@QTMS@@QAEHI@Z @ 354 NONAME ; int QTMS::QTMSFormat::SetBitRate(unsigned int)
+	?Stop@QTMSStream@QTMS@@QAEHXZ @ 355 NONAME ; int QTMS::QTMSStream::Stop(void)
+	?trUtf8@QTMSCall@QTMS@@SA?AVQString@@PBD0H@Z @ 356 NONAME ; class QString QTMS::QTMSCall::trUtf8(char const *, char const *, int)
+	??_EQTMSILBCFormat@QTMS@@UAE@I@Z @ 357 NONAME ; QTMS::QTMSILBCFormat::~QTMSILBCFormat(unsigned int)
+	?qt_metacall@QTMSFactory@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 358 NONAME ; int QTMS::QTMSFactory::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?staticMetaObject@QTMSStream@QTMS@@2UQMetaObject@@B @ 359 NONAME ; struct QMetaObject const QTMS::QTMSStream::staticMetaObject
+	??0QTMSPCMFormat@QTMS@@IAE@XZ @ 360 NONAME ; QTMS::QTMSPCMFormat::QTMSPCMFormat(void)
+	?tr@QTMSMicSource@QTMS@@SA?AVQString@@PBD0H@Z @ 361 NONAME ; class QString QTMS::QTMSMicSource::tr(char const *, char const *, int)
+	?SetLevel@QTMSGainEffect@QTMS@@QAEHI@Z @ 362 NONAME ; int QTMS::QTMSGainEffect::SetLevel(unsigned int)
+	?FillBuffer@QTMSClientSource@QTMS@@IAEXAAVTMSBuffer@TMS@@@Z @ 363 NONAME ; void QTMS::QTMSClientSource::FillBuffer(class TMS::TMSBuffer &)
+	?Pause@QTMSStream@QTMS@@QAEHXZ @ 364 NONAME ; int QTMS::QTMSStream::Pause(void)
+	?Deinit@QTMSStream@QTMS@@QAEXXZ @ 365 NONAME ; void QTMS::QTMSStream::Deinit(void)
+	?metaObject@QTMSDTMF@QTMS@@UBEPBUQMetaObject@@XZ @ 366 NONAME ; struct QMetaObject const * QTMS::QTMSDTMF::metaObject(void) const
+	?GetMaxLevel@QTMSGainEffect@QTMS@@QAEHAAI@Z @ 367 NONAME ; int QTMS::QTMSGainEffect::GetMaxLevel(unsigned int &)
+	?Deinit@QTMSRingTone@QTMS@@QAEHXZ @ 368 NONAME ; int QTMS::QTMSRingTone::Deinit(void)
+	?tr@QTMSRingTone@QTMS@@SA?AVQString@@PBD0@Z @ 369 NONAME ; class QString QTMS::QTMSRingTone::tr(char const *, char const *)
+	?Pause@QTMSRingTone@QTMS@@QAEHXZ @ 370 NONAME ; int QTMS::QTMSRingTone::Pause(void)
+	?RingtoneEvent@QTMSRingTone@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 371 NONAME ; void QTMS::QTMSRingTone::RingtoneEvent(class QTMS::QTMSRingTone const &, struct QTMS::QTMSSignalEvent)
+	?staticMetaObject@QTMSRingTone@QTMS@@2UQMetaObject@@B @ 372 NONAME ; struct QMetaObject const QTMS::QTMSRingTone::staticMetaObject
+	?trUtf8@QTMSRingTone@QTMS@@SA?AVQString@@PBD0@Z @ 373 NONAME ; class QString QTMS::QTMSRingTone::trUtf8(char const *, char const *)
+	?tr@QTMSRingTone@QTMS@@SA?AVQString@@PBD0H@Z @ 374 NONAME ; class QString QTMS::QTMSRingTone::tr(char const *, char const *, int)
+	?getStaticMetaObject@QTMSRingTone@QTMS@@SAABUQMetaObject@@XZ @ 375 NONAME ; struct QMetaObject const & QTMS::QTMSRingTone::getStaticMetaObject(void)
+	?qt_metacast@QTMSRingTone@QTMS@@UAEPAXPBD@Z @ 376 NONAME ; void * QTMS::QTMSRingTone::qt_metacast(char const *)
+	?Stop@QTMSRingTone@QTMS@@QAEHXZ @ 377 NONAME ; int QTMS::QTMSRingTone::Stop(void)
+	?Play@QTMSRingTone@QTMS@@QAEHXZ @ 378 NONAME ; int QTMS::QTMSRingTone::Play(void)
+	?qt_metacall@QTMSRingTone@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 379 NONAME ; int QTMS::QTMSRingTone::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?Init@QTMSRingTone@QTMS@@QAEHHPAU_GString@@0@Z @ 380 NONAME ; int QTMS::QTMSRingTone::Init(int, struct _GString *, struct _GString *)
+	??1QTMSRingTone@QTMS@@UAE@XZ @ 381 NONAME ; QTMS::QTMSRingTone::~QTMSRingTone(void)
+	?Mute@QTMSRingTone@QTMS@@QAEHXZ @ 382 NONAME ; int QTMS::QTMSRingTone::Mute(void)
+	?metaObject@QTMSRingTone@QTMS@@UBEPBUQMetaObject@@XZ @ 383 NONAME ; struct QMetaObject const * QTMS::QTMSRingTone::metaObject(void) const
+	??_EQTMSRingTone@QTMS@@UAE@I@Z @ 384 NONAME ; QTMS::QTMSRingTone::~QTMSRingTone(unsigned int)
+	??0QTMSRingTone@QTMS@@IAE@XZ @ 385 NONAME ; QTMS::QTMSRingTone::QTMSRingTone(void)
+	?trUtf8@QTMSRingTone@QTMS@@SA?AVQString@@PBD0H@Z @ 386 NONAME ; class QString QTMS::QTMSRingTone::trUtf8(char const *, char const *, int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/data/create_qtms_stub_sis.bat	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,17 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: PKG for QT Telephony Media Services (QTMS)
+rem
+
+makesis -s qtmsapi_stub.pkg qtmsapi_stub.sis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/data/qtmsapi_stub.pkg	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,29 @@
+;
+; 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: QT Telephony Multimedia Services (QTMS)
+;
+;File: qtms_stub.pkg
+
+;Languages
+&EN
+
+;Header
+#{"QTMS"},(0x10207CB3),1,0,0, TYPE=SA
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
Binary file qtms/data/qtmsapi_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/eabi/qtmsu.def	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,412 @@
+EXPORTS
+	_ZN4QTMS10QTMSFormat10GetBitRateERj @ 1 NONAME
+	_ZN4QTMS10QTMSFormat10SetBitRateEj @ 2 NONAME
+	_ZN4QTMS10QTMSFormat20GetSupportedBitRatesERSt6vectorIjSaIjEE @ 3 NONAME
+	_ZN4QTMS10QTMSFormat7GetTypeERi @ 4 NONAME
+	_ZN4QTMS10QTMSFormatC1Ev @ 5 NONAME
+	_ZN4QTMS10QTMSFormatC2Ev @ 6 NONAME
+	_ZN4QTMS10QTMSFormatD0Ev @ 7 NONAME
+	_ZN4QTMS10QTMSFormatD1Ev @ 8 NONAME
+	_ZN4QTMS10QTMSFormatD2Ev @ 9 NONAME
+	_ZN4QTMS10QTMSStream10RemoveSinkEPNS_8QTMSSinkE @ 10 NONAME
+	_ZN4QTMS10QTMSStream11GetStreamIdEv @ 11 NONAME
+	_ZN4QTMS10QTMSStream11ResetFormatEPNS_10QTMSFormatE @ 12 NONAME
+	_ZN4QTMS10QTMSStream11qt_metacallEN11QMetaObject4CallEiPPv @ 13 NONAME
+	_ZN4QTMS10QTMSStream11qt_metacastEPKc @ 14 NONAME
+	_ZN4QTMS10QTMSStream12RemoveEffectEPNS_10QTMSEffectE @ 15 NONAME
+	_ZN4QTMS10QTMSStream12RemoveSourceEPNS_10QTMSSourceE @ 16 NONAME
+	_ZN4QTMS10QTMSStream13GetStreamTypeEv @ 17 NONAME
+	_ZN4QTMS10QTMSStream14TMSStreamEventERKS0_NS_15QTMSSignalEventE @ 18 NONAME
+	_ZN4QTMS10QTMSStream16staticMetaObjectE @ 19 NONAME DATA 16
+	_ZN4QTMS10QTMSStream19getStaticMetaObjectEv @ 20 NONAME
+	_ZN4QTMS10QTMSStream4InitEv @ 21 NONAME
+	_ZN4QTMS10QTMSStream4StopEv @ 22 NONAME
+	_ZN4QTMS10QTMSStream5PauseEv @ 23 NONAME
+	_ZN4QTMS10QTMSStream5StartEv @ 24 NONAME
+	_ZN4QTMS10QTMSStream6DeinitEv @ 25 NONAME
+	_ZN4QTMS10QTMSStream7AddSinkEPNS_8QTMSSinkE @ 26 NONAME
+	_ZN4QTMS10QTMSStream8GetStateEv @ 27 NONAME
+	_ZN4QTMS10QTMSStream9AddEffectEPNS_10QTMSEffectE @ 28 NONAME
+	_ZN4QTMS10QTMSStream9AddSourceEPNS_10QTMSSourceE @ 29 NONAME
+	_ZN4QTMS10QTMSStream9SetFormatEPNS_10QTMSFormatE @ 30 NONAME
+	_ZN4QTMS10QTMSStreamC1Ev @ 31 NONAME
+	_ZN4QTMS10QTMSStreamC2Ev @ 32 NONAME
+	_ZN4QTMS10QTMSStreamD0Ev @ 33 NONAME
+	_ZN4QTMS10QTMSStreamD1Ev @ 34 NONAME
+	_ZN4QTMS10QTMSStreamD2Ev @ 35 NONAME
+	_ZN4QTMS11QTMSFactory10CreateCallEiRPNS_8QTMSCallEj @ 36 NONAME
+	_ZN4QTMS11QTMSFactory10CreateDTMFEiRPNS_8QTMSDTMFE @ 37 NONAME
+	_ZN4QTMS11QTMSFactory10CreateSinkEiRPNS_8QTMSSinkE @ 38 NONAME
+	_ZN4QTMS11QTMSFactory10DeleteCallERPNS_8QTMSCallE @ 39 NONAME
+	_ZN4QTMS11QTMSFactory10DeleteDTMFERPNS_8QTMSDTMFE @ 40 NONAME
+	_ZN4QTMS11QTMSFactory10DeleteSinkERPNS_8QTMSSinkE @ 41 NONAME
+	_ZN4QTMS11QTMSFactory11qt_metacallEN11QMetaObject4CallEiPPv @ 42 NONAME
+	_ZN4QTMS11QTMSFactory11qt_metacastEPKc @ 43 NONAME
+	_ZN4QTMS11QTMSFactory12CreateBufferEijRPNS_10QTMSBufferE @ 44 NONAME
+	_ZN4QTMS11QTMSFactory12CreateEffectEiRPNS_10QTMSEffectE @ 45 NONAME
+	_ZN4QTMS11QTMSFactory12CreateFormatEiRPNS_10QTMSFormatE @ 46 NONAME
+	_ZN4QTMS11QTMSFactory12CreateSourceEiRPNS_10QTMSSourceE @ 47 NONAME
+	_ZN4QTMS11QTMSFactory12DeleteBufferERPNS_10QTMSBufferE @ 48 NONAME
+	_ZN4QTMS11QTMSFactory12DeleteEffectERPNS_10QTMSEffectE @ 49 NONAME
+	_ZN4QTMS11QTMSFactory12DeleteFormatERPNS_10QTMSFormatE @ 50 NONAME
+	_ZN4QTMS11QTMSFactory12DeleteSourceERPNS_10QTMSSourceE @ 51 NONAME
+	_ZN4QTMS11QTMSFactory13CreateFactoryERPS0_RNS_7QTMSVerE @ 52 NONAME
+	_ZN4QTMS11QTMSFactory16staticMetaObjectE @ 53 NONAME DATA 16
+	_ZN4QTMS11QTMSFactory19CreateGlobalRoutingERPNS_17QTMSGlobalRoutingE @ 54 NONAME
+	_ZN4QTMS11QTMSFactory19DeleteGlobalRoutingERPNS_17QTMSGlobalRoutingE @ 55 NONAME
+	_ZN4QTMS11QTMSFactory19GetSupportedFormatsEiRSt6vectorIPNS_10QTMSFormatESaIS3_EE @ 56 NONAME
+	_ZN4QTMS11QTMSFactory19IsCallTypeSupportedEiRi @ 57 NONAME
+	_ZN4QTMS11QTMSFactory19getStaticMetaObjectEv @ 58 NONAME
+	_ZN4QTMS11QTMSFactory20CreateRingTonePlayerERPNS_12QTMSRingToneE @ 59 NONAME
+	_ZN4QTMS11QTMSFactory20DeleteRingTonePlayerERPNS_12QTMSRingToneE @ 60 NONAME
+	_ZN4QTMS11QTMSFactory22CreateInbandTonePlayerERPNS_14QTMSInbandToneE @ 61 NONAME
+	_ZN4QTMS11QTMSFactory22DeleteInbandTonePlayerERPNS_14QTMSInbandToneE @ 62 NONAME
+	_ZN4QTMS11QTMSFactoryC1Ev @ 63 NONAME
+	_ZN4QTMS11QTMSFactoryC2Ev @ 64 NONAME
+	_ZN4QTMS11QTMSFactoryD0Ev @ 65 NONAME
+	_ZN4QTMS11QTMSFactoryD1Ev @ 66 NONAME
+	_ZN4QTMS11QTMSFactoryD2Ev @ 67 NONAME
+	_ZN4QTMS13QTMSAMRFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 68 NONAME
+	_ZN4QTMS13QTMSAMRFormat11qt_metacastEPKc @ 69 NONAME
+	_ZN4QTMS13QTMSAMRFormat16staticMetaObjectE @ 70 NONAME DATA 16
+	_ZN4QTMS13QTMSAMRFormat19getStaticMetaObjectEv @ 71 NONAME
+	_ZN4QTMS13QTMSAMRFormatC1Ev @ 72 NONAME
+	_ZN4QTMS13QTMSAMRFormatC2Ev @ 73 NONAME
+	_ZN4QTMS13QTMSAMRFormatD0Ev @ 74 NONAME
+	_ZN4QTMS13QTMSAMRFormatD1Ev @ 75 NONAME
+	_ZN4QTMS13QTMSAMRFormatD2Ev @ 76 NONAME
+	_ZN4QTMS13QTMSMicSource11qt_metacallEN11QMetaObject4CallEiPPv @ 77 NONAME
+	_ZN4QTMS13QTMSMicSource11qt_metacastEPKc @ 78 NONAME
+	_ZN4QTMS13QTMSMicSource16staticMetaObjectE @ 79 NONAME DATA 16
+	_ZN4QTMS13QTMSMicSource19getStaticMetaObjectEv @ 80 NONAME
+	_ZN4QTMS13QTMSMicSource7GetTypeERi @ 81 NONAME
+	_ZN4QTMS13QTMSMicSourceC1Ev @ 82 NONAME
+	_ZN4QTMS13QTMSMicSourceC2Ev @ 83 NONAME
+	_ZN4QTMS13QTMSMicSourceD0Ev @ 84 NONAME
+	_ZN4QTMS13QTMSMicSourceD1Ev @ 85 NONAME
+	_ZN4QTMS13QTMSMicSourceD2Ev @ 86 NONAME
+	_ZN4QTMS13QTMSModemSink11qt_metacallEN11QMetaObject4CallEiPPv @ 87 NONAME
+	_ZN4QTMS13QTMSModemSink11qt_metacastEPKc @ 88 NONAME
+	_ZN4QTMS13QTMSModemSink16staticMetaObjectE @ 89 NONAME DATA 16
+	_ZN4QTMS13QTMSModemSink19getStaticMetaObjectEv @ 90 NONAME
+	_ZN4QTMS13QTMSModemSink7GetTypeERi @ 91 NONAME
+	_ZN4QTMS13QTMSModemSinkC1Ev @ 92 NONAME
+	_ZN4QTMS13QTMSModemSinkC2Ev @ 93 NONAME
+	_ZN4QTMS13QTMSModemSinkD0Ev @ 94 NONAME
+	_ZN4QTMS13QTMSModemSinkD1Ev @ 95 NONAME
+	_ZN4QTMS13QTMSModemSinkD2Ev @ 96 NONAME
+	_ZN4QTMS13QTMSPCMFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 97 NONAME
+	_ZN4QTMS13QTMSPCMFormat11qt_metacastEPKc @ 98 NONAME
+	_ZN4QTMS13QTMSPCMFormat16staticMetaObjectE @ 99 NONAME DATA 16
+	_ZN4QTMS13QTMSPCMFormat19getStaticMetaObjectEv @ 100 NONAME
+	_ZN4QTMS13QTMSPCMFormatC1Ev @ 101 NONAME
+	_ZN4QTMS13QTMSPCMFormatC2Ev @ 102 NONAME
+	_ZN4QTMS13QTMSPCMFormatD0Ev @ 103 NONAME
+	_ZN4QTMS13QTMSPCMFormatD1Ev @ 104 NONAME
+	_ZN4QTMS13QTMSPCMFormatD2Ev @ 105 NONAME
+	_ZN4QTMS14QTMSClientSink11qt_metacallEN11QMetaObject4CallEiPPv @ 106 NONAME
+	_ZN4QTMS14QTMSClientSink11qt_metacastEPKc @ 107 NONAME
+	_ZN4QTMS14QTMSClientSink13ProcessBufferEPKN3TMS9TMSBufferE @ 108 NONAME
+	_ZN4QTMS14QTMSClientSink15BufferProcessedEPN3TMS9TMSBufferE @ 109 NONAME
+	_ZN4QTMS14QTMSClientSink16staticMetaObjectE @ 110 NONAME DATA 16
+	_ZN4QTMS14QTMSClientSink19getStaticMetaObjectEv @ 111 NONAME
+	_ZN4QTMS14QTMSClientSink7GetTypeERi @ 112 NONAME
+	_ZN4QTMS14QTMSClientSinkC1Ev @ 113 NONAME
+	_ZN4QTMS14QTMSClientSinkC2Ev @ 114 NONAME
+	_ZN4QTMS14QTMSClientSinkD0Ev @ 115 NONAME
+	_ZN4QTMS14QTMSClientSinkD1Ev @ 116 NONAME
+	_ZN4QTMS14QTMSClientSinkD2Ev @ 117 NONAME
+	_ZN4QTMS14QTMSG711Format10GetVADModeERi @ 118 NONAME
+	_ZN4QTMS14QTMSG711Format10SetVADModeEi @ 119 NONAME
+	_ZN4QTMS14QTMSG711Format11qt_metacallEN11QMetaObject4CallEiPPv @ 120 NONAME
+	_ZN4QTMS14QTMSG711Format11qt_metacastEPKc @ 121 NONAME
+	_ZN4QTMS14QTMSG711Format16staticMetaObjectE @ 122 NONAME DATA 16
+	_ZN4QTMS14QTMSG711Format19getStaticMetaObjectEv @ 123 NONAME
+	_ZN4QTMS14QTMSG711Format6GetCNGERi @ 124 NONAME
+	_ZN4QTMS14QTMSG711Format6GetPlcERi @ 125 NONAME
+	_ZN4QTMS14QTMSG711Format6SetCNGEi @ 126 NONAME
+	_ZN4QTMS14QTMSG711Format6SetPlcEi @ 127 NONAME
+	_ZN4QTMS14QTMSG711Format7GetModeERi @ 128 NONAME
+	_ZN4QTMS14QTMSG711Format7SetModeEi @ 129 NONAME
+	_ZN4QTMS14QTMSG711FormatC1Ev @ 130 NONAME
+	_ZN4QTMS14QTMSG711FormatC2Ev @ 131 NONAME
+	_ZN4QTMS14QTMSG711FormatD0Ev @ 132 NONAME
+	_ZN4QTMS14QTMSG711FormatD1Ev @ 133 NONAME
+	_ZN4QTMS14QTMSG711FormatD2Ev @ 134 NONAME
+	_ZN4QTMS14QTMSG729Format10GetVADModeERi @ 135 NONAME
+	_ZN4QTMS14QTMSG729Format10SetVADModeEi @ 136 NONAME
+	_ZN4QTMS14QTMSG729Format11qt_metacallEN11QMetaObject4CallEiPPv @ 137 NONAME
+	_ZN4QTMS14QTMSG729Format11qt_metacastEPKc @ 138 NONAME
+	_ZN4QTMS14QTMSG729Format16staticMetaObjectE @ 139 NONAME DATA 16
+	_ZN4QTMS14QTMSG729Format19getStaticMetaObjectEv @ 140 NONAME
+	_ZN4QTMS14QTMSG729FormatC1Ev @ 141 NONAME
+	_ZN4QTMS14QTMSG729FormatC2Ev @ 142 NONAME
+	_ZN4QTMS14QTMSG729FormatD0Ev @ 143 NONAME
+	_ZN4QTMS14QTMSG729FormatD1Ev @ 144 NONAME
+	_ZN4QTMS14QTMSG729FormatD2Ev @ 145 NONAME
+	_ZN4QTMS14QTMSGainEffect11GetMaxLevelERj @ 146 NONAME
+	_ZN4QTMS14QTMSGainEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 147 NONAME
+	_ZN4QTMS14QTMSGainEffect11qt_metacastEPKc @ 148 NONAME
+	_ZN4QTMS14QTMSGainEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 149 NONAME
+	_ZN4QTMS14QTMSGainEffect16staticMetaObjectE @ 150 NONAME DATA 16
+	_ZN4QTMS14QTMSGainEffect19getStaticMetaObjectEv @ 151 NONAME
+	_ZN4QTMS14QTMSGainEffect7GetTypeERi @ 152 NONAME
+	_ZN4QTMS14QTMSGainEffect8GetLevelERj @ 153 NONAME
+	_ZN4QTMS14QTMSGainEffect8SetLevelEj @ 154 NONAME
+	_ZN4QTMS14QTMSGainEffectC1Ev @ 155 NONAME
+	_ZN4QTMS14QTMSGainEffectC2Ev @ 156 NONAME
+	_ZN4QTMS14QTMSGainEffectD0Ev @ 157 NONAME
+	_ZN4QTMS14QTMSGainEffectD1Ev @ 158 NONAME
+	_ZN4QTMS14QTMSGainEffectD2Ev @ 159 NONAME
+	_ZN4QTMS14QTMSILBCFormat10GetVADModeERi @ 160 NONAME
+	_ZN4QTMS14QTMSILBCFormat10SetVADModeEi @ 161 NONAME
+	_ZN4QTMS14QTMSILBCFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 162 NONAME
+	_ZN4QTMS14QTMSILBCFormat11qt_metacastEPKc @ 163 NONAME
+	_ZN4QTMS14QTMSILBCFormat16staticMetaObjectE @ 164 NONAME DATA 16
+	_ZN4QTMS14QTMSILBCFormat19getStaticMetaObjectEv @ 165 NONAME
+	_ZN4QTMS14QTMSILBCFormat6GetCNGERi @ 166 NONAME
+	_ZN4QTMS14QTMSILBCFormat6SetCNGEi @ 167 NONAME
+	_ZN4QTMS14QTMSILBCFormat7GetModeERi @ 168 NONAME
+	_ZN4QTMS14QTMSILBCFormat7SetModeEi @ 169 NONAME
+	_ZN4QTMS14QTMSILBCFormatC1Ev @ 170 NONAME
+	_ZN4QTMS14QTMSILBCFormatC2Ev @ 171 NONAME
+	_ZN4QTMS14QTMSILBCFormatD0Ev @ 172 NONAME
+	_ZN4QTMS14QTMSILBCFormatD1Ev @ 173 NONAME
+	_ZN4QTMS14QTMSILBCFormatD2Ev @ 174 NONAME
+	_ZN4QTMS14QTMSInbandTone11qt_metacallEN11QMetaObject4CallEiPPv @ 175 NONAME
+	_ZN4QTMS14QTMSInbandTone11qt_metacastEPKc @ 176 NONAME
+	_ZN4QTMS14QTMSInbandTone15InbandToneEventERKS0_NS_15QTMSSignalEventE @ 177 NONAME
+	_ZN4QTMS14QTMSInbandTone16staticMetaObjectE @ 178 NONAME DATA 16
+	_ZN4QTMS14QTMSInbandTone19getStaticMetaObjectEv @ 179 NONAME
+	_ZN4QTMS14QTMSInbandTone4StopEv @ 180 NONAME
+	_ZN4QTMS14QTMSInbandTone5StartEi @ 181 NONAME
+	_ZN4QTMS14QTMSInbandToneC1Ev @ 182 NONAME
+	_ZN4QTMS14QTMSInbandToneC2Ev @ 183 NONAME
+	_ZN4QTMS14QTMSInbandToneD0Ev @ 184 NONAME
+	_ZN4QTMS14QTMSInbandToneD1Ev @ 185 NONAME
+	_ZN4QTMS14QTMSInbandToneD2Ev @ 186 NONAME
+	_ZN4QTMS15QTMSModemSource11qt_metacallEN11QMetaObject4CallEiPPv @ 187 NONAME
+	_ZN4QTMS15QTMSModemSource11qt_metacastEPKc @ 188 NONAME
+	_ZN4QTMS15QTMSModemSource16staticMetaObjectE @ 189 NONAME DATA 16
+	_ZN4QTMS15QTMSModemSource19getStaticMetaObjectEv @ 190 NONAME
+	_ZN4QTMS15QTMSModemSource7GetTypeERi @ 191 NONAME
+	_ZN4QTMS15QTMSModemSourceC1Ev @ 192 NONAME
+	_ZN4QTMS15QTMSModemSourceC2Ev @ 193 NONAME
+	_ZN4QTMS15QTMSModemSourceD0Ev @ 194 NONAME
+	_ZN4QTMS15QTMSModemSourceD1Ev @ 195 NONAME
+	_ZN4QTMS15QTMSModemSourceD2Ev @ 196 NONAME
+	_ZN4QTMS15QTMSSpeakerSink11qt_metacallEN11QMetaObject4CallEiPPv @ 197 NONAME
+	_ZN4QTMS15QTMSSpeakerSink11qt_metacastEPKc @ 198 NONAME
+	_ZN4QTMS15QTMSSpeakerSink16staticMetaObjectE @ 199 NONAME DATA 16
+	_ZN4QTMS15QTMSSpeakerSink19getStaticMetaObjectEv @ 200 NONAME
+	_ZN4QTMS15QTMSSpeakerSink7GetTypeERi @ 201 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkC1Ev @ 202 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkC2Ev @ 203 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkD0Ev @ 204 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkD1Ev @ 205 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkD2Ev @ 206 NONAME
+	_ZN4QTMS16QTMSClientSource10FillBufferERN3TMS9TMSBufferE @ 207 NONAME
+	_ZN4QTMS16QTMSClientSource11qt_metacallEN11QMetaObject4CallEiPPv @ 208 NONAME
+	_ZN4QTMS16QTMSClientSource11qt_metacastEPKc @ 209 NONAME
+	_ZN4QTMS16QTMSClientSource12BufferFilledERN3TMS9TMSBufferE @ 210 NONAME
+	_ZN4QTMS16QTMSClientSource13ProcessBufferEPN3TMS9TMSBufferE @ 211 NONAME
+	_ZN4QTMS16QTMSClientSource14GetEnqueueModeERi @ 212 NONAME
+	_ZN4QTMS16QTMSClientSource14SetEnqueueModeEi @ 213 NONAME
+	_ZN4QTMS16QTMSClientSource15BufferProcessedEPKN3TMS9TMSBufferEi @ 214 NONAME
+	_ZN4QTMS16QTMSClientSource16staticMetaObjectE @ 215 NONAME DATA 16
+	_ZN4QTMS16QTMSClientSource19getStaticMetaObjectEv @ 216 NONAME
+	_ZN4QTMS16QTMSClientSource5FlushEv @ 217 NONAME
+	_ZN4QTMS16QTMSClientSource7GetTypeERi @ 218 NONAME
+	_ZN4QTMS16QTMSClientSourceC1Ev @ 219 NONAME
+	_ZN4QTMS16QTMSClientSourceC2Ev @ 220 NONAME
+	_ZN4QTMS16QTMSClientSourceD0Ev @ 221 NONAME
+	_ZN4QTMS16QTMSClientSourceD1Ev @ 222 NONAME
+	_ZN4QTMS16QTMSClientSourceD2Ev @ 223 NONAME
+	_ZN4QTMS16QTMSVolumeEffect11GetMaxLevelERj @ 224 NONAME
+	_ZN4QTMS16QTMSVolumeEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 225 NONAME
+	_ZN4QTMS16QTMSVolumeEffect11qt_metacastEPKc @ 226 NONAME
+	_ZN4QTMS16QTMSVolumeEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 227 NONAME
+	_ZN4QTMS16QTMSVolumeEffect16staticMetaObjectE @ 228 NONAME DATA 16
+	_ZN4QTMS16QTMSVolumeEffect19getStaticMetaObjectEv @ 229 NONAME
+	_ZN4QTMS16QTMSVolumeEffect7GetTypeERi @ 230 NONAME
+	_ZN4QTMS16QTMSVolumeEffect8GetLevelERj @ 231 NONAME
+	_ZN4QTMS16QTMSVolumeEffect8SetLevelEj @ 232 NONAME
+	_ZN4QTMS16QTMSVolumeEffectC1Ev @ 233 NONAME
+	_ZN4QTMS16QTMSVolumeEffectC2Ev @ 234 NONAME
+	_ZN4QTMS16QTMSVolumeEffectD0Ev @ 235 NONAME
+	_ZN4QTMS16QTMSVolumeEffectD1Ev @ 236 NONAME
+	_ZN4QTMS16QTMSVolumeEffectD2Ev @ 237 NONAME
+	_ZN4QTMS17QTMSGlobalRouting11qt_metacallEN11QMetaObject4CallEiPPv @ 238 NONAME
+	_ZN4QTMS17QTMSGlobalRouting11qt_metacastEPKc @ 239 NONAME
+	_ZN4QTMS17QTMSGlobalRouting16staticMetaObjectE @ 240 NONAME DATA 16
+	_ZN4QTMS17QTMSGlobalRouting17GetPreviousOutputERi @ 241 NONAME
+	_ZN4QTMS17QTMSGlobalRouting18GlobalRoutingEventERKS0_NS_15QTMSSignalEventEi @ 242 NONAME
+	_ZN4QTMS17QTMSGlobalRouting19GetAvailableOutputsERSt6vectorIjSaIjEE @ 243 NONAME
+	_ZN4QTMS17QTMSGlobalRouting19getStaticMetaObjectEv @ 244 NONAME
+	_ZN4QTMS17QTMSGlobalRouting9GetOutputERi @ 245 NONAME
+	_ZN4QTMS17QTMSGlobalRouting9SetOutputEi @ 246 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingC1Ev @ 247 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingC2Ev @ 248 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingD0Ev @ 249 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingD1Ev @ 250 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingD2Ev @ 251 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect11GetMaxLevelERj @ 252 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 253 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect11qt_metacastEPKc @ 254 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 255 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect16staticMetaObjectE @ 256 NONAME DATA 16
+	_ZN4QTMS19QTMSGlobalVolEffect19getStaticMetaObjectEv @ 257 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect7GetTypeERi @ 258 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect8GetLevelERj @ 259 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect8SetLevelEj @ 260 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectC1Ev @ 261 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectC2Ev @ 262 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectD0Ev @ 263 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectD1Ev @ 264 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectD2Ev @ 265 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect11GetMaxLevelERj @ 266 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 267 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect11qt_metacastEPKc @ 268 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 269 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect16staticMetaObjectE @ 270 NONAME DATA 16
+	_ZN4QTMS20QTMSGlobalGainEffect19getStaticMetaObjectEv @ 271 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect7GetTypeERi @ 272 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect8GetLevelERj @ 273 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect8SetLevelEj @ 274 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectC1Ev @ 275 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectC2Ev @ 276 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectD0Ev @ 277 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectD1Ev @ 278 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectD2Ev @ 279 NONAME
+	_ZN4QTMS8QTMSCall11GetCallTypeEv @ 280 NONAME
+	_ZN4QTMS8QTMSCall11qt_metacallEN11QMetaObject4CallEiPPv @ 281 NONAME
+	_ZN4QTMS8QTMSCall11qt_metacastEPKc @ 282 NONAME
+	_ZN4QTMS8QTMSCall12CreateStreamEiRPNS_10QTMSStreamE @ 283 NONAME
+	_ZN4QTMS8QTMSCall12DeleteStreamERPNS_10QTMSStreamE @ 284 NONAME
+	_ZN4QTMS8QTMSCall16GetCallContextIdERj @ 285 NONAME
+	_ZN4QTMS8QTMSCall16staticMetaObjectE @ 286 NONAME DATA 16
+	_ZN4QTMS8QTMSCall19getStaticMetaObjectEv @ 287 NONAME
+	_ZN4QTMS8QTMSCallC1Ev @ 288 NONAME
+	_ZN4QTMS8QTMSCallC2Ev @ 289 NONAME
+	_ZN4QTMS8QTMSCallD0Ev @ 290 NONAME
+	_ZN4QTMS8QTMSCallD1Ev @ 291 NONAME
+	_ZN4QTMS8QTMSCallD2Ev @ 292 NONAME
+	_ZN4QTMS8QTMSDTMF11qt_metacallEN11QMetaObject4CallEiPPv @ 293 NONAME
+	_ZN4QTMS8QTMSDTMF11qt_metacastEPKc @ 294 NONAME
+	_ZN4QTMS8QTMSDTMF16staticMetaObjectE @ 295 NONAME DATA 16
+	_ZN4QTMS8QTMSDTMF19getStaticMetaObjectEv @ 296 NONAME
+	_ZN4QTMS8QTMSDTMF25ContinueDTMFStringSendingEi @ 297 NONAME
+	_ZN4QTMS8QTMSDTMF4StopEv @ 298 NONAME
+	_ZN4QTMS8QTMSDTMF5StartEv @ 299 NONAME
+	_ZN4QTMS8QTMSDTMF7SetToneEP8_GString @ 300 NONAME
+	_ZN4QTMS8QTMSDTMF9DTMFEventERKS0_NS_15QTMSSignalEventE @ 301 NONAME
+	_ZN4QTMS8QTMSDTMFC1Ev @ 302 NONAME
+	_ZN4QTMS8QTMSDTMFC2Ev @ 303 NONAME
+	_ZN4QTMS8QTMSDTMFD0Ev @ 304 NONAME
+	_ZN4QTMS8QTMSDTMFD1Ev @ 305 NONAME
+	_ZN4QTMS8QTMSDTMFD2Ev @ 306 NONAME
+	_ZNK4QTMS10QTMSStream10metaObjectEv @ 307 NONAME
+	_ZNK4QTMS11QTMSFactory10metaObjectEv @ 308 NONAME
+	_ZNK4QTMS13QTMSAMRFormat10metaObjectEv @ 309 NONAME
+	_ZNK4QTMS13QTMSMicSource10metaObjectEv @ 310 NONAME
+	_ZNK4QTMS13QTMSModemSink10metaObjectEv @ 311 NONAME
+	_ZNK4QTMS13QTMSPCMFormat10metaObjectEv @ 312 NONAME
+	_ZNK4QTMS14QTMSClientSink10metaObjectEv @ 313 NONAME
+	_ZNK4QTMS14QTMSG711Format10metaObjectEv @ 314 NONAME
+	_ZNK4QTMS14QTMSG729Format10metaObjectEv @ 315 NONAME
+	_ZNK4QTMS14QTMSGainEffect10metaObjectEv @ 316 NONAME
+	_ZNK4QTMS14QTMSILBCFormat10metaObjectEv @ 317 NONAME
+	_ZNK4QTMS14QTMSInbandTone10metaObjectEv @ 318 NONAME
+	_ZNK4QTMS15QTMSModemSource10metaObjectEv @ 319 NONAME
+	_ZNK4QTMS15QTMSSpeakerSink10metaObjectEv @ 320 NONAME
+	_ZNK4QTMS16QTMSClientSource10metaObjectEv @ 321 NONAME
+	_ZNK4QTMS16QTMSVolumeEffect10metaObjectEv @ 322 NONAME
+	_ZNK4QTMS17QTMSGlobalRouting10metaObjectEv @ 323 NONAME
+	_ZNK4QTMS19QTMSGlobalVolEffect10metaObjectEv @ 324 NONAME
+	_ZNK4QTMS20QTMSGlobalGainEffect10metaObjectEv @ 325 NONAME
+	_ZNK4QTMS8QTMSCall10metaObjectEv @ 326 NONAME
+	_ZNK4QTMS8QTMSDTMF10metaObjectEv @ 327 NONAME
+	_ZTIN4QTMS10QTMSFormatE @ 328 NONAME
+	_ZTIN4QTMS10QTMSStreamE @ 329 NONAME
+	_ZTIN4QTMS11QTMSFactoryE @ 330 NONAME
+	_ZTIN4QTMS13QTMSAMRFormatE @ 331 NONAME
+	_ZTIN4QTMS13QTMSMicSourceE @ 332 NONAME
+	_ZTIN4QTMS13QTMSModemSinkE @ 333 NONAME
+	_ZTIN4QTMS13QTMSPCMFormatE @ 334 NONAME
+	_ZTIN4QTMS14QTMSClientSinkE @ 335 NONAME
+	_ZTIN4QTMS14QTMSG711FormatE @ 336 NONAME
+	_ZTIN4QTMS14QTMSG729FormatE @ 337 NONAME
+	_ZTIN4QTMS14QTMSGainEffectE @ 338 NONAME
+	_ZTIN4QTMS14QTMSILBCFormatE @ 339 NONAME
+	_ZTIN4QTMS14QTMSInbandToneE @ 340 NONAME
+	_ZTIN4QTMS15QTMSModemSourceE @ 341 NONAME
+	_ZTIN4QTMS15QTMSSpeakerSinkE @ 342 NONAME
+	_ZTIN4QTMS16QTMSClientSourceE @ 343 NONAME
+	_ZTIN4QTMS16QTMSVolumeEffectE @ 344 NONAME
+	_ZTIN4QTMS17QTMSGlobalRoutingE @ 345 NONAME
+	_ZTIN4QTMS19QTMSGlobalVolEffectE @ 346 NONAME
+	_ZTIN4QTMS20QTMSGlobalGainEffectE @ 347 NONAME
+	_ZTIN4QTMS8QTMSCallE @ 348 NONAME
+	_ZTIN4QTMS8QTMSDTMFE @ 349 NONAME
+	_ZTVN4QTMS10QTMSFormatE @ 350 NONAME
+	_ZTVN4QTMS10QTMSStreamE @ 351 NONAME
+	_ZTVN4QTMS11QTMSFactoryE @ 352 NONAME
+	_ZTVN4QTMS13QTMSAMRFormatE @ 353 NONAME
+	_ZTVN4QTMS13QTMSMicSourceE @ 354 NONAME
+	_ZTVN4QTMS13QTMSModemSinkE @ 355 NONAME
+	_ZTVN4QTMS13QTMSPCMFormatE @ 356 NONAME
+	_ZTVN4QTMS14QTMSClientSinkE @ 357 NONAME
+	_ZTVN4QTMS14QTMSG711FormatE @ 358 NONAME
+	_ZTVN4QTMS14QTMSG729FormatE @ 359 NONAME
+	_ZTVN4QTMS14QTMSGainEffectE @ 360 NONAME
+	_ZTVN4QTMS14QTMSILBCFormatE @ 361 NONAME
+	_ZTVN4QTMS14QTMSInbandToneE @ 362 NONAME
+	_ZTVN4QTMS15QTMSModemSourceE @ 363 NONAME
+	_ZTVN4QTMS15QTMSSpeakerSinkE @ 364 NONAME
+	_ZTVN4QTMS16QTMSClientSourceE @ 365 NONAME
+	_ZTVN4QTMS16QTMSVolumeEffectE @ 366 NONAME
+	_ZTVN4QTMS17QTMSGlobalRoutingE @ 367 NONAME
+	_ZTVN4QTMS19QTMSGlobalVolEffectE @ 368 NONAME
+	_ZTVN4QTMS20QTMSGlobalGainEffectE @ 369 NONAME
+	_ZTVN4QTMS8QTMSCallE @ 370 NONAME
+	_ZTVN4QTMS8QTMSDTMFE @ 371 NONAME
+	_ZThn8_N4QTMS13QTMSAMRFormatD0Ev @ 372 NONAME
+	_ZThn8_N4QTMS13QTMSAMRFormatD1Ev @ 373 NONAME
+	_ZThn8_N4QTMS13QTMSMicSource7GetTypeERi @ 374 NONAME
+	_ZThn8_N4QTMS13QTMSModemSink7GetTypeERi @ 375 NONAME
+	_ZThn8_N4QTMS13QTMSPCMFormatD0Ev @ 376 NONAME
+	_ZThn8_N4QTMS13QTMSPCMFormatD1Ev @ 377 NONAME
+	_ZThn8_N4QTMS14QTMSClientSink7GetTypeERi @ 378 NONAME
+	_ZThn8_N4QTMS14QTMSG711FormatD0Ev @ 379 NONAME
+	_ZThn8_N4QTMS14QTMSG711FormatD1Ev @ 380 NONAME
+	_ZThn8_N4QTMS14QTMSG729FormatD0Ev @ 381 NONAME
+	_ZThn8_N4QTMS14QTMSG729FormatD1Ev @ 382 NONAME
+	_ZThn8_N4QTMS14QTMSGainEffect7GetTypeERi @ 383 NONAME
+	_ZThn8_N4QTMS14QTMSILBCFormatD0Ev @ 384 NONAME
+	_ZThn8_N4QTMS14QTMSILBCFormatD1Ev @ 385 NONAME
+	_ZThn8_N4QTMS15QTMSModemSource7GetTypeERi @ 386 NONAME
+	_ZThn8_N4QTMS15QTMSSpeakerSink7GetTypeERi @ 387 NONAME
+	_ZThn8_N4QTMS16QTMSClientSource7GetTypeERi @ 388 NONAME
+	_ZThn8_N4QTMS16QTMSVolumeEffect7GetTypeERi @ 389 NONAME
+	_ZThn8_N4QTMS19QTMSGlobalVolEffect7GetTypeERi @ 390 NONAME
+	_ZThn8_N4QTMS20QTMSGlobalGainEffect7GetTypeERi @ 391 NONAME
+	_ZN4QTMS12QTMSRingTone11qt_metacallEN11QMetaObject4CallEiPPv @ 392 NONAME
+	_ZN4QTMS12QTMSRingTone11qt_metacastEPKc @ 393 NONAME
+	_ZN4QTMS12QTMSRingTone13RingtoneEventERKS0_NS_15QTMSSignalEventE @ 394 NONAME
+	_ZN4QTMS12QTMSRingTone16staticMetaObjectE @ 395 NONAME DATA 16
+	_ZN4QTMS12QTMSRingTone19getStaticMetaObjectEv @ 396 NONAME
+	_ZN4QTMS12QTMSRingTone4InitEiP8_GStringS2_ @ 397 NONAME
+	_ZN4QTMS12QTMSRingTone4MuteEv @ 398 NONAME
+	_ZN4QTMS12QTMSRingTone4PlayEv @ 399 NONAME
+	_ZN4QTMS12QTMSRingTone4StopEv @ 400 NONAME
+	_ZN4QTMS12QTMSRingTone5PauseEv @ 401 NONAME
+	_ZN4QTMS12QTMSRingTone6DeinitEv @ 402 NONAME
+	_ZN4QTMS12QTMSRingToneC1Ev @ 403 NONAME
+	_ZN4QTMS12QTMSRingToneC2Ev @ 404 NONAME
+	_ZN4QTMS12QTMSRingToneD0Ev @ 405 NONAME
+	_ZN4QTMS12QTMSRingToneD1Ev @ 406 NONAME
+	_ZN4QTMS12QTMSRingToneD2Ev @ 407 NONAME
+	_ZNK4QTMS12QTMSRingTone10metaObjectEv @ 408 NONAME
+	_ZTIN4QTMS12QTMSRingToneE @ 409 NONAME
+	_ZTVN4QTMS12QTMSRingToneE @ 410 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsamrimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_AMR_FORMAT_IMPL_H
+#define QTMS_AMR_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsamrformat.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+// Class declaration
+class QTMSAMRFormatImpl : public QTMSAMRFormat
+    {
+public:
+
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSAMRFormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& fmttype);
+
+private:
+    QTMSAMRFormatImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_AMR_FORMAT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsbufferimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_BUFFER_IMPL_H
+#define QTMS_BUFFER_IMPL_H
+
+#include <qtms.h>
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSBuffer;
+
+// TMSBufferImpl class
+class QTMSBufferImpl
+    {
+public:
+    static gint Create(QTMSBufferType ctype, guint size,
+            QTMSBuffer*& tmsbuffer);
+    static gint Delete(QTMSBuffer*& tmsbuffer);
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_BUFFER_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmscallimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CALL_IMPL_H
+#define QTMS_CALL_IMPL_H
+
+#include <glib.h>
+#include <qtmscall.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSCall;
+}
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSStream;
+class QTMSDTMF;
+class QTMSRingTone;
+
+// QTMSCallImpl class
+class QTMSCallImpl : public QTMSCall
+    {
+public:
+    static gint Create(QTMSCall*& qtmscall, TMS::TMSCall*& tmscall);
+
+    virtual ~QTMSCallImpl();
+
+    // From QTMSCallBody
+    // QTMSCallType GetCallType();
+    // gint GetCallContextId(guint& ctxid);
+    // gint CreateStream(QTMSStreamType type, QTMSStream*& strm);
+    // gint DeleteStream(QTMSStream*& strm);
+
+private:
+    // TMS::TMSCall* iTmsCall;
+    QTMSCallImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_CALL_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsclientsinkimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CLIENT_SINK_IMPL_H
+#define QTMS_CLIENT_SINK_IMPL_H
+
+#include <qtms.h>
+#include <qtmsclientsink.h>
+#include <tmsclientsinkobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSBuffer;
+class TMSSink;
+}
+
+namespace QTMS {
+
+// QTMSClientSinkImpl class
+class QTMSClientSinkImpl : public QTMSClientSink,
+                           public TMS::TMSClientSinkObserver
+    {
+public:
+    static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmsclientsink);
+    virtual ~QTMSClientSinkImpl();
+
+    gint AddObserver(TMS::TMSClientSinkObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSClientSinkObserver& obsrvr);
+
+    gint GetSink(TMS::TMSSink*& tmssink);
+
+    // From TMSClientSinkObserver
+    void ProcessBuffer(const TMS::TMSBuffer* buffer);
+
+private:
+    QTMSClientSinkImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_CLIENT_SINK_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsclientsourceimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CLIENT_SOURCE_IMPL_H
+#define QTMS_CLIENT_SOURCE_IMPL_H
+
+#include <qtms.h>
+#include <qtmsclientsource.h>
+#include <tmsclientsourceobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSBuffer;
+class TMSSource;
+}
+
+namespace QTMS {
+
+// QTMSClientSourceImpl class
+class QTMSClientSourceImpl : public QTMSClientSource,
+                             public TMS::TMSClientSourceObserver
+    {
+public:
+
+    static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource);
+    virtual ~QTMSClientSourceImpl();
+
+    gint AddObserver(TMS::TMSClientSourceObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSClientSourceObserver& obsrvr);
+
+    gint GetSource(TMS::TMSSource*& tmssource);
+
+    //From TMSClientSourceObserver
+    void FillBuffer(TMS::TMSBuffer& buffer);
+    void BufferProcessed(const TMS::TMSBuffer* buffer, gint reason);
+
+private:
+    QTMSClientSourceImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_CLIENT_SOURCE_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsdtmfimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_DTMF_IMPL_H
+#define QTMS_DTMF_IMPL_H
+
+#include <tms.h>
+#include <tmsdtmfobsrvr.h>
+#include <qtms.h>
+#include <qtmsdtmf.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSDTMF;
+}
+
+namespace QTMS {
+
+// QTMSDTMFImpl class
+class QTMSDTMFImpl : public QTMSDTMF,
+                     public TMS::TMSDTMFObserver
+    {
+public:
+    static gint Create(QTMSDTMF*& qdtmf, TMS::TMSDTMF*& tmsdtmf);
+    virtual ~QTMSDTMFImpl();
+
+    gint AddObserver(TMS::TMSDTMFObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSDTMFObserver& obsrvr);
+
+    //from TMS::TMSDTMFObserver
+    void DTMFEvent(const TMS::TMSDTMF& dtmf, TMS::TMSSignalEvent event);
+
+private:
+    QTMSDTMFImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_DTMF_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsfactoryimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMSFACTORYIMPL_H_
+#define QTMSFACTORYIMPL_H_
+
+#include <e32cmn.h>
+#include <qtms.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFactory;
+}
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSCall;
+class QTMSFormat;
+class QTMSEffect;
+class QTMSBuffer;
+class QTMSSource;
+class QTMSSink;
+class QTMSGlobalRouting;
+class QTMSRTPSession;
+class QTMSDTMF;
+class QTMSRingTone;
+class QTMSInbandTone;
+
+// CLASS DECLARATION
+class QTMSFactoryImpl
+    {
+public:
+    QTMSFactoryImpl();
+    virtual ~QTMSFactoryImpl();
+
+    gint CreateCall(QTMSCallType ctype, QTMSCall*& QTMScall, guint ctxid);
+    gint DeleteCall(QTMSCall*& QTMSct);
+    gint IsCallTypeSupported(QTMSCallType ctype, gboolean& flag);
+    gint GetSupportedFormats(const QTMSStreamType strmtype,
+            FormatVector& fmtlist);
+    gint CreateFormat(QTMSFormatType fmttype, QTMSFormat*& QTMSfmt);
+    gint DeleteFormat(QTMSFormat*& QTMSfmt);
+    gint CreateEffect(QTMSEffectType QTMSeffecttype,
+            QTMSEffect*& QTMSeffect);
+    gint DeleteEffect(QTMSEffect*& QTMSeffect);
+    gint CreateBuffer(QTMSBufferType buffertype, guint size,
+            QTMSBuffer*& QTMSbuffer);
+    gint DeleteBuffer(QTMSBuffer*& QTMSbuffer);
+    gint CreateSource(QTMSSourceType srctype, QTMSSource*& QTMSsrc);
+    gint DeleteSource(QTMSSource*& QTMSsrc);
+    gint CreateSink(QTMSSinkType sinktype, QTMSSink*& QTMSsink);
+    gint DeleteSink(QTMSSink*& QTMSsink);
+    gint CreateGlobalRouting(QTMSGlobalRouting*& globrouting);
+    gint DeleteGlobalRouting(QTMSGlobalRouting*& globrouting);
+    gint CreateDTMF(QTMSStreamType streamid, QTMSDTMF*& dtmf);
+    gint DeleteDTMF(QTMSDTMF*& dtmf);
+    gint CreateRTPSession(QTMSRTPSession*& rtpsession, guint8* sdp,
+            guint mode);
+    gint DeleteRTPSession(QTMSRTPSession*& rtpsession);
+    gint CreateRingTonePlayer(QTMSRingTone*& rt);
+    gint DeleteRingTonePlayer(QTMSRingTone*& rt);
+    gint CreateInbandTonePlayer(QTMSInbandTone*& inbandtone);
+    gint DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone);
+
+private:
+    TMS::TMSFactory *iFactory;
+    };
+
+} //namespace QTMS
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsg711impl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_G711_FORMAT_IMPL_H
+#define QTMS_G711_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsg711format.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+// QTMSG711FormatImpl class
+class QTMSG711FormatImpl : public QTMSG711Format
+    {
+public:
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSG711FormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& fmttype);
+
+private:
+    QTMSG711FormatImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_G711_FORMAT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsg729impl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_G729_FORMAT_IMPL_H
+#define QTMS_G729_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsg729format.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+// QTMSG729FormatImpl class
+class QTMSG729FormatImpl : public QTMSG729Format
+    {
+public:
+
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSG729FormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& fmttype);
+
+private:
+    QTMSG729FormatImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_G729_FORMAT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsgaineffectimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GAIN_EFFECT_IMPL_H
+#define QTMS_GAIN_EFFECT_IMPL_H
+
+#include <qtms.h>
+#include <tms.h>
+#include <qtmsgaineffect.h>
+#include <tmseffectobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSEffect;
+}
+
+namespace QTMS {
+
+// QTMSGainEffectImpl class
+class QTMSGainEffectImpl : public QTMSGainEffect,
+                           public TMS::TMSEffectObserver
+    {
+public:
+    static gint Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol);
+    virtual ~QTMSGainEffectImpl();
+
+    gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSEffectObserver& obsrvr);
+
+    gint GetEffect(TMS::TMSEffect*& tmseffect);
+
+    //From TMSEffectObserver
+    void EffectsEvent(const TMS::TMSEffect& tmseffect,
+            TMS::TMSSignalEvent event);
+
+private:
+    QTMSGainEffectImpl();
+    gint PostConstruct();
+
+private:
+    gpointer iUserData;
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_GAIN_EFFECT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsglobalgaineffectimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_GAIN_EFFECT_IMPL_H
+#define QTMS_GLOBAL_GAIN_EFFECT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsglobalgaineffect.h>
+#include <tmseffectobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSEffect;
+}
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSEffect;
+
+// QTMSGlobalGainEffectImpl class
+class QTMSGlobalGainEffectImpl : public QTMSGlobalGainEffect,
+                                 public TMS::TMSEffectObserver
+    {
+public:
+    static gint Create(QTMSEffect*& qglobalgain,
+            TMS::TMSEffect*& tmsglobalgain);
+    virtual ~QTMSGlobalGainEffectImpl();
+
+    gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSEffectObserver& obsrvr);
+
+    //from TMSEffectObserver
+    void EffectsEvent(const TMS::TMSEffect& tmseffect,
+            TMS::TMSSignalEvent event);
+
+private:
+    QTMSGlobalGainEffectImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_GLOBAL_GAIN_EFFECT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsglobalroutingimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_ROUTING_IMPL_H
+#define QTMS_GLOBAL_ROUTING_IMPL_H
+
+#include <tms.h>
+#include <qtms.h>
+#include <qtmsglobalrouting.h>
+#include <tmsglobalroutingobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSGlobalRouting;
+}
+
+namespace QTMS {
+
+// QTMSGlobalRoutingImpl class
+class QTMSGlobalRoutingImpl : public QTMSGlobalRouting,
+                              public TMS::TMSGlobalRoutingObserver
+    {
+public:
+
+    static gint Create(QTMSGlobalRouting*& qrouting,
+            TMS::TMSGlobalRouting*& tmsrouting);
+    virtual ~QTMSGlobalRoutingImpl();
+
+    gint AddObserver(TMS::TMSGlobalRoutingObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSGlobalRoutingObserver& obsrvr);
+
+    //from TMSGlobalRoutingObserver
+    void GlobalRoutingEvent(const TMS::TMSGlobalRouting& routing,
+            TMS::TMSSignalEvent event, TMS::TMSAudioOutput output);
+
+private:
+    QTMSGlobalRoutingImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_GLOBAL_ROUTING_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsglobalvoleffectimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H
+#define QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsglobalvoleffect.h>
+#include <tmseffectobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSEffect;
+}
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSEffect;
+
+// QTMSGlobalVolEffectImpl class
+class QTMSGlobalVolEffectImpl : public QTMSGlobalVolEffect,
+                                public TMS::TMSEffectObserver
+    {
+public:
+
+    static gint Create(QTMSEffect*& qglobalvol, TMS::TMSEffect*& tmsglobalvol);
+    virtual ~QTMSGlobalVolEffectImpl();
+
+    gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSEffectObserver& obsrvr);
+
+    //from TMSEffectObserver
+    void EffectsEvent(const TMS::TMSEffect& tmseffect,
+            TMS::TMSSignalEvent event);
+
+private:
+    QTMSGlobalVolEffectImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsilbcimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_ILBC_FORMAT_IMPL_H
+#define QTMS_ILBC_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsilbcformat.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+// QTMSILBCFormatImpl class
+class QTMSILBCFormatImpl : public QTMSILBCFormat
+    {
+public:
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSILBCFormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& fmttype);
+
+private:
+    QTMSILBCFormatImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_ILBC_FORMAT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsinbandtoneimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_INBAND_IMPL_H
+#define QTMS_INBAND_IMPL_H
+
+#include <tmsinbandtoneobsrvr.h>
+#include <qtms.h>
+#include <qtmsinbandtone.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSInbandTone;
+}
+
+namespace QTMS {
+
+// QTMSInbandImpl class
+class QTMSInbandToneImpl : public QTMSInbandTone,
+                           public TMS::TMSInbandToneObserver
+    {
+public:
+    static gint Create(QTMSInbandTone*& qinband,
+            TMS::TMSInbandTone*& tmsinband);
+    virtual ~QTMSInbandToneImpl();
+
+    gint AddObserver(TMS::TMSInbandToneObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSInbandToneObserver& obsrvr);
+
+    //from TMS::TMSInbandToneObserver
+    void InbandToneEvent(const TMS::TMSInbandTone& inbandtone,
+            TMS::TMSSignalEvent event);
+
+private:
+    QTMSInbandToneImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_DTMF_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsmembuffer.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MEM_BUFFER_H
+#define QTMS_MEM_BUFFER_H
+
+#include <qtmsbuffer.h>
+
+namespace QTMS {
+
+// QTMSMemBuffer class
+class QTMSMemBuffer : public QTMSBuffer
+    {
+public:
+    virtual ~QTMSMemBuffer();
+
+    /**
+     * Creates Memory Buffer object of the given size.
+     * The memory is allocated on the heap.
+     *
+     * @param  size
+     *      Size of the buffer to be created.
+     *
+     * @param  buffer
+     *      Created buffer object.
+     *
+     * @return
+     *      TMS_RESULT_SUCCESS if buffer is created successfully.
+     *      TMS_RESULT_INSUFFICIENT_MEMORY if buffer creation failed due to
+     *      insufficient memory.
+     *      TMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED if the buffer type is not
+     *      supported.
+     *
+     */
+    static gint Create(guint size, QTMSBuffer*& buffer);
+
+    /**
+     * Return buffer type.
+     *
+     * @param  buftype
+     *      Type of the buffer object (QTMS_BUFFER_MEMORY).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSBufferType& buftype);
+
+    /**
+     Gets the timestamp on the Buffer so that the framework can
+     determine the time at which this buffer has to be rendered
+     by the output device sink.
+
+     @param ts
+     timestamp in microseconds
+     */
+    virtual gint GetTimeStamp(guint64& ts);
+
+    /**
+     Sets the timestamp on the Buffer so that the framework can
+     determine the time at which this buffer has to be rendered
+     by the output device sink.
+
+     @param ts
+     timestamp in milliseconds
+     */
+    virtual gint SetTimeStamp(const guint64 ts);
+
+    /**
+     Gets the size of data in the buffer specified by the client.
+
+     @param size
+     size of data in bytes
+     */
+    virtual gint GetDataSize(guint& size);
+
+    /**
+     Sets the size of data in the buffer after the client
+     fill it.
+
+     @param size
+     size of data in bytes
+     */
+    virtual gint SetDataSize(const guint size);
+
+    /**
+     Gets the pointer to the memory location associated with this
+     buffer where the data is stored.
+
+     @param bufptr
+     ptr to the data stored in the buffer.
+     */
+    virtual gint GetDataPtr(guint8*& bufptr);
+
+private:
+    QTMSMemBuffer();
+    gint PostConstruct(guint size);
+
+private:
+    guint iBufferSize;
+    guint iTimeStamp;
+    guint8* iDataPtr;
+    gboolean iOwnsBuffer;
+    };
+
+} //namespace QTMS
+
+#endif //QTMS_MEM_BUFFER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsmicsourceimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MIC_SOURCE_IMPL_H
+#define QTMS_MIC_SOURCE_IMPL_H
+
+#include <qtms.h>
+#include <qtmsmicsource.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSource;
+}
+
+namespace QTMS {
+
+// QTMSMicSourceImpl class
+class QTMSMicSourceImpl : public QTMSMicSource
+    {
+public:
+    static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource);
+    virtual ~QTMSMicSourceImpl();
+    gint GetSource(TMS::TMSSource*& tmssource);
+
+private:
+    QTMSMicSourceImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_MIC_SOURCE_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsmodemsinkimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MODEM_SINK_IMPL_H
+#define QTMS_MODEM_SINK_IMPL_H
+
+#include <qtms.h>
+#include <qtmsmodemsink.h>
+#include <qtmssink.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSink;
+}
+
+namespace QTMS {
+
+// QTMSModemSinkImpl class
+class QTMSModemSinkImpl : public QTMSModemSink
+    {
+public:
+    static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink);
+    virtual ~QTMSModemSinkImpl();
+
+    gint GetSink(TMS::TMSSink*& tmssink);
+
+private:
+    QTMSModemSinkImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_MODEM_SINK_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsmodemsourceimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MODEM_SOURCE_IMPL_H
+#define QTMS_MODEM_SOURCE_IMPL_H
+
+#include <qtms.h>
+#include <qtmsmodemsource.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSource;
+}
+
+namespace QTMS {
+
+// QTMSModemSourceImpl class
+class QTMSModemSourceImpl : public QTMSModemSource
+    {
+public:
+    static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource);
+    virtual ~QTMSModemSourceImpl();
+
+    gint GetSource(TMS::TMSSource*& tmssource);
+
+private:
+    QTMSModemSourceImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_MODEM_SOURCE_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmspcmimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_PCM_FORMAT_IMPL_H
+#define QTMS_PCM_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmspcmformat.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSFormat;
+}
+
+namespace QTMS {
+
+// QTMSPCMFormatImpl class
+class QTMSPCMFormatImpl : public QTMSPCMFormat
+    {
+public:
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSPCMFormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& Formattype);
+
+private:
+    QTMSPCMFormatImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_PCM_FORMAT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsringtoneimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMSRINGTONEBODYIMPL_H
+#define QTMSRINGTONEBODYIMPL_H
+
+#include <tms.h>
+#include <tmsringtoneobsrvr.h>
+#include <qtms.h>
+#include <qtmsringtone.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSRingTone;
+}
+
+namespace QTMS {
+
+// QTMSRingToneImpl class
+class QTMSRingToneImpl : public QTMSRingTone,
+                         public TMS::TMSRingToneObserver
+    {
+public:
+    static gint Create(QTMSRingTone*& qrt, TMS::TMSRingTone*& tmsrt);
+    virtual ~QTMSRingToneImpl();
+
+    gint AddObserver(TMS::TMSRingToneObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSRingToneObserver& obsrvr);
+
+    //from TMS::TMSRingToneObserver
+    void RingtoneEvent(const TMS::TMSRingTone& rt, TMS::TMSSignalEvent event);
+
+private:
+    QTMSRingToneImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif //QTMSRINGTONEBODYIMPL_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmssinkimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SINK_IMPL_H
+#define QTMS_SINK_IMPL_H
+
+#include <qtms.h>
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSSink;
+
+// TMSSinkImpl class
+class QTMSSinkImpl
+    {
+public:
+    static gint Create(QTMSSinkType sinktype, QTMSSink*& tmssink);
+    static gint Delete(QTMSSink*& tmssink);
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_SINK_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmssourceimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SOURCE_IMPL_H
+#define QTMS_SOURCE_IMPL_H
+
+#include <qtms.h>
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSSource;
+
+// TMSSourceImpl class
+class QTMSSourceImpl
+    {
+public:
+    static gint Create(QTMSSourceType sourcetype, QTMSSource*& tmssource);
+    static gint Delete(QTMSSource*& tmssource);
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_SOURCE_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsspeakersinkimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SPEAKER_SINK_IMPL_H
+#define QTMS_SPEAKER_SINK_IMPL_H
+
+#include <qtms.h>
+#include <qtmsspeakersink.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSSink;
+}
+
+namespace QTMS {
+
+// QTMSSpeakerSinkImpl class
+class QTMSSpeakerSinkImpl : public QTMSSpeakerSink
+    {
+public:
+    static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink);
+    virtual ~QTMSSpeakerSinkImpl();
+
+    gint GetSink(TMS::TMSSink*& tmssink);
+
+private:
+    QTMSSpeakerSinkImpl();
+    gint PostConstruct();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_SPEAKER_SINK_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsstreamimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_STREAM_IMPL_H
+#define QTMS_STREAM_IMPL_H
+
+#include <qtms.h>
+#include <qtmsstream.h>
+#include <tmsstreamobsrvr.h>
+#include <QObject>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSStream;
+}
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+//class QTMSStream;
+class QTMSSource;
+class QTMSSink;
+class QTMSForamt;
+class QTMSEffect;
+class QTMSBuffer;
+class QTMSFormat;
+
+// QTMSStreamImpl class
+class QTMSStreamImpl : public QTMSStream,
+                       public TMS::TMSStreamObserver
+
+    {
+    enum TQueueType
+        {
+        EMsgBufQueue,
+        EMsgComQueue
+        };
+
+public:
+    static gint Create(QTMSCallType callType, QTMSStreamType stype,
+            QTMSStream*& qstrm, TMS::TMSStream*& tmsstrm);
+
+    virtual ~QTMSStreamImpl();
+
+    // From QTMSStreamBody
+    gint AddObserver(TMS::TMSStreamObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSStreamObserver& obsrvr);
+
+    // From TMSStreamObserver
+    void TMSStreamEvent(const TMS::TMSStream& stream,
+            TMS::TMSSignalEvent event);
+
+protected:
+    QTMSStreamImpl();
+
+    gint PostConstruct(QTMSCallType callType, QTMSStreamType stype,
+            QTMSStream& parent);
+
+    gint CreateQueue(const gint aNumSlots);
+    void ReceiveMsgQHandlerEventsL();
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_STREAM_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsvolumeeffectimpl.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_VOLUME_EFFECT_IMPL_H
+#define QTMS_VOLUME_EFFECT_IMPL_H
+
+#include <qtms.h>
+#include <tms.h>
+#include <qtmsvolumeeffect.h>
+#include <tmseffectobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS {
+class TMSEffect;
+}
+
+namespace QTMS {
+
+// QTMSVolumeEffectImpl class
+class QTMSVolumeEffectImpl : public QTMSVolumeEffect,
+                             public TMS::TMSEffectObserver
+    {
+public:
+    static gint Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol);
+    virtual ~QTMSVolumeEffectImpl();
+
+    gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSEffectObserver& obsrvr);
+
+    gint GetEffect(TMS::TMSEffect*& tmseffect);
+
+    //From TMSEffectObserver
+    void EffectsEvent(const TMS::TMSEffect& tmseffect,
+            TMS::TMSSignalEvent event);
+
+private:
+    QTMSVolumeEffectImpl();
+    gint PostConstruct();
+
+private:
+    gpointer iUserData;
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_VOLUME_EFFECT_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmswrapperexport.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* 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 the License "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 QTMS_WRAPPER_EXPORT_H_
+#define QTMS_WRAPPER_EXPORT_H_
+
+// System includes
+#include <qglobal.h>
+
+#ifdef BUILD_TMS_WRAPPER_DLL
+    #define QTMS_WRAPPER_DLL_EXPORT Q_DECL_EXPORT
+#else
+    #define QTMS_WRAPPER_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // QTMS_WRAPPER_EXPORT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/tmsutility.h	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef __TMSUTILITY_H__
+#define __TMSUTILITY_H__
+
+#include <e32std.h>
+#include <tms.h>
+#include <telephonyaudiorouting.h>
+#ifdef _DEBUG
+#include <e32debug.h>
+#endif
+
+namespace TMS {
+
+// DEBUG TRACE DEFINITIONS
+#ifdef _DEBUG
+#define TRACE_PRN_FN_ENT        RDebug::Printf("%s>ENTER", __PRETTY_FUNCTION__)
+#define TRACE_PRN_FN_EXT        RDebug::Printf("%s>EXIT", __PRETTY_FUNCTION__)
+#define TRACE_PRN_IF_ERR(err) if (err != KErrNone) RDebug::Printf( "%s>BREAK[%d]", __PRETTY_FUNCTION__, err )
+
+#define TRACE_PRN_0(str)              RDebug::Print(str, this)
+#define TRACE_PRN_1(str, val1)        RDebug::Print(str, this, val1)
+#define TRACE_PRN_2(str, val1, val2)  RDebug::Print(str, this, val1, val2)
+
+#define TRACE_PRN_N(str)              RDebug::Print(str)
+#define TRACE_PRN_N1(str, val1)       RDebug::Print(str, val1)
+#define TRACE_PRN_N2(str, val1, val2) RDebug::Print(str, val1, val2)
+#else
+#define TRACE_PRN_FN_ENT
+#define TRACE_PRN_FN_EXT
+#define TRACE_PRN_IF_ERR(err)
+#define TRACE_PRN_0(str)
+#define TRACE_PRN_1(str, val1)
+#define TRACE_PRN_2(str, val1, val2)
+#define TRACE_PRN_N(str)
+#define TRACE_PRN_N1(str, val1)
+#define TRACE_PRN_N2(str, val1, val2)
+#endif //_DEBUG
+
+
+// MACRO DEFINITIONS
+#define RET_ERR_IF_ERR(err) if ( err != 0) return err;
+#define RET_REASON_IF_ERR(s) if(s!=0) return s
+
+#define TMSRESULT(result) TMSUtility::TMSResult(result)
+#define TOTMSOUTPUT(output) TMSUtility::ToTMSOutput(output)
+#define TOTAROUTPUT(output) TMSUtility::ToTAROutput(output)
+#define TOFOURCC(format) TMSUtility::ToFourCC(format)
+#define TOTMSFORMAT(fourcc) TMSUtility::FourCCToTMSFormat(fourcc)
+
+// TMSUtility class
+class TMSUtility
+    {
+public:
+    IMPORT_C static gint TMSResult(const gint error);
+    IMPORT_C static gint EtelToTMSResult(const gint error);
+    IMPORT_C static TMSAudioOutput ToTMSOutput(
+            CTelephonyAudioRouting::TAudioOutput taroutput);
+    IMPORT_C static CTelephonyAudioRouting::TAudioOutput ToTAROutput(
+            TMSAudioOutput output);
+    IMPORT_C static TUint32 ToFourCC(TMSFormatType frmtType);
+    IMPORT_C static TMSFormatType FourCCToTMSFormat(TUint32 fourcc);
+    };
+
+} //namespace TMS
+
+#endif //__TMSUTILITY_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/qtmsapi.pro	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,154 @@
+#
+# 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: 
+#
+
+TEMPLATE = lib
+TARGET   = qtmsapi
+CONFIG  += dll
+DEFINES += BUILD_TMS_WRAPPER_DLL
+
+QT 			= core
+CONFIG -= gui
+
+
+    DEFINES += SYMBIAN
+    TARGET.CAPABILITY = All -tcb
+    TARGET.EPOCALLOWDLLDATA	= 1
+    TARGET.UID2 = 0x10009D8D
+    TARGET.UID3 = 0x10207CA5
+
+    
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+                             "rom/qtms.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(qtms.iby)" \
+                             "data/qtmsapi_stub.sis /epoc32/data/z/system/install/qtmsapi_stub.sis"
+
+                                      
+DEPENDPATH += . inc
+INCLUDEPATH += . \
+               .\inc
+
+
+
+qtmsDefFiles = \
+        "$${LITERAL_HASH}ifdef WINSCW" \
+        "DEFFILE bwins/qtms.def" \
+        "$${LITERAL_HASH}else" \
+        "DEFFILE eabi/qtms.def" \
+        "$${LITERAL_HASH}endif"
+
+MMP_RULES += qtmsDefFiles
+
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \
+               $$OS_LAYER_LIBC_SYSTEMINCLUDE \
+               $$OS_LAYER_GLIB_SYSTEMINCLUDE
+
+
+LIBS +=	-ltmsfactory \
+        -ltmsapi \
+        -ltmsutility \
+        -llibglib \
+        -llibgobject \
+        -llibgmodule \
+        -llibstdcpp
+
+
+# $$_PRO_FILE_PWD_ points to the directory of the pro file
+MOC_DIR = ./tmp
+
+INCLUDEPATH += . \
+               . inc \
+               ../ \
+               ../mmappfw_plat/qt_telephony_multimedia_service_api/inc/
+
+DEPENDPATH  += $$INCLUDEPATH src
+
+# Headers
+HEADERS += qtmsfactory.h \
+           qtmscall.h \
+           qtmsstream.h \
+           qtmsbuffer.h \
+           qtmsclientsource.h \
+           qtmsclientsink.h \
+           qtmsvolumeeffect.h \
+           qtmsgaineffect.h \
+           qtmsglobalgaineffect.h \
+           qtmsglobalvoleffect.h \
+           qtmsglobalrouting.h \
+           qtmsamrformat.h \
+           qtmspcmformat.h \
+           qtmsilbcformat.h \
+           qtmsg711format.h \
+           qtmsg729format.h \
+           qtmsformat.h \
+           qtmsmodemsink.h \
+           qtmsspeakersink.h \
+           qtmsmodemsource.h \
+           qtmsmicsource.h \
+           qtmsringtone.h \
+           qtmsdtmf.h \
+           qtmsinbandtone.h
+
+
+
+# Source
+SOURCES += qtmsfactory.cpp \
+           qtmsfactoryimpl.cpp \
+           qtmsmembuffer.cpp \
+           qtmsbufferimpl.cpp \
+           qtmscall.cpp \
+           qtmscallimpl.cpp \
+           qtmsstream.cpp \
+           qtmsstreamimpl.cpp \
+           qtmsclientsource.cpp \
+           qtmsclientsourceimpl.cpp \
+           qtmsclientsink.cpp \
+           qtmsclientsinkimpl.cpp \
+           qtmsvolumeeffect.cpp \
+           qtmsvolumeeffectimpl.cpp \
+           qtmsgaineffect.cpp \
+           qtmsgaineffectimpl.cpp \
+           qtmsglobalgaineffect.cpp \
+           qtmsglobalgaineffectimpl.cpp \
+           qtmsglobalvoleffect.cpp \
+           qtmsglobalvoleffectimpl.cpp \
+           qtmsglobalrouting.cpp \
+           qtmsglobalroutingimpl.cpp \
+           qtmspcm.cpp \
+           qtmspcmimpl.cpp \
+           qtmsilbc.cpp \
+           qtmsilbcimpl.cpp \
+           qtmsamr.cpp \
+           qtmsamrimpl.cpp \
+           qtmsg711.cpp \
+           qtmsg711impl.cpp \
+           qtmsg729.cpp \
+           qtmsg729impl.cpp \
+           qtmsformat.cpp \
+           qtmsmodemsink.cpp \
+           qtmsmodemsinkimpl.cpp \
+           qtmsspeakersink.cpp \
+           qtmsspeakersinkimpl.cpp \
+           qtmsmodemsource.cpp \
+           qtmsmodemsourceimpl.cpp \
+           qtmsmicsource.cpp \
+           qtmsmicsourceimpl.cpp \
+           qtmsringtone.cpp \
+           qtmsringtoneimpl.cpp \
+           qtmsdtmf.cpp \
+           qtmsdtmfimpl.cpp \
+           qtmsinbandtone.cpp \
+           qtmsinbandtoneimpl.cpp
+
+SYMBIAN_PLATFORMS = DEFAULT
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/rom/qtms.iby	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* 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:
+* Iby file for QTMS
+*
+*/
+
+
+#ifndef QTMS_IBY
+#define QTMS_IBY
+
+// Use standard macros
+#include <data_caging_paths_for_iby.hrh>
+
+#ifdef FF_TMS
+file=ABI_DIR\BUILD_DIR\qtmsapi.dll           SHARED_LIB_DIR\qtmsapi.dll
+
+//QTMS_Stub
+data=ZSYSTEM/install/qtmsapi_stub.sis        System/Install/qtmsapi_stub.sis
+
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsamr.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsamrformat.h>
+
+using namespace QTMS;
+
+QTMSAMRFormat::QTMSAMRFormat()
+    {
+    }
+
+QTMSAMRFormat::~QTMSAMRFormat()
+    {
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsamrimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsamrformat.h>
+#include "tmsutility.h"
+#include "qtmsamrimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSAMRFormatImpl::QTMSAMRFormatImpl()
+    {
+    }
+
+QTMSAMRFormatImpl::~QTMSAMRFormatImpl()
+    {
+    TRACE_PRN_FN_ENT;
+    TRACE_PRN_FN_EXT;
+    }
+
+gint QTMSAMRFormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat)
+    {
+    gint ret(TMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSAMRFormatImpl* self = new QTMSAMRFormatImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != TMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iFormat = tmsformat;
+        }
+    qformat = self;
+    return ret;
+    }
+
+gint QTMSAMRFormatImpl::PostConstruct()
+    {
+    gint ret(TMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSAMRFormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat)
+        {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+gint QTMSAMRFormatImpl::GetType(QTMSFormatType& fmttype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        //status = static_cast<TMSFormat*> (iFormat)->GetType(fmttype);
+        status = iFormat->GetType(fmttype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsbufferimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include "tmsutility.h"
+#include "qtmsmembuffer.h"
+#include "qtmsbufferimpl.h"
+
+using namespace QTMS;
+
+gint QTMSBufferImpl::Create(QTMSBufferType buffertype, guint size,
+        QTMSBuffer*& tmsbuffer)
+    {
+    gint ret(TMS_RESULT_INSUFFICIENT_MEMORY);
+    TRACE_PRN_FN_ENT;
+    switch (buffertype)
+        {
+        case QTMS_BUFFER_MEMORY:
+            ret = QTMSMemBuffer::Create(size, tmsbuffer);
+            break;
+        default:
+            ret = QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+gint QTMSBufferImpl::Delete(QTMSBuffer*& tmsbuffer)
+    {
+    gint ret(TMS_RESULT_INVALID_ARGUMENT);
+    TRACE_PRN_FN_ENT;
+    QTMSBufferType buffertype;
+    ret = tmsbuffer->GetType(buffertype);
+    switch (buffertype)
+        {
+        case QTMS_BUFFER_MEMORY:
+            delete (QTMSMemBuffer*) (tmsbuffer);
+            tmsbuffer = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            break;
+        default:
+            ret = QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmscall.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmscall.h>
+#include <qtmscall.h>
+#include <tmsstream.h>
+#include "qtmscallimpl.h"
+#include "qtmsstreamimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSCall::QTMSCall() :
+    iTmsCall(NULL)
+    {
+    }
+
+QTMSCall::~QTMSCall()
+    {
+    }
+
+QTMSCallType QTMSCall::GetCallType()
+    {
+    QTMSCallType calltype(-1);
+    if (iTmsCall)
+        {
+        calltype = iTmsCall->GetCallType();
+        }
+    return calltype;
+    }
+
+gint QTMSCall::GetCallContextId(guint& ctxid)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iTmsCall)
+        {
+        status = iTmsCall->GetCallContextId(ctxid);
+        }
+    return status;
+    }
+
+gint QTMSCall::CreateStream(const QTMSStreamType type, QTMSStream*& qstrm)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMSStream* tmsstrm(NULL);
+    if (iTmsCall)
+        {
+        status = iTmsCall->CreateStream(type, tmsstrm);
+        }
+
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        QTMSCallType calltype = iTmsCall->GetCallType();
+        switch (type)
+            {
+            case TMS_STREAM_UPLINK:
+            case TMS_STREAM_DOWNLINK:
+                status = QTMSStreamImpl::Create(calltype, type, qstrm, tmsstrm);
+                break;
+            default:
+                status = QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED;
+                break;
+            }
+        }
+    return status;
+    }
+
+gint QTMSCall::DeleteStream(QTMSStream*& strm)
+    {
+    gint status(QTMS_RESULT_SUCCESS);
+    //delete (static_cast<QTMSStreamImpl*> (strm));
+    delete strm;
+    strm = NULL;
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmscallimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmscall.h>
+#include <qtms.h>
+#include "qtmscallimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSCallImpl::QTMSCallImpl()
+    {
+    }
+
+QTMSCallImpl::~QTMSCallImpl()
+    {
+    }
+
+gint QTMSCallImpl::Create(QTMSCall*& qtmscall, TMS::TMSCall*& tmscall)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSCallImpl* self = new QTMSCallImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iTmsCall = tmscall;
+        }
+    qtmscall = self;
+    return ret;
+    }
+
+gint QTMSCallImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsclientsink.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsclientsink.h>
+#include <tmsbuffer.h>
+#include <qtmsclientsink.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSClientSink::QTMSClientSink() :
+    iSink(NULL)
+    {
+    }
+
+QTMSClientSink::~QTMSClientSink()
+    {
+    delete iSink;
+    }
+
+// Push mode
+gint QTMSClientSink::BufferProcessed(TMS::TMSBuffer* buffer)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink)
+        {
+        status = static_cast<TMSClientSink*> (iSink)->BufferProcessed(buffer);
+        }
+    return status;
+    }
+
+gint QTMSClientSink::GetType(QTMSSinkType& sinktype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink)
+        {
+        status = static_cast<TMSClientSink*> (iSink)->GetType(sinktype);
+        //status = iSink->GetType(sinktype); //virtual; should be ok
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsclientsinkimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsbuffer.h>
+#include <tmsclientsink.h>
+#include "qtmsclientsinkimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSClientSinkImpl::QTMSClientSinkImpl()
+    {
+    }
+
+QTMSClientSinkImpl::~QTMSClientSinkImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSClientSinkImpl::Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSClientSinkImpl* self = new QTMSClientSinkImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iSink = tmssink;
+        self->AddObserver(*self, NULL);
+        }
+    qsink = self;
+    return ret;
+    }
+
+gint QTMSClientSinkImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSClientSinkImpl::AddObserver(TMS::TMSClientSinkObserver& obsrvr,
+        gpointer user_data)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    if (iSink)
+        {
+        ret = static_cast<TMSClientSink*> (iSink)->AddObserver(obsrvr,
+                user_data);
+        }
+    return ret;
+    }
+
+gint QTMSClientSinkImpl::RemoveObserver(TMS::TMSClientSinkObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink)
+        {
+        ret = static_cast<TMSClientSink*> (iSink)->RemoveObserver(obsrvr);
+        }
+    return ret;
+    }
+
+gint QTMSClientSinkImpl::GetSink(TMS::TMSSink*& tmssink)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iSink)
+        {
+        tmssink = iSink;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+void QTMSClientSinkImpl::ProcessBuffer(const TMS::TMSBuffer* buffer)
+    {
+    emit QTMS::QTMSClientSink::ProcessBuffer(buffer);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsclientsource.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsclientsource.h>
+#include <tmsbuffer.h>
+#include <qtmsclientsource.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSClientSource::QTMSClientSource() :
+    iSource(NULL)
+    {
+    }
+
+QTMSClientSource::~QTMSClientSource()
+    {
+    delete iSource;
+    }
+
+gint QTMSClientSource::SetEnqueueMode(const gboolean enable)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        status = static_cast<TMSClientSource*> (iSource)->SetEnqueueMode(
+                enable);
+        }
+    return status;
+    }
+
+gint QTMSClientSource::GetEnqueueMode(gboolean& enable)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        status = static_cast<TMSClientSource*> (iSource)->GetEnqueueMode(
+                enable);
+        }
+    return status;
+    }
+
+gint QTMSClientSource::Flush()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        status = static_cast<TMSClientSource*> (iSource)->Flush();
+        }
+    return status;
+    }
+
+gint QTMSClientSource::GetType(QTMSSourceType& sourcetype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        status = static_cast<TMSClientSource*> (iSource)->GetType(sourcetype);
+        }
+    return status;
+    }
+
+gint QTMSClientSource::BufferFilled(TMS::TMSBuffer& buffer)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        status = static_cast<TMSClientSource*> (iSource)->BufferFilled(buffer);
+        }
+    return status;
+    }
+
+// Push mode
+gint QTMSClientSource::ProcessBuffer(TMS::TMSBuffer* buffer)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        status = static_cast<TMSClientSource*> (iSource)->ProcessBuffer(buffer);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsclientsourceimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsbuffer.h>
+#include <tmsclientsource.h>
+#include "qtmsclientsourceimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSClientSourceImpl::QTMSClientSourceImpl()
+    {
+    }
+
+QTMSClientSourceImpl::~QTMSClientSourceImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSClientSourceImpl::Create(QTMSSource*& qsource,
+        TMS::TMSSource*& tmssource)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSClientSourceImpl* self = new QTMSClientSourceImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iSource = tmssource;
+        self->AddObserver(*self, NULL);
+        }
+    qsource = self;
+    return ret;
+    }
+
+gint QTMSClientSourceImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSClientSourceImpl::AddObserver(TMS::TMSClientSourceObserver& obsrvr,
+        gpointer user_data)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        ret = static_cast<TMSClientSource*> (iSource)->AddObserver(obsrvr,
+                user_data);
+        }
+    return ret;
+    }
+
+gint QTMSClientSourceImpl::RemoveObserver(TMS::TMSClientSourceObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        ret = static_cast<TMSClientSource*> (iSource)->RemoveObserver(obsrvr);
+        }
+    return ret;
+    }
+
+gint QTMSClientSourceImpl::GetSource(TMS::TMSSource*& tmssource)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iSource)
+        {
+        tmssource = iSource;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+void QTMSClientSourceImpl::FillBuffer(TMS::TMSBuffer& buffer)
+    {
+    emit QTMS::QTMSClientSource::FillBuffer(buffer);
+    }
+
+void QTMSClientSourceImpl::BufferProcessed(const TMS::TMSBuffer* buffer,
+        gint reason)
+    {
+    emit QTMS::QTMSClientSource::BufferProcessed(buffer, reason);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsdtmf.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsdtmf.h>
+#include <qtmsdtmf.h>
+#include "qtmsdtmfimpl.h"
+//#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+
+QTMSDTMF::QTMSDTMF(void) :
+    iDtmf(NULL)
+    {
+    }
+
+QTMSDTMF::~QTMSDTMF(void)
+    {
+    delete iDtmf;
+    }
+
+gint QTMSDTMF::Start()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iDtmf)
+        {
+        status = iDtmf->Start();
+        }
+    return status;
+    }
+
+gint QTMSDTMF::Stop()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iDtmf)
+        {
+        status = iDtmf->Stop();
+        }
+    return status;
+    }
+
+gint QTMSDTMF::SetTone(GString* string)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iDtmf)
+        {
+        status = iDtmf->SetTone(string);
+        }
+    return status;
+    }
+
+gint QTMSDTMF::ContinueDTMFStringSending(gboolean aContinue)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iDtmf)
+        {
+        status = iDtmf->ContinueDTMFStringSending(aContinue);
+        }
+    return status;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsdtmfimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsdtmf.h>
+#include "tmsutility.h"
+#include "qtmsdtmfimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSDTMFImpl::QTMSDTMFImpl()
+    {
+    }
+
+QTMSDTMFImpl::~QTMSDTMFImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSDTMFImpl::Create(QTMSDTMF*& qdtmf, TMS::TMSDTMF*& tmsdtmf)
+    {
+    gint ret(TMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSDTMFImpl* self = new QTMSDTMFImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iDtmf = tmsdtmf;
+        ret = self->AddObserver(*self, NULL);
+        }
+    qdtmf = self;
+    return ret;
+    }
+
+gint QTMSDTMFImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSDTMFImpl::AddObserver(TMS::TMSDTMFObserver& obsrvr,
+        gpointer /*user_data*/)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iDtmf)
+        {
+        ret = iDtmf->AddObserver(obsrvr, NULL);
+        }
+    return ret;
+    }
+
+gint QTMSDTMFImpl::RemoveObserver(TMS::TMSDTMFObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iDtmf)
+        {
+        ret = iDtmf->RemoveObserver(obsrvr);
+        }
+    return ret;
+    }
+
+void QTMSDTMFImpl::DTMFEvent(const TMS::TMSDTMF& /*dtmf*/,
+        TMS::TMSSignalEvent event)
+    {
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSDTMF::DTMFEvent(static_cast<QTMSDTMF&> (*this), qevent);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmseffect.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include "qtmseffectimpl.h"
+#include "qtmseffect.h"
+#include "qtmswrapperexport.h"
+
+
+void QTMSEffect::Construct(QTMSEffectImpl* impl)
+    {
+    QTMSeffectimpl = impl;
+    }
+
+QTMSEffect::QTMSEffect(void)
+    {
+    }
+
+ QTMSEffect::~QTMSEffect(void)
+    {
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsfactory.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tms.h>
+#include <QObject>
+#include <qtmsfactory.h>
+#include "qtmswrapperexport.h"
+#include "qtmsfactoryimpl.h"
+
+using namespace QTMS;
+
+QTMSFactory::QTMSFactory()
+    {
+    impl = new QTMSFactoryImpl();
+    }
+
+QTMSFactory::~QTMSFactory()
+    {
+    delete impl;
+    }
+
+gint QTMSFactory::CreateFactory(QTMSFactory*& tmsfactory, QTMSVer& /*ver*/)
+    {
+    QTMSFactory* self = new QTMSFactory();
+    tmsfactory = self;
+    return QTMS_RESULT_SUCCESS;
+    }
+
+gint QTMSFactory::CreateCall(QTMSCallType ctype, QTMSCall*& tmscall,
+        guint ctxid)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateCall(ctype, tmscall, ctxid);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteCall(QTMSCall*& tmscall)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteCall(tmscall);
+        }
+    return status;
+    }
+
+gint QTMSFactory::IsCallTypeSupported(QTMSCallType ctype, gboolean& flag)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->IsCallTypeSupported(ctype, flag);
+        }
+    return status;
+    }
+
+gint QTMSFactory::GetSupportedFormats(const QTMSStreamType strmtype,
+        FormatVector& fmtlist)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->GetSupportedFormats(strmtype, fmtlist);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateFormat(QTMSFormatType qfmttype, QTMSFormat*& qfmt)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateFormat(qfmttype, qfmt);
+        }
+    return status;
+
+    }
+
+gint QTMSFactory::DeleteFormat(QTMSFormat*& qfmt)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteFormat(qfmt);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateEffect(QTMSEffectType tmseffecttype,
+        QTMSEffect*& tmseffect)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateEffect(tmseffecttype, tmseffect);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteEffect(QTMSEffect*& qtmseffect)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        impl->DeleteEffect(qtmseffect);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateBuffer(QTMSBufferType buffertype, guint size,
+        QTMSBuffer*& qbuffer)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateBuffer(buffertype, size, qbuffer);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteBuffer(QTMSBuffer*& qbuffer)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteBuffer(qbuffer);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateSource(QTMSSourceType srctype, QTMSSource*& qtmssrc)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateSource(srctype, qtmssrc);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteSource(QTMSSource*& qtmssrc)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteSource(qtmssrc);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateSink(sinktype, qtmssink);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteSink(QTMSSink*& qtmssink)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteSink(qtmssink);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateGlobalRouting(QTMSGlobalRouting*& globalrouting)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateGlobalRouting(globalrouting);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteGlobalRouting(QTMSGlobalRouting*& globrouting)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteGlobalRouting(globrouting);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& dtmf)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateDTMF(streamtype, dtmf);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteDTMF(QTMSDTMF*& dtmf)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteDTMF(dtmf);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateRingTonePlayer(QTMSRingTone*& rt)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateRingTonePlayer(rt);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteRingTonePlayer(QTMSRingTone*& rt)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteRingTonePlayer(rt);
+        }
+    return status;
+    }
+
+gint QTMSFactory::CreateInbandTonePlayer(QTMSInbandTone*& inbandtone)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->CreateInbandTonePlayer(inbandtone);
+        }
+    return status;
+    }
+
+gint QTMSFactory::DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl)
+        {
+        status = impl->DeleteInbandTonePlayer(inbandtone);
+        }
+    return status;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsfactoryimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,574 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tms.h>
+#include <tmsfactory.h>
+#include <tmsformat.h>
+#include <qtms.h>
+#include <qtmscall.h>
+#include <qtmsformat.h>
+#include <qtmseffect.h>
+#include <qtmsbuffer.h>
+#include <qtmssource.h>
+#include <qtmssink.h>
+#include <qtmsringtone.h>
+#include <qtmsdtmf.h>
+#include <qtmsinbandtone.h>
+#include "tmsutility.h"
+#include "qtmscallimpl.h"
+#include "qtmsglobalroutingimpl.h"
+#include "qtmsglobalvoleffectimpl.h"
+#include "qtmsglobalgaineffectimpl.h"
+#include "qtmsvolumeeffectimpl.h"
+#include "qtmsgaineffectimpl.h"
+#include "qtmsclientsinkimpl.h"
+#include "qtmsmodemsinkimpl.h"
+#include "qtmsspeakersinkimpl.h"
+#include "qtmsclientsourceimpl.h"
+#include "qtmsmodemsourceimpl.h"
+#include "qtmsmicsourceimpl.h"
+#include "qtmsringtoneimpl.h"
+#include "qtmsdtmfimpl.h"
+#include "qtmsinbandtoneimpl.h"
+#include "qtmsfactoryimpl.h"
+#include "qtmspcmimpl.h"
+#include "qtmsamrimpl.h"
+#include "qtmsg711impl.h"
+#include "qtmsg729impl.h"
+#include "qtmsilbcimpl.h"
+#include "qtmsmembuffer.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSFactoryImpl::QTMSFactoryImpl()
+    {
+    TMSVer* ver = NULL;
+    TMSFactory::CreateFactory(iFactory, *ver);
+    }
+
+QTMSFactoryImpl::~QTMSFactoryImpl()
+    {
+    delete iFactory;
+    }
+
+gint QTMSFactoryImpl::CreateCall(QTMSCallType ctype, QTMSCall*& qtmscall,
+        guint /*ctxid*/)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMSCall* tmscall(NULL);
+    if (iFactory)
+        {
+        ret = iFactory->CreateCall((TMSCallType) ctype, tmscall);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            ret = QTMSCallImpl::Create(qtmscall, tmscall);
+            }
+        }
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteCall(QTMSCall*& qtmscall)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete qtmscall;
+    qtmscall = NULL;
+    return ret;
+    }
+
+gint QTMSFactoryImpl::IsCallTypeSupported(QTMSCallType ctype, gboolean& flag)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    switch (ctype)
+        {
+        case QTMS_CALL_CS:
+        case QTMS_CALL_IP:
+            flag = ETrue;
+            break;
+        case QTMS_CALL_ECS: //from TB 10.1
+        default:
+            flag = EFalse;
+            break;
+        }
+    return ret;
+    }
+
+gint QTMSFactoryImpl::GetSupportedFormats(const QTMSStreamType strmtype,
+        FormatVector& fmtlist)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    TMS::FormatVector tmsfmtlist;
+    if(iFactory)
+        {
+        iFactory->GetSupportedFormats(strmtype,tmsfmtlist);
+        }
+
+    std::vector<TMSFormat*>::iterator itCodecs = tmsfmtlist.begin();
+    TMSFormatType fmttype;
+    for (; itCodecs < tmsfmtlist.end(); itCodecs++)
+        {
+        (*itCodecs)->GetType(fmttype);
+        QTMSFormat* qtmsfmt(NULL);
+        switch (fmttype)
+            {
+            case QTMS_FORMAT_PCM:
+                ret = QTMSPCMFormatImpl::Create(qtmsfmt,*itCodecs);
+                break;
+            case QTMS_FORMAT_AMR:
+                ret = QTMSAMRFormatImpl::Create(qtmsfmt,*itCodecs);
+                break;
+            case QTMS_FORMAT_G711:
+                ret = QTMSG711FormatImpl::Create(qtmsfmt,*itCodecs);
+                break;
+            case QTMS_FORMAT_G729:
+                ret = QTMSG729FormatImpl::Create(qtmsfmt,*itCodecs);
+                break;
+            case QTMS_FORMAT_ILBC:
+                ret = QTMSILBCFormatImpl::Create(qtmsfmt,*itCodecs);
+                break;
+            default:
+                break;
+            }
+
+        if(qtmsfmt)
+            {
+            fmtlist.push_back(qtmsfmt);
+            }
+        }
+
+    return ret;
+    }
+
+gint QTMSFactoryImpl::CreateFormat(QTMSFormatType fmttype,
+        QTMSFormat*& qtmsfmt)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    TMSFormat* tmsformat(NULL);
+
+    if (iFactory)
+        {
+        ret = iFactory->CreateFormat((TMSFormatType) fmttype, tmsformat);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            switch (fmttype)
+                {
+                case QTMS_FORMAT_PCM:
+                    ret = QTMSPCMFormatImpl::Create(qtmsfmt, tmsformat);
+                    break;
+                case QTMS_FORMAT_AMR:
+                    ret = QTMSAMRFormatImpl::Create(qtmsfmt, tmsformat);
+                    break;
+                case QTMS_FORMAT_G711:
+                    ret = QTMSG711FormatImpl::Create(qtmsfmt, tmsformat);
+                    break;
+                case QTMS_FORMAT_G729:
+                    ret = QTMSG729FormatImpl::Create(qtmsfmt, tmsformat);
+                    break;
+                case QTMS_FORMAT_ILBC:
+                    ret = QTMSILBCFormatImpl::Create(qtmsfmt, tmsformat);
+                    break;
+                default:
+                    break;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteFormat(QTMSFormat*& qtmsfmt)
+    {
+    gint ret(QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED);
+
+    QTMSFormatType fmttype;
+    ret = qtmsfmt->GetType(fmttype);
+    switch (fmttype)
+        {
+        case QTMS_FORMAT_PCM:
+            delete (static_cast<QTMSPCMFormatImpl*>(qtmsfmt));
+            qtmsfmt = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            break;
+        case QTMS_FORMAT_AMR:
+            delete (static_cast<QTMSAMRFormatImpl*>(qtmsfmt));
+            qtmsfmt = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            break;
+        case QTMS_FORMAT_G711:
+            delete (static_cast<QTMSG711FormatImpl*>(qtmsfmt));
+            qtmsfmt = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            break;
+        case QTMS_FORMAT_G729:
+            delete (static_cast<QTMSG729FormatImpl*>(qtmsfmt));
+            qtmsfmt = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            break;
+        case QTMS_FORMAT_ILBC:
+            delete (static_cast<QTMSILBCFormatImpl*>(qtmsfmt));
+            qtmsfmt = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            break;
+        default:
+            break;
+        }
+
+    return ret;
+    }
+
+gint QTMSFactoryImpl::CreateEffect(QTMSEffectType tmseffecttype,
+        QTMSEffect*& qtmseffect)
+    {
+    //gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    gint ret(TMS_RESULT_SUCCESS);
+    TMSEffect* tmseffect(NULL);
+    if (iFactory)
+        {
+        ret = iFactory->CreateEffect((TMSEffectType) tmseffecttype, tmseffect);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            switch (tmseffecttype)
+                {
+                case TMS_EFFECT_VOLUME:
+                    ret = QTMSVolumeEffectImpl::Create(qtmseffect, tmseffect);
+                    break;
+                case TMS_EFFECT_GAIN:
+                    ret = QTMSGainEffectImpl::Create(qtmseffect, tmseffect);
+                    break;
+                case TMS_EFFECT_GLOBAL_VOL:
+                    ret = QTMSGlobalVolEffectImpl::Create(qtmseffect,
+                            tmseffect);
+                    break;
+                case TMS_EFFECT_GLOBAL_GAIN:
+                    ret = QTMSGlobalGainEffectImpl::Create(qtmseffect,
+                            tmseffect);
+                    break;
+                default:
+                    ret = TMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED;
+                    break;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteEffect(QTMSEffect*& qtmseffect)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    QTMSEffectType effecttype;
+    ret = qtmseffect->GetType(effecttype);
+    switch (effecttype)
+        {
+        case QTMS_EFFECT_VOLUME:
+            delete (static_cast<QTMSVolumeEffectImpl*> (qtmseffect));
+            qtmseffect = NULL;
+            break;
+        case QTMS_EFFECT_GAIN:
+            delete (static_cast<QTMSGainEffectImpl*> (qtmseffect));
+            qtmseffect = NULL;
+            break;
+        case QTMS_EFFECT_GLOBAL_VOL:
+            delete (static_cast<QTMSGlobalVolEffectImpl*> (qtmseffect));
+            qtmseffect = NULL;
+            break;
+        case QTMS_EFFECT_GLOBAL_GAIN:
+            delete (static_cast<QTMSGlobalGainEffectImpl*> (qtmseffect));
+            qtmseffect = NULL;
+            break;
+        default:
+            ret = QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    return ret;
+    }
+
+gint QTMSFactoryImpl::CreateBuffer(QTMSBufferType buffertype, guint size,
+        QTMSBuffer*& qtmsbuffer)
+    {
+    gint ret(TMS_RESULT_INSUFFICIENT_MEMORY);
+    TRACE_PRN_FN_ENT;
+
+    switch (buffertype)
+        {
+        case QTMS_BUFFER_MEMORY:
+            ret = QTMSMemBuffer::Create(size, qtmsbuffer);
+            break;
+        default:
+            ret = QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteBuffer(QTMSBuffer*& qtmsbuffer)
+    {
+    delete (static_cast<QTMSMemBuffer*> (qtmsbuffer));
+    qtmsbuffer = NULL;
+    return QTMS_RESULT_SUCCESS;
+    }
+
+gint QTMSFactoryImpl::CreateSource(QTMSSourceType srctype,
+        QTMSSource*& qtmssrc)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    TMS::TMSSource* tmssource(NULL);
+    if (iFactory)
+        {
+        ret = iFactory->CreateSource(srctype, tmssource);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            switch (srctype)
+                {
+                case QTMS_SOURCE_CLIENT:
+                    ret = QTMSClientSourceImpl::Create(qtmssrc, tmssource);
+                    break;
+                case QTMS_SOURCE_MODEM:
+                    ret = QTMSModemSourceImpl::Create(qtmssrc, tmssource);
+                    break;
+                case QTMS_SOURCE_MIC:
+                    ret = QTMSMicSourceImpl::Create(qtmssrc, tmssource);
+                    break;
+                default:
+                    break;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteSource(QTMSSource*& qtmssrc)
+    {
+    gint ret(TMS_RESULT_INVALID_ARGUMENT);
+
+    QTMSSourceType sourcetype;
+    ret = qtmssrc->GetType(sourcetype);
+    switch (sourcetype)
+        {
+        case QTMS_SOURCE_CLIENT:
+            delete (static_cast<QTMSClientSourceImpl*>(qtmssrc));
+            qtmssrc = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            break;
+        case QTMS_SOURCE_MODEM:
+            {
+            delete (static_cast<QTMSModemSourceImpl*>(qtmssrc));
+            qtmssrc = NULL;
+            ret = TMS_RESULT_SUCCESS;
+            }
+            break;
+        case TMS_SOURCE_MIC:
+            {
+            delete (static_cast<QTMSMicSourceImpl*>(qtmssrc));
+            qtmssrc = NULL;
+            ret = TMS_RESULT_SUCCESS;
+            }
+            break;
+        default:
+            ret = TMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+gint QTMSFactoryImpl::CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    TMS::TMSSink* tmssink(NULL);
+
+    if (iFactory)
+        {
+        ret = iFactory->CreateSink(sinktype, tmssink);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            switch (sinktype)
+                {
+                case QTMS_SINK_CLIENT:
+                    ret = QTMSClientSinkImpl::Create(qtmssink, tmssink);
+                    break;
+                case QTMS_SINK_MODEM:
+                    ret = QTMSModemSinkImpl::Create(qtmssink, tmssink);
+                    break;
+                case QTMS_SINK_SPEAKER:
+                    ret = QTMSSpeakerSinkImpl::Create(qtmssink, tmssink);
+                    break;
+                default:
+                    break;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteSink(QTMSSink*& qtmssink)
+    {
+    gint ret(QTMS_RESULT_INVALID_ARGUMENT);
+
+    QTMSSinkType sinktype;
+    ret = qtmssink->GetType(sinktype);
+    switch (sinktype)
+        {
+        case QTMS_SINK_CLIENT:
+            {
+            delete (static_cast<QTMSClientSinkImpl*>(qtmssink));
+            qtmssink = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            }
+            break;
+        case QTMS_SINK_MODEM:
+            {
+            delete (static_cast<QTMSModemSinkImpl*>(qtmssink));
+            qtmssink = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            }
+            break;
+        case QTMS_SINK_SPEAKER:
+            {
+            delete (static_cast<QTMSSpeakerSinkImpl*>(qtmssink));
+            qtmssink = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            }
+            break;
+        default:
+            ret = QTMS_RESULT_SINK_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    return ret;
+    }
+
+gint QTMSFactoryImpl::CreateGlobalRouting(QTMSGlobalRouting*& qrouting)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    TMS::TMSGlobalRouting* tmsrouting(NULL);
+    if (iFactory)
+        {
+        ret = iFactory->CreateGlobalRouting(tmsrouting);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            ret = QTMSGlobalRoutingImpl::Create(qrouting, tmsrouting);
+            }
+        }
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteGlobalRouting(QTMSGlobalRouting*& globalrouting)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete (static_cast<QTMSGlobalRoutingImpl*>(globalrouting));
+    globalrouting = NULL;
+    return ret;
+    }
+
+gint QTMSFactoryImpl::CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& qdtmf)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    TMS::TMSDTMF* tmsdtmf = NULL;
+
+    if (iFactory)
+        {
+        ret = iFactory->CreateDTMF(streamtype, tmsdtmf);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            ret = QTMSDTMFImpl::Create(qdtmf, tmsdtmf);
+            }
+        }
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteDTMF(QTMSDTMF*& dtmf)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete (static_cast<QTMSDTMFImpl*>(dtmf));
+    dtmf = NULL;
+    return ret;
+    }
+
+gint QTMSFactoryImpl::CreateRingTonePlayer(QTMSRingTone*& rt)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    TMS::TMSRingTone* tmsrt = NULL;
+
+    if (iFactory)
+        {
+        ret = iFactory->CreateRingTonePlayer(tmsrt);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            ret = QTMSRingToneImpl::Create(rt, tmsrt);
+            }
+        }
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteRingTonePlayer(QTMSRingTone*& rt)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete (static_cast<QTMSRingToneImpl*>(rt));
+    rt = NULL;
+    return ret;
+    }
+
+gint QTMSFactoryImpl::CreateInbandTonePlayer(QTMSInbandTone*& qinbandtone)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    TMS::TMSInbandTone* tmsinband = NULL;
+    if (iFactory)
+        {
+        ret = iFactory->CreateInbandTonePlayer(tmsinband);
+
+        if (ret == TMS_RESULT_SUCCESS)
+            {
+            ret = QTMSInbandToneImpl::Create(qinbandtone, tmsinband);
+            }
+        }
+    return ret;
+    }
+
+gint QTMSFactoryImpl::DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete (static_cast<QTMSInbandToneImpl*>(inbandtone));
+    inbandtone = NULL;
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsformat.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsformat.h>
+#include <qtmsformat.h>
+
+using namespace QTMS;
+
+QTMSFormat::QTMSFormat() :
+    iFormat(NULL)
+    {
+    }
+
+QTMSFormat::~QTMSFormat()
+    {
+    delete iFormat;
+    }
+
+gint QTMSFormat::GetSupportedBitRates(BitRateVector& aVector)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = iFormat->GetSupportedBitRates(aVector);
+        }
+    return status;
+    }
+
+gint QTMSFormat::SetBitRate(const guint aBitrate)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = iFormat->SetBitRate(aBitrate);
+        }
+    return status;
+    }
+
+gint QTMSFormat::GetBitRate(guint& aBitrate)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = iFormat->GetBitRate(aBitrate);
+        }
+    return status;
+    }
+
+gint QTMSFormat::GetType(QTMSFormatType& fmttype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = iFormat->GetType(fmttype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsg711.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsg711format.h>
+#include <qtmsg711format.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSG711Format::QTMSG711Format()
+    {
+    }
+
+QTMSG711Format::~QTMSG711Format()
+    {
+    }
+
+gint QTMSG711Format::SetMode(const QTMSG711CodecMode aMode)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG711Format*> (iFormat)->SetMode(aMode);
+        }
+    return status;
+    }
+
+gint QTMSG711Format::GetMode(QTMSG711CodecMode& aMode)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG711Format*> (iFormat)->GetMode(aMode);
+        }
+    return status;
+    }
+
+gint QTMSG711Format::SetCNG(const gboolean aCng)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG711Format*> (iFormat)->SetCNG(aCng);
+        }
+    return status;
+    }
+
+gint QTMSG711Format::GetCNG(gboolean& aCng)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG711Format*> (iFormat)->GetCNG(aCng);
+        }
+    return status;
+    }
+
+gint QTMSG711Format::SetPlc(const gboolean aPlc)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG711Format*> (iFormat)->SetPlc(aPlc);
+        }
+    return status;
+    }
+
+gint QTMSG711Format::GetPlc(gboolean& aPlc)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG711Format*> (iFormat)->GetPlc(aPlc);
+        }
+    return status;
+    }
+
+gint QTMSG711Format::SetVADMode(const gboolean aVad)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG711Format*> (iFormat)->SetVADMode(aVad);
+        }
+    return status;
+    }
+
+gint QTMSG711Format::GetVADMode(gboolean& aVad)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG711Format*> (iFormat)->GetVADMode(aVad);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsg711impl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsg711format.h>
+#include "qtmsg711impl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSG711FormatImpl::QTMSG711FormatImpl()
+    {
+    }
+
+QTMSG711FormatImpl::~QTMSG711FormatImpl()
+    {
+    }
+
+gint QTMSG711FormatImpl::Create(QTMSFormat*& qformat,
+        TMS::TMSFormat*& tmsformat)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSG711FormatImpl* self = new QTMSG711FormatImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iFormat = tmsformat;
+        }
+    qformat = self;
+    return ret;
+    }
+
+gint QTMSG711FormatImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSG711FormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat)
+        {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+gint QTMSG711FormatImpl::GetType(QTMSFormatType& fmttype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        //status = static_cast<TMSFormat*> (iFormat)->GetType(fmttype);
+        status = iFormat->GetType(fmttype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsg729.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsg729format.h>
+#include <qtmsg729format.h>
+#include "tmsutility.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSG729Format::QTMSG729Format()
+    {
+    }
+
+QTMSG729Format::~QTMSG729Format()
+    {
+    }
+
+gint QTMSG729Format::SetVADMode(const gboolean aVad)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG729Format*> (iFormat)->SetVADMode(aVad);
+        }
+    return status;
+    }
+
+gint QTMSG729Format::GetVADMode(gboolean& aVad)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSG729Format*> (iFormat)->GetVADMode(aVad);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsg729impl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsilbcformat.h>
+#include "tmsutility.h"
+#include "qtmsg729impl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSG729FormatImpl::QTMSG729FormatImpl()
+    {
+    }
+
+QTMSG729FormatImpl::~QTMSG729FormatImpl()
+    {
+    TRACE_PRN_FN_ENT;
+    TRACE_PRN_FN_EXT;
+    }
+
+gint QTMSG729FormatImpl::Create(QTMSFormat*& qformat,
+        TMS::TMSFormat*& tmsformat)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSG729FormatImpl* self = new QTMSG729FormatImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iFormat = tmsformat;
+        }
+    qformat = self;
+    return ret;
+    }
+
+gint QTMSG729FormatImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSG729FormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat)
+        {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+gint QTMSG729FormatImpl::GetType(QTMSFormatType& fmttype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = iFormat->GetType(fmttype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsgaineffect.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsgaineffect.h>
+#include <qtmsgaineffect.h>
+#include "qtmsgaineffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGainEffect::QTMSGainEffect() :
+    iEffect(NULL)
+    {
+    }
+
+QTMSGainEffect::~QTMSGainEffect()
+    {
+    delete iEffect;
+    }
+
+gint QTMSGainEffect::GetLevel(guint& level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGainEffect*> (iEffect)->GetLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSGainEffect::SetLevel(const guint level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGainEffect*> (iEffect)->SetLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSGainEffect::GetMaxLevel(guint& level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGainEffect*> (iEffect)->GetMaxLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSGainEffect::GetType(QTMSSourceType& sourcetype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGainEffect*> (iEffect)->GetType(sourcetype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsgaineffectimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsgaineffect.h>
+#include "qtmsgaineffectimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGainEffectImpl::QTMSGainEffectImpl()
+    {
+    }
+
+QTMSGainEffectImpl::~QTMSGainEffectImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSGainEffectImpl::Create(QTMSEffect*& qgain, TMS::TMSEffect*& tmsgain)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSGainEffectImpl* self = new QTMSGainEffectImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iEffect = tmsgain;
+        ret = self->AddObserver(*self, NULL);
+        }
+    qgain = self;
+    return ret;
+    }
+
+gint QTMSGainEffectImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSGainEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr,
+        gpointer /*user_data*/)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect)
+        {
+        ret = static_cast<TMSGainEffect*> (iEffect)->AddObserver(obsrvr, NULL);
+        }
+    return ret;
+    }
+
+gint QTMSGainEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect)
+        {
+        ret = static_cast<TMSGainEffect*> (iEffect)->RemoveObserver(obsrvr);
+        }
+    return ret;
+    }
+
+gint QTMSGainEffectImpl::GetEffect(TMS::TMSEffect*& tmseffect)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iEffect)
+        {
+        tmseffect = iEffect;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+void QTMSGainEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/,
+        TMS::TMSSignalEvent event)
+    {
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSGainEffect::EffectsEvent(static_cast<QTMSEffect&> (*this),
+            qevent);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalgaineffect.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsglobalgaineffect.h>
+#include <qtmsglobalgaineffect.h>
+#include "qtmsglobalgaineffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalGainEffect::QTMSGlobalGainEffect() :
+    iEffect(NULL)
+    {
+    }
+
+QTMSGlobalGainEffect::~QTMSGlobalGainEffect()
+    {
+    delete (static_cast<TMSGlobalGainEffect*>(iEffect));
+    }
+
+gint QTMSGlobalGainEffect::GetLevel(guint& level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGlobalGainEffect*> (iEffect)->GetLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSGlobalGainEffect::SetLevel(const guint level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGlobalGainEffect*> (iEffect)->SetLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSGlobalGainEffect::GetMaxLevel(guint& level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGlobalGainEffect*> (iEffect)->GetMaxLevel(
+                level);
+        }
+    return status;
+    }
+
+gint QTMSGlobalGainEffect::GetType(QTMSSourceType& sourcetype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGlobalGainEffect*> (iEffect)->GetType(
+                sourcetype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalgaineffectimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsglobalgaineffect.h>
+#include "tmsutility.h"
+#include "qtmsglobalgaineffectimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalGainEffectImpl::QTMSGlobalGainEffectImpl()
+    {
+    }
+
+QTMSGlobalGainEffectImpl::~QTMSGlobalGainEffectImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSGlobalGainEffectImpl::Create(QTMSEffect*& qglobalgain,
+        TMS::TMSEffect*& tmsglobalgain)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSGlobalGainEffectImpl* self = new QTMSGlobalGainEffectImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iEffect = tmsglobalgain;
+        ret = self->AddObserver(*self, NULL);
+        }
+    qglobalgain = self;
+    return ret;
+    }
+
+gint QTMSGlobalGainEffectImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSGlobalGainEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr,
+        gpointer user_data)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect)
+        {
+        ret = static_cast<TMSGlobalGainEffect*> (iEffect)->AddObserver(obsrvr,
+                user_data);
+        }
+    return ret;
+    }
+
+gint QTMSGlobalGainEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect)
+        {
+        ret = static_cast<TMSGlobalGainEffect*> (iEffect)->RemoveObserver(
+                obsrvr);
+        }
+    return ret;
+    }
+
+void QTMSGlobalGainEffectImpl::EffectsEvent(
+        const TMS::TMSEffect& /*tmseffect*/, TMS::TMSSignalEvent event)
+    {
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSGlobalGainEffect::EffectsEvent(
+            static_cast<QTMSEffect&> (*this), qevent);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalrouting.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsglobalrouting.h>
+#include <qtmsglobalrouting.h>
+#include "qtmsglobalroutingimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalRouting::QTMSGlobalRouting() :
+    iRouting(NULL)
+    {
+    }
+
+QTMSGlobalRouting::~QTMSGlobalRouting()
+    {
+    delete iRouting;
+    }
+
+gint QTMSGlobalRouting::SetOutput(const QTMSAudioOutput output)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRouting)
+        {
+        status = iRouting->SetOutput(output);
+        }
+    return status;
+    }
+
+gint QTMSGlobalRouting::GetOutput(QTMSAudioOutput& output)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRouting)
+        {
+        status = iRouting->GetOutput(output);
+        }
+    return status;
+    }
+
+gint QTMSGlobalRouting::GetPreviousOutput(QTMSAudioOutput& output)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRouting)
+        {
+        status = iRouting->GetPreviousOutput(output);
+        }
+    return status;
+    }
+
+gint QTMSGlobalRouting::GetAvailableOutputs(OutputVector& outputs)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRouting)
+        {
+        status = iRouting->GetAvailableOutputs(outputs);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalroutingimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsglobalrouting.h>
+#include "tmsutility.h"
+#include "qtmsglobalroutingimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalRoutingImpl::QTMSGlobalRoutingImpl()
+    {
+    }
+
+QTMSGlobalRoutingImpl::~QTMSGlobalRoutingImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSGlobalRoutingImpl::Create(QTMSGlobalRouting*& qrouting,
+        TMS::TMSGlobalRouting*& tmsrouting)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSGlobalRoutingImpl* self = new QTMSGlobalRoutingImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iRouting = tmsrouting;
+        ret = self->AddObserver(*self, NULL);
+        }
+    qrouting = self;
+    return ret;
+    }
+
+gint QTMSGlobalRoutingImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSGlobalRoutingImpl::AddObserver(TMS::TMSGlobalRoutingObserver& obsrvr,
+        gpointer user_data)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iRouting)
+        {
+        ret = iRouting->AddObserver(obsrvr, user_data);
+        }
+    return ret;
+    }
+
+gint QTMSGlobalRoutingImpl::RemoveObserver(
+        TMS::TMSGlobalRoutingObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iRouting)
+        {
+        ret = iRouting->RemoveObserver(obsrvr);
+        }
+    return ret;
+    }
+
+void QTMSGlobalRoutingImpl::GlobalRoutingEvent(
+        const TMS::TMSGlobalRouting& /*routing*/, TMS::TMSSignalEvent event,
+        TMS::TMSAudioOutput output)
+    {
+    QTMSSignalEvent qevent;
+    QTMSAudioOutput qoutput;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+    qoutput = output;
+
+    emit QTMS::QTMSGlobalRouting::GlobalRoutingEvent(
+            static_cast<QTMSGlobalRouting&> (*this), qevent, qoutput);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalvoleffect.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include<tmsglobalvoleffect.h>
+#include <qtmsglobalvoleffect.h>
+#include "qtmsglobalvoleffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalVolEffect::QTMSGlobalVolEffect() :
+    iEffect(NULL)
+    {
+    }
+
+QTMSGlobalVolEffect::~QTMSGlobalVolEffect()
+    {
+    delete (static_cast<TMSGlobalVolEffect*>(iEffect));
+    }
+
+gint QTMSGlobalVolEffect::GetLevel(guint& level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGlobalVolEffect*> (iEffect)->GetLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSGlobalVolEffect::SetLevel(const guint level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGlobalVolEffect*> (iEffect)->SetLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSGlobalVolEffect::GetMaxLevel(guint& level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGlobalVolEffect*> (iEffect)->GetMaxLevel(
+                level);
+        }
+    return status;
+    }
+
+gint QTMSGlobalVolEffect::GetType(QTMSSourceType& sourcetype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSGlobalVolEffect*> (iEffect)->GetType(
+                sourcetype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalvoleffectimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsglobalvoleffect.h>
+#include "tmsutility.h"
+#include "qtmsglobalvoleffectimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalVolEffectImpl::QTMSGlobalVolEffectImpl()
+    {
+    }
+
+QTMSGlobalVolEffectImpl::~QTMSGlobalVolEffectImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSGlobalVolEffectImpl::Create(QTMSEffect*& qglobalvol,
+        TMS::TMSEffect*& tmsglobalvol)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSGlobalVolEffectImpl* self = new QTMSGlobalVolEffectImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iEffect = tmsglobalvol;
+        ret = self->AddObserver(*self, NULL);
+        }
+    qglobalvol = self;
+    return ret;
+    }
+
+gint QTMSGlobalVolEffectImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSGlobalVolEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr,
+        gpointer user_data)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect)
+        {
+        ret = static_cast<TMSGlobalVolEffect*> (iEffect)->AddObserver(obsrvr,
+                user_data);
+        }
+    return ret;
+    }
+
+gint QTMSGlobalVolEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect)
+        {
+        ret = static_cast<TMSGlobalVolEffect*> (iEffect)->RemoveObserver(
+                obsrvr);
+        }
+    return ret;
+    }
+
+void QTMSGlobalVolEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/,
+        TMS::TMSSignalEvent event)
+    {
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSGlobalVolEffect::EffectsEvent(static_cast<QTMSEffect&>
+            (*this), qevent);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsilbc.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsilbcformat.h>
+#include <qtmsilbcformat.h>
+#include "tmsutility.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSILBCFormat::QTMSILBCFormat()
+    {
+    }
+
+QTMSILBCFormat::~QTMSILBCFormat()
+    {
+    // iFormat is deleted with QTMSFormat::iFormat
+    }
+
+gint QTMSILBCFormat::SetMode(const QTMSG711CodecMode aMode)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSILBCFormat*> (iFormat)->SetMode(aMode);
+        }
+    return status;
+    }
+
+gint QTMSILBCFormat::GetMode(QTMSG711CodecMode& aMode)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSILBCFormat*> (iFormat)->GetMode(aMode);
+        }
+    return status;
+    }
+
+gint QTMSILBCFormat::SetCNG(const gboolean aCng)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSILBCFormat*> (iFormat)->SetCNG(aCng);
+        }
+    return status;
+    }
+
+gint QTMSILBCFormat::GetCNG(gboolean& aCng)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSILBCFormat*> (iFormat)->GetCNG(aCng);
+        }
+    return status;
+    }
+
+gint QTMSILBCFormat::SetVADMode(const gboolean aVad)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSILBCFormat*> (iFormat)->SetVADMode(aVad);
+        }
+    return status;
+    }
+
+gint QTMSILBCFormat::GetVADMode(gboolean& aVad)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = static_cast<TMSILBCFormat*> (iFormat)->GetVADMode(aVad);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsilbcimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsilbcformat.h>
+#include "qtmsilbcimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSILBCFormatImpl::QTMSILBCFormatImpl()
+    {
+    }
+
+QTMSILBCFormatImpl::~QTMSILBCFormatImpl()
+    {
+    }
+
+gint QTMSILBCFormatImpl::Create(QTMSFormat*& qformat,
+        TMS::TMSFormat*& tmsformat)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSILBCFormatImpl* self = new QTMSILBCFormatImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iFormat = tmsformat;
+        }
+    qformat = self;
+    return ret;
+    }
+
+gint QTMSILBCFormatImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSILBCFormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat)
+        {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+gint QTMSILBCFormatImpl::GetType(QTMSFormatType& fmttype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = iFormat->GetType(fmttype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsinbandtone.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsinbandtone.h>
+#include <tmsinbandtone.h>
+#include "qtmswrapperexport.h"
+#include "qtmsinbandtoneimpl.h"
+
+using namespace QTMS;
+
+QTMSInbandTone::QTMSInbandTone(void) :
+    iInbandTone(NULL)
+    {
+    }
+
+QTMSInbandTone::~QTMSInbandTone(void)
+    {
+    delete iInbandTone;
+    }
+
+gint QTMSInbandTone::Start(QTMSInbandToneType inbandtonetype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iInbandTone)
+        {
+        status = iInbandTone->Start(inbandtonetype);
+        }
+    return status;
+    }
+
+gint QTMSInbandTone::Stop()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iInbandTone)
+        {
+        status = iInbandTone->Stop();
+        }
+    return status;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsinbandtoneimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsinbandtone.h>
+#include "tmsutility.h"
+#include "qtmsinbandtoneimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSInbandToneImpl::QTMSInbandToneImpl()
+    {
+    }
+
+QTMSInbandToneImpl::~QTMSInbandToneImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSInbandToneImpl::Create(QTMSInbandTone*& qinband,
+        TMS::TMSInbandTone*& tmsinband)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSInbandToneImpl* self = new QTMSInbandToneImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iInbandTone = tmsinband;
+        self->AddObserver(*self, NULL);
+        }
+    qinband = self;
+    return ret;
+    }
+
+gint QTMSInbandToneImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSInbandToneImpl::AddObserver(TMS::TMSInbandToneObserver& obsrvr,
+        gpointer user_data)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iInbandTone)
+        {
+        ret = iInbandTone->AddObserver(obsrvr, user_data);
+        }
+    return ret;
+    }
+
+gint QTMSInbandToneImpl::RemoveObserver(TMS::TMSInbandToneObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iInbandTone)
+        {
+        ret = iInbandTone->RemoveObserver(obsrvr);
+        }
+    return ret;
+    }
+
+void QTMSInbandToneImpl::InbandToneEvent(
+        const TMS::TMSInbandTone& /*inbandtone*/, TMS::TMSSignalEvent event)
+    {
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSInbandTone::InbandToneEvent(
+            static_cast<QTMSInbandTone&> (*this), qevent);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsipcallbodyimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <qtmsstream.h>
+#include "qtmsstreamimpl.h"
+#include "tmsutility.h"
+#include "qtmsipcallimpl.h"
+
+using namespace QTMS;
+
+QTMSIPCallImpl::QTMSIPCallImpl()
+    {
+    TRACE_PRN_FN_ENT;
+    TRACE_PRN_FN_EXT;
+    }
+
+QTMSIPCallImpl::~QTMSIPCallImpl()
+    {
+    TRACE_PRN_FN_ENT;
+
+    TRACE_PRN_FN_EXT;
+    }
+
+/*
+gint QTMSIPCallImpl::Create(QTMSCallBody*& bodyimpl)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSIPCallImpl* self = new QTMSIPCallImpl;
+
+    TRACE_PRN_FN_ENT;
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        }
+    bodyimpl = self;
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+*/
+gint QTMSIPCallImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    TRACE_PRN_FN_ENT;
+
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+QTMSCallType QTMSIPCallImpl::GetCallType()
+    {
+    QTMSCallType ctype(QTMS_CALL_IP);
+    return ctype;
+    }
+
+gint QTMSIPCallImpl::GetCallContextId(guint& ctxid)
+    {
+    gint ret(QTMS_RESULT_FEATURE_NOT_SUPPORTED);
+    ctxid = 0;
+    return ret;
+    }
+
+gint QTMSIPCallImpl::CreateStream(QTMSStreamType type, QTMSStream*& strm)
+    {
+    gint ret(QTMS_RESULT_CALL_TYPE_NOT_SUPPORTED);
+    strm = NULL;
+    switch (type)
+        {
+        case QTMS_STREAM_UPLINK:
+        case QTMS_STREAM_DOWNLINK:
+ //           ret = QTMSStreamImpl::Create(QTMS_CALL_IP, type, iSession, strm);
+            break;
+        default:
+            break;
+        }
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+gint QTMSIPCallImpl::DeleteStream(QTMSStream*& /*strm*/)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    TRACE_PRN_FN_ENT;
+   // ret = RemStreamFromList(strm);
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+gint QTMSIPCallImpl::AddStreamToList(QTMSStream* /*strm*/)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    TRACE_PRN_FN_ENT;
+  //  iStreamsVector.push_back(strm);
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+gint QTMSIPCallImpl::RemStreamFromList(QTMSStream*& /*strm*/)
+    {
+    gint ret(QTMS_RESULT_DOES_NOT_EXIST);
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmembuffer.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <qtmsbuffer.h>
+#include "qtmsmembuffer.h"
+#include "tmsutility.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSMemBuffer::QTMSMemBuffer() :
+    iBufferSize(0),
+    iTimeStamp(0),
+    iDataPtr(NULL),
+    iOwnsBuffer(FALSE)
+    {
+    }
+
+QTMSMemBuffer::~QTMSMemBuffer()
+    {
+    if (iOwnsBuffer)
+        {
+        free(iDataPtr);
+        }
+    }
+
+gint QTMSMemBuffer::Create(guint size, QTMSBuffer*& tmsbuffer)
+    {
+    gint ret(TMS_RESULT_INSUFFICIENT_MEMORY);
+    TRACE_PRN_FN_ENT;
+    QTMSMemBuffer* self = new QTMSMemBuffer();
+    if (self)
+        {
+        ret = self->PostConstruct(size);
+        if (ret != TMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        }
+    tmsbuffer = self;
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+gint QTMSMemBuffer::PostConstruct(guint size)
+    {
+    gint ret(TMS_RESULT_SUCCESS);
+    TRACE_PRN_FN_ENT;
+    iDataPtr = (guint8*) malloc(size);
+    if (!iDataPtr)
+        {
+        ret = TMS_RESULT_INSUFFICIENT_MEMORY;
+        }
+    iOwnsBuffer = TRUE;
+    iBufferSize = size;
+    TRACE_PRN_FN_EXT;
+    return ret;
+    }
+
+gint QTMSMemBuffer::GetType(QTMSBufferType& buffertype)
+    {
+    gint ret(TMS_RESULT_SUCCESS);
+    buffertype = TMS_BUFFER_MEMORY;
+    return ret;
+    }
+
+// Implementation of TMSBuffer interface begins
+/**
+ Gets the timestamp on the Buffer so that the framework can
+ determine the time at which this buffer has to be rendered
+ by the output device sink.
+
+ @param ts
+ timestamp in microseconds
+
+ */
+gint QTMSMemBuffer::GetTimeStamp(guint64& ts)
+    {
+    gint ret(TMS_RESULT_SUCCESS);
+    ts = iTimeStamp;
+    return ret;
+    }
+
+/**
+ Sets the timestamp on the Buffer so that the framework can
+ determine the time at which this buffer has to be rendered
+ by the output device sink.
+
+ @param ts
+ timestamp in milliseconds
+
+ */
+gint QTMSMemBuffer::SetTimeStamp(const guint64 ts)
+    {
+    gint ret(TMS_RESULT_SUCCESS);
+    iTimeStamp = ts;
+    return ret;
+    }
+
+/**
+ Gets the size of data in the buffer specified by the client.
+
+ @param size
+ size of data in bytes
+
+ */
+gint QTMSMemBuffer::GetDataSize(guint& size)
+    {
+    gint ret(TMS_RESULT_SUCCESS);
+    size = iBufferSize;
+    return ret;
+    }
+
+/**
+ Sets the size of data in the buffer after the client
+ fill it.
+
+ @param size
+ size of data in bytes
+
+ */
+gint QTMSMemBuffer::SetDataSize(const guint size)
+    {
+    gint ret(TMS_RESULT_SUCCESS);
+    iBufferSize = size;
+    return ret;
+    }
+
+/**
+ Gets the pointer to the memory location associated with this
+ buffer where the data is stored.
+
+ @param bufptr
+ ptr to the data stored in the buffer.
+
+ */
+gint QTMSMemBuffer::GetDataPtr(guint8*& bufptr)
+    {
+    gint ret(TMS_RESULT_SUCCESS);
+    bufptr = iDataPtr;
+    return ret;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmicsource.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsmicsource.h>
+#include <qtmsmicsource.h>
+#include "qtmsmicsourceimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSMicSource::QTMSMicSource() :
+    iSource(NULL)
+    {
+    }
+
+QTMSMicSource::~QTMSMicSource()
+    {
+    delete iSource;
+    }
+
+gint QTMSMicSource::GetType(QTMSSourceType& sourcetype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        //status = iSource->GetType(sourcetype);
+        status = static_cast<TMSMicSource*> (iSource)->GetType(sourcetype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmicsourceimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsmicsource.h>
+#include "qtmsmicsourceimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSMicSourceImpl::QTMSMicSourceImpl()
+    {
+    }
+
+QTMSMicSourceImpl::~QTMSMicSourceImpl()
+    {
+    }
+
+gint QTMSMicSourceImpl::Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSMicSourceImpl* self = new QTMSMicSourceImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iSource = tmssource;
+        }
+    qsource = self;
+    return ret;
+    }
+
+gint QTMSMicSourceImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSMicSourceImpl::GetSource(TMS::TMSSource*& tmssource)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        tmssource = iSource;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmodemsink.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsmodemsink.h>
+#include <tmsmodemsink.h>
+#include "qtmsmodemsinkimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSModemSink::QTMSModemSink() :
+    iSink(NULL)
+    {
+    }
+
+QTMSModemSink::~QTMSModemSink()
+    {
+    delete iSink;
+    }
+
+gint QTMSModemSink::GetType(QTMSSinkType& sinktype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink)
+        {
+        //status = iSink->GetType(sinktype);
+        status = static_cast<TMSModemSink*> (iSink)->GetType(sinktype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmodemsinkimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsmodemsink.h>
+#include "qtmsmodemsinkimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSModemSinkImpl::QTMSModemSinkImpl()
+    {
+    }
+
+QTMSModemSinkImpl::~QTMSModemSinkImpl()
+    {
+    }
+
+gint QTMSModemSinkImpl::Create(QTMSSink*& qsink,TMS::TMSSink*& tmssink)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSModemSinkImpl* self = new QTMSModemSinkImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iSink = tmssink;
+        }
+    qsink = self;
+    return ret;
+    }
+
+gint QTMSModemSinkImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSModemSinkImpl::GetSink(TMS::TMSSink*& tmssink)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink)
+        {
+        tmssink = iSink;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmodemsource.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsmodemsource.h>
+#include <tmsmodemsource.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSModemSource::QTMSModemSource() :
+    iSource(NULL)
+    {
+    }
+
+QTMSModemSource::~QTMSModemSource()
+    {
+    delete iSource;
+    }
+
+gint QTMSModemSource::GetType(QTMSSourceType& sourcetype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        //status = iSource->GetType(sourcetype);
+        status = static_cast<TMSModemSource*> (iSource)->GetType(sourcetype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmodemsourceimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsmodemsource.h>
+#include "qtmsmodemsourceimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSModemSourceImpl::QTMSModemSourceImpl()
+    {
+    }
+
+QTMSModemSourceImpl::~QTMSModemSourceImpl()
+    {
+    }
+
+gint QTMSModemSourceImpl::Create(QTMSSource*& qsource,
+        TMS::TMSSource*& tmssource)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSModemSourceImpl* self = new QTMSModemSourceImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iSource = tmssource;
+        }
+    qsource = self;
+    return ret;
+    }
+
+gint QTMSModemSourceImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSModemSourceImpl::GetSource(TMS::TMSSource*& tmssource)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource)
+        {
+        tmssource = iSource;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmspcm.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmspcmformat.h>
+
+using namespace QTMS;
+
+QTMSPCMFormat::QTMSPCMFormat()
+    {
+    }
+
+QTMSPCMFormat::~QTMSPCMFormat()
+    {
+    // iFormat is deleted with QTMSFormat::iFormat
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmspcmimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmspcmformat.h>
+#include "tmsutility.h"
+#include "qtmspcmimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSPCMFormatImpl::QTMSPCMFormatImpl()
+    {
+    }
+
+QTMSPCMFormatImpl::~QTMSPCMFormatImpl()
+    {
+    TRACE_PRN_FN_ENT;
+    TRACE_PRN_FN_EXT;
+    }
+
+gint QTMSPCMFormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSPCMFormatImpl* self = new QTMSPCMFormatImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iFormat = tmsformat;
+        }
+    qformat = self;
+    return ret;
+    }
+
+gint QTMSPCMFormatImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSPCMFormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat)
+        {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+gint QTMSPCMFormatImpl::GetType(QTMSFormatType& fmttype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat)
+        {
+        status = iFormat->GetType(fmttype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsringtone.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsringtone.h>
+#include <qtmsringtone.h>
+#include "qtmsringtoneimpl.h"
+
+using namespace QTMS;
+
+QTMSRingTone::QTMSRingTone() :
+    iRingTone(NULL)
+    {
+    }
+
+QTMSRingTone::~QTMSRingTone()
+    {
+    delete iRingTone;
+    }
+
+gint QTMSRingTone::Init(const QTMSRingToneType type, GString* str, GString* tts)
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone)
+        {
+        status = iRingTone->Init(type, str, tts);
+        }
+    return status;
+    }
+
+gint QTMSRingTone::Deinit()
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone)
+        {
+        status = iRingTone->Deinit();
+        }
+    return status;
+    }
+
+gint QTMSRingTone::Play()
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone)
+        {
+        status = iRingTone->Play();
+        }
+    return status;
+    }
+
+gint QTMSRingTone::Stop()
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone)
+        {
+        status = iRingTone->Stop();
+        }
+    return status;
+    }
+
+gint QTMSRingTone::Pause()
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone)
+        {
+        status = iRingTone->Pause();
+        }
+    return status;
+    }
+
+gint QTMSRingTone::Mute()
+    {
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone)
+        {
+        status = iRingTone->Mute();
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsringtoneimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsringtone.h>
+#include <qtmseffect.h>
+#include "tmsutility.h"
+#include "qtmsringtoneimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSRingToneImpl::QTMSRingToneImpl()
+    {
+    }
+
+QTMSRingToneImpl::~QTMSRingToneImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSRingToneImpl::Create(QTMSRingTone*& qrt, TMS::TMSRingTone*& tmsrt)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSRingToneImpl* self = new QTMSRingToneImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iRingTone = tmsrt;
+        ret = self->AddObserver(*self, NULL);
+        }
+    qrt = self;
+    return ret;
+    }
+
+gint QTMSRingToneImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSRingToneImpl::AddObserver(TMS::TMSRingToneObserver& obsrvr,
+        gpointer user_data)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone)
+        {
+        ret = iRingTone->AddObserver(obsrvr, user_data);
+        }
+    return ret;
+    }
+
+gint QTMSRingToneImpl::RemoveObserver(TMS::TMSRingToneObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone)
+        {
+        ret = iRingTone->RemoveObserver(obsrvr);
+        }
+    return ret;
+    }
+
+void QTMSRingToneImpl::RingtoneEvent(const TMS::TMSRingTone& /*rt*/,
+        TMS::TMSSignalEvent event)
+    {
+    QTMSSignalEvent qevent;
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSRingTone::RingtoneEvent(static_cast<QTMSRingTone&> (*this),
+            qevent);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmssinkimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+//#include "qtmsclientsinkimpl.h"
+#include "tmsutility.h"
+#include "qtmssinkimpl.h"
+//#include "qtmsmodemsinkimpl.h"
+//#include "qtmsspeakersinkimpl.h"
+
+using namespace QTMS;
+
+gint QTMSSinkImpl::Create(QTMSSinkType /*sinktype*/, QTMSSink*& /*qtmssink*/)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    TRACE_PRN_FN_ENT;
+  /*  switch (sinktype)
+        {
+        case QTMS_SINK_CLIENT:
+            ret = QTMSClientSinkImpl::Create(QTMSsink);
+            break;
+        case QTMS_SINK_MODEM:
+            ret = QTMSModemSinkImpl::Create(QTMSsink);
+            break;
+        case QTMS_SINK_SPEAKER:
+            ret = QTMSSpeakerSinkImpl::Create(QTMSsink);
+            break;
+        default:
+            ret = QTMS_RESULT_SINK_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    TRACE_PRN_FN_EXT;
+    */
+    return ret;
+    }
+
+gint QTMSSinkImpl::Delete(QTMSSink*& /*qtmssink*/)
+    {
+    gint ret(QTMS_RESULT_INVALID_ARGUMENT);
+    TRACE_PRN_FN_ENT;
+   /* QTMSSinkType sinktype;
+    ret = QTMSsink->GetType(sinktype);
+    switch (sinktype)
+        {
+        case QTMS_SINK_CLIENT:
+            {
+            delete (QTMSClientSinkImpl*) (QTMSsink);
+            QTMSsink = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            }
+            break;
+        case QTMS_SINK_MODEM:
+            {
+            delete (QTMSModemSinkImpl*) (QTMSsink);
+            QTMSsink = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            }
+            break;
+        case QTMS_SINK_SPEAKER:
+            {
+            delete (QTMSSpeakerSinkImpl*) (QTMSsink);
+            QTMSsink = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            }
+            break;
+        default:
+            ret = QTMS_RESULT_SINK_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    TRACE_PRN_FN_EXT;
+    */
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmssourceimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+//#include "qtmsclientsourceimpl.h"
+#include "tmsutility.h"
+#include "qtmssourceimpl.h"
+//#include "qtmsmodemsourceimpl.h"
+//#include "qtmsmicsourceimpl.h"
+
+using namespace QTMS;
+
+gint QTMSSourceImpl::Create(QTMSSourceType /*sourcetype*/,
+        QTMSSource*& /*qtmssource*/)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+  /*  TRACE_PRN_FN_ENT;
+    switch (sourcetype)
+        {
+        case QTMS_SOURCE_CLIENT:
+            ret = QTMSClientSourceImpl::Create(QTMSsource);
+            break;
+        case QTMS_SOURCE_MODEM:
+            ret = QTMSModemSourceImpl::Create(QTMSsource);
+            break;
+        case QTMS_SOURCE_MIC:
+            ret = QTMSMicSourceImpl::Create(QTMSsource);
+            break;
+        default:
+            ret = QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    TRACE_PRN_FN_EXT;
+    */
+    return ret;
+    }
+
+gint QTMSSourceImpl::Delete(QTMSSource*& /*qtmssource*/)
+    {
+    gint ret(QTMS_RESULT_INVALID_ARGUMENT);
+    TRACE_PRN_FN_ENT;
+ /*   QTMSSourceType sourcetype;
+    ret = QTMSsource->GetType(sourcetype);
+    switch (sourcetype)
+        {
+        case QTMS_SOURCE_CLIENT:
+            delete (QTMSClientSourceImpl*) (QTMSsource);
+            QTMSsource = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            break;
+        case QTMS_SOURCE_MODEM:
+            {
+            delete (QTMSModemSourceImpl*) (QTMSsource);
+            QTMSsource = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            }
+            break;
+        case QTMS_SOURCE_MIC:
+            {
+            delete (QTMSMicSourceImpl*) (QTMSsource);
+            QTMSsource = NULL;
+            ret = QTMS_RESULT_SUCCESS;
+            }
+            break;
+        default:
+            ret = QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED;
+            break;
+        }
+
+    TRACE_PRN_FN_EXT;
+    */
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsspeakersink.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsspeakersink.h>
+#include <tmsspeakersink.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSSpeakerSink::QTMSSpeakerSink() :
+    iSink(NULL)
+    {
+    }
+
+QTMSSpeakerSink::~QTMSSpeakerSink()
+    {
+    delete iSink;
+    }
+
+gint QTMSSpeakerSink::GetType(QTMSSinkType& sinktype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink)
+        {
+        //status = iSink->GetType(sinktype); //should be ok
+        status = static_cast<TMSSpeakerSink*> (iSink)->GetType(sinktype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsspeakersinkimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsspeakersink.h>
+#include "qtmsspeakersinkimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSSpeakerSinkImpl::QTMSSpeakerSinkImpl()
+    {
+    }
+
+QTMSSpeakerSinkImpl::~QTMSSpeakerSinkImpl()
+    {
+    }
+
+gint QTMSSpeakerSinkImpl::Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSSpeakerSinkImpl* self = new QTMSSpeakerSinkImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iSink = tmssink;
+        }
+    qsink = self;
+    return ret;
+    }
+
+gint QTMSSpeakerSinkImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSSpeakerSinkImpl::GetSink(TMS::TMSSink*& tmssink)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iSink)
+        {
+        tmssink = iSink;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsstream.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,411 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmssource.h>
+#include <tmsformat.h>
+#include <tmsstream.h>
+#include <qtmseffect.h>
+#include <qtmsstream.h>
+#include "qtmsstreamimpl.h"
+#include "qtmssource.h"
+#include "qtmsclientsourceimpl.h"
+#include "qtmsmodemsourceimpl.h"
+#include "qtmsmicsourceimpl.h"
+#include "qtmsclientsinkimpl.h"
+#include "qtmsmodemsinkimpl.h"
+#include "qtmsspeakersinkimpl.h"
+#include "qtmspcmimpl.h"
+#include "qtmsamrimpl.h"
+#include "qtmsg711impl.h"
+#include "qtmsg729impl.h"
+#include "qtmsilbcimpl.h"
+#include "qtmsvolumeeffectimpl.h"
+#include "qtmsgaineffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSStream::QTMSStream(void) :
+    iStream(NULL)
+    {
+    }
+
+QTMSStream::~QTMSStream()
+    {
+    //delete iStream;
+    //delete (static_cast<QTMSStreamImpl*> (iStream));
+    }
+
+gint QTMSStream::AddSource(QTMSSource* qsource)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qsource)
+        {
+        QTMSSourceType qsrctype;
+        TMSSource* tmssource(NULL);
+
+        qsource->GetType(qsrctype);
+
+        switch (qsrctype)
+            {
+            case QTMS_SOURCE_CLIENT:
+                status = static_cast<QTMSClientSourceImpl*>
+                    (qsource)->GetSource(tmssource);
+                break;
+            case QTMS_SOURCE_MODEM:
+                status = static_cast<QTMSModemSourceImpl*>
+                    (qsource)->GetSource(tmssource);
+                break;
+            case QTMS_SOURCE_MIC:
+                status = static_cast<QTMSMicSourceImpl*>
+                    (qsource)->GetSource(tmssource);
+                break;
+            default:
+                break;
+            }
+        if (status == QTMS_RESULT_SUCCESS && tmssource)
+            {
+            status = iStream->AddSource(tmssource);
+            }
+        }
+    return status;
+    }
+
+gint QTMSStream::RemoveSource(QTMSSource* qsource)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qsource)
+        {
+        QTMSSourceType qsrctype;
+        TMSSource* tmssource(NULL);
+
+        qsource->GetType(qsrctype);
+
+        switch (qsrctype)
+            {
+            case QTMS_SOURCE_CLIENT:
+                status = static_cast<QTMSClientSourceImpl*>
+                    (qsource)->GetSource(tmssource);
+                break;
+            case QTMS_SOURCE_MODEM:
+                status = static_cast<QTMSModemSourceImpl*>
+                    (qsource)->GetSource(tmssource);
+                break;
+            case QTMS_SOURCE_MIC:
+                status = static_cast<QTMSMicSourceImpl*>
+                    (qsource)->GetSource(tmssource);
+                break;
+            default:
+                break;
+            }
+        if (status == QTMS_RESULT_SUCCESS && tmssource)
+            {
+            status = iStream->RemoveSource(tmssource);
+            }
+        }
+
+    return status;
+    }
+
+gint QTMSStream::AddSink(QTMSSink* qsink)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qsink)
+        {
+        QTMSSinkType qsinktype;
+        TMSSink* tmssink(NULL);
+
+        qsink->GetType(qsinktype);
+
+        switch (qsinktype)
+            {
+            case QTMS_SINK_CLIENT:
+                status = static_cast<QTMSClientSinkImpl*>
+                    (qsink)->GetSink(tmssink);
+                break;
+            case QTMS_SINK_MODEM:
+                status = static_cast<QTMSModemSinkImpl*>
+                    (qsink)->GetSink(tmssink);
+                break;
+            case QTMS_SINK_SPEAKER:
+                status = static_cast<QTMSSpeakerSinkImpl*>
+                    (qsink)->GetSink(tmssink);
+                break;
+            default:
+                break;
+            }
+        if (status == QTMS_RESULT_SUCCESS && tmssink)
+            {
+            status = iStream->AddSink(tmssink);
+            }
+        }
+    return status;
+    }
+
+gint QTMSStream::RemoveSink(QTMSSink* qsink)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qsink)
+        {
+        QTMSSinkType qsinktype;
+        TMSSink* tmssink(NULL);
+
+        qsink->GetType(qsinktype);
+
+        switch (qsinktype)
+            {
+            case QTMS_SINK_CLIENT:
+                status = static_cast<QTMSClientSinkImpl*>
+                    (qsink)->GetSink(tmssink);
+                break;
+            case QTMS_SINK_MODEM:
+                status = static_cast<QTMSModemSinkImpl*>
+                    (qsink)->GetSink(tmssink);
+                break;
+            case QTMS_SINK_SPEAKER:
+                status = static_cast<QTMSSpeakerSinkImpl*>
+                    (qsink)->GetSink(tmssink);
+                break;
+            default:
+                break;
+            }
+        if (status == QTMS_RESULT_SUCCESS && tmssink)
+            {
+            status = iStream->RemoveSink(tmssink);
+            }
+        }
+
+    return status;
+    }
+
+gint QTMSStream::SetFormat(QTMSFormat* qformat)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qformat)
+        {
+        QTMSFormatType fmttype;
+        TMSFormat* tmsformat(NULL);
+        qformat->GetType(fmttype);
+        switch (fmttype)
+            {
+            case QTMS_FORMAT_PCM:
+                status = static_cast<QTMSPCMFormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            case QTMS_FORMAT_AMR:
+                status = static_cast<QTMSAMRFormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            case QTMS_FORMAT_G711:
+                status = static_cast<QTMSG711FormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            case QTMS_FORMAT_G729:
+                status = static_cast<QTMSG729FormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            case QTMS_FORMAT_ILBC:
+                status = static_cast<QTMSILBCFormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            default:
+                break;
+            }
+
+        status = iStream->SetFormat(tmsformat);
+        }
+    return status;
+    }
+
+gint QTMSStream::ResetFormat(QTMSFormat* qformat)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qformat)
+        {
+        QTMSFormatType fmttype;
+        TMSFormat* tmsformat(NULL);
+        qformat->GetType(fmttype);
+        switch (fmttype)
+            {
+            case QTMS_FORMAT_PCM:
+                status = static_cast<QTMSPCMFormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            case QTMS_FORMAT_AMR:
+                status = static_cast<QTMSAMRFormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            case QTMS_FORMAT_G711:
+                status = static_cast<QTMSG711FormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            case QTMS_FORMAT_G729:
+                status = static_cast<QTMSG729FormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            case QTMS_FORMAT_ILBC:
+                status = static_cast<QTMSILBCFormatImpl*>
+                    (qformat)->GetFormat(tmsformat);
+                break;
+            default:
+                break;
+            }
+
+        status = iStream->ResetFormat(tmsformat);
+        }
+    return status;
+    }
+
+gint QTMSStream::AddEffect(QTMSEffect* qeffect)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream && qeffect)
+        {
+        QTMSEffectType effecttype;
+        TMSEffect* tmseffect(NULL);
+        qeffect->GetType(effecttype);
+
+        switch (effecttype)
+            {
+            case QTMS_EFFECT_VOLUME:
+                status = static_cast<QTMSVolumeEffectImpl*>
+                    (qeffect)->GetEffect(tmseffect);
+                break;
+            case QTMS_EFFECT_GAIN:
+                status = static_cast<QTMSGainEffectImpl*>
+                    (qeffect)->GetEffect(tmseffect);
+                break;
+            default:
+                break;
+            }
+        status = iStream->AddEffect(tmseffect);
+        }
+    return status;
+    }
+
+gint QTMSStream::RemoveEffect(QTMSEffect* qeffect)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream && qeffect)
+        {
+        QTMSEffectType effecttype;
+        TMSEffect* tmseffect(NULL);
+        qeffect->GetType(effecttype);
+
+        switch (effecttype)
+            {
+            case QTMS_EFFECT_VOLUME:
+                status = static_cast<QTMSVolumeEffectImpl*>
+                    (qeffect)->GetEffect(tmseffect);
+                break;
+            case QTMS_EFFECT_GAIN:
+                status = static_cast<QTMSGainEffectImpl*>
+                    (qeffect)->GetEffect(tmseffect);
+                break;
+            default:
+                break;
+            }
+        status = iStream->RemoveEffect(tmseffect);
+        }
+    return status;
+    }
+
+gint QTMSStream::GetState()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream)
+        {
+        status = iStream->GetState();
+        }
+    return status;
+    }
+
+gint QTMSStream::GetStreamType()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream)
+        {
+        status = iStream->GetStreamType();
+        }
+    return status;
+    }
+
+gint QTMSStream::GetStreamId()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream)
+        {
+        status = iStream->GetStreamId();
+        }
+    return status;
+    }
+
+gint QTMSStream::Init()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream)
+        {
+        status = iStream->Init();
+        }
+    return status;
+    }
+
+gint QTMSStream::Pause()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream)
+        {
+        status = iStream->Pause();
+        }
+    return status;
+    }
+
+gint QTMSStream::Start()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream)
+        {
+        status = iStream->Start();
+        }
+    return status;
+    }
+
+gint QTMSStream::Stop()
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream)
+        {
+        status = iStream->Stop();
+        }
+    return status;
+    }
+
+void QTMSStream::Deinit()
+    {
+    if (iStream)
+        {
+        iStream->Deinit();
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsstreamimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include <tmsstream.h>
+#include "tmsutility.h"
+#include "qtmsstreamimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSStreamImpl::QTMSStreamImpl()
+    {
+    }
+
+QTMSStreamImpl::~QTMSStreamImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSStreamImpl::Create(QTMSCallType callType, QTMSStreamType stype,
+        QTMSStream*& qstrm, TMS::TMSStream*& tmsstrm)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSStreamImpl* self = new QTMSStreamImpl();
+    if (self)
+        {
+        ret = self->PostConstruct(callType, stype, *self);
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iStream = tmsstrm;
+        self->AddObserver(*self, NULL);
+        }
+    qstrm = self;
+    return ret;
+    }
+
+gint QTMSStreamImpl::PostConstruct(QTMSCallType /*callType*/,
+        QTMSStreamType /*stype*/, QTMSStream& /*parent*/)
+    {
+    gint status(QTMS_RESULT_SUCCESS);
+    return status;
+    }
+
+gint QTMSStreamImpl::AddObserver(TMS::TMSStreamObserver& obsrvr,
+        gpointer user_data)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iStream)
+        {
+        iStream->AddObserver(obsrvr, user_data);
+        }
+
+    return ret;
+    }
+
+gint QTMSStreamImpl::RemoveObserver(TMS::TMSStreamObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iStream)
+        {
+        ret = iStream->RemoveObserver(obsrvr);
+        }
+
+    return ret;
+    }
+
+void QTMSStreamImpl::TMSStreamEvent(const TMS::TMSStream& stream,
+        TMS::TMSSignalEvent event)
+    {
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSStream::TMSStreamEvent(static_cast<QTMSStream&> (*this),
+            qevent);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsvolumeeffect.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsvolumeeffect.h>
+#include <qtmsvolumeeffect.h>
+#include "qtmsvolumeeffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSVolumeEffect::QTMSVolumeEffect() :
+    iEffect(NULL)
+    {
+    }
+
+QTMSVolumeEffect::~QTMSVolumeEffect()
+    {
+    delete iEffect;
+    }
+
+gint QTMSVolumeEffect::GetLevel(guint& level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSVolumeEffect*> (iEffect)->GetLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSVolumeEffect::SetLevel(const guint level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSVolumeEffect*> (iEffect)->SetLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSVolumeEffect::GetMaxLevel(guint& level)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSVolumeEffect*> (iEffect)->GetMaxLevel(level);
+        }
+    return status;
+    }
+
+gint QTMSVolumeEffect::GetType(QTMSSourceType& sourcetype)
+    {
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect)
+        {
+        status = static_cast<TMSVolumeEffect*> (iEffect)->GetType(sourcetype);
+        }
+    return status;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsvolumeeffectimpl.cpp	Fri May 14 16:21:14 2010 +0300
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsvolumeeffect.h>
+#include "qtmsvolumeeffectimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSVolumeEffectImpl::QTMSVolumeEffectImpl()
+    {
+    }
+
+QTMSVolumeEffectImpl::~QTMSVolumeEffectImpl()
+    {
+    RemoveObserver(*this);
+    }
+
+gint QTMSVolumeEffectImpl::Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol)
+    {
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSVolumeEffectImpl* self = new QTMSVolumeEffectImpl();
+    if (self)
+        {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS)
+            {
+            delete self;
+            self = NULL;
+            }
+        self->iEffect = tmsvol;
+        ret = self->AddObserver(*self, NULL);
+        }
+    qvol = self;
+    return ret;
+    }
+
+gint QTMSVolumeEffectImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+gint QTMSVolumeEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr,
+        gpointer /*user_data*/)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect)
+        {
+        ret = static_cast<TMSVolumeEffect*> (iEffect)->AddObserver(obsrvr,
+                NULL);
+        }
+    return ret;
+    }
+
+gint QTMSVolumeEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr)
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect)
+        {
+        ret = static_cast<TMSVolumeEffect*> (iEffect)->RemoveObserver(obsrvr);
+        }
+    return ret;
+    }
+
+gint QTMSVolumeEffectImpl::GetEffect(TMS::TMSEffect*& tmseffect)
+    {
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iEffect)
+        {
+        tmseffect = iEffect;
+        ret = QTMS_RESULT_SUCCESS;
+        }
+    return ret;
+    }
+
+void QTMSVolumeEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/,
+        TMS::TMSSignalEvent event)
+    {
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSVolumeEffect::EffectsEvent(
+            static_cast<QTMSEffect&> (*this), qevent);
+    }
+
+// End of file
--- a/sysdef_1_4_0.dtd	Mon May 03 12:58:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
- <!ELEMENT SystemDefinition (systemModel?, build?)>
- <!ATTLIST SystemDefinition
-  name CDATA #REQUIRED
-  schema CDATA #REQUIRED>
- <!ELEMENT systemModel (layer+)>
- <!ELEMENT layer (logicalset* | module*)*>
- <!ATTLIST layer
-  name CDATA #REQUIRED
-  levels CDATA #IMPLIED
-  span CDATA #IMPLIED>
- <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalset name CDATA #REQUIRED>
- <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalsubset name CDATA #REQUIRED>
- <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
- <!ATTLIST module
-  name CDATA #REQUIRED
-  level CDATA #IMPLIED>
- <!ELEMENT component (unit* | package* | prebuilt*)*>
- <!ATTLIST component name CDATA #REQUIRED>
- <!ELEMENT unit EMPTY>
- <!ATTLIST unit
-  unitID ID #REQUIRED
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  bldFile CDATA #REQUIRED
-  priority CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT package EMPTY>
- <!ATTLIST package
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT prebuilt EMPTY>
- <!ATTLIST prebuilt
-  name CDATA #REQUIRED
-  version CDATA #REQUIRED
-  late (Y|N) #IMPLIED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
- <!ELEMENT unitList (unitRef+)>
- <!ATTLIST unitList
-  name ID #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT unitRef EMPTY>
- <!ATTLIST unitRef unit IDREF #REQUIRED>
- <!ELEMENT targetList EMPTY>
- <!ATTLIST targetList
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  target IDREFS #REQUIRED>
- <!ELEMENT target EMPTY>
- <!ATTLIST target
-  name ID #REQUIRED
-  abldTarget CDATA #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT option EMPTY>
- <!ATTLIST option
-  name ID #REQUIRED
-  abldOption CDATA #REQUIRED
-  description CDATA #REQUIRED
-  enable (Y | N | y | n) #REQUIRED>
- <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
- <!ATTLIST configuration
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  filter CDATA #REQUIRED>
- <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
- <!ELEMENT unitListRef EMPTY>
- <!ATTLIST unitListRef unitList IDREF #REQUIRED>
- <!ELEMENT layerRef EMPTY>
- <!ATTLIST layerRef layerName CDATA #REQUIRED>
- <!ELEMENT buildLayer EMPTY>
- <!ATTLIST buildLayer
-  command CDATA #REQUIRED
-  targetList IDREFS #IMPLIED
-  unitParallel (Y | N | y | n) #REQUIRED
-  targetParallel (Y | N | y | n) #IMPLIED>
- <!ELEMENT specialInstructions EMPTY>
- <!ATTLIST specialInstructions
-  name CDATA #REQUIRED
-  cwd CDATA #REQUIRED
-  command CDATA #REQUIRED>